我试图让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 音频处理支持 - 获得它有多容易取决于您的发行版是否已经打包了这个。