您的位置:首页 > 其它

WAV文件头信息

2016-03-15 13:19 281 查看
wave文件的格式:

00H 4 char "RIFF"标志

04H 4 long int 文件长度

08H 4 char "WAVE"标志

0CH 4 char "fmt"标志

10H 4   过渡字节(不定)

14H 2 int 格式类别(10H为PCM形式的声音数据)

16H 2 int 通道数,单声道为1,双声道为2

18H 2 int 采样率(每秒样本数),表示每个通道的播放速度,

1CH 4 long int 波形音频数据传送速率,其值为通道数×每秒数据位数×每样

本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。

20H 2 int 数据块的调整数(按字节算的),其值为通道数×每样本的数据位

值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其

值用于缓冲区的调整。

22H 2   每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多

个声道,对每个声道而言,样本大小都一样。

24H 4 char 数据标记符"data"

28H 4 long int 语音数据的长度

文件头长度加起来是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值。根据这样的方式,就可以顺利读取音频数据了。

原文地址: /article/4855580.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: