Как использовать модуль эхоподавления в PulseAudio?
Я пытаюсь заставить работать PulseAudio эхоподавитель.
У меня два приложения - рекордер и плеер, оба используют PulseAudio. Я создаю плеер и рекордер так:
// pulseAudio
pa_simple *paS=0;
pa_sample_spec ss;
void initPulseAudio()
{
ss.format = PA_SAMPLE_S16LE;
ss.channels = 1;
ss.rate = 8000;
paS = pa_simple_new(NULL, // Use the default server.
"bottomPlayer", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"playStream", // Description of our stream.
&ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
if(!paS)
{
fprintf(stderr,
"unable to create recorder\n");
myExit(1);
}
}
Все работает, кроме эхоподавления. Я включил это с
pactl load-module module-echo-cancel
но нет разницы с этим модулем и без него - эхо существует. Я новичок в PulseAudio и не смог найти хорошее руководство по использованию эхоподавителя. Что я должен добавить или настроить в настройках устройства, чтобы он работал?
ОС - linux, теперь это Ubuntu, но, наконец, это будет openWrt
1 ответ
Я предполагаю, что вы используете PulseAudio 1.0 или выше. Для потоков проигрывателя и рекордера необходимо установить для свойства filter.want значение echo-cancel. Мы не раскрываем способ сделать это с помощью простого API, поэтому вам нужно будет выбрать более уродливый путь установки переменной среды PULSE_PROP, как этот, прежде чем создавать поток, который сделает свое дело:
setenv("PULSE_PROP", "filter.want=echo-cancel", 1);
PS: Для действительно качественного эхоподавления вам нужен PulseAudio 2.0 или выше с встроенной поддержкой обработки аудио webrtc- насколько легко это получить, зависит от того, упакован ли уже в вашем дистрибутиве или нет.