SPEEX 录⾳+控制器回读模式回声消除
⼀ 配置
1.1 勾选speexdsp
1.2 勾选 libmedia 中相应的算法功能以及测试⽤例
对应代码在⼯程⽬录中的 libmedia/test/main_noecho_test.c
1.3 播放、录⾳与回读功能
声卡驱动配置
开启偏置电压:外接amic时⽤于给⻨克⻛供电, 不同型号的⻨克⻛需要不同的偏值电压值(设置偏值电压的寄存器数值)
mic信号的增益(MICL_GAIN):外接amic时需要依据信号强弱设置改增益⼤⼩
⼿动设置ALCL增益(ALCL_GAIN):alcl为codec的adc的数字增益,⽤于调节录制⾳频的增益⼤⼩
输出信号的模拟增益(HPOUTL):⽤于调节播放⾳频的增益⼤⼩
创建声卡设备
# ls /dev/snd/
controlC0 controlC1 pcmC0D0c pcmC0D0p pcmC1D0c timer
//pcmC0D0c对应amic设备,pcmC0D0p为播放设备,pcmC1D0c为回读设备
二 验证
开启 third_party/speexdsp/src/config.h 中的 DUMP_ECHO_CANCEL_DATA 宏, 指定⾳频数据⽂件保存的位置, third_party/speexdsp/src/mdf.c
# aec_aic_loopback_test 20 /usr/data/noecho.pcm & //20为录制时长(s),noecho.pcm为经过消除回声后文件
# aplay -Dplughw:0,0 /usr/data/crazy_8k_60.wav & //播放音乐
格式见demo,libmedia/test/main_noecho_test.c,此为原始数据
使用Audacity打开tmp目录下保存的文件, 查看消回声效果
aec_out.sw: 经过消回声波形
aec_play.sw: 播放音乐波形
aec_rec.sw: 未经过消回声的录音波形
三 算法要求
算法需要满⾜
- 给算法的⾳频帧尽量保证在幅值的60%到80%之间
- 录制及播放的⾳频均不能消顶
可以通过 cmd_alsa(libhardware2中的⼯具)修改mic及speak音量大小
# cmd_alsa list_ctls card=hw:0
integer: "Master Playback Volume" [0, 255] 220 //speak大小
integer: "Mic Volume" [0, 255] 225 //mic大小
integer: "ADCL Volume" [0, 255] 225
other[1]: "Playback Mute"
integer: "AGC OBSERVE Gain" [0, 31] 31
integer: "AGC PGAIN MAX Volume" [0, 7] 7
integer: "AGC PGAIN MIN Volume" [0, 7] 0
integer: "AGC RANGE MAX Threshold" [0, 32767] 16422
integer: "AGC RANGE MIN Threshold" [0, 32767] 8294
other[1]: "AGC Switch"
integer: "ALCL Volume" [0, 31] 6
integer: "DACL Volume" [0, 255] 220
integer: "HPOUTL Volume" [0, 4] 0
integer: "MICL Volume" [0, 3] 3
example:
cmd_alsa set_ctl card=hw:0 ctl="Master Playback Volume" value=230