WAV 文件格式分析
2017-04-11 12:28
239 查看
一、 WAV文件简介
波形音频文件格式 (WAV / WAVE)是Microsoft开发的一种数字化声音文件格式,用于在PC上存储音频比特流,文件扩展名为“*.wav”。WAV文件采用RIFF文件格式结构,即具有特定的容器格式。RIFF文件结构由“块”(chunk)为基本单元构成,每个块中包含4字节标识符,4字节块的大小,以及一个数据块序列。WAVE文件通常只是一个具有单个“WAVE”块的RIFF文件,它由两个子块组成:一个指定数据格式的“fmt”块和包含实际采样数据的“data”块。
虽然WAV文件可以包含压缩音频,但最常见的WAV音频格式是脉冲编码调制(PCM)格式的未压缩音频,即直接存储采样的声音数据,没有经过任何的压缩。
WAV文件数据格式采用小端字节顺序存储方式。
二、WAV文件内部结构
WAV格式以RIFF标头开始:
0~4(bytes) | ChunkID | 包含ASCII格式的字母“RIFF” |
4~8 | ChunkSize | 文件长度(不包含ChunkID和ChunkSize所占字节) |
8~12 | format | 包含ASCII格式的字母“WAVE” |
WAV格式由两个子块组成:“fmt”和“data”:
“fmt”描述声音数据的格式:
12~16 | Subchunk1ID | 包含字母“fmt” |
16~20 | Subchunk1Size | fmt块的大小(不包含Subchunk1ID和Subchunk1Size所占字节) |
20~22 | AudioFormat | 音频数据的编码方式,1表示PCM编码 |
22~24 | NumChannels | 声道数,单声道为1,双声道为2 |
24~28 | SampleRate | 采样率(每秒采样数),如44100 |
28~32 | ByteRate | 音频数据传送速率,单位是字节。 == SampleRate * NumChannels * BitsPerSample / 8 |
32~34 | BlockAlign | 每次采样的大小,单位是字节。16bit=4 == NumChannels * BitsPerSample / 8 |
34~36 | BitsPerSample | 每个声道的采样精度。16bit=16 |
36~40 | Subchunk2ID | 包含字母“data” |
40~44 | Subchunk2Size | 音频数据块的大小(不包含Subchunk2ID和Subchunk2Size所占字节) |
44~ | Data | 实际的声音数据 |
例如,用二进制编辑器打开一个WAV文件,如下:
可以看出,该WAV文件是一个16bit双声道(立体声)的音频文件。
WAV数据根据声道和bit数可分为以下几种形式:
8位单声道:每个样本数据由8位表示;
8位立体声:每个声道的数据由一个8位数据表示,且第一个8位数据表示0声道(左)数据,紧随其后的8位数据表示1声道(右)数据;
16位单声道:每个样本数据由16位表示;其中低字节存放高位,高字节存放低位;
16位立体声:每个声道的数据由一个16位数据表示,且第一个16位数据表示0声道(左)数据,紧随其后的16位数据表示1声道(右)数据。
所以8bit和16bit样值的二进制编码表示不同,8bitPCM波形样本的数据采用一字节编码,范围从0~255;16bitPCM波形样本的数据采用两字节编码,且低字节在前,高字节在后,范围从-32768~32767。
三、WAV的其它音频压缩方法
WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。下表给出WAV文件其他形式的压缩方法,其中code信息在WAV文件字段的第21、22个byte,通过十六进制查看器我们可以看到一个WAV文件的压缩码类型。
Code Description
0 (0x0000)
Unknown
1 (0x0001) PCM/uncompressed
2 (0x0002) Microsoft ADPCM
6 (0x0006) ITU G.711 a-law
7 (0x0007) ITU G.711 µ-law
17 (0x0011) IMA ADPCM
20 (0x0016) ITU G.723 ADPCM (Yamaha)
49 (0x0031) GSM 6.10
64 (0x0040) ITU G.721 ADPCM
80 (0x0050) MPEG
65,536 (0xFFFF) Experimental