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;
Другие вопросы по тегам