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 невозможно путем добавления или удаления образцов. Влияет на высоту звука.