|
# 回声消除示例
|
|
|
|
# 1. 查看版本
|
|
pulseaudio --version
|
|
pulseaudio 13.99.3
|
|
|
|
# 2. 加载回声消除插件
|
|
pactl load-module module-echo-cancel \
|
|
source_name=noechosource \
|
|
sink_name=noechosink \
|
|
aec_method=webrtc \
|
|
source_master=alsa_input.platform-es8388-sound.stereo-fallback \
|
|
sink_master=alsa_output.platform-es8388-sound.stereo-fallback
|
|
|
|
# 注意:
|
|
1)通过 pactl list sources short 和 pactl list sinks short 查看你想绑定的声卡
|
|
2)不设置aec_method=webrtc几乎没效果;
|
|
3)另外aec_method=webrtc还可以进一步设置其它参数比如 aec_args="analog_gain_control=0 digital_gain_control=1",此项未测试过
|
|
|
|
# 3. 设置pulseaudio的默认声卡
|
|
pactl set-default-source noechosource
|
|
pactl set-default-sink noechosink
|
|
|
|
# 4. 生成测试音频
|
|
apt install sox
|
|
sox -n -b 16 -r 44100 1.wav synth 120 sine 440
|
|
|
|
# 5. 播放并采集
|
|
1)播放:aplay -D pulse 1.wav
|
|
2)同时采集(麦克风靠近 aplay 播放的音源):arecord -D pulse -r 44100 -c 1 -f S16_LE 2.wav
|
|
3)采集完后播放:2.wav,发现几乎没有 1.wav 相关的声音
|
|
|
|
# 6. 卸载插件
|
|
pactl load-module module-echo-cancel
|
|
|
|
# 附录:
|
|
1)除了 webrtc 回声消息算法引擎外,还可以尝试其它的,比如speex
|
|
aec_method=webrtc
|
|
aec_method=speex
|
|
通过加载外部算法库来实现回声消除:
|
|
/usr/lib/aarch64-linux-gnu/libwebrtc_audio_processing.so
|
|
/usr/lib/aarch64-linux-gnu/libwebrtc_audio_processing.a
|
|
/usr/lib/aarch64-linux-gnu/libwebrtc_audio_processing.so.1
|
|
/usr/lib/aarch64-linux-gnu/libwebrtc_audio_processing.so.1.0.0
|
|
/usr/lib/aarch64-linux-gnu/libspeexdsp.so.1.5.0
|
|
/usr/lib/aarch64-linux-gnu/libspeex.so.1
|
|
/usr/lib/aarch64-linux-gnu/alsa-lib/libasound_module_rate_speexrate.so
|
|
/usr/lib/aarch64-linux-gnu/alsa-lib/libasound_module_rate_speexrate_medium.so
|
|
/usr/lib/aarch64-linux-gnu/alsa-lib/libasound_module_rate_speexrate_best.so
|
|
/usr/lib/aarch64-linux-gnu/libspeex.so.1.5.0
|
|
/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstspeex.so
|
|
/usr/lib/aarch64-linux-gnu/libspeexdsp.so.1
|
|
|
|
2)参考
|
|
https://blog.csdn.net/godbreak/article/details/38756977
|
|
https://arunraghavan.net/2011/08/hello-hello-hello/
|