您的位置:首页 > 其它

WAV 文件格式分析

2017-04-11 12:28 162 查看

一、 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~8ChunkSize文件长度(不包含ChunkID和ChunkSize所占字节)
8~12format包含ASCII格式的字母“WAVE”
 
WAV格式由两个子块组成:“fmt”和“data”:
“fmt”描述声音数据的格式:
12~16Subchunk1ID包含字母“fmt”
16~20Subchunk1Sizefmt块的大小(不包含Subchunk1ID和Subchunk1Size所占字节)
20~22AudioFormat音频数据的编码方式,1表示PCM编码
22~24NumChannels声道数,单声道为1,双声道为2
24~28SampleRate采样率(每秒采样数),如44100
28~32ByteRate音频数据传送速率,单位是字节。

== SampleRate * NumChannels * BitsPerSample / 8

32~34BlockAlign每次采样的大小,单位是字节。16bit=4

== NumChannels * BitsPerSample / 8

34~36BitsPerSample每个声道的采样精度。16bit=16

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

36~40Subchunk2ID包含字母“data”
40~44Subchunk2Size音频数据块的大小(不包含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。
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: