一、WAV
WAV即WAVE文件,是最常用的数字化声音文件格式之一,扩展名为‘.wav’,用于保存Windows平台的音频信息资源。WAV格式还支持MS ADPCM、CCITT A LAW 等多种压缩运算法,支持多种音频数字,取样频率和声道。标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率及16位量化数字,二者声音文件质量相差无几。
WAV是由若干个Chunk(区块)组成的。按照在文件中的出现位置包括
①RIFF WAVE Chunk、②Format Chunk、③Fact Chunk(可选)和④Data Chunk。每个Chunk由块标识符、数据大小和数据三部分组成,如下图所示:
其中块标识符由4个 ASCII码构成,数据大小则标出紧跟其后的数据的长度(单位为字节),注意这个长度不包含块标识符和数据大小的长度,即不包含最前面的8个字节。所以实际Chunk的大小为数据大小加8。
1)RIFF块(RIFF WAVE Chunk):该块以“RIFF”表示,紧跟wav文件大小,(该大小是wav文件大小-8),然后数据段为“WAVE”,表示是wav文件。RIFF块的Chunk结构如下:
//RIFF块
typedef __packed struct{
u32 ChunkID;//此处固定为’RIFF‘,即0x46464952,RIFF的ASCII码,查ASCII码表应该按十六进制序列查
u32 ChunkSize;//集合大小,文件总大小-8
u32 Format;//格式——WAVE,即0x45564157(此处为倒序,’57‘是W,41是A等
//上面的ChunkID以及之后的都是按这个规则得出十六进制值的
}
2)Format块(Format Chunk):该块以“fmt "作为标示(注意fmt后有一个空格),一般情况下,该段的大小为16个字节,但是有些软件生成的.wav格式,该部分可能有18个字节,含有2个字节的附加信息。Format块的Chunk结构如下:
//fmt块
typedef __packed struct{
u32 ChunkID;
//chunk id;这里固定为"fmt "