做VOIP 视频通话,通话中如果有一个终端在一个空间小的房间里,对端就会有回声出现,现在需要做消除回声.前前后后处理了近半个月,也刚入门.网上查过资料,说回声消除的最好效果也就是把声音信号强度降低30Db,实际上20-25Db 就很不错了.这个Db是怎么计算的呢,两耳挺真难辨别? 现在有两个问题. 1. 对mediastreamer2库里面的 speexec.c 文件,处理回声的相关参数{ec_tail_len,ec_delay,framesize}.我的前一个博文有流程介绍,但具体设置多少也不是很清楚? 我音频文件是 8K 16bit mono ,通话中预计过1.5s后能听到回声,现在设置的参数是{250,4500,80};录下来的声音依然存在明显回声. 2. 我用speexec开源库做过写过测试程序,对比echo文件和处理后的文件.两个也没明显的差异.把回声文件,参考文件,处理后的文件
ec_tail_len,ec_delay,framesize分别代表回声的拖尾,也就是回声持续的时间;回声的延时,就是你所说的1.5s,从扬声器播出到麦克风采集到的时延。 声音从扬声器到麦克风这个通路的能量较大时,回声就很大,有时会比原始声音大很多,speex里面有对这个门限进行限制的,检查一下是否超过这个限制。 影响回声消除的因素,是回声的大小(db)和回声相对原始声音的大小(ERL),并不是声音调小了,就容易消除了
|