Микширование нескольких сигналов с помощью аудиоустройств на iOS - PullRequest
4 голосов
/ 30 июля 2011

Я делаю контроллер для синтезатора на iPad, и у меня есть 4 или 5 сигналов, которые я хочу смешать и отправить на обратный вызов рендеринга RemoteIO.Сейчас у меня есть два варианта:

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

Я прочитал http://www.vttoth.com/digimix.htm и http://atastypixel.com/blog/how-to-mix-audio-samples-properly-on-ios/ о правильном способе микширования сигналов, и теперь думаю о микшировании вручнуюв обратном вызове remoteIO.

Есть предложения?

Ответы [ 2 ]

9 голосов
/ 09 июля 2012

Поскольку я недавно проходил через эту самую проблему и имел какое-то значение, я написал подробный пост о трех опциях, которые вы имеете при ручном микшировании / суммировании звука в обратном вызове рендеринга:

Микширование звука без отсечения в iOS: Ограничители и другие методы

По сути, первый метод описан в сообщениях блога, на которые вы ссылались. Однако, как указано в посте A Tasty Pixel, этот метод «усреднения» вносит гармоническое искажение. Однако, по-видимому, это не заметно в некоторых приложениях, например, когда источником являются полные дорожки или перкуссия на основе шума (например, малые барабаны). Согласно A Tasty Pixel, Loopy app , профессиональный аудио инструмент калибра, успешно использует эту технику.

Второй вариант, который, возможно, лучше, если у вас есть естественные звуки и / или высокая полифония, - это просто уменьшить громкость звука, предварительно умножив аудиоданные на 0 Sound Wand , имеет сэмплы, нормализованные до полной шкалы, и максимальную полифонию 20, и я использую значение предварительной шкалы только около 1/3 (не 1/20). Верхняя сторона - это очень хороший динамический диапазон в вашем инструменте - то есть мягкие ноты тихие, а жесткие или много их вместе гораздо громче. Это часто считается одним из признаков качественного инструмента. Недостатком является то, что время от времени на встроенном динамике iPhone / iPad немного тихо, а динамический диапазон может быть слишком большим для дешевых внешних усилителей.

Третий вариант - ограничитель кирпичной стены, но в этом нет ничего простого. Обычный ограничитель кирпичной стены НЕ предотвратит отсечение. Вам нужен ограничитель lookahead brickwall, и код для этого не всегда доступен. Причина, по которой вам нужно смотреть в будущее, заключается в том, что ограничителю нужно время, чтобы плавно уменьшить громкость до момента, когда впервые произойдет отсечение. Недостаточно «немедленно уменьшить громкость», когда осциллограмма начинает обрезаться, потому что уменьшение громкости, чтобы вернуть ее к 1,0, - это точный то же самое, что отсечение делает для вас! В результате ограничители, не обращающие внимания, будут удалять только половину клипа (и , что только из-за времени выпуска).

Brickwall limiting without

(ограничение Brickwall без «упреждения» срабатывает слишком поздно и предотвращает только половину клипа)

Есть и недостатки с ограничителями прогнозирования. Они вносят туда свои собственные гармонические искажения, хотя и намного меньше, чем ограничение. Хуже того, они увеличивают задержку , время между действием пользователя и звуковым результатом, на время ожидания. Это означает менее отзывчивое приложение. Как вы могли догадаться, более длительный прогноз означает более прозрачный результат (меньше искажений), поэтому существует компромисс. Я все еще верю, что это жизнеспособный метод, и немного обрисую его в нижней части поста .

И последнее замечание, касающееся использования микшера AU по сравнению с микшированием вручную в remoteIO: я, как правило, был бы более склонен использовать AU, если мои каналы похожи на «дорожки» аудио, и я хочу, чтобы обычная громкость / панорамирование управлялись пользователем или если у вас есть игра с несколькими каналами, возможно, для фона / переднего плана / и т.д. Если у вас много звуков, например, заметок на клавиатуре, или если вы хотите индивидуально управлять суммированием (например, различные законы панорамирования, специальные правила, касающиеся включения / выключения звуков и т. Д.), Лучше сделать это вручную. Если вы просто суммируете пару звуковых дорожек, то на самом деле подойдет любой из этих вариантов. Если вы перейдете к варианту 2, описанному выше, то выполнение его вручную фактически займет всего несколько строк кода, как только вы освоите функции vDSP Accelerate Framework .

1 голос
/ 16 августа 2011

Apple опубликовала пример проекта , в котором используется аудиоустройство микшера на их веб-сайте, но я не думаю, что это ответит на ваши вопросы о том, как работает АС внутри. Я тоже не знаю, но соглашение предписывает, что сигналы просто складываются вместе, когда они смешиваются. Тот факт, что микшерный пульт теперь обеспечивает панорамирование, означает, что бит усиления вычитается из левого или правого канала в зависимости от величины панорамирования.

Если вы делаете микширование вручную, вы можете захотеть применить простой ограничитель кирпичной стены к выходу вашего микшера, прежде чем отправлять его на воспроизведение. Таким образом, вы можете уменьшить потенциальные искажения, вызванные сложением слишком большого количества сигналов. Хотя очевидно, что если у вас много каналов, идеальным подходом является уменьшение уровня сигнала при микшировании.

...