C语言 如何在脉冲音频中使用回声消除模块



我试图让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 recordern");
         myExit(1);
       }
 }

除了回声消除之外,一切都在工作。我已经启用了它

pactl load-module module-echo-cancel

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

操作系统 - linux,现在是 ubuntu,但最终它将是 openWrt

我假设您使用的是PulseAudio 1.0或更高版本。对于播放器和录像机流,您需要将"filter.want"属性设置为"echo-cancel"。我们不会公开使用简单 API 执行此操作的方法,因此在创建流之前,您需要采取稍微丑陋的路线来设置PULSE_PROP环境变量:

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

p.s.:对于真正高质量的回声消除,您需要 PulseAudio 2.0 或更高版本,并内置 webrtc 音频处理支持 - 获得它有多容易取决于您的发行版是否已经打包了这个。

相关内容

  • 没有找到相关文章

最新更新