adpcm的压缩和解压缩实现
转自: http://blog.csdn.net/nogodoss/article/details/10399403
前一博客介绍了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(unsigned char * 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;
else if (* 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的压缩和解压缩实现相关推荐
- 【毕业设计/matlab系列】基于ADPCM压缩标准的音频压缩和解压缩实现【含Matlab源码】
Date:2022.6.2 文章目录 代码获取方式 1.前言 2.算法原理 3.实现效果 4.核心matlab代码 代码获取方式 方式一:订阅付费专栏 <毕业设计代码进阶版>,可获取该付费 ...
- 【毕业设计系列】045:基于ADPCM压缩标准的音频压缩和解压缩实现
Date:2022.6.2 文章目录 前言 1.算法原理 2.实现效果 3.核心matlab代码 前言 在大学毕业设计的时候,在毕业设计中实现了<基于ADPCM压缩标准的音频压缩和解压缩实现&g ...
- asp在线压缩和解压缩文件(文件夹)
asp在线压缩和解压缩文件(文件夹) <% '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ '\\ '\\ 1. c:\ ...
- java 解压与压缩代码_Java实现多文件压缩和解压缩代码详解
Java实现多文件压缩和解压缩代码 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...
- Java 的zip压缩和解压缩
Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...
- Linux之压缩和解压缩命令
Linux之压缩和解压缩命令 1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz .bz2 .zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩 .zip的压缩包需要使 ...
- asp.net在线压缩和解压缩的实现
我们经常会遇到批量上传的问题,也会遇到将某个目录下所有文件都上传到服务器上的问题.那么,如何解决此类问题呢?以前的技术一般采用ActiveX等方式,这里我采用SharpZlib来实现,听说VS2005 ...
- linux下文件的压缩和解压缩
linux下文件的压缩和解压缩 目录 1.压缩 2.解压缩 3.归档工具 一. 压缩 compress: -d:解压缩,相当于uncompres-c:结果输出至标准输出,不删除原文件-v:显示详情 - ...
- Qt中用QuaZip来压缩和解压缩文件
1.简介 QuaZIP是使用Qt,C++对ZLIB进行简单封装的用于压缩ZIP以及解压缩ZIP的开源库.如果你的Qt项目当中用到了压缩以及解压缩ZIP的话你可以考虑选择使用它. 官方主页:http:/ ...
- Centos之压缩和解压缩命令
常用压缩格式:.zip .gz .bz2 常用压缩格式:.tar.gz .tar.bz2 1.zip格式压缩 zip压缩文件名 源文件 压缩文件 zip -r 压缩文件名 源目录 压缩目录 [roo ...
最新文章
- Hadoop–Task 相关
- 如何把springboot项目部署到tomcat上
- html引用本地图片不能是桌面的,Img标签与本地文件:/// URL不显示在Microsoft Edge Web浏览器...
- vb.net 读写文件
- 使用urllib2库实现有道翻译
- byte数组添加数据_C#基于S7协议实现对PLC中DB块字节数据的获取及自定义textbox实现数据解析...
- 充满男性荤段子的开源软件 DICSS 引发争议
- 使用Quartus进行功能仿真时出现“testbench_vector_input_file option does not exist”的解决方法
- Unity Animation 的使用
- mac 删除文件夹里所有的.svn文件
- python毕业设计作品基于django框架 景区购票系统毕设成品(6)开题答辩PPT
- 一周信创舆情观察(2.1~2.7)
- Nginx报错failed (13: Permission denied)
- android 魔力锁屏源码,打造最炫手机锁屏桌面 10款安卓魔力锁屏主题推荐
- 初识c语言加操作系统
- mong 的 安装 和测试
- 天翼云服务器共享文件夹,天翼云Windows操作解答
- windows 记得pin码 忘记登录密码
- Linux mysql5.7安装-超级详细
- DD-WRT 客户端模式设置 暨添加无线连接功能
热门文章
- python 银行数据分析_银行业务概述_Python数据分析行业案例课程--信用评分方法_数据挖掘与分析视频-51CTO学院...
- 排产易!APS系统如何选型?(上)
- Newstart HA常见使用场景
- 亚商投资顾问 早餐FM/1130物流需求延续逐步恢复态势
- 在pycharm中%matplotlib inline报错!!!
- Angelababy 首攻好莱坞 获封最闪亮新星
- IC617工艺库安装问题
- python 之Entry
- 利用python处理Excel表格中的销售数据
- 【kafka】三、kafka命令行操作