- 7
- 0
- 约 17页
- 2017-06-15 发布于湖北
- 举报
ADPCM压缩算法
ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩。 ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。 8bits采样的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit 。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。
ADPCM 压缩过程
首先我们认为声音信号都是从零开始的,那么需要初始化两个变量
int index=0,prev_sample=0;
下面的循环将依次处理声音数据流,注意其中的 getnextsample() 应该得到一个 16bit 的采样数据,而 outputdata() 可以将计算出来的数据保存起来,程序中用到的 step_table[],index_adjust[] 附在后面:
int index=0,prev_sample:=0;
while (还有数据要处理) { cur_sample=getnextsample(); // 得到当前的采样数据 delta=cur_sample-prev_sample; // 计算出和上一个的增量 if (delta0) delta=-delta,sb=8; // 取绝对值 else sb = 0 ; // sb 保存的是符号位 code = 4*delta / step_table[index]; // 根据 steptable[]得到一个 0-7 的值 if (code7) code=7; // 它描述了声音强度的变化量 index += index_adjust[code] ; // 根据声音强度调整下次取steptable 的序号 if (index0) index=0; // 便于下次得到更精确的变化量的描述 else if (index88) index=88; prev_sample=cur_sample; outputode(code|sb); // 加上符号位保存起来 }
ADPCM 解压缩过程
接压缩实际是压缩的一个逆过程,同样其中的 getnextcode() 应该得到一个编码,,而 outputsample() 可以将解码出来的声音信号保存起来。这段代码同样使用了同一个的 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_table[index]*code)/4+step_table[index]/8; // 后面加的一项是为了减少误差 if (sb==1) delta=-delta; cur_sample+=delta; // 计算出当前的波形数据 if (cur_sample32767) output_sample(32767); else if (cur_sample-32768) output_sample(-32768); else output_sample(cur_sample); index+=index_ad
您可能关注的文档
- ACS800 电路板认识.ppt
- ActiveX数字签名.pdf
- AC无线管理系统平台使用说明书.pdf
- AD6.9快捷键.doc
- AD809HS-固晶机培训.doc
- AD7606中文电路描述.pdf
- adams学习心得.docx
- adams函数使用方法介绍.ppt
- additives.ppt
- ADCP演示文稿.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
原创力文档

文档评论(0)