9

我试图让 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

但是有和没有那个模块没有区别 - echo 存在。我是 PulseAudio 的新手,找不到关于回声消除器使用的好的手册。我应该在我的设备设置中添加或调整什么以使其正常工作?

操作系统——linux,现在是ubuntu,最后还是openWrt

4

1 回答 1

8

我假设您使用的是 PulseAudio 1.0 或更高版本。对于播放器和记录器流,您需要将“filter.want”属性设置为“echo-cancel”。我们没有使用简单的 API 公开一种方法来执行此操作,因此在创建流之前,您需要采取一种稍微丑陋的方法来设置 PULSE_PROP 环境变量,这样才能达到目的:

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

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

于 2012-11-14T03:47:18.193 回答