AMR音频编码器概述及文件格式分析

全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频压缩比比较大但相对其他的压缩格式质量比较差由于多用于人声通话效果还是很不错的。

一、分类

1. AMR: 又称为AMR-NB,相对于下面的WB而言,

语音带宽范围:3003400Hz

8KHz抽样

2. AMR-WB:AMR WideBand

      语音带宽范围: 507000Hz

      16KHz抽样

“AMR-WB”全称为“Adaptive Multi-rate - Wideband”,即自适应多速率宽带编码,采样频率为16kHz,是一种同时被国际标准化组织ITU-T3GPP采用的宽带语音编码标准,也称 G722.2标准。AMR-WB提供语音带宽范围达到507000Hz,用户可主观感受到话音比以前更加自然、舒适和易于分辨。

  与之作比较,现在GSM用的EFR(Enhenced Full Rate,增强型全速率编码)采样频率为8kHz,语音带宽为2003400Hz

  AMR-WB应用于窄带GSM(全速信道16kGMSK)的优势在于其可采用从6.6kb/s, 8.85kb/s12.65kb/s三种编码,当网络繁忙时C/I恶化,编码器可以自动调整编码模式,从而增强QoS。在这种应用中,AMR-WB抗扰 度优于AMR-NB

AMR-WB应用于EDGE3G可充分体现其优势。足够的传输带宽保证AMR-WB可采用从6.6kb/s23.85kb/s共九种编码,语音质量超越PSTN固定电话。

 

二、编码方式

1. AMR-NB:

AMR 一共有16种编码方式, 0-7对应8种不同的编码方式, 8-15 用于噪音或者保留用。

Frame Type

Mode Indication

Mode Request

Frame content (AMR mode, comfort noise, or other)

0

0

0

AMR 4,75 kbit/s

1

1

1

AMR 5,15 kbit/s

2

2

2

AMR 5,90 kbit/s

3

3

3

AMR 6,70 kbit/s (PDC-EFR)

4

4

4

AMR 7,40 kbit/s (TDMA-EFR)

5

5

5

AMR 7,95 kbit/s

6

6

6

AMR 10,2 kbit/s

7

7

7

AMR 12,2 kbit/s (GSM-EFR)

8

-

-

AMR SID

9

-

-

GSM-EFR SID

10

-

-

TDMA-EFR SID

11

-

-

PDC-EFR SID

12-14

-

-

For future use

15

-

-

No Data (No transmission/No reception)

 

2. AMR-WB:

Frame Type Index

Mode Indication

Mode Request

Frame content (AMR-WB mode, comfort noise, or other)

0

0

0

AMR-WB 6.60 kbit/s

1

1

1

AMR-WB 8.85 kbit/s

2

2

2

AMR-WB 12.65 kbit/s

3

3

3

AMR-WB 14.25 kbit/s

4

4

4

AMR-WB 15.85 kbit/s

5

5

5

AMR-WB 18.25 kbit/s

6

6

6

AMR-WB 19.85 kbit/s

7

7

7

AMR-WB 23.05 kbit/s

8

8

8

AMR-WB 23.85 kbit/s

9

-

-

AMR-WB SID (Comfort Noise Frame)

10-13

-

-

For future use

14

-

-

speech lost

15

-

-

No Data (No transmission/No reception)

 

-

-

 

 

二、AMR 帧格式:

AMR 有两种类型的帧格式:AMR IF1 AMR IF2

1. AMR IF1:

  IF1 的帧格式如下图所示:

FrameType, Mode Indication, Mode Request 对应上面两个表格里的数。从上面的表格里我们可以看出,这三个域的值是相同的。所以在IF2中省略了Mode Indication, Mode Request 两个域。

Frame Quality Indicator: 0表示bad frame 或者corrupted frame 1表示 good frame

每一帧的数据有分为三个部分:Class A/B/C

Class A:一帧中最敏感、最重要的数据。一旦这一部份数据有损坏,整个帧就无法解码,就损坏了。所以,一般在无线传输的时候要使用各种冗余的方式对这部分数据加以保护。

Class B:相对于Class A不那么重要的数据。

Class C:比Class B还不重要的数据。

 

2. AMR IF2:

  IF2的帧格式如下图所示:

相对于IF1, IF2 省去了Frame Quality Indicator, Mode Indication, Mode Request CRC 校验。但是增加了bit 填充。因为AMR帧中数据的长度并不是字节(8bit)的整数倍,所以在有些帧的末尾需要增加bit填充,以使整个帧的长度达到字节的整数倍。

有关IF2帧中各个域的信息请参考下面的帧大小节的表格。

 

三、帧大小

1. AMR-NB

Frame Type Index

Frame content

Number of bits in Frame Type

Number of Bits in AMR Core Frame

Number of Bits in
Bit Stuffing

Number of octets (N)

0

AMR 4,75 

4

95

5

13

1

AMR 5,15

4

103

5

14

2

AMR 5,90

4

118

6

16

3

AMR 6,70

4

134

6

18

4

AMR 7,40

4

148

0

19

5

AMR 7,95

4

159

5

21

6

AMR 10,2

4

204

0

26

7

AMR 12,2

4

244

0

31

8

AMR SID

4

39

5

6

9

GSM-EFR SID

4

43

1

6

10

TDMA-EFR SID

4

38

6

6

11

PDC-EFR SID

4

37

7

6

12-14

For future use

-

-

-

-

15

No Data

4

0

4

1

 

Number of bits in Classes A, B, and C for each AMR codec mode

Frame Type

AMR
codec mode

Total number of bits

Class A

Class B

Class C

0

4,75

95

42

53

0

1

5,15

103

49

54

0

2

5,90

118

55

63

0

3

6,70

134

58

76

0

4

7,40

148

61

87

0

5

7,95

159

75

84

0

6

10,2

204

65

99

40

7

12,2

244

81

103

60

 

2. AMR-WB:

Composition of AMR-WB IF2 Frames for all Frame Types

 

 

 

Frame Type Index

Frame content

Number of bits in Frame Type

Number of bits in Frame Quality Indicator

Number of Bits in AMR-WB Core Frame

Number of Bits in Bit Stuffing

Number of octets (N)

0

AMR-WB 6.60 kbit/s

4

1

132

7

18

1

AMR-WB 8.85 kbit/s

4

1

177

2

23

2

AMR-WB 12.65 kbit/s

4

1

253

6

33

3

AMR-WB 14.25 kbit/s

4

1

285

6

37

4

AMR-WB 15.85 kbit/s

4

1

317

6

41

5

AMR-WB 18.25 kbit/s

4

1

365

6

47

6

AMR-WB 19.85 kbit/s

4

1

397

6

51

7

AMR-WB 23.05 kbit/s

4

1

461

6

59

8

AMR-WB 23.85 kbit/s

4

1

477

6

61

9

AMR-WB SID (Comfort Noise Frame)

4

1

40

3

6

10-13

For future use

-

-

-

-

-

14

speech lost

4

1

0

3

1

15

No Data (No transmission/No reception)

4

1

0

3

1

 

Frame Type

AMR-WB
codec mode

Total number of bits

Class A

Class B

Class C

0

6.60

132

54

78

0

1

8.85

177

64

113

0

2

12.65

253

72

181

0

3

14.25

285

72

213

0

4

15.85

317

72

245

0

5

18.25

365

72

293

0

6

19.85

397

72

325

0

7

23.05

461

72

389

0

8

23.85

477

72

405

0

 

 

四、PCM16AMR之间的转换
Amr
一帧为20毫秒
AMR 4.75Kbits/s为例:

每秒产生的声音位数 = 4750bits/s
20ms帧占用的位数 = 4750bits/s / 50frames/s = 95bits
20ms帧占用的字节数 = 95bits / 8bits/byte = 11.875bytes - 圆整到12字节不足的补0
加上一个字节的帧头所以20ms一帧的AMR: 12-bytes + 1-byte = 13-bytes

相反转换回来就成了
13-bytes * 50frames/s * 8bits/byte = 5200bits/s

注意这里两个数值并不对应是由于圆整的原因

 

五、 AMR 文件的存储格式(RFC 3267):

AMR IF1, IF2定义了 AMR的帧格式, 用于无线传输用。 RFC 3267定义了把AMR数据存成文件的文件格式。

AMR的文件格式如下图1所示:

它包含一个文件头,然后就是一帧一帧的AMR数据了。

 

<!--[if !supportLists]-->1.       <!--[endif]-->文件头格式:

 AMR 文件支持单声道和多声道。单声道和多声道的文件头是不同的。

 单声道:

 AMR-NB文件头: "#!AMR/n" (or 0x2321414d520a in hexadecimal)(引号内的部分)

 AMR-WB 文件头:"#!AMR-WB/n" (or 0x2321414d522d57420a in hexadecimal).(引号内)

多声道:

多声道的文件头包含一个magic number32bit channle description域。

AMR-NB magic number"#!AMR_MC1.0/n"

(or 0x2321414d525F4D43312E300a in hexadecimal).

AMR-WBmagic number"#!AMR-WB_MC1.0/n"

                         (or 0x2321414d522d57425F4D43312E300a in hexadecimal).

32bitchannel description域的定义如下:

其中 reserved bits必须为0 CHAN:表示当前文件中含有几个声道。

 

帧头的格式:

帧头的格式如图2 所示, 它占1个字节(8bit

P为填充为设置为0

FT为编码模式, 即上面提到的16中编码模式。
Q
为帧质量指示器,如果为0表明帧被损坏。

 

3 列举了AMR-NB 5.9Kbit的一个帧的格式,

对于5.9kbit一帧的有118bit的数据,15*8=120=118+2, 所以在最后有2bit的填充位。

 

参考文献:

RFC3267 RTP Payload Format for AMR and AMR-WB

3GPP TS 26.201 V6.0.0

3GPP TS 26.101 V6.0.0

AMR的源码可以在3GPP的网页下载,NB,和WB都有,一个浮点库,一个是定点库,要分清楚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查询自己OpenGL的版本信息

GLvoid PrintVersion() {const GLubyte* name glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字const GLubyte* biaoshifu glGetString(GL_RENDERER); //返回一个渲染器标识符&#xff0c;通常是个硬件平台const GLubyte* OpenGLVersion glGetStr…

airpod蓝牙耳机音量大解决办法_关于AirPods的常见问题汇总 全面了解苹果AirPods无线耳机...

小编带来关于AirPods必知的24个问题&#xff0c;全面了解苹果AirPods无线耳机。苹果决定在iPhone7中抛弃3.5毫米耳机接口&#xff0c;这引发了许多争议和不解。苹果这样做的原因部分在于&#xff0c;希望人们转而使用无线耳机。因此苹果也推出了自主的无线耳机AirPods。对于无线…

单例设计模式-懒汉式(线程安全)

懒汉式(线程安全) 有缺点说明 解决了线程不安全问题 效率太低了,每个线程在想获得类的实例时候,执行getInstance()方法都要进行同步.而其实这个方法只执行了一次实例化代码就够了,后面的想获取该类实例,直接return就行了.方法进行同步效率太低 结论: 在实际开发中,不推荐使用…

剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?

本文讲的是剖析Docker Swarm和Mesos&#xff1a;是什么&#xff1f;如何结合&#xff1f;有什么优势&#xff1f;&#xff0c;【编者的话】本文来自Mesosphere&#xff0c;从生产环境的需求出发&#xff0c;简要介绍了Docker Swarm的诞生背景&#xff0c;以及其与Mesos、 Mesos…

濮阳第二届创客机器人比赛_咸阳市举行第二届机器人大赛暨第一届创客大赛

11月14日&#xff0c;由陕西省教育信息化管理中心指导&#xff0c;市教育局主办&#xff0c;咸阳师范学院、市少工委协办的咸阳市第二届机器人大赛暨第一届创客大赛在咸阳师范学院举办。各个学校的同学展示自己的发明创造。咸阳日报全媒体记者 马沅聪 摄据悉&#xff0c;来自各…

MP3文件格式解析

1&#xff0c; MP3简介 MP3是今天一种常见的音乐格式&#xff0c;但恐怕除了工作要求之外&#xff0c;有兴趣对此进行研究的人恐怕不多。所以&#xff0c;当我打算做MP3解码方面的工作时&#xff0c;在找资料时也颇费了一番周折&#xff0c;同时也觉得很有趣。所以想在这里分…

懒汉式(线程安全,同步代码块儿)

懒汉式(线程安全,同步代码块儿) 代码演示 // 懒汉式 (线程安全_ 同步放法_) class Singleton{private static Singleton instance;private Singleton() {}// 提供一个静态的公有方法 加入了同步处理的代码// 解决线程安全问题// 即懒汉式// 我们在这里加一个关键字 synchroni…

同余定理证明

转载于:https://www.cnblogs.com/cmyg/p/7206474.html

非常抱歉,

非常抱歉&#xff0c;好长一段时间没写了&#xff0c;但是我在博客园偶尔还会写写这个行业必须不断地学才不会被淘汰&#xff0c;幸好我是主动接受知识&#xff0c;我喜欢这个。。。。。。。。。。转载于:https://blog.51cto.com/52770825/1962949

乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理

目录1、进制的介绍2、二进制转换成其他进制3、十进制转换成其他进制4、十六进制转换成其他进制5、总结上一篇博客我们讲解了信息的在计算机中是如何存储以及如何表示的。但是对于各个进制的转换只是一笔带过了&#xff0c;后来作者仔细研究了进制转换的原理&#xff0c;发现还是…

单例设计模式-双重检查

双重检查 双重检查应用实例 代码演示: class Singleton{private static volatile Singleton singleton;private Singleton(){}// 提供一个静态公有方法public static Singleton getInstance() {if (instance null) {synchronized (Singleton.class) {if (instance null) {…

symbian系统开发教程(一)

第一章&#xff1a;Symbian OS简介作者&#xff1a;谢兴 enigma19971hotmail.com---转载需注明出处 下载word文档1.1. Symbian系统简介当前有很多手机运行Symbian OS&#xff0c;数量甚至超出您的想象。到目前为止已经有超过7500 万、100 多种型号的手机运行Sym…

小谈c#数据库存取图片的方式

第一种方式 文件夹与数据库配合 /// <summary>/// 上传图片/// </summary>/// <param name"FUSShopURL">FileUpload对象</param>/// <param name"UpladURL">图片要放到的目录名称</param>/// <returns>如果Fi…

c#课程设计简单题目_《C#项目案例》课程设计题目

1《C#项目案例》课程设计题目一、课程设计的基本目标1、通过本次课程设计&#xff0c;熟练掌握开发语言C#和开发环境——.NET。开发语言的熟练需要通过编写一定长度的代码(1000&#xff5e;2000行代码)才能达到&#xff0c;开发环境的熟练需要反复的程序调试训练。2、加深对软件…

笔记吧

map的第一个为关键值&#xff0c;只可读&#xff0c;不可写。第二个为对应值&#xff1b;vector的消除有很大的困扰&#xff0c;感觉存在很大的局限性&#xff1b;问题——不能够复杂话&#xff0c;一个问题先从较浅的方面想起&#xff0c;其实在现有基础和请况下&#xff0c;不…

单例设计模式-静态内部类

静态内部类 静态内部类应用实例 代码演示 package com.atguigu.principle.singleton.type07;/** * author victor * site https://victorfengming.github.io/ * company XDL * project java_mode * package com.atguigu.principle.singleton.type07 * created 2021-02-02 20…

Symbian系统开发教程(二)

第二章&#xff1a;数据类型与语法 作者&#xff1a;谢兴 enigma19971hotmail.com 转载需注明出处 下载word版本 Symbian系统已经提供了一套已经定义好的内置的数据类型。为了保证你的代码是编译器无关的&#xff0c;应当使用下面symbian系统提供的数…

design php 如何使用ant_Ant Design Pro初探—添加面包屑

Ant Design Pro初探—添加面包屑上次咱们说了新建页面&#xff01;页面建成了&#xff0c;开始填充页面 新建面页面不会的看上一片文章:Ant Design Pro初探—新建页面首先是需要添加家面包屑&#xff0c;上代码&#xff1a;import React, { PureComponent } from react;import …

C++主要操作符重载的定义和总结

C中预定义的运算符的操作对象只能是基本数据类型&#xff0c;实际上&#xff0c;对于很多用户自定义类型&#xff0c;也需要有类似的运算操作。例如&#xff1a; class complex { public: complex(double r0.0,double I0.0){realr;imagI;} void display(); private: do…

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉&#xff0c;但是原生JS有排序&#xff0c;有筛选等等&#xff0c;但是就是没有数组去重怎么办呢&#xff1f;这能怎么办&#xff0c;自己手动实现嘛。&#xff08;以下代码直接在原型上添加的的方法&#xff0c;为…