Все приведенные ниже решения будут изменять высоту вашего звука (вместе со скоростью воспроизведения). Чтобы скорректировать высоту звука после изменения скорости воспроизведения, вам необходимо использовать стороннюю аудиобиблиотеку (например, SoundTouch , которая имеет лицензия LGPL, так что вы можете использовать ее в своем приложении, не делая ее с открытым исходным кодом, или DiracLE или бесплатную smbPitchShift ). Есть аудиоустройство ( AUPitch ), которое может изменить высоту звука, но оно недоступно для iPhone ; только для Mac.
Все приведенные ниже решения протестированы и работают ...
Решение № 1 [Лучшее решение]
Блок 3D-микшера: Вместо блока многоканального микшера используйте блок 3D-микшера и установите k3DMixerParam_PlaybackRate в области ввода.
Преимущества: k3DMixerParam_PlaybackRate можно установить в режиме реального времени, пока вы воспроизводите аудио, без каких-либо обрывов или других побочных эффектов. Это также легко реализовать, если у вас есть аудиоустройства.
Недостатки: Влияет на высоту звука, но разница в высоте не очень заметна, если вам нужно только изменить скорость воспроизведения на +/- 8%.
Решение № 2
Изменение частоты дискретизации: Изменение частоты дискретизации на выходной шине микшера. Изменение частоты дискретизации работает очень похоже на добавление и удаление семплов.
Преимущества: Хорошо работает, если вы хотите умножить скорость воспроизведения на целое число (например, 1,2x).
Недостатки: Изменение частоты дискретизации на выходе микшера не может быть установлено на лету; только при инициализации блока микшера. Влияет на высоту звука, но разница в высоте не очень заметна, если вам нужно только изменить скорость воспроизведения на +/- 8%.
audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate;
Решение № 3
Добавить / удалить сэмплы: Передавать только каждую секунду, третье, ... аудиосэмпл на вход вашего аудиоустройства (в моем случае - блока микшера) в функции обратного вызова рендеринга.
Преимущества: Хорошо работает, если вы хотите ускорить или замедлить воспроизведение звука в 2, 3, 4 раза и т. Д. Это также легко реализовать.
Недостатки: Вы можете умножить скорость воспроизведения только на целочисленный коэффициент. Например, ускорение воспроизведения звука в 1,2 раза невозможно при добавлении или удалении семплов. Влияет на высоту звука.