adpcm的压缩和解压缩实现
来源:互联网 发布:网络脆弱性扫描 编辑:程序博客网 时间:2024/05/22 06:17
前一博客介绍了adpcm的原理。这篇是具体实现。看了网上的资料,大部分都是没有提供具体实现。这里免费提供(暂时先提供解码部分)
static int index_adjust[16] = {-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8};
static 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
};
pre_sample = 0;
index = 0; 从0开始
void adpcmDecode(unsignedchar * src, int len, unsigned char * des, int * pre_sample,int * index) {
int i;
int code;
int sb;
int diff;
short * tempDes = (short *)des;
for (i = 0;i < 2*len;i ++){
code = src[i >> 1] & 0x0f; ////////
if ((code &8) != 0)
sb =1;
else
sb =0;
code &=7;
diff = (step_table[* index] * code) /4 + step_table[* index] / 8;
if (sb)
diff = -diff;
* pre_sample += diff;
if (* pre_sample >32767)
* pre_sample =32767;
elseif (* pre_sample < -32768)
* pre_sample = -32768;
tempDes[i] = * pre_sample;
* index +=index_adjust[code];
if (* index <0)
* index =0;
if (* index >88)
* index =88;
}
}
- adpcm的压缩和解压缩实现
- adpcm的压缩和解压缩实现
- ADPCM-PCM 的压缩
- C#实现文件的压缩和解压缩
- C#实现文件的压缩和解压缩
- 文件的压缩和解压缩
- 压缩和解压缩的方法
- 压缩和解压缩的类
- 字符串的压缩和解压缩
- urlno的压缩和解压缩
- 文件的压缩和解压缩
- zipfile的压缩和解压缩
- Linux的压缩和解压缩
- asp.net在线压缩和解压缩的实现
- asp.net在线压缩和解压缩的实现
- 用ASP.NET实现文件的在线压缩和解压缩
- 用ASP.Net实现文件的在线压缩和解压缩
- asp.net在线压缩和解压缩的实现v
- JS控制阿拉伯数字转为中文大写
- 关于AIX小型机 Sybase ASE 12.5数据库的惊险瞬间
- collection接口之Arraylist,vector,Linkedlist
- Bundler
- Linux Commands for Beginners-- Echo And Creating Variables
- adpcm的压缩和解压缩实现
- memory_free--test
- find_new_reaper
- 2012-05-14 22:12 xheditor使用方法
- C#实现浏览文件后直接显示图片
- POJ1661——Help Jimmy(关于动态规划)
- 清理/tmp目录下文件
- mini2440 移植linux2.6.30.10 及yaffs2文件系统 2011-03-12 10:17:18
- Delph cxGrid操作