算不上原创,这里贴出来只是个备忘。
在网络传输音频数据时,最开始使用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 );