编码方式
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文件示范:
从图中可以看出,所有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)
从上图可以看见,本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