语音的播放与压缩

 

最近在做语音通信有关的东西,原来没有接触过,所以绕了好大的弯子,尤其是语音压缩与播放一块。在网上找了direct sound播放和压缩有关的内容,但是播放的时间总会有延迟,而压缩的效果也不是很好。

后来找到了 朱二的一篇文章(http://zhuer.info/?p=24),用定时器机制来把数据写入到SecondaryBuffer中,这样使用定时器方式后,同时减少检查的间隔,减少secondaryBuffer的BufferSize,这样可以减少播放带来的延迟。

接着是压缩,找了g711,adpcm,g729,ilbc,最开始效果最好的是g711,直接套用现成的算法,但压缩率太小了,占用的带宽比较大,就想找其他的压缩算法,把网上的adpcm的C代码改为C#后,效果很差,可能是没改好吧,又找了一段使用g729的代码,才发现原来考虑的不周到,因为压缩算法需要考虑到帧长,即以多少字节做为一个单位进行压缩和解压,比如g729的帧长是10ms,那么压缩的单位就是 8000 * 16/8  * 1 / 100  = 160个字节进行压缩;因为 g729有专利要求,就找到了ilbc算法,这是开源的,不需要交专利费的,其帧长有20ms和30ms两种,即以 320或480个字节进行压缩,效果还不错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值