WAV 文件格式分析

一、 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

“data”子块包含数据的大小和实际的声音数据:

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

 

 

 四、WAV文件采样率转换

WAV文件可以进行采样率的转换,例如将采样率为48khz的WAV文件转换成44.1khz,由于48Khz和44.1khz不是整数倍的关系,不能通过插值或者抽取直接转换。可以先做插值,再做抽取,这样既不会产生数据的丢失,也避免了频谱的混叠失真。可求出48khz和44.1khz的最小公倍数为7056khz,先对48khz文件进行插值处理,在两个相邻抽样值之间插入146个邻近抽样值,将采样率变为7056khz,再每隔159个样值抽取一个,这样就可以将采样率转换为44.1khz。

 

 

 

猜你喜欢

转载自blog.csdn.net/zgyggy/article/details/70050280