2024年2月4日发(作者:)
目录
1.
概述
2.
AMR编码方式
3.
AMR文件结构示范图
4.
AMR帧头格式分析
5.
异常帧分析
6.
AMR帧读取算法
7.
参考资料
1.
概述
现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式。
AMR,全称是:Adaptive Multi-Rate,自适应多速率,是一种音频编码文件格式,专用于有效地压缩语音频率。
AMR音频主要用于移动设备的音频压缩,压缩比非常高,但是音质比较差,主要用于语音类的音频压缩,不适合对音质要求较高的音乐类音频的压缩。
下面是两个AMR示范文件,一个是新闻类,一个是歌曲,可以听出来,音乐类压缩成AMR格式后,音质大大降低。
编号
1
2
文件名
(歌曲)
文件长度
409KB
242KB
时长
04:21
02:36
1
2.
AMR编码方式
帧头(字节)
AMR有多种编码方式,每种编码方式的采样频率不同:
0
1
2
3
4
5
6
7
说明:
比特率是指将数字声音由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质就越好。
比特率值与现实音频对照:
16kbps=电话音质
24kbps=增加电话音质、短波广播、长波广播、欧洲制式中波广播
40kbps=美国制式中波广播
56kbps=话音
64kbps=增加话音(手机铃声最佳比特率设定值、手机单声道MP3播放器最佳设定值)
112kbps=FM调频立体声广播
128kbps=磁带(手机立体声MP3播放器最佳设定值、低档MP3播放器最佳设定值)
160kbps=HIFI高保真(中高档MP3播放器最佳设定值)
192kbps=CD(高档MP3播放器最佳设定值)
256kbps=Studio音乐工作室(音乐发烧友适用)
音频数据帧大小的计算:
amr 一帧对应20ms,那么一秒有50帧的音频数据。由于比特率不同,每帧的数据大小也不同。
如果比特率是12.2kbs,那么每秒采样的音频数据位数为:
12200 / 50 = 244bit = 30.5byte,取整为31字节。
取整要四舍五入。
再加上一个字节的帧头,这样数据帧的大小为32字节。
规格
比特率(kbps)
音频帧大小(字节)
FT
0000
0001
0010
0011
0100
0101
0110
0111
AMR 4.75
AMR 5.15
AMR 5.9
AMR 6.7
AMR 7.4
AMR 7.95
AMR 10.2
AMR 12.2
13
14
16
18
20
21
27
32
04 00000100
0C 00001100
14 00010100
1C 00011100
24 00100100
2C 00101100
34 00110100
3C 00111100
2
3.
AMR文件结构示范图下面是一个AMR文件示范:
从图中可以看出,所有AMR文件头标志是6个字节。(最后一个字节是换行符“/n”)
后面就紧跟的是音频帧。这个文件是每帧32字节。
文件头
语音帧 1
语音帧 2
…
3
4.
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,对应不同编码模式。(参见“Q:帧质量指示器,0:表示为坏帧。
后面的P补0。
2. AMR编码方式”中表格中的说明)4
5.
异常帧分析
下图是一个出现异常帧的示例:()
从上图可以看见,本amr音频帧头都是0x3C,但是在0x000091e6处,帧头字节为0x44。与0x3C不一致。而在0x00009243处,才恢复到0x3C。
对异常帧的简单处理办法是,遇到异常帧就跳过异常帧。后面的读帧算法有描述。
5
6.
AMR帧读取算法
因为可能存在异常帧,所以不一定所有的语音帧大小一致,对于跟正常帧大小不一致的,或者帧头跟正常帧头不一致的,就不交给解码器,直接抛弃该坏帧。
读取帧的算法,用C语言来编写,readAMRFrame.c,JAVA可以用类似的方法。
下面是算法描述流程图。
6
参考资料
rfc3267
/rfc/
/rfc/PDF/
3GPP TS 26.104 V 6.1.0 (2004-03)
/ftp/Specs/html-info/
3GPP AMR Floating-point Speech Codec
/ftp/Specs/html-info/
“amr编程汇总”
/windcao/archive/2006/01/04/
关于AMR文件格式的解释
/blog/user1/11409/archives/2006/
7
7.


发布评论