一:RIFF介绍
在Windows环境中,大多数的多媒体文件都是以一种通用的结构来存放的,这种结构成为“资源互换文件格式”,简称RIFF。RIFF文件是按照little-endian 字节顺序写入的,即其编码的顺序是倒序(如:编码类型标识存放为0001,则其解码时应解为0100)。
RIFF可以看做是一种树状结构,其基本构成单位是块(chunk),每个块由块标识,块大小和块内容三部分组成。RIFF文件通常是由若干块组成,每个文件都是以“RIFF”为标识符开始的,RIFFchunk是一个文件最大的chunk,其数据部分可再包含其他子块(类似一台硬盘的根目录)。需要注意的是,一般的块(chunk)要求不能包含其他块,但标识符为“RIFF”和“LIST”的块除外。
二:wav文件格式介绍
wav文件,即数字化波形声音文件,是一种遵循RIFF结构的音频文件。它一般是通过PCM编码的无损压缩编码文件,音频质量高。
wav文件由文件头和数据体两大部分组成,文件头包含了各数据块的标识符,相应的块大小及文件的编码类型,声道数,采样频率及采样位数等参数的设置;数据体放的是经编码后的音频数据。PCM编码的头文件如下图所示:
由该图可知,wav文件是以“RIFF”标识符开始的,wav文件头标识了文件类型。后面接的分别是wav的两个基本块:fmt块和fact块。
wav 可使用三个参数来表示声音:采样位数、采样频率和声道数。
下面通过对一个wav文件的分析来分析wav文件的格式:
下图中是包含了文件头和数据块的一个wav文件。(可能由于该音频前部分都处于无音频数据或者数据较小,所有有一大块为0)。
图中红色部分框出的是“RIFF”的文件头,四个字节表示的是“RIFF”的ASCII码值;
其后用黑色线框出的是该wav文件的大小(即从下个地址开始到文件尾的总字节数,按照低位在前高位在后排列,这里我们可以知道该文件的大小为0x00A76F62=12021602字节=);
其后黄色线框框出的为“WAVE”文件头,四个字节表示的是“WAVE”的ASCII码值;
其后橙色线框框出的为“FMT”辨别码,标识fmt块的开始,最后以字节为空格;
其后橙色线框框出的为“fmt”块的大小(这里我们可以计算出该块大小为0x00000012=18字节,需要注意这里的大小不包括前面辨别码和标识大小所占的字节,所以可知一个块的大小=数据大小+8字节;
其后蓝色标出的两字节表示文件的编码类型(PCM编码:0100 ,ADPCM:0200,可知这里为PCM编码);
其后紫色标出的两字节表示声道数(单声道0100双声道0200,这里为双声道);
其后黑色框出的四字节表示采样频率(这里fs=0x0000BB80=52352Hz=52.352kHz);
其后粉色框出的四字节表示波形数据传输速率(每秒平均字节数=采样频率*音频通道数*每次采样得到的样本位数/8);
其后蓝色框出的两字节表示采样大小(=通道数*每次采样得到的样本位数/8)
其后红色框出的两字节表示采样位数(这里表示16位);
其后黑色框出的两字节为系统预留(全部置零,仅8位采样有);
其后蓝色框出的四字节为“DATA”块标识(data的ASCII码);
其后绿色框出的四字节为数据区的大小(我们可以看出该数据区共有0xA76F3C=10972988字节);
其后的数据都属于数据区数据。
以上就是对一个wav文件格式的分析。
三:wav文件的优缺点
优点:编码简单,无压缩(PCM无压缩编码)
缺点:需要音频存储空间
四:问题解答
问题1:8bit和16bit样值的二进制编码表示一样吗?
答:不一样。8bit用1字节编码,00H和FFH分别表示最小和最大采样声音数据;而16bit用二字节编码,按照little Indian编码方式,低位在前一字节,高位在后一字节。
问题2:现有的WAV支持哪几种音频压缩方法?
答:标准PCM、ADPCM等所有支持ACM规范的编码方式