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 (delta<0) delta=-delta,sb=8; // 取绝对值
else sb = 0 ; // sb 保存的是符号位
code = 4*delta / step_table[index]; // 根据 steptable[]得到一个 0-7 的值
if (code>7) code=7; // 它描述了声音强度的变化量
index += index_adjust[code] ; // 根据声音强度调整下次取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_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_sample>32767) output_sample(32767);
else if (cur_sample<-32768) output_sample(-32768);
else output_sample(cur_sample);
index+=index_adjust[code];
if (index<0) index=0;
if (index>88) index=88;
}
附表
int index_adjust[8] = {-1,-1,-1,-1,2,4,6,8};
int step_table[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,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,29794,32767
}
没有合适的资源?快使用搜索试试~ 我知道了~
ADPCM.rar_ADPCM ARM_adpcm 波形
共1个文件
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 68 浏览量
2022-09-20
17:30:29
上传
评论
收藏 1KB RAR 举报
温馨提示
ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩
资源详情
资源评论
资源推荐
收起资源包目录
ADPCM.rar (1个子文件)
ADPCM.C 3KB
共 1 条
- 1
JonSco
- 粉丝: 90
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0