PCM编码的WAV文件中的PCM数据是如何计算得出的
用软件生成的一个PCM编码的WAV的声音波形文件.参数: 频率:1000Hz ; 幅值:1 ; 采样率: 8000 ; 采样位数:16 单通道
得到的WAV文件用"UltraEdit-32"读取出的数据如下(开头部分):
*******************************************
5249 4646 307D 0000 5741 5645 666D 7420
1000 0000 0100 0100 401F 0000 803E 0000
0200 1000 6661 6374 0400 0000 0000 0000
6461 7461 007D 0000
0000 1264 C97C 8937
77C8 3783 EE9B 0000 0000 1264 C97C 8937
77C8 3783 EE9B 0000 0000 1264 C97C 8937
77C8 3783 EE9B 0000 0000 1264 C97C 8937
77C8 3783 EE9B 0000 0000 1264 C97C 8937
77C8 3783 EE9B 0000
*******************************************
说明:上面的数据中:第一部分为WAV的头,后面的为采集的数据.
WAV的头数据的各部分含义我已经弄清楚了,需要了解的请见: http://www.vihome.net/bbs/viewthread.php?tid=11147&extra=page%3D1
关键是后面的数据是如何编码的?
数据说明:一个周期是取8个点,从WAV文件对应读出的数据为:
0000 1264 C97C 8937 77C8 3783 EE9B 0000
说明两个字节对应一个点的数据(高低位互换后,如:1264(存储时的样子),实际数值为:6412(16进制),他们对应的10进制浮点数如下:
0 0.781831482452 0.9749279121932 0.4338837391869 -0.4338837390251 -0.9749279121533 -0.781831482564 -1.79586368671E-10
如: 0.781831482452(10进制浮点数) 对应: 6412(16进制数)
问:
1 是如何编码实现上面的转换的?
2 如何从16进制数得到对应的浮点数?(解码)
3 如何从浮点数得到对应的16进制数?(编码)
已解决! 转到解答。
如何用十六进制字符串转十进制字符串?
然后再除以2的15次方,得到对应的浮点数
负数呢?
如: C877 (16进制) = -0.4338837390251 (10进制)
如何计算?
如何判断一个16进制数是正,还是负?
0000 6412 7CC9 3789 C877 8337 9BEE 0000
0 0.781831482452 0.9749279121932 0.4338837391869 -0.4338837390251 -0.9749279121533 -0.781831482564 -1.79586368671E-10
例如:C877= -0.4338837390251 ,如何计算?如何判断这是个负数?
C877 (16进制) = -0.4338837390251 (10进制)
最高位即为符号位
C877 展开为二进制即为 1100 1000 0111 0111
按照补码的定义 其对应的原码为 1011 0111 1000 1001
后15位代表其大小 您换算一下 即得到其对应的幅值为上面的十进制数值。