Избегайте эхо-обратной связи при записи с AVAudioEngine без наушников

Я использую AVAudioEngine для записи голоса пользователя, применяя к нему некоторые эффекты в реальном времени.

Поскольку мне нужно, чтобы пользователь мог слышать его собственный голос во время сеанса, я подключил свой график AVAudioEngine, чтобы он выглядел следующим образом:

inputNode -> узел аудиоэффекта -> mainMixerNode (нажмите установленный здесь) -> outputNode

Я также установил касание узла в mainMixerNode, чтобы получить обработанный голос и сохранить его в буфере.

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

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

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

Какие-нибудь мысли? Заранее спасибо!

1 ответ

Наушники подключены, или используйте внешний динамик (или AirPlay), или положите большой палец на динамик iDevice.

Используйте другой узел, чтобы изменить громкость на 0, затем подключитесь к outputNode.

audioEngine.connect(mainMixerNode, to: otherNode, format: yourFormat)
otherNode.volume = 0
audioEngine.connect(otherNode, to: outputNode, format: yourFormat)
Другие вопросы по тегам