如何在PulseAudio中使用回声消除模块?

时间:2012-11-13 15:10:28

标签: c pulseaudio echo-cancellation

我试图使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的新手,无法找到关于回声消除器使用的好手册。我应该在设备设置中添加或调整什么才能使其正常工作?

OS - linux,现在是ubuntu,但最后它将是openWrt

1 个答案:

答案 0 :(得分:7)

我假设你正在使用PulseAudio 1.0或更高版本。对于播放器和录像机流,您需要将“filter.want”属性设置为“echo-cancel”。我们没有公开使用简单API执行此操作的方法,因此在创建流之前,您将需要采用稍微更粗略的设置PULSE_PROP环境变量的路径:

setenv("PULSE_PROP", "filter.want=echo-cancel", 1);

ps:对于真正高质量的回声消除,您需要PulseAudio 2.0或更高版本,并且内置了webrtc音频处理支持 - 获得此功能的难易程度取决于您的发行版是否已经打包。