WAV文件格式说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WAV文件格式说明

――杨少军WAVE文件是以RIFF(Resource Interchange File Format,"资源交互文件格式")格式来组织内部结构的。RIFF文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,最顶端是一个“RIFF”块,下面的每个块有“类型块标识(可选)”、“标志符”、“数据大小”及“数据”等项所组成,其中,format chunk和data chunk是必需要的,其它的chunk可选。在data chunk中存放的数据可能是压缩的也可能是非压缩的,这是根据format chunk中的wFormatTag来决定的,如果wFormatTag为WA VE_FORMA T_PCM 时,表示数据为非压缩的,其它的为压缩的。在非压缩格式时,存放的数据就是PCM码;而在采用压缩格式时,由于各个公司都有自己的压缩算法,没有一个统一的标准,所以压缩制式非常杂。下面主要以INTEL 公司的IMA-ADPCM压缩算法来讲W A V文件的结构。

1.WA V文件内部结构

在讲W A V文件结构时,主要以非压缩格式和以INTEL 公司的IMA-ADPCM压缩算法来论述。下面来谈谈INTEL 公司的IMA-ADPCM压缩算法。

IMA-ADPCM 是Intel公司首先开发的是一种主要针对16bit采样波形数据的有损压缩算法, 压缩比为4:1.它与通常的DVI-ADPCM是同一算法。它是将声音流中每次采样的16bit 数据以4bit 存储。具体的压缩算法可以参看其它文章。

在wFormatTag为W A VE_FORMA T_PCM时,没有Fact Chunk,也没有format chunk 中的wSamplesPerBlock,data chunk中紧跟着DataChunkSize后的就是PCM数据了。而在wFormatTag为WA VE_FORMA T_DVI_ADPCM时,表示采用INTEL 公司的IMA-ADPCM 压缩算法,W A V文件格式即为上表所示。

在采用IMA-ADPCM压缩算法时,“data”chuck中的数据是以block形式来组织的,把它叫做“段”,也就是说在进行压缩时,并不是依次把所有的数据进行压缩保存,而是分段进行的。Data Block一般是由block header (block头) 和data 两者组成的。其中block header是一个结构,它在单声道下的定义如下:

Typedef struct

{

short sample0; //block中第一个采样值(未压缩)

BYTE index; //上一个block最后一个index,第一个block的index=0;

BYTE reserved; //尚未使用

}MonoBlockHeader;

有了blockheader的信息后,就可以不需要知道这个block前面和后面的数据而轻松地解出本block中的压缩数据。对于双声道,它的blockheader应该包含两个MonoBlockHeader 其定义如下:

typedaf struct

{

MonoBlockHeader leftbher;

MonoBlockHeader rightbher;

}StereoBlockHeader;

在解压缩时,左右声道是分开处理的,所以必须有两个MonoBlockHeader;

1.1 Data chunk详述

Data中的数据可能是压缩的也可能是非压缩的,如果wFormatTag为WA VE_FORMA T_PCM格式时,表示非压缩的数据,data chunk中紧跟着DataChunkSize后的就是PCM数据了,其组成如下:

如果wFormatTag为W A VE_FORMAT_DVI_ADPCM格式时,data中的数据是从PCM 的16位采样压缩成4位的。对于单声道的IMA-ADPCM来说,它是将PCM的数据按时间次序依次压缩并写入文件中的,每个byte中含两个采样,低四位对应第一个采样,高四位对应第二个采样。而对于双声道的IMA-ADPCM来说,它的存储相对就麻烦一些了,它是将PCM的左声道的前8个采样依次压缩并写入到一个DWORD中,然后写入“data”chunk 里。紧接着是右声道的前8个采样。以此循环,当采样数不足8时(到数据尾端),应该把多出来的采样用0填充。

相关文档
最新文档