# 回声消除示例

# 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/
