编码方式

AMR有多种编码方式,每种编码方式的采样频率不同:


规格

比特率(kbps)

音频帧大小(字节)

帧头(字节)

FT

 0 

 AMR 4.75 

 

 13

 04 00000100 

 0000 

 1

 AMR 5.15

 

 14

 0C 00001100

 0001

 2

 AMR 5.9

 

 16

 14 00010100

 0010

 3

 AMR 6.7

 

 18

 1C 00011100

 0011

 4

 AMR 7.4

 

 20

 24 00100100

 0100

 5

 AMR 7.95

 

 21

 2C 00101100

 0101

 6

 AMR 10.2

 

 27

 34 00110100

 0110

 7

 AMR 12.2

 

 32

 3C 00111100

 0111

说明:

l         比特率是指将数字声音由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质就越好。

l         比特率值与现实音频对照:

16kbps=电话音质

24kbps=增加电话音质、短波广播、长波广播、欧洲制式中波广播

40kbps=美国制式中波广播

56kbps=话音

64kbps=增加话音(手机铃声最佳比特率设定值、手机单声道MP3播放器最佳设定值)

112kbps=FM调频立体声广播

128kbps=磁带(手机立体声MP3播放器最佳设定值、低档MP3播放器最佳设定值)

160kbps=HIFI高保真(中高档MP3播放器最佳设定值)

192kbps=CD(高档MP3播放器最佳设定值)

256kbps=Studio音乐工作室(音乐发烧友适用)

l         音频数据帧大小的计算:

amr 一帧对应20ms,那么一秒有50帧的音频数据。由于比特率不同,每帧的数据大小也不同。

如果比特率是12.2kbs,那么每秒采样的音频数据位数为:

12200 / 50 = 244bit = 30.5byte,取整为31字节。

取整要四舍五入。

再加上一个字节的帧头,这样数据帧的大小为32字节。


AMR文件结构

下面是一个AMR文件示范:

android 录音波纹圆形 录音波纹怎么算好_编码方式

从图中可以看出,所有AMR文件头标志是6个字节。(最后一个字节是换行符“/n”)

后面就紧跟的是音频帧。这个文件是每帧32字节。

文件头

语音帧 1

语音帧 2



AMR帧头格式分析

AMR语音帧格式为帧头和语音数据组成。

帧头

语音数据

AMR语音帧头占1个字节,如下图所示:

0

1

2

3

4

5

6

7

P

FT

Q

P

P

0

 

 

 

 

0

0

0

其中:

P = 0;

FT:Frame Type,对应不同编码模式。(参见“2. AMR编码方式”中表格中的说明)

Q:帧质量指示器,0:表示为坏帧。

后面的P补0。


异常帧分析

下图是一个出现异常帧的示例:(zbc1217.amr)

 

android 录音波纹圆形 录音波纹怎么算好_编码方式_02

从上图可以看见,本amr音频帧头都是0x3C,但是在0x000091e6处,帧头字节为0x44。与0x3C不一致。而在0x00009243处,才恢复到0x3C。

对异常帧的简单处理办法是,遇到异常帧就跳过异常帧。后面的读帧算法有描述。


参考资料

l         rfc3267

http://www.rfc-editor.org/rfc/rfc3267.txt

http://ietfreport.isoc.org/rfc/PDF/rfc3267.pdf

l         3GPP TS 26.104 V 6.1.0 (2004-03)

http://www.3gpp.org/ftp/Specs/html-info/26104-CRs.htm

l         3GPP AMR Floating-point Speech Codec

http://www.3gpp.org/ftp/Specs/html-info/26104.htm

l         “amr编程汇总”

l         关于AMR文件格式的解释

http://www.mcublog.com/blog/user1/11409/archives/2006/16832.html