在Speex(www.speex.org)的最新版本中,开始集成了回音消除的模块,而回音消除一直是Voip之中亟待解决的主要问题。
很多朋友和我说speex的aec模块的效能并不好,我们先来看一下speex的aec的api调用方式。
/*
*创建AEC对象
*/
SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);
frame_size 的取值最好是一个编码的frame大小, 在低带宽条件下,一般延迟20ms,而大小为160
filter_length,最好是房间内反射时间的1/3
如: 一个房间的反射时延为300ms
那么这个filter_length就最好是100ms(这个长度又被称为tail length).
而其中filter_length的设定是一个关键。
/*
*执行AEC
*/
speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);
其中:
input_frame: 就是被声卡捕捉到的声音
echo_frame: 是由扬声器播放出的声音,这个声音是需要从 input_frame中抵消的声音.
output_frame 是处理完以后输出的声音
residue是一个可选参数,如果不使用可以将之设置为NULL, 也可以通过preprocessor 来控制
问题的关键是 处理input和echo 之间的关系,
也就是说在捕捉到的信号和播放的信号之间的延迟必须足够的小,才可以提高效率.
writetosndcard(echo_frame, frame_size)
readfromsndcard(input_frame, frame_size)
speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue)
如果你想要尽可能的减小信号中的回音,那么可以将residue这个参数设置为噪音参数.
我相信在大多数情况下,都是因为声音捕捉和声音播放之间的同步问题没有处理好,导致的音频质量下降。
/*
*销毁和复位
*/
speex_echo_state_destroy(echo_state);
speex_echo_state_reset(echo_state);
不再复述了!
说明:
据说在Speex的最新的1.2beta版本上,Speex提供了可选择的,简化的API,来提高echo执行过程中的同步问题。
这些,我会在以后的文章中在讨论。
分享到:
相关推荐
一个简单的例子, 用于演示win32下,如何使用speex1.2rc1 中的 echo cancellation模块. 工程使用 vs2008 express 构建, 其中不包含 speex, 自己下载吧.
Speex的AEC是以NLMS(Normalized Least Mean Square)为基础,用MDF(multidelay block frequency domain)频域实现,最终推导出最优步长估计:残余回声与误差之比。最优步长等于残余回声方差与误差信号方差之比。 ...
这是 Speex Codec AEC 算法到 Matlab 的一个端口。
1,代码语言为matlab。
matlab开发相关算法、系统代码、设计文档、使用说明,供参考 matlab开发相关算法、系统代码、设计文档、使用说明,供参考 matlab开发相关算法、系统代码、设计文档、使用说明,供参考 matlab开发相关算法、系统代码...
android 利用speex 降低声音噪音,回声消除demo,提高音频播放质量
AndroidStudio 上编译speex库,进行使用
利用SpeexAEC实现自动回声抑制,其中包含AEC源码和测试代码
android 利用speex 音频降噪,回声消除demo,提高音频播放质量
使用该文章发现,保存的wav格式声音有些失真,也许是我写文件的方式不对。 2. android-recorder 代码功能不完整,比如说,没有把录音保存下来。 3. 用SPEEX将PCM音频编码成AAC 作者在Android recorder的基础上,增加...
android使用audioRecorder获取音频流,使用speex库对音频流进行编解码,然后进行音频通话
speex 中oss 语音修改代码
回音消除android端的so库的生成及使用的demo。
回波抵消程序,可对64ms回波进行回声消除。
Speex音频是解决android和ios音频通用的一个很好的办法
Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外,相对于其它编解码器,Speex也很适合网络应用,在网络应用上有着自己独特的优势...本Demo实现局域网通信以及speex的框架使用和封装
Speex手册中文版。对于需要用speex库进行语音处理,回声消除,降噪的会是很好的帮助文档。
使用speex语音压缩技术,实现ios平台下的语音聊天测试程序。
Speex音频压缩和回声消除,对原始的PCM音频数据进行压缩,以及消除录音时,因为外放造成的回音。此项目的重点是通过jni调用Speex进行处理,对于需要开发音频的开发人员,具有参考价值!