WAVE文件格式分析

 WAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),其扩展名为"*.wav",数据本身的格式为PCM或压缩型。最基本的WAVE文件是PCM(脉冲编码调制)格式的,这种文件直接存储采样的声音数据没有经过任何的压缩,是声卡直接支持的数据格式,要让声卡正确播放其它被压缩的声音数据,就应该先把压缩的数据解压缩成PCM格式,然后再让声卡来播放。

WAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF(Resource Interchange File Format,资源交互文件格式)文件格式结构。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。

由于WAV格式源自Windows/Intel环境,因而采用Little-Endian字节顺序进行存储。

RIFF文件结构可以看作是树状结构,其基本构成是称为Chunk(块)的单元,最顶端是一个RIFF Chunk,即文件头(File Header),下面的每个块有“类型块标识(可选)”、“标志符”、“数据大小”及“数据”等项所组成。Chunk的基本结构如图:

WAVE文件格式分析_第1张图片

每个文件最前端写入的是RIFF块,每个文件只有一个RIFF块。“类型块标识”只在部分chunk中用到,如 "WAVE" chunk,这时表示下面嵌套有别的chunk。当使用了 "类型块标识" 时,该chunk就没有别的项(如块标志符,数据大小等),它只作为文件读取时的一个标识。先找到这个“类型块标识”,再以它为起点读取它下面嵌套的其它chunk。"WAVE" chunk由两个子块构成,其中“fmt”chunk用于详细说明数据格式,“data”chunk包含实际的样本数据。

WAVE文件格式分析_第2张图片

Offset

Size

Name

Description

0

4

ChunkID

字母“RIFF”对应ASCII码“0x52494646”

4

4

ChunkSize

去除Chunk ID与Chunk Size的数据字节大小(小尾字节顺序存储)。

Value=36 + SubChunk2Size

or

Value=4 + (8 + SubChunk1Size) + (8 + SubChunk2Size)

8

4

Format

字母“WAVE”对应ASCII码“0x57415645”,包含两个子块“fmt”chunk和“data”chunk

12

4

Subchunk1ID 

字母“fmt”对应ASCII码“0x666d7420”

16

4

Subchunk1Size

若文件采用PCM编码,则该字块剩余字节数为16

20

2

AudioFormat

若文件采用PCM编码,则AudioFormat=1,AudioFormat代表不同压缩方式

22

2

NumChannels

声道数,Mono (单声道)= 1, Stereo (双声道)= 2

24

4

SampleRate

取样率,8000Hz, 44100Hz等

28

4

ByteRate

传输速率(Byte/s),Value=SampleRate * NumChannels * BitsPerSample/8

32

2

BlockAlign

一个样点(包含所有声道)的字节数,Value=NumChannels * BitsPerSample/8

34

2

BitsPerSample

每个样点对应的位数


2

ExtraParamSize

若采用PCM编码,则该值不存在


X

ExtraParams

存储其他参数,若采用PCM编码,则该值不存在

36

4

Subchunk2ID

字母“data”对应ASCII码“0x64617461”

40

4

Subchunk2Size

实际样本数据大小,以字节为单位,Value=NumSamples * NumChannels * BitsPerSample/8

44

*

Data

实际音频数据

下图为一个WAVE文件的存储实例,可以看出该文件采用PCM编码,音频双声道,每个样点进行16位量化编码,一个样点占4个字节,左右声道交替存储。

WAVE文件格式分析_第3张图片

问:8bit和16bit样值的二进制编码表示一样吗?

答:8bit样值存储格式为unsigned char,取值范围0~255。16bit样值存储格式为2字节signed int,取值范围-32768~32767。

问:现有的WAV支持哪几种音频压缩方法?

答:常见的10种压缩形式:

1.PCM:Pulse Code Modulation,脉码调制信号。是模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。

2.Microsoft ADPCM:Adaptive Differential Pulse Code Modulation,自适应差分脉码调制信号。是一种数据压缩算法,该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化。

3.ITU G.711 a-law [3]:G.711标准也是PCM码的一种。是国际电报联盟(International Telegraph Union, ITU)订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8kHz。

4.ITU G.711 µ-law:G.711标准下的另一种压缩算法,主要运用于北美和日本,美国电话格式(CCITT G.711)就采用这种算法。

5.IMA ADPCM:IMA是ADPCM中使用较多的一种算法。当前该算法以其简单实用的特点广泛应用到数字音乐盒和数字录音笔中。

6.ITU G.723 ADPCM (Yamaha):G.723是ITU在1996年制订成型的一种多媒体语音编解码标准。其典型应用包括VoIP服务、H.324视频电话、无线电话、数字卫星系统、数电倍增设备(DCME)、公共交换电话网(PSTN)、ISDN及各种多媒体语音信息产品。

7.GSM 6.10 [4]:是我们熟知的全球移动通讯系统(Global System for Mobile communications)定义的一种音频编解码标准。

8.ITU G.721 ADPCM [5]:G.721是ITU-T定义的一组标准协议组G.7xx其中之一,指的是32kbit/s的自适应差分脉冲编码调制(ADPCM)。

9.MPEG:Moving Pictures Experts Group,动态图像专家组。MPEG是世界上最为著名的一种音视频压缩标准之一。MPEG标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。

10.Experimental:称为实验性音频。专门用来作音频信号处理的研究开发工作,主要包括优化压缩算法提高压缩效率的工作。这种类型的压缩码流基本不被主流解码器支持。

Compression code信息在WAV文件字段的第21、22个byte,通过十六进制查看器我们可以看到一个WAV文件的压缩码类型。对应关系如下表:

WAVE文件格式分析_第4张图片

详见http://blog.csdn.net/stelalala/article/details/17058755










你可能感兴趣的:(WAVE文件格式分析)