ADPCM WAVE 文件的压缩与解压缩[原创] 分类: 程序设计:经典算法与技术赏析2005-10-13 21:15 8342 人阅读 评论(8) 收藏 举报 一、概述: 本文叙述了如何通过 IMA-ADPCM 压缩和解压缩算法来完成从 IMA-ADPCM 文件转换为 PCM 文件的过程。主要包括的内容有:PCM 和 IMA-ADPCM WAVE 文件内部结构的介绍,IMA-ADPCM 压缩与解压缩算法,以及如何生成特有的音频压缩格式文件等三方面的内容。 二、WAVE 文件的认识 WAVE 文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Window s 系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.w av"。 w ave 文件有很多不同的压缩格式,而且现在一些程序生成的w ave 文件都或多或少地含有一些错误。这些错误的产生不是因为单个数据压缩和解压缩算法的问题,而是因为在压缩和解压缩后没有正确地组织好文件的内部结构。所以,正确而详细地了解各种 WAVE 文件的内部结构是成功完成压缩和解压缩的基础,也是生成特有音频压缩格式文件的前提。 最基本的WAVE 文件是 PCM(脉冲编码调制)格式的,这种文件直接存储采样的声音数据没有经过任何的压缩,是声卡直接支持的数据格式,要让声卡正确播放其它被压缩的声音数据,就应该先把压缩的数据解压缩成 PCM 格式,然后再让声卡来播放。 1.Wave 文件的内部结构 WAVE 文件是以 RIFF(Resource Interchange File Format,"资源交互文件格式")格式来组织内部结构的。RIFF 文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,最顶端是一个“RIFF”块,下面的每个块有“类型块标识(可选)”、“标志符”、“数据大小”及“数据”等项所组成,块的结构如表 1 所示: 上面说到的“类型块标识”只在部分chunk 中用到,如“WAVE”chunk 中,这时表示下面嵌套有别的chunk,当使用了“类型块标识”时,该 chunk 就没有别的项(如块标志符,数据大小等),它只作为文件读取时的一个标识。先找到这个“类型块标识”,再以它为起来读取它下面嵌套的其它chunk。 每个文件最前端写入的是RIFF 块,每个文件只有一个RIFF 块。从表2 中可以看出它的结构: 非PCM 格式的文件会至少多加入一个“fact”块,它用来记录数据解压缩后的大小。(注意是数据而不是文件)这个“fact”块一般加在“data”块的前面。 2.WAVEFORMAT 结构的认识 PCM 和非PCM 的主要区别是声音数据的组织不同,...