之前遇到一个问题,我录音并加头的一个latestAudio.wav音频文件可以用迅雷看看播放器打开并正常播放,但是用函数playsound就无论如何放不了。
后来我做了实验,将latestAudio.wav改为latestAudio.mp3,然后迅雷看看播放器依然可以播放,至此可以断定,文件的音频流数据应该是没有问题,但是头出错了。
这个时候,就要分析哪里出错了。我是这样做的:
1.找到一个正确的.wav文件做对比,去你的电脑的C:\Windows\Media目录下可以get到很多系统自带的.wav文件,这些文件无疑都是正确的
2.下载Hex Workshop,用来比对两个.wav文件的头。要注意Hex Workshop的高低位是颠倒的,这点接下来再详细介绍。
3.将两个.wav文件拖到Hex Workshop里
4.去网上搜索下“wav头格式“,我这里有两个推荐的网址:
http://blog.csdn.net/xsjm206/article/details/6727023
http://blog.csdn.net/yzhouen/article/details/777459
只要你搜索了数个相关网页,相信你会和我一样迷惑:咋说的都不一样呢?到底哪个是对的啊?
我表示我目前并没有搜到一个答案能解释为什么网上会有那么多.wav格式,如果谁知道跪求告知~
但是呢~ 你手头可是有Windows自带的,wav文件,不管如何,这个.wav头肯定是正解之一,那么对照着它去理解.wav头每个字段的意义,再回过头看我们的音频哪里出问题了
下图是Hex Workshop的截图,可以看到,wav文件的头已经展现在你面前了,第一行是固定字段”RIFF“、”WAVEfmt “以及”音频长度-8“,这个没问题,暂时不管。
接下来分析10H到23H之间的这些字段(即第一行之后,到"data"之前的那部分),最简单的办法就是都抄下来一个个看:
10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00
对照这个图:
10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00
首先应该是”格式类别10H“,2个字节,然而你看到的是10 00明显不是10H(00 10)这是因为刚刚提到的在Hex Workshop中高低位是颠倒的,所以这里就是00 10
然而再看下一字段,”通道数1或者2“ 然而10 00 之后是00 00,显然没有0通道这回事儿,再看这个:
这里面的”格式类别10H“是4个字节,所以在接下来的分析里就不能死死按着表来分析,字节数是可以变的,但是字段就那么几个,一个个对应起来就可以了。
这里直接给结论,字节划分
10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00
把颠倒的字节还原:
00 00 00 10 00 01 00 02 00 00 AC 44 00 02 B1 10 00 04 00 10
PCM fmttag channel samplespersec bytepersec blockalign bitpersamples
以上就是针对一个Windows系统自带.wav的头分析,参照这个对比自己的wav文件的头很容易看出问题来
当然,这只是个.wav头的一种格式,其他格式可以自己去琢磨琢磨~~