“RIFF” |
Xxxx |
”Wave“ |
”fmt“ |
sizeof(PCMWAVEFORMAT) |
struct of PCMWAVEFORMAT |
"data" |
Xxxx |
Waveform data |
上面的表格表示Wave文件头的配置格式。
0--3字节,存放"RIFF"四个字符,一般的.wav声音文件和.avi动画文件都使用此种格式。
4--7字节,存放一个 long整型的数值,存放文件总长度剪掉4Bytes。若声音文件总长度为100000Bytes,
则Xxxx值为 960000。
8--11字节,存放"Wave"四个字符,表示此文件是Wave格式。
12--15字节,"fmt ",(fmt后面必须空一格),告知此wave文件是属于哪种格式,若是Windows系统都是属于WAVE_FORMAT_PCM格式
16--19字节,为一长整型,说明数据结构 PCMWAVEFORMAT的大小,值为16
20--35字节,存放PCMWAVEFORMAT的结构。
typedef struct pcmwaveformat_tag {
WAVEFORMAT wf; //WAVEFORMAT结构
WORD wBitsPerSampel; //每个样本占几位
}PCMWAVEFORMAT;
typedef struct waveformat_tag {
WORD wformagTag; //播放格式类型
WORD nChannels; //几个声道,是单声道,还是双声道(立体声)
DWORD nSamplesPerSec; //每秒有几个样本,也就是采样率
DWORD nAvgBytesPerSec; //平均传输速率,Bytes/秒
WORD nBlockAlign; //每次读取的数据,如立体声,16bits
}WAVEFORMAT;
20--21字节,代表此wave文件的格式。如 WAVE_FORMAT_PCM
22--23字节,代表声音的频道数,如单声道为1,立体声为2
24--27字节,代表每秒的采样数,即采样率
28--31字节,代表每秒的传输速率,nAvgBytesPerSec = nSamplesPerSec * nChannels *(wBitsPerSampel/8);
32--33字节,以区块为对齐单位,也就是每次要读取的区块大小为:n-Bytes
34--35字节,代表每个采样所需要的位数。
36--39字节,存放data四个字符,说明数据部分的开始。
40--43字节,为一长整型,其值为真正数据大小。例如一个wave文件的大小为20044字节,其真正声音文件大小为 20044 - 44 = 20000字节。
44--到文件结尾处,为真正声音数据存放处。
注:来源于 Borland C++ Builder 6程序设计经典