语音的播放与压缩

 

最近在做语音通信有关的东西,原来没有接触过,所以绕了好大的弯子,尤其是语音压缩与播放一块。在网上找了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个字节进行压缩,效果还不错

你可能感兴趣的:(语音的播放与压缩)