资源描述:
《音频的压缩与播放》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、音频的压缩与播放作者:刘加成班级:2008111学号:20082387摘要:一、音频的压缩——adpcm压缩算法。1、Adpcm音频压缩算法简介2、Adpcm压缩源代码3、当今音频压缩格式简介二、音频的播放——在VB中利用API函数实现媒体音频的播放。1)使用对象链接与嵌入技术OLE(ObjectLinkedandEmbedded,目标链接与嵌入)。2)使用MCI(MediaControlInterface,媒体控制接口),MCI是多媒体设备和多媒体应用软件之间进行与设备无关的沟通桥梁。3)通过调用API函数实现媒体音频播放。Windows的API函数按不
2、同类别多达几千个,其中有一组与多媒体相关的函数,使用API设计多媒体应用程序就是通过调用这一组函数来实现的。一、音频的压缩1、ADPCM(自适应差分PCM) 类型:Audio 制定者:ITU-T 所需频宽:32Kbps 特性:ADPCM(adaptivedifferencepulsecodemodulation)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能比较好的波形编码。它的核心想法是: ①利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值; ②使用过去的样本
3、值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。 优点:算法复杂度低,压缩比小(CD音质>400kbps),编解码延时最短(相对其它技术) 缺点:声音质量一般ADPCM(ADPCMAdaptiveDifferentialPulseCodeModulation),是一种针对16bit(或者更高)声音波形数据的一种有损压缩算法,它将声音流中每次采样的16bit数据以4bit存储,所以压缩比1:4.而压缩/解压缩算法非常的简单,所以是一种低空间消耗,高质量声音获得的好途径。8bits采样的声音人耳是可以勉强接受的,而16bit采样的声音
4、可以算是高音质了。ADPCM算法却可以将每次采样得到的16bit数据压缩到4bit。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。2、adpcm音频压缩算法:#include#ifndef__STDC__#definesigned#endifstructadpcm_state{shortvalprev;/*Previousoutputvalue*/charindex;/*Indexintostepsizetable*/};/*IntelADPCMstepvariationtable*
5、/staticintindexTable[16]={-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8,};staticintstepsizeTable[89]={7,8,9,10,11,12,13,14,16,17,19,21,23,25,28,31,34,37,41,45,50,55,60,66,73,80,88,97,107,118,130,143,157,173,190,209,230,253,279,307,337,371,408,449,494,544,598,658,724,796,876,963,1060,116
6、6,1282,1411,1552,1707,1878,2066,2272,2499,2749,3024,3327,3660,4026,4428,4871,5358,5894,6484,7132,7845,8630,9493,10442,11487,12635,13899,15289,16818,18500,20350,22385,24623,27086,29794,32767};/*-------------adpcm_ecoder---------------------------------------------*/voidadpcm_coder(
7、indata,outdata,len,state)shortindata[];charoutdata[];intlen;structadpcm_state*state;{short*inp;/*Inputbufferpointer*/signedchar*outp;/*outputbufferpointer*/intval;/*Currentinputsamplevalue*/intsign;/*Currentadpcmsignbit*/intdelta;/*Currentadpcmoutputvalue*/intdiff;/*Differencebetw
8、eenvalandvalprev*/intstep;/*Steps