[写在最前面的] 越发觉得iteye(以前的javaeye)是个不错的技术讨论平台,所以决定先将以前的一些技术相关的文章都搬过来。一来备忘,二来系统化自己的知识。主观上是为了自己的积累与提高,希望客观上能给不相识的技术伙伴一点帮助。如果转载,请标注出处。
AMR(Adaptive Multi-Rate,有的译为自适应多速率)是适用于话音服务的音频数据压缩方案。目前已经广泛应用于移动平台(手机等)中。 由于压缩比大,相比其他压缩方式质量较差,但该方案在处理话音方面的效果很不错。
AMR包括AMR-WB(WideBand)和AMR-NB(NarrowBand)两种,区别顾名思义,但是详细有具体之处有待研究。
AMR压缩编码按话音质量由低到高分为0-7共8种模式(见下表)。本人经过验证,发现模式0、1质量极差,根本就没法听。模式2以上,效果逐级明显提高。
模式 | bit率(kbps) | 帧长(byte) |
0 | 4.75 | 13 |
1 | 5.15 | 14 |
2 | 5.9 | 16 |
3 | 6.7 | 18 |
4 | 7.4 | 20 |
5 | 7.95 | 21 |
6 | 10.2 | 27 |
7 | 12.2 | 32 |
说明:
- AMR每帧时长为20ms(毫秒),即每秒AMR媒体共有50帧;
- 帧长的计算,以模式0为例,帧长-1=4750/50=95(bit/f)=12(byte/f),故帧长=13byte。其中加1是每帧有1byte的首部。
关于AMR的文件格式见下图(该图取自RFC3267):
Fig1中的Header为6个byte:
十六进制 23 32 42 4d 52 0a
字符 # ! A M R \n
Fig2中为帧首部1byte:
P值为0,FT为AMR模式(见前面的表格),Q为帧质量指示器(0-该帧被损坏)
参考资料:RFC3267