WAV格式中常见的压缩编码(compression code)

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道。标准格式化的WAV文件采样频率为44100Hz,采样比特为16bit,因此标准的(这里说标准,只是一种广泛采用的波形音频方案)WAV文件和CD音频格式一样,也是44.1KHz的取样频率,16位量化数字,在声音文件质量和CD音频相差无几。

 下面由useiee详细介绍一下WAV格式文件常见的10种压缩码形式(Compression Code)。[1]

 1. PCM/uncompressed
  Pulse Code Modulation,脉码调制信号。是模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件。
  PCM脉码调制数字音频格式是70年代末发展起来的,80年代初由飞利浦和索尼公司共同推出。PCM的音频格式也被DVD-A所采用,它支持立体声和5.1环绕声,1999年由DVD讨论会发布和推出的。
  PCM的采样精度从14bit发展到16bit、18bit、20bit直到24bit;采样频率从44.1kHz发展到192kHz。到目前为止PCM这种单纯依赖提高采样规格的技术,其可改进的地方已经越来越来小。只是简单的增加PCM比特率和采样率,不能从底层改善它的根本问题。

 2. Microsoft ADPCM
  Adaptive Differential Pulse Code Modulation,自适应差分脉码调制信号。是一种数据压缩算法,该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化。即对不同水平的差分序列,用一个相应参数delta作为平稳化参数去除差分序列的幅值,使得差分编码自动的适应数据间大幅度的跳跃。
  Microsoft ADPCM是微软标准的WAV格式文件采用ADPCM编码的文件,区分于IMA ADPCM文件。MS-ADPCM编码是分块的,每块有块头信息和编码数据。对单声道信号,每块由7个字节组成,byte0是块预测器predictor,byte1-2是初始delta,byte3-4和byte5-6分别是两个采样。[2]
  
 3. ITU G.711 a-law [3]
  G.711标准也是PCM码的一种。是国际电报联盟(International Telegraph Union, ITU)订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8kHz。它利用一个 64kbit/s 未压缩通道传输语音讯号。起压缩率为1:2,即把16位数据压缩成8位。G.711是主流的波形声音编解码器。
  G.711 标准下主要有两种压缩算法。一种是?μ-law algorithm (又称μ-law),主要运用于北美和日本;另一种就是a-law algorithm,主要运用于欧洲和世界其他地区。其中,a-law是特别设计用来方便计算机处理的。

 4. ITU G.711 µ-law
  G.711标准下的另一种压缩算法,主要运用于北美和日本,美国电话格式(CCITT G.711)就采用这种算法。

 5. IMA ADPCM
  IMA是ADPCM中使用较多的一种算法。该算法中对量化步长的调整使用了简单的查表方法,对于一个输入的PCM值X(n),将其与前一时刻的X(n-1)预测值做差值得到d(n),然后根据当前的量化步长对d(n)进行编码,再用此sample点的编码值调整量化步长,同时还要得到当前sample点的预测值供下一sample点编码使用。通过此算法可将样点编码成4bit的码流,一个符号位和三个幅度位。该算法较简单,通过查表简化了运算。编码后采用WAV文件格式,对编码后的数据流进行了包装,由文件头和数据码流组成,文件头和标准WAV格式文件一样,指出了音频数据所采用格式、采样率、比特率、块长度、比特数及声道数等信息。数据码流以块为单位,块头指出了该块起始的预测值和index值,码流中每byte的高四位和低四位分别对应一个PCM。当前该算法以其简单实用的特点广泛应用到数字音乐盒和数字录音笔中。

 6. ITU G.723 ADPCM (Yamaha)
  G.723是ITU在1996年制订成型的一种多媒体语音编解码标准。其典型应用包括VoIP服务、H.324视频电话、无线电话、数字卫星系统、数电倍增设备(DCME)、公共交换电话网(PSTN)、ISDN及各种多媒体语音信息产品。G.723标准传输码率有5.3kbit/s和6.3kbit/s两种,在编程过程中可随时切换。该标准主要包含了编码算法和解码算法。原理是:从采集的语音信号中解析出声道模型参数,构造一个合成滤波器,采用合适的激励源激励,编码传输的参数主要是激励源与合成滤波器的参数。5.3kbit/s的编码器采用代数码线预测激励(ACELP);6.3kb/s的编码器则采用多脉冲最大似然量化(MP-MLQ)激励。根据传输编码参数,可重构激励源与合成滤波器进行解码,还原出来的数字语音信号经D/A转换器转换成模拟语音信号。
  G.723算法对语音信号有很好的编解码效果,同时也可处理音乐和其它声音信号,典型输入是64kb/s(8k×8)或128kbit/s(8k×16)的A-law或µ-law的PCM采样语音信号。每次处理一帧语音信号,每帧240个采样点(30ms)。在5.3kbit/s的码率下,每帧语音被压缩成20个字节传输;在6.3kbit/s的码率下,每帧语音被压缩成24个字节传输。

 7. GSM 6.10 [4]
  是我们熟知的全球移动通讯系统(Global System for Mobile communications)定义的一种音频编解码标准。广泛应用于无线通信设备如手机、无线通讯终端中。音频信号被压缩至介于5.6kbit/s和13kbit/s之间,这两种码率被分别叫做半率(Half Rate)和全率(Full Rate),最初大部分只有这两种码率的编码。编码基于线性预测编码算法(Linear Predictive Coding, LPC)。GSM 6.10除了在比特率上有很出色的表现外,这种编码的音频信号在空气信道中传输有着高保真度,因此广泛使用在无线通信设备的语音信号中。
  在1997年,GSM进一步开发出了一种增强型全率编解码器(Enhanced Full Rate, EFR),这种编码码流比特率为12.2kbit/s。

 8. ITU G.721 ADPCM [5]
  G.721是ITU-T定义的一组标准协议组G.7xx其中之一,指的是32kbit/s的自适应差分脉冲编码调制(ADPCM)。除去上面介绍的三种,此协议组的其他码流标准如下:
  G.722 ―― 64 kb/s 下的 7 kHz 音频编码
  G.722.1 ――带有低帧损耗的具有免提操作的系统在24kbit/s和32kbit/s上的编码 
  G.722.2 ――利用自适应多频率宽带(AMR-WB)以16kbit/s多频率语音编码
  G.726 ―― 40, 32, 24, 16kbit/s自适应差分脉冲编码调制(ADPCM)
  G.727 ―― 5, 4, 3和2bit/s嵌入式自适应差分脉冲编码调制(ADPCM)
  G.728 ――利用低延迟代码线性预测以16 bit/s 进行语音编码
  G.729 ――利用共扼结构-代数激励编码线性预测(CS-ACELP)以8bit/s进行语音编码

 9. MPEG
  Moving Pictures Experts Group,动态图像专家组。MPEG是世界上最为著名的一种音视频压缩标准之一。MPEG标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。该专家组建于1988年,专门负责为CD建立视频和音频标准,而成员都是为视频、音频及系统领域的技术专家。及后,他们成功将声音和影像的记录脱离了传统的模拟方式,建立了ISO/IEC1172压缩编码标准,并制定出MPEG-格式,令视听传播方面进入了数码化时代。因此,大家现时泛指的MPEG-X版本,就是由ISO(International Organization for Standardization)所制定而发布的视频、音频、数据的压缩标准。
  MPEG标准的视频压缩编码技术主要利用了具有运动补偿的帧间压缩编码技术以减小时间冗余度,利用DCT技术以减小图像的空间冗余度,利用熵编码则在信息表示方面减小了统计冗余度。这几种技术的综合运用,大大增强了压缩性能。
  我们熟知的MP3格式的音频文件,就是MPEG-1 layer3的缩写。

 10. Experimental
  称为实验性音频。专门用来作音频信号处理的研究开发工作,主要包括优化压缩算法提高压缩效率的工作。这种类型的压缩码流基本不被主流解码器支持,只在一些音频专家和发烧友的实验室里能够流畅的播放出来。

 Compression code信息在WAV文件字段的第21、22个byte,通过十六进制查看器我们可以看到一个WAV文件的压缩码类型。对应关系如下表:

Code    Description 
0 (0x0000) Unknown 
1 (0x0001) PCM/uncompressed 
2 (0x0002) Microsoft ADPCM 
6 (0x0006) ITU G.711 a-law 
7 (0x0007) ITU G.711 µ-law 
17 (0x0011) IMA ADPCM 
20 (0x0016) ITU G.723 ADPCM (Yamaha) 
49 (0x0031) GSM 6.10 
64 (0x0040) ITU G.721 ADPCM 
80 (0x0050) MPEG 
65,536 (0xFFFF) Experimental

参考资料:
[1]. Microsoft WAV datasheet
[2]. Microsoft ADPCM wiki
http://wiki.multimedia.cx/index.php?title=Microsoft_ADPCM
[3]. ITU reference literature
[4]. http://www.wikipedia.org/
[5]. http://baike.baidu.com/
[6]. Microsoft ADPCM编码解码算法实现
http://topic.csdn.net/u/20080407/15/aa98f445-9376-42a4-9d18-8181b206c6f0.html

转载于:https://www.cnblogs.com/GoodGoodWorkDayDayUp/archive/2012/08/03/2622112.html

WAV格式中常见的压缩编码相关推荐

  1. wav格式介绍及提取数据区

    JRTPLIB@Conference DIY视频会议系统 六.G.711编码事例程序 Posted on 2009-01-03 19:47  猫头鹰 阅读(4419)  评论(7)   编辑  收藏  ...

  2. 怎么将电脑中的声音录制成WAV格式

    平常生活中大家用电脑需不需要录音,比方说听歌的录一下音乐.聊天的时候录一下聊天语音.看视频的时候录一下演员对白等等.所以学会用电脑录音可以做很多事情,那么如何录制电脑内部播放的声音及音乐?这个时候就需 ...

  3. 前端开发中常见的图片格式

    JPEG,GIF,PNG,最流行的是 jpeg 格式,可以把文件压缩到最小在 ps 以 jpeg 格式存储时,提供 11 级压缩级别. 网页中常见的图片格式有: 1.GIF图片格式,GIF是一种调色板 ...

  4. html中怎么写播放音乐格式,HTML+CSS入门 如何实现多浏览器播放wav格式的音频文件...

    本篇教程介绍了HTML+CSS入门 如何实现多浏览器播放wav格式的音频文件,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 使用audioplayer.js 基本上能支持 ...

  5. python中的函数wavfile_Python--读取wav格式文件

    Python--读取wav格式文件 (2013-05-28 06:56:22) 标签: 格式文件 读取 杂谈 1.import wave 用于读写wav文件 它提供了一个方便的WAV#26684;式接 ...

  6. 小程序语音红包中遇到的 语音识别silk转wav格式 如何在线转 或者mp3转wav格式...

    公司在开发一个小程序语音红包,现在遇到的问题就是通过微信的小程序文档接口拿到的录音文件要么是silk格式的,要么是mp3格式的 但是呢,如果要调用百度的语音接口,又必须是wav格式的.也就是说通过微信 ...

  7. Linux系统中常见文件系统格式

    Linux系统中常见文件系统格式 Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式. 在Linux操作系统里有Ext2.Ext3.Linux swap和VFAT四种格式. ...

  8. ffmpeg 从视频中提取WAV格式的音频

    步骤 1.下载ffmpeg 2.把下载回来的ffmpeg解压后的bin目录路径添加到环境变量里面的path里面 3. ffmpeg -i .[迅雷下载xunbo.cc]爱情公寓第二季EP20.rmvb ...

  9. vue 中常见的时间格式转换

    项目中后台返回的时间有多种形式,时间戳.ISO标准时间格式等,我们需要转化展示成能看的懂得时间格式: 将2022-05-27T14:20:27.000000Z 时间格式转换成 2022-05-27 1 ...

最新文章

  1. socket之send和recv原理剖析
  2. joa-framework 工作流高速开发框架(jeecg官方工作流版本号) 公布
  3. gcc/g++/makefile/easymake/cmake/xmake/nmake ...
  4. 副本的leader选举
  5. 最长有序子序列—动态规划算法
  6. 监听浏览器是否被缩放 - 案例篇
  7. 批处理中for的参数的用法
  8. kdump需要开启吗_iPhone全新黑科技!用嘴玩手机!你会玩吗?
  9. oracle不显示表和过程,oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题...
  10. Ioc容器beanDefinition-Spring 源码系列(1)
  11. 从零基础入门Tensorflow2.0 ----六、27 卷积神经网络(2)
  12. 机器学习方法(一)——梯度下降法
  13. hello.java_helloworld怎么写java
  14. NOJ [F] 懒惰的风纪委Elaine 求一堆数能组成多少个数小于等于n
  15. 全球对冲基金精英榜【转载】
  16. ★另人无比怀念的90年代动画片★ ‖最终整理篇‖
  17. 零基础入门学习Python视频(全42集)
  18. android调试环境配置+雷电模拟器
  19. 手机连接投影机的步骤_苹果手机如何连投影仪_苹果手机与投影仪连接的方法教程(步骤)...
  20. 搭建Ethereum以太坊测试网络Rinkeby节点

热门文章

  1. java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()
  2. excel设置默认值_职场办公必备的7个Excel应用技巧解读,易学易懂,收藏备用!...
  3. 远程访问Linux之SSHputty
  4. 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(pytorch函数)(三)
  5. 滑动窗口1——无重复字符的最长字串
  6. 如何使用git命令将本地项目上传到Gitlab上
  7. Intellij idea安装JRebel插件 实现代码的热部署
  8. Python基础----字符串
  9. javaweb男的gulp入手实践
  10. Swift延迟加载的一种用途