iPhone: изменение скорости воспроизведения с аудиоустройствами - PullRequest
7 голосов
/ 24 июля 2010

Каковы различные способы для изменения скорости воспроизведения звука на iPhone при использовании Audio Units ? Каковы преимущества / недостатки каждого решения?

У меня есть блок микшера и блок ввода-вывода. Нужно ли добавлять другой блок (например, конвертер)? Какие параметры аудиоустройства я должен установить, на какой (входной или выходной) шине и на каком аудиоустройстве (ах)?

Моя текущая настройка:

       -------------------------              -------------------------
       |      mixer unit       | -----------> |        IO unit        |
       -------------------------              -------------------------

1 Ответ

9 голосов
/ 24 июля 2010

Все приведенные ниже решения будут изменять высоту вашего звука (вместе со скоростью воспроизведения). Чтобы скорректировать высоту звука после изменения скорости воспроизведения, вам необходимо использовать стороннюю аудиобиблиотеку (например, 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 раза невозможно при добавлении или удалении семплов. Влияет на высоту звука.

...