WAVE(编解码器)
WAV档案格式是一种由微软和IBM联合开发的用于音频数字存储的标準,它採用RIFF档案格式结构,非常接近于AIFF和IFF格式。
多媒体套用中使用了多种数据,包括点阵图、音频数据、视频数据以及外围设备控制信息等。RIFF为存储这些类型的数据提供了一种方法,RIFF档案所包含的数据类型由该档案的扩展名来标识,能以RIFF档案存储的数据包括:
# 音频视频交错格式数据(.AVI)
# 波形格式数据(.WAV)
# 点阵图格式数据(.RDI)
# MIDI格式数据(.RMI)
# 调色板格式(.PAL)
# 多媒体电影(.RMN)
# 动画游标(.ANI)
# 其它RIFF档案(.BND)
RIFF是一种含有嵌套数据结构的二进制档案格式,每个数据结构都称为因一个chunk(块)。Chunk在RIFF档案中没有固定的位置,因而偏移量不能用于定位域值。一个块中的数据包括数据结构、数据流或其它组块(称为子块)等,每个RIFF块都具有如下结构:
typedef struct _Chunk
{
DWORD ChunkId; /*块标誌*/
DWORD ChunkSize; /*块大小*/
BYTE ChunkData[ChunkSize]; /*块内容*/
} CHUNK;
ChunkId由4个ASCII字元组成,用以识别块中所包含的数据。字元RIFF用于标识RIFF数据块,间隔空格在右面是不超过4个字元的ID。由于这种档案结构最初是由Microsoft和IBM为PC机所定义,RIFF档案是按照little-endian位元组顺序写入的,而採用big-endian位元组顺序的档案则用‘RIFX’作为标誌。
ChunkSize(块大小)是存储在ChunkData域中数据的长度,ChunkId与ChunkSize域的大小则不包括在该值内。
ChunkData(块内容)中所包含的数据是以字(WORD)为单位排列的,如果数据长度是奇数,则在最后添加一个空(NULL)位元组。
子块(Subchunk)与块具有相同的结构。一个子块就是包含在其它块内部的一个块,只有RIFF档案块‘RIFF’和列表块‘List’才能含有子块,所有其它块仅能含有数据。一个RIFF档案就是一个RIFF块,档案中所有其它块和子块均包含在这个块中。
WAV档案可以存储大量格式的数据,通常採用的音频编码方式是脉冲编码调製(PCM)。由于WAV格式源自Windows/Intel环境,因而採用Little-Endian位元组顺序进行存储。
脉冲编码调製
Claude E. Shannon于1948年发表的“通信的数学理论”奠定了现代通信的基础。同年贝尔实验室的工程人员开发了PCM技术,虽然在当时是革命性的,但今天脉冲编码调製被视为是一种非常单纯的无损耗编码格式,音频在固定间隔内进行採集并量化为频带值,其它採用这种编码方法的套用包括电话和CD。PCM主要有三种方式:标準PCM、差分脉冲编码调製(DPCM)和自适应DPCM。在标準PCM中,频带被量化为线性步长的频带,用于存储绝对量值。在DPCM中存储的是前后电流值之差,因而存储量减少了约25%。自适应DPCM改变了DPCM的量化步长,在给定的信造比(SNR)下可压缩更多的信息。
共同的执行过程
在对WAV音频档案进行编解码过程中,最一致的地方包括採样点和採样帧的处理和转换。一个採样点的值代表了给定时间内的音频信号,一个採样帧由适当数量的採样点组成并能构成音频信号的多个通道。对于立体声信号一个採样帧有两个採样点,一个採样点对应一个声道。一个採样帧作为单一的单元传送到数/模转换器(DAC),以确保正确的信号能同时传送到各自的通道中。
转载请注明出处海之美文 » WAVE(编解码器)