AEC (поддержка эхоподавления) в OSX с использованием AudioQueue
Я занимаюсь разработкой приложения VOIP для OSX и iOS и буду использовать AudioQueue для аудиопотока. Что нужно знать, так это то, что по умолчанию AudioQueue поддерживает акустическое эхоподавление или нам нужно добавить поддержку для этого,
Если нам нужно реализовать, я считаю, что должна быть реализована некоторая библиотека с открытым исходным кодом, такая как Speex, есть ли какой-либо пример, демонстрирующий интеграцию AudioQueue с Speex или любой другой библиотекой?
2 ответа
Насколько я могу найти, вы должны использовать аудиоустройства для доступа к эхоподавлению системы. Вы делаете это с помощью kAudioUnitSubType_VoiceProcessingIO
вместо kAudioUnitSubType_RemoteIO
,
В любом случае, вы, возможно, захотите использовать аудиоустройства, чтобы контролировать задержку.
Вы можете использовать функцию обратного вызова рендеринга, чтобы получить данные из аудио-очереди и передать их вашему устройству ввода-вывода. Для исходящих используйте AudioUnitRender
,
Благодаря Дэвиду и этому посту, я понял, что для отмены эха на iOS необходимы следующие изменения:
desc.componentSubType = kAudioUnitSubType_VoiceProcessingIO
Это включит аппаратное подавление эха в соответствии с документацией Apple. Тем не менее, вам все равно нужно использовать определенные флаги для описания AudioStream:
audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;