Xiao_bird博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
最近想做一个播放使用DirectX播放PCM音频的程序,需要解析WAV文件,于是在网上搜索了一下,结果还是很多的,不过基本都是两篇文章的复本。
随后按照文章上所说对一个WAV文件做了一下解析,但结果发现解析的结果和文章中所说的并不相同,这让我大为困惑。
用WinHex查看了一下那个WAV文件,发现它的文件头不只有网上文章中所说的那些,这就奇怪了,难道网上的文章不对吗?
不过,经过仔细解析后,终于解决了这个问题,原因如下:
1、网上的文章并没有错误,只不过并不全面
2、WAV文件头分为若干个Chunk,网上的文章只说明了4个Chunk,而我在电脑上找到的WAV在这4个Chunk基础上增加了一些自己的Chunk,所以我按照网上文章中所描述的Chunk头严格来读的话,肯定是读跑偏了
3、问题解决起来也很容易:只需要按每个Chunk的定义格式(既前4个字节为ChunkID,之后4个字节为该Chunk大小),根据Chunk ID找到自己所需的Chunk,忽略那些不关心的Chunk,就可以了

当然,自定义的Chunk也不是太随便的,一定要遵寻一定的原则,即:
1、Wav Chunk必须是第一个Chunk
2、Data Chunk必须是最后一个Chunk
3、这两个Chunk之间,其它的Chunk是不是有顺序规定,我现在还不知道

再附上我所参考的两篇文章链接,感谢作者
http://www.cnitblog.com/tinnal/archive/2009/01/03/53401.html
http://www.xml.org.cn/dispbbs.asp?boardID=47&ID=26939
posted on 2009-09-08 13:21  Xiao_bird  阅读(5693)  评论(1编辑  收藏  举报