ADPCM压缩算法

WAV系列之二:ADPCM编解码原理及代码实现 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 (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压缩算法 ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用AD 阅读详情

相关推荐

Pythia: A Customizable Hardware Prefetching Framework Using Online Reinforcement Learning——“预取”论文解读

参考传送门: 1. Hardware Prefetching笔记 2. 全球百科——缓存预取 3. 百度百科——缓存数据预期技术 目录0. 什么是Hardware Prefetching(本节内容不包括在论文中)1. 简介1.1 关于Hardware Prefetching的一些关键信息1.2 现阶段方法的缺陷1.3 论文团队的目标1.4 核心思想2. 必要的背景知识介绍2.1 强化学习(Reinforcement learning)2.2 为什么说强化学习是一个好的解决思路3. 解决方法与思路3.1 Py

Pinkgranite86的博客 2167

ADPCM移植指南

ADPCM是一种音频压缩算法,4位的压缩率,即原文件大小为16KiB的话,压缩完是4KiB。这个算法一般是C语言版本在网上公开的。因为需要将其用在js语言中,故对其做了移植,这里记录移植过程和思路,也属于工作总结。 选择一段大众的音频win7.wav 我一般喜欢使用win7.wav,其为Windows 7开机音乐,比较不失一般性。 体验ADPCM压缩 一般地,了解一个新东西一般是在做任何编程之前先...

Android/Linux的专栏 3645

python docx设置标题中文字体rPr.rFonts.set(qn(‘w:eastAsia‘),u‘黑体‘),报错‘NoneType‘ object has no attribute ‘set‘

一、我的代码: 因为要编一个报告自动化生成的代码,所以用了python docx,在设置标题自己写了一段代码,要求将标题设置成:一级标题 黑体 小四 from docx import Document from docx.oxml.ns import qn from docx.shared import Pt def add_Head(document, level, text, font, size): # document word对象 # level 几级标题 # text 标题内容 # f

qq_40272386的博客 8856

ADPCM音频压缩

音频数据通常需要占用大量的储存空间,或者在传输时占用大量的信道带宽。可以通过特定的压缩算法压缩这些音频数据,从而减少在储存、传输时的音频数据量。ADPCM就是这样一种针对音频的压缩算法。

huang20083200056的专栏 1万+

从图片到3D模型:用Tripo+Unity打造AI建模流水线(避坑指南)

本文详细介绍了如何利用Tripo和Unity构建AI驱动的3D建模流水线,从图片到3D模型的高效转换。通过文生模型和图生模型的双模系统,开发者可以大幅提升建模效率,适用于游戏开发和数字内容创作。文章还提供了环境配置、图片预处理、批量生成等实用技巧,帮助开发者避开常见陷阱。

weixin_27024175的博客 614

Power Peofiler Kit II 的功耗工具简单上手入门使用

这里仅仅简单记录一下Power Peofiler Kit II 的简单使用,使之快速上手使用起来。官网说明:https://www.nordicsemi.cn/tools/ppk2/上位机软件默认你已经下载好了。

久新的博客 2181

ADPCM 音频压缩算法

ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPC

fengcq126的专栏 1万+

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 45

MSP430嵌入式语音录放:ADPCM压缩算法与片上信号链实战

在嵌入式系统开发中,音频数据处理常面临存储空间与功耗的严格限制。差分脉冲编码调制(DPCM)及其自适应版本ADPCM,通过存储信号差值并动态调整量化步长,实现了高效的语音压缩。这种算法将数据量缩减至原始的四分之一,同时保持较高语音质量,特别适合资源受限的微控制器。其技术价值在于以较低计算复杂度实现了实时音频处理,无需专用DSP核。在工程实践中,这广泛应用于便携式录音设备、智能门铃、物联网传感器节点等场景。本文以德州仪器MSP430系列MCU为例,详细解析如何利用其集成的ADC、DAC等外设构建完整片上信号链

weixin_33747129的博客 410

工程师必看:如何用定时截尾试验快速验证产品MTBF(附真实案例解析)

本文为硬件工程师详细解析了如何运用定时截尾试验快速验证产品MTBF(平均无故障工作时间)。通过七步实战法,结合工业物联网网关的真实案例,阐述了从参数设定、试验执行到结果判读的完整流程,并提供了MATLAB脚本实现自动化计算与可视化,帮助工程师在有限时间内科学评估产品可靠性。

weixin_29243063的博客 494

大学生作业:80C51存储器数据传输实验:基本指令和数据传送

大学生作业:80C51存储器数据传输实验,报价 200 文章目录实验一、80C51存储器数据传输实验实验目的:实验内容一:基本指令实验内容二:数据传送 实验一、80C51存储器数据传输实验 实验目的: 熟悉软件的集成开发环境 掌握单片机软件设计流程,掌握存储器结构及各窗口之间的联系 掌握内部数据存储器、外部数据存储器的数据传送特点和应用; 实验内容一:基本指令 用三种方法实现将累加器A内容改为20H ORG 0000H LJMP MAIN ORG 0030H MAIN: ;方法一使用寄

weixin_54707168的博客 5103

Adpcm编解码

ADPCM压缩算法 ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为

Tech is Online(物联网技术传播) 7269

OpenClaw对接本地大模型:Llama3/Qwen/ChatGLM全适配,完全私有化部署

OpenClaw对接本地大模型,是企业级AI智能体落地的必经之路——它不仅解决了数据隐私和合规问题,还能大幅降低成本、提升响应速度、实现定制化。这篇文章我给大家完整拆解了两套部署方案:Ollama(新手首选,5分钟搞定)和vLLM(生产环境首选,高性能),覆盖了Llama3/Qwen/ChatGLM三大主流模型,还有真实的落地案例、高级优化、踩坑避坑指南,看完你就能零代码完成完全私有化的部署。从零开发自定义工具,给OpenClaw添加专属业务能力;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 808

adpcm算法

ADPCM压缩算法     ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件...

wush121 376

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ADPCM WAVE文件的压缩与解压缩

ADPCM WAVE文件的压缩与解压缩

扬帆起航 1029

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ADPCM语音压缩算法在PIC单片机上的实现与优化

自适应差分脉冲编码调制(ADPCM)是一种高效的语音压缩技术,其核心原理是利用语音信号的时域相关性,通过差分编码和自适应量化实现4:1压缩比。该技术通过预测当前样本与历史样本的差值,显著减小量化动态范围,在保持语音质量的同时降低存储和传输需求。在嵌入式系统如PIC单片机中实现时,需要特别关注定点数运算、查表优化和时序控制等关键技术点。典型应用包括语音温度计等需要语音合成的物联网设备,通过PWM输出和巴特沃斯滤波器实现高质量音频重建。开发过程中涉及的热点技术如IMA步长表设计和双缓冲机制,能有效解决实时语音播

weixin_30356433的博客 374

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WAV文件解析与ADPCM编码实战:从音频格式到压缩算法的完整实现

音频编码是数字信号处理的基础技术,通过将模拟声音转换为数字信号实现存储与传输。其核心原理是利用采样、量化和编码技术,在保证音质的前提下减少数据量。ADPCM(自适应差分脉冲编码调制)作为一种经典的有损压缩算法,通过差分预测和自适应量化步长调整,在嵌入式系统和实时通信中展现出显著的技术价值。该算法特别适用于资源受限场景,如电话语音、游戏音效等对实时性要求高的应用。本文以WAV文件解析为切入点,深入剖析ADPCM编码的完整实现流程,涵盖字节序处理、块结构解析等关键环节,并提供了可运行的C语言实例,帮助开发者掌握

weixin_29233333的博客 342

ADPCM与PCM的区别 以及wave文件的压缩与解压缩

转自:http://blog.youkuaiyun.com/nogodoss/article/details/10399243 http://blog.youkuaiyun.com/kindyb/archive/2005/10/13/503024.aspx 一、概述:   本文叙述了如何通过IMA-ADPCM压缩和解压缩算法来完成从IMA-ADPCM文件转换为PCM文件的过程。主要包括的内容

forfuture3513的博客 6848

PCM跟ADPCM的一些笔记

这两天调ST的一颗PDM MIC芯片,PDM转PCM是完成了,但是PCM数据量太大了不适合传输,所以在尝试ADPCM压缩。网上找了很久关于PCM压缩到ADPCM以及ADPCM解压缩到PCM的文章,很多都讲压缩的实现过程,关键是很多像我一样的喜欢拿来主义的并不感兴趣。经过几天的摸索,大概理清了一些东西,顺手记下来。正文之前还是简单说一下PCM头跟ADPCM头。实际音频采样回来都是裸的PCM数据,加上一

u013910954的博客 5708
上一篇: 在 Android 上使用 XML
下一篇: Android软件开发之盘点所有Dialog对话框大合集(一)
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值