现在的位置: 首页 > 综合 > 正文

Windows下8位和16位PCM数据之间的转换

2017年12月28日 ⁄ 综合 ⁄ 共 389字 ⁄ 字号 评论关闭

    算不上原创,这里贴出来只是个备忘。

    在网络传输音频数据时,最开始使用8K8位原始PCM数据,每秒8K字节的传输量,加上频谱数据,也才16K字节,本来不算大,不过在极端网络情况下就有点受不了,曾想用AMR压缩,考虑到几个终端的兼容性,最后使用GSM610,压缩比接近10比1.

    GSM610默认是压缩8K16位,为了最小化修改代码,就对以前的8K8位重采样到8K16位,转换很简单:

    short sData16 = (( short )( byData8 + 0x80 )) << 8;   //对8K8位采样的每个字节加上0x80再移位成2个字节

    我研究过,这个0x80也不是唯一的数字,0x40,0x70等也可以,音质差不多,没深入研究,不知道为神马。

    至于8K16位转8K8位,把上面的表达式反转来就可以。

    BYTE byData8 = ( BYTE )(( sData16 >> 8 ) - 0x80 );

抱歉!评论已关闭.