Использование AVAudioEngine для записи микрофона и звуковых эффектов

Я использую AVAudioEngine для записи входного сигнала с микрофона, а также различных звуковых эффектов в один файл. Во время записи звук воспроизводится через динамики через outputNode движка. Однако это вызывает странный эффект для пользователей, записывающих с помощью гарнитуры, поскольку они могут слышать собственный голос, воспроизводимый через динамики / наушники. Поэтому я хочу выводить только звук звуковых файлов через динамики, а не звук, исходящий из микрофона.

Однако я не нашел способа добиться этого с помощью AVAudioEngine. Моя последняя попытка заключалась в подключении узлов звуковых файлов к основному микшеру и их воспроизведению с помощью outputNode микшера, а затем подключению микрофона ко второму микшеру. Затем mainMixer отправляет свой вывод (звук из звуковых файлов) в этот микшер, на который я установил кран, для записи звука в мой файл.

Однако узлы микшера имеют только один выход, что означает, что звук через динамики вообще не воспроизводился, поскольку основной микшер был изменен так, чтобы направлять его вывод на второй микшер, а не на outputNode.

Вот моя компоновка двигателя:

soundfileNode ----> mainMixer ---> outputNode (speaker)
                        |
                        |
                        v
inputNode (mic) --> secondaryMixer ---> tap (write to file)

Как я могу решить свою проблему? Любые идеи?

Обновлять:

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


person rodskagg    schedule 10.03.2016    source источник


Ответы (1)


Однако узлы микшера имеют только один выход.

Ага, но это неправда. Вы ищете AVAudioConnectionPoint. Соединяясь с массивом точек подключения, вы разделяете вывод.

person matt    schedule 10.03.2016
comment
Кажется, AVAudioConnectionPoint был представлен в iOS9, и мне также нужно поддерживать iOS8 ... - person rodskagg; 11.03.2016
comment
Тогда вы идете вверх по ручью. AVAudioConnectionPoint был введен в iOS 9 как раз для решения этой проблемы. И наоборот, в iOS 8 вы не можете разделить вывод и можете просто забыть об этом. - person matt; 11.03.2016
comment
Как работает AVAudioConnectionPoint? Документация практически отсутствует. - person rodskagg; 11.03.2016
comment
@andlin Поздравляю с тем, что разобрались с этим! У меня очень похожая проблема. Если я свяжу вас с моим вопросом о stackoverflow, можете ли вы быстро взглянуть на мой небольшой фрагмент кода AVAudioEngine? - person user3344977; 13.03.2016
comment
Однако у меня все еще есть проблемы. Например, звуковые файлы, которые я проигрываю и записываю в файл, искажаются, когда я использую AVAudioConnectionPoint. Проблема, похоже, в самом кране на смесителе. Если я уберу кран, звук в порядке, но это, конечно, означает, что в выходной файл ничего не записывается ... - person rodskagg; 13.03.2016