如何使用Speex中的AEC模块,提高声音质量?
2012-03-19 16:19
561 查看
From:http://wenbin151.iteye.com/blog/399418
在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(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中的AEC模块,提高声音质量?
- 如何使用Speex中的AEC模块,提高声音质量
- 使用Speex中的AEC模块,提高声音质量(转)
- 使用Speex中的AEC模块,提高声音质量
- Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用
- 【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
- Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用
- Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用
- 如何在VC++程序中添加播放声音模块——PlaySound函数的使用
- 如何使用Android Studio提高App质量
- 如何使用Android Studio提高App质量
- 如何使用多个Spring的xml配置文件(多模块配置)
- 软件开发周期----如何提高软件开发质量----论团队管理的非技术性因素(part 2)
- 如何使用Dynamics CRM 2013服务模块02(资源、设施/设备、资源组)
- 提高Java代码质量:使用枚举定义常量(转)
- 工欲善,必先利其器 -- (使用开源工具提高J2EE系统的质量)
- 浅谈如何提高软件项目产品的质量(转载)
- 如何使用Rust提高Ruby性能
- 如何使用 HTTP 响应头字段来提高 Web 安全性?
- 一堂如何提高代码质量的培训课