我试图使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
答案 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音频处理支持 - 获得此功能的难易程度取决于您的发行版是否已经打包。