iPhone: изменение скорости воспроизведения с помощью Аудиоблоков

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

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

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

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

1 ответов


все приведенные ниже решения будут alter на поле аудио (вместе со скоростью воспроизведения). К правильное поле аудио после скорость воспроизведения была изменена, вам нужно использовать 3-й партии аудио библиотека (например,SoundTouch, который имеет лицензию LGPL, поэтому вы можете использовать его в своем приложении, не делая его открытым исходным кодом или DiracLE или smbPitchShift). Имеется аудиоблок (AUPitch), это может изменить высоту звука, но это недоступно для iPhone; только для Mac.

все решения ниже протестированы и работают...

Решение № 1 [лучшее решение]

3Д миксер: вместо многоканального микшера используйте 3D-микшер и установите k3DMixerParam_PlaybackRate на входе масштаб.

плюсы: k3DMixerParam_PlaybackRate может быть установлен в режиме реального времени, во время воспроизведения звука, без каких-либо отсечения звуков или других побочных эффектов. Это также легко реализовать, как только у вас есть звуковые блоки.

недостатки: влияет на высоту звука, но разница в высоте не очень заметна, если вам нужно только изменить скорость воспроизведения на + / - 8%.

решение #2

изменение частоты дискретизации: измените частоту дискретизации на выходной шине смесителя. Изменение частоты дискретизации работает очень похоже на добавление и удаление образцов.

плюсы: работает хорошо, если вы хотите умножить скорость воспроизведения на долю целого числа (например, 1.2 x).

недостатки: изменение частоты на выходе смесителя может быть установлена на лету; только при инициализации смесителя. Влияет на высоту звука, но разница в высоте не очень заметна, если вам нужно только изменить скорость воспроизведения на + / - 8%.

audioDescriptionMixerOutput.mSampleRate = 1.2*kGraphSampleRate;

решение № 3

добавить/удалить образцы: только проходят каждую секунду, третью, ... образец аудио на вход аудиоблока (микшерный блок в моем случае) в функции обратного вызова рендеринга.

плюсы: работает хорошо, если вы хотите ускорить или замедлить воспроизведение звука 2x, 3x, 4x и т. д. Это также легко реализовать.

недостатки: скорость воспроизведения можно умножить только на целое число. Например, ускорение воспроизведения звука на 1.2 x невозможно путем добавления или удаления образцов. Влияет на высоту звука.