分类:
2011-06-03 23:42:26
文件头长度加起来是42字节,但是实际长度是44个字节(用UltraEdit打开一个WAVE文件,数一下就知道了)。如果用以个结构体来定义WAVE文件头应该为:
struct WAVEFILEHEADER
{
char chRIFF[4];
DWORD dwRIFFLen;
char chWAVE[4];
char chFMT[4];
DWORD dwFMTLen;
PCMWAVEFORMAT pwf;
char chDATA[4];
DWORD dwDATALen;
};
但是实际测试,并不是所有的wave文件头都一样。比较麻烦的就是windows下自带的那个录音机录下的wav,文件头有58个 Byte。所以,比较好的办法是,首先读取n长的一段字符,例如60个;然后从中查找关键字“data”,“data”之后的一个DWORD是实际音频数 据的长度,得到这个长度len,再从这DWORD后开始读取len个字节,就可以读到文件尾。如果是双声道的,那么数据是交替存放的;如果是16bit采 样的,每两个字节会以小端的方式存储一个AD值。根据这样的方式,就可以顺利读取音频数据了。
原文地址:http://www.cnblogs.com/huaping-audio/archive/2010/03/08/1680654.html