- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ADPCM格式说明的
ADPCM WAVE文件的压缩与解压缩[原创]
分类:?程序设计:经典算法与技术赏析2005-10-13 21:15?8342人阅读?评论(8)?收藏?举报
一、概述: 本文叙述了如何通过IMA-ADPCM压缩和解压缩算法来完成从IMA-ADPCM文件转换为PCM文件的过程。主要包括的内容有:PCM和IMA-ADPCM WAVE文件内部结构的介绍,IMA-ADPCM压缩与解压缩算法,以及如何生成特有的音频压缩格式文件等三方面的内容。
二、WAVE文件的认识 WAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为*.wav。wave文件有很多不同的压缩格式,而且现在一些程序生成的wave文件都或多或少地含有一些错误。这些错误的产生不是因为单个数据压缩和解压缩算法的问题,而是因为在压缩和解压缩后没有正确地组织好文件的内部结构。所以,正确而详细地了解各种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的主要区别是声音数据的组织不同,这些区别可以通过两者的WAVEFORMAT结构来区分。下面以PCM和IMA-ADPCM来进行对比:
WAVE的基本结构WAVEFORMATEX结构定义如下:
typedef struct
{
WORD wFormatag;??//编码格式,包括WAVE_FORMAT_PCM,//WAVEFORMAT_ADPCM等
WORD??nChannls;???????//声道数,单声道为1,双声道为2;
DWORD nSamplesPerSec;//采样频率;
DWORD nAvgBytesperSec;//每秒的数据量;
WORD??nBlockAlign;//块对齐;
WORD??wBitsPerSample;//WAVE文件的采样大小;
WORD??sbSize;????????//PCM中忽略此值
}WAVEFORMATEX;
?
PCM的结构就是基本结构;
?
IMAADPCMWAVEFORMAT结构定义如下:
Typedef struct
{
????WAVEFORMATEX wfmt;
????WORD nSamplesPerBlock;
}IMAADPCMWAVEFORMAT;
?
IMA-ADPCM的wfmt-cbsize不能忽略,一般取值为2,表示此类型的WAVEFORMAT比一般的WAVEFORMAT多出2个字节。这两个字符也就是nSamplesPerBlock。
?
3.“fact”chunk的内部组织
?
在非PCM格式的文件中,一般会在WAVEFORMAT结构后面加入一个“fact”chunk,结构如下:
typedef struct{
????char[4];??????????//“fact”字符串
???????DWORD chunksize;
???????DWORD datafactsize;????//数据转换为PCM格式后的大小。
}factchunk;
datafactsize是这个chunk中最重要的数据,如果这是某种压缩格式的声音文件,那么从这里就可以知道他解压缩后的大小。对于解压时的计算会有很大的好处!
?
4.“dat
您可能关注的文档
- 7 单片机原理及应用的(第七章输入输出扩展).ppt
- 7-2 四种负反馈放大的电路的分析.ppt
- 7-12操作题答案的.ppt
- 7-3 理想气体的压强的公式.ppt
- 7-7离散系统的数字康呢制器.ppt
- 7-9 习题课的.ppt
- 7-ELEVEn的扩张法则的.doc
- 7-_结型场效应晶体沟能.ppt
- 7-9个月的.ppt
- 7.1-7.4 数据结构的.ppt
- 人教版英语5年级下册全册教学课件.pptx
- 部编人教版2年级上册语文全册教学课件含单元及专项复习.pptx
- 人教版8年级上册英语全册教学课件(2021年8月修订).pptx
- 教科版(2017版)6年级上册科学全册课件+课时练.pptx
- 人教版PEP版6年级英语下册全册教学课件(2022年12月修订).pptx
- 部编人教版2年级下册语文全册课件(2021年春修订).pptx
- 人教版数学6年级下册全册教学课件(2023年教材).pptx
- 湘少版5年级下册英语全册教学课件(2021年春修订).pptx
- 人教PEP4年级下册英语全册教学课件 [2}.pptx
- 人教版6年级上册英语全册教学课件.pptx
文档评论(0)