版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#ADPCM压缩算法ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩。ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。8bits采样
2、的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit 。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。ADPCM 压缩过程首先我们认为声音信号都是从零开始的,那么需要初始化两个变量 int index=0,prev_sample=0;下面的循环将依次处理声音数据流,注意其中的 getnextsample() 应该得到一个 16bit 的采样数据,而 outputdata() 可以将计算出来的数据保存起来,程序中用到的 step_table,inde
3、x_adjust 附在后面:int index=0,prev_sample:=0;while (还有数据要处理)cur_sample=getnextsample();/ 得到当前的采样数据delta=cur_sample-prev_sample;/ 计算出和上一个的增量if (delta<0) delta=-delta,sb=8;/ 取绝对值else sb = 0 ;/ sb 保存的是符号位code = 4*delta / step_tableindex;/ 根据 steptable得到一个 0-7 的值if (code>7) code=7;/ 它描述了声音强度的变化量index
4、+= index_adjustcode ;/ 根据声音强度调整下次取steptable 的序号if (index<0) index=0;/ 便于下次得到更精确的变化量的描述else if (index>88) index=88;prev_sample=cur_sample;outputode(code|sb);/ 加上符号位保存起来有关ADPCM压缩过程更详细的信息,参见本站 ADPCM压缩过程演示程序 ADPCM 解压缩过程 接压缩实际是压缩的一个逆过程,同样其中的 getnextcode() 应该得到一个编码,,而 outputsample() 可以将解码出来的声音信
5、号保存起来。这段代码同样使用了同一个的 setp_table 和 index_adjust() 附在后面:int index=0,cur_sample=0;while (还有数据要处理) code=getnextcode();/ 得到下一个数据if (code & 8) != 0) sb=1 else sb=0;code&=7;/ 将 code 分离为数据和符号delta = (step_tableindex*code)/4+step_tableindex/8;/ 后面加的一项是为了减少误差if (sb=1) delta=-delta;cur_sample+=delta; /
6、计算出当前的波形数据if (cur_sample>32767) output_sample(32767);else if (cur_sample<-32768) output_sample(-32768);else output_sample(cur_sample);index+=index_adjustcode;if (index<0) index=0;if (index>88) index=88;有关ADPCM解压过程更详细的信息,参见本站 ADPCM解压过程演示程序附表 int index_adjust8 = -1,-1,-1,-1,2,4,6,8;int ste
7、p_table89 = 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,1166,1282,1411,1552,1707,1878,2066,2272,2499,2749,3024,3327,3660,4026,4428,4871,5358,5894,6484,7132,7845,8
8、630,9493,10442,11487,12635,13899,15289,16818,18500,20350,22385,24623,27086,29794,32767特殊ADPCM压缩根据ADPCM压缩/解压原理,本站提供了 3bits ADPCM 和 4bits ADPCM 压缩程序,另外还提供 ADPCM系数表设计程序 下载。AUD文件结构关于 WestWood 的 .AUD 文件,结构比较简单,这里顺带提一下,有兴趣可以自己写处理AUD文件的程序,其 8bit 的声音压缩算法尚不知晓,但用的最广泛的 16bit 声音正是用 ADPCM 压缩,每个 AUD 文件都有一个文件头,结构如
9、下:structunsigned short int samplespersec ; / 频率long int size; / 除掉文件头的大小long int outsize;/ 输出数据大小 (通常是 4 倍)unsigned char flags; / 位 0 描述是否立体声,位 1 描述是否 16 bitunsigned char type ; / 1=WW 压缩,99=IMA ADPCMAUD文件的声音信号是按块存放的,每块大约 512 字节,每一块都有一个块头结构:structunsigned short int size; / 压缩过的数据大小unsigned short int
10、 outsize; / 输出数据大小 (通常是 4 倍)long int id; / 永远是 0x0000DEAF¥ADPCM - 名称Adpcm是自适应差分脉冲编码调制的简称,最早使用于数字通信系统中。该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,在32kbps8khz速率上能够给出网络等级话音质量。 编辑本段 回目录 ADPCM - 用途现在我们使用的是IMA ADPCM算法,该算法中对量化步长的调整使用了简单的查表方法,对于一个输入的PCM值X(n),将其与前一时刻的X(n-1)预测值做差值 得到d(n),然后根据当前的量化步长对
11、d(n)进行编码,再用此sample点的编码值调整量化步长,同时还要得到当前sample点的预测值供下一sample点编码使用。通过此算法可将样点编码成4bit的码流,一个符号位和三个幅度位。该算法较简单,通过查表简化了运算。对于编码后的数据我们采用了wav文件格式,该格式对编码后的数据流进行了包装,由文件头和数据码流组成,文件头中指出了音频数据所采用格式、采样率、比特率、块长度、比特数及声道数等信息。数据码流以块为单位,块头指出了该块起始的预测值和index值,码流中每byte的高四位和低四位分别对应一个PCM。当前该算法以其简单实用的特点广泛应用到数字音乐盒和数字录音笔中。 刚写的一个8位
12、ADPCM压缩程序,秀一下. 问.PUBLIC _stAtei,_stAteo,_indextAble,_stepsizetAble /定义全局变量S_STATE:.STRUCT &
13、#160;PrevVAlue:.DW 1 DUP(?) PrevIndex:.DW 1 DUP(?).ENDS.DATA_indextAble: .DW -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8_stepsizetAble: .DW 4, 5, 6, 7, 8, 9, 11,13,15,17,19, 22, 25,28, 31, 34,38, 42, 46, 50, 54, 59
14、, 64, 69, 74, 79, 85, 91, 97, 103, 109,116,123,127.RAM_stAtei:.S_STATE_stAteo:.S_STATE.DEFINE STEP 5 .DEFINE BUFOSTEP 4.DEFINE BUFISTEP 3.DEFINE SIGN
15、0; 2.DEFINE LEN 11.DEFINE OUTDATA 10.DEFINE INDATA 9.CODE.PUBLIC _ADPCM_ENCODE,_ADPCM_DECODE_ADPCM_ENCODE: .PROC
16、 push bp to sp sp-=6 bp=SP+1 r1=_stAtei.PrevIndex r1+=_stepsizetAble R1=r1 BP+STEP=R1
17、;R1=0 BP+BUFOSTEP=R1 /BUFOSTEP BP+BUFISTEP=R1 /BUFISTEPT1: R1=BP+LEN cmp R1,0 JNE LOOP PC= EXITLOOP: R4=BP+INDATA R2
18、=R4 R3=BP+BUFISTEP TEST R3,1 JNZ LOW_BIT R2=R2 LSR R2 R2=R2 LSR R2 JMP T2LOW_BIT:
19、60; R2&Amp;=0x00FF R1-=1 R4+=1 BP+INDATA=R4 BP+LEN=R1T2: R3=R3 XOR 0xFFFF B
20、P+BUFISTEP=R3 /R1,R3,R4 FREE; R1=0 R3=_stAtei.PrevVAlue R2-=R3 JSC T3 R1=8 R2=-R2
21、0; /R2 DIFF T3: /R1 DELTA BP+SIGN=R1 R3=BP+STEP
22、; /R3 STEP R4=R3 LSR 3 /R4 vpdiff CMP R2,R3 JNGE T4 R1=4 R2-=R3 R4+=
23、R3T4: R3=R3 LSR 1 CMP R2,R3 JNGE T5 R1|=2 R2-=R3 R4+=R3T5: R3=R3 LSR 1 CMP R2,R3 JNGE T6
24、0; R1|=1 R4+=R3T6: /R2 R3 FREE r3=_stAtei.PrevVAlue R2=BP+SIGN TEST R2,0x8
25、0;JNZ T7 R3+=R4 JMP T8T7: R3-=R4T8: CMP R3,127 JLE T9 R3=127T9: CMP R3,-128 JGE T10 R3=-128T10:_stAtei.PrevVAlue=R3&
26、#160; R1|=R2 R2=R1+_indextAble R2=R2 R2+=_stAtei.PrevIndex JSC T11_1 R2=0T11_1: CMP R2,33
27、160; JLE T11 R2=33T11: _stAtei.PrevIndex=R2 R3=R2+_stepsizetAble R3=R3 BP+STEP=R3
28、60;R3=BP+OUTDATA R4=R3 R2=BP+BUFOSTEP CMP R2,0 JNE T12 R1 = R1 LSR 4 R1 = R1 ROR 4
29、160; R3=R1 JMP T15T12: CMP R2,1 JNE T13 R1=R1 LSL 4
30、160; R1=R1 LSL 4 R4|=R1 R3=R4 JMP T15T13: CMP R2,2 JNE T14
31、160; R1=R1 LSL 4 R4|=R1 R3=R4 JMP T15T14: CMP R2,3
32、60; JNE T15 R4|=R1 R3=R4 R3+=1 BP+OUTDATA=R3 R2=0
33、; BP+BUFOSTEP=R2 PC=T1T15: R2+=1 BP+BUFOSTEP=R2 PC=T1EXIT: sp+=6; pop bp from sp
34、; retf .ENDP_ADPCM_DECODE:.PROC .ENDP ADPCM简介Adpcm 是自适应差分脉冲编码调制的简称,最早使用于数字通信系统中。该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,在32kbps8khz速率上能够给出网络等级话音质量。现在我们使用的是IMA ADPCM算法,该算法中对量化步长的调整使用了简单的查表方法,对于一个输入的PCM值X(n),将其与前一时刻的X(n-1)预测值做差值 得到d(n),然后根据当前的量
35、化步长对d(n)进行编码,再用此 sample点的编码值调整量化步长,同时还要得到当前sample点的预测值供下一sample点编码使用。通过此算法可将样点编码成4bit的码流,一个符号位和三个幅度位。该算法较简单,通过查表简化了运算。对于编码后的数据我们采用了wav文件格式,该格式对编码后的数据流进行了包装,由文件头和数据码流组成,文件头中指出了音频数据所采用格式、采样率、比特率、块长度、比特数及声道数等信息。数据码流以块为单位,块头指出了该块起始的预测值和 index值,码流中每byte的高四位和低四位分别对应一个PCM。当前该算法以其简单实用的特点广泛应用到数字音乐盒和数字录音笔中。AD
36、PCM压缩算法 ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩。ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。8bit
37、s采样的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit 。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。ADPCM 压缩过程首先我们认为声音信号都是从零开始的,那么需要初始化两个变量 int index=0,prev_sample=0;下面的循环将依次处理声音数据流,注意其中的 getnextsample() 应该得到一个 16bit 的采样数据,而 outputdata() 可以将计算出来的数据保存起来,程序中用到的 step_table,i
38、ndex_adjust 附在后面:int index=0,prev_sample:=0;while (还有数据要处理)cur_sample=getnextsample();/ 得到当前的采样数据delta=cur_sample-prev_sample;/ 计算出和上一个的增量if (delta<0) delta=-delta,sb=8;/ 取绝对值else sb = 0 ;/ sb 保存的是符号位code = 4*delta / step_tableindex;/ 根据 steptable得到一个 0-7 的值if (code>7) code=7;/ 它描述了声音强度的变化量ind
39、ex += index_adjustcode ;/ 根据声音强度调整下次取steptable 的序号if (index<0) index=0;/ 便于下次得到更精确的变化量的描述else if (index>88) index=88;prev_sample=cur_sample;outputode(code|sb);/ 加上符号位保存起来ADPCM 解压缩过程 接压缩实际是压缩的一个逆过程,同样其中的 getnextcode() 应该得到一个编码,,而 outputsample() 可以将解码出来的声音信号保存起来。这段代码同样使用了同一个的 setp_table 和 index_
40、adjust() 附在后面:int index=0,cur_sample=0;while (还有数据要处理) code=getnextcode();/ 得到下一个数据if (code & 8) != 0) sb=1 else sb=0;code&=7;/ 将 code 分离为数据和符号delta = (step_tableindex*code)/4+step_tableindex/8;/ 后面加的一项是为了减少误差if (sb=1) delta=-delta;cur_sample+=delta; / 计算出当前的波形数据if (cur_sample>32767) outp
41、ut_sample(32767);else if (cur_sample<-32768) output_sample(-32768);else output_sample(cur_sample);index+=index_adjustcode;if (index<0) index=0;if (index>88) index=88;附表 int index_adjust8 = -1,-1,-1,-1,2,4,6,8;int step_table89 = 7,8,9,10,11,12,13,14,16,17,19,21,23,25,28,31,34,37,41,45,50,55,
42、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,1166,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,
43、29794,32767843*ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩。 ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。
44、8bits采样的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit 。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。 PCM是脉冲编码调制的意思。AD是自适应增量的意思。 严格说来,ADPCM不是压缩方法。他的主要思想是,用差值替代绝对值。举个例子,全班同学平均身高175CM:其中,我的身高170CM,这就是PCM方法;我的身高和平均值相比为-5cm,这就是DPCM,我的身高跟前一位同学相比为-10CM,前一位同学有多高我不知道他多高,你问他,这是
45、ADPCM。比方不是太准确,大概就是这个意思。 在大多数情况下,数据值与平均值相差不大,所以用差值替代绝对值可以节省空间。ADPCM压缩算法 作者:龙林 EMAIL:dragon_hn WEB:www.dragon- ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .A
46、UD 的大多用ADPCM 压缩。ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。8bits采样的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit 。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。ADPCM 压缩过程首先我们认为声音信号都是从零开始的,那么需要初始化两个变量 int index=0,prev_sample=0;下面的循环将依次处理
47、声音数据流,注意其中的 getnextsample() 应该得到一个 16bit 的采样数据,而 outputdata() 可以将计算出来的数据保存起来,程序中用到的 step_table,index_adjust 附在后面:int index=0,prev_sample:=0;while (还有数据要处理)cur_sample=getnextsample();/ 得到当前的采样数据delta=cur_sample-prev_sample;/ 计算出和上一个的增量if (delta<0) delta=-delta,sb=8;/ 取绝对值else sb = 0 ;/ sb 保存的是符号位c
48、ode = 4*delta / step_tableindex;/ 根据 steptable得到一个 0-7 的值if (code>7) code=7;/ 它描述了声音强度的变化量index += index_adjustcode ;/ 根据声音强度调整下次取steptable 的序号if (index<0) index=0;/ 便于下次得到更精确的变化量的描述else if (index>88) index=88;prev_sample=cur_sample;outputode(code|sb);/ 加上符号位保存起来有关ADPCM压缩过程更详细的信息,参见本站 ADPCM压缩过程演示程序 ADPCM 解压缩过程 接压缩实际是压缩的一个逆过程,同样其中的 getn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国新能源电池生产无尘车间过滤解决方案报告
- 2025中国新能源汽车市场深度分析及前景预测与投资机会报告
- 2025年及未来5年中国水泥余热发电市场发展前景预测及投资战略咨询报告
- 学前简笔画教学案例与工作计划
- 2025年及未来5年中国戊烷发泡剂行业市场深度研究及投资战略规划报告
- 电力用户分级管理制度模板
- 吉林省松原市宁江区三校2025-2026学年七年级上学期期中考试数学试卷(含答案)
- 陕西省商洛市柞水县柞水中学2025-2026学年高二上学期阶段性测评(二)物理试卷 (含解析)
- 2025年及未来5年中国幕墙铝单板行业发展前景预测及投资战略研究报告
- 快递物流包裹称重系统创新创业项目商业计划书
- 幼儿园《认识医生和护士》课件
- 5S现场管理完整版课件
- 2020-2021学年重庆市大渡口区九年级(上)期末数学试卷 (解析版)
- 大学生城市地下空间工程职业生涯规划
- 彩票销售人员工作汇报
- 小萝卜头的故事演讲稿3分钟三篇
- 项目部经理生涯人物访谈报告
- 邀请外国人来华的企业须提供的外国人行程表(样本)
- 汽车4s店展厅设计方案
- 2022-2023九上期中北京北师大实验中学初三(上)数学试题
- (医学课件)皮肤结核病课件
评论
0/150
提交评论