AMR文件格式分析
目录1. 概述
2. AMR编码方式
3. AMR文件结构示范图
4. AMR帧头格式分析
5. 异常帧分析
6. AMR帧读取算法
7. 参考资料
1. 概述现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式。 AMR,全称是:Adaptive Multi-Rate,自适应多速率,是一种音频编码文件格式,专用于有效地压缩语音频率。 AMR音频主要用于移动设备的音频压缩,压缩比非常高,但是音质比较差,主要用于语音类的音频压缩,不适合对音质要求较高的音乐类音频的压缩。 下面是两个AMR示范文件,一个是新闻类,一个是歌曲,可以听出来,音乐类压缩成AMR格式后,音质大大降低。
编号文件名文件长度时长
1h.amr (歌曲)409KB04:21
2zbc1217.amr242KB02:36
2. AMR编码方式AMR有多种编码方式,每种编码方式的采样频率不同:
规格比特率(kbps)音频帧大小(字节)帧头(字节)FT
0AMR 4.75 1304 000001000000
1AMR 5.15 140C 000011000001
2AMR 5.9 1614 000101000010
3AMR 6.7 181C 000111000011
4AMR 7.4 2024 001001000100
5AMR 7.95 212C 001011000101
6AMR 10.2 2734 001101000110
7AMR 12.2 323C 001111000111
说明: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字节。3. AMR文件结构示范图下面是一个AMR文件示范:从图中可以看出,所有AMR文件头标志是6个字节。(最后一个字节是换行符“/n”)后面就紧跟的是音频帧。这个文件是每帧32字节。
文件头
语音帧 1
语音帧 2
…
4. AMR帧头格式分析AMR语音帧格式为帧头和语音数据组成。
帧头语音数据
AMR语音帧头占1个字节,如下图所示:
01234567
PFTQPP
0 000
其中:P = 0;FT:Frame Type,对应不同编码模式。(参见“2. AMR编码方式”中表格中的说明)Q:帧质量指示器,0:表示为坏帧。后面的P补0。5. 异常帧分析下图是一个出现异常帧的示例:(zbc1217.amr)
从上图可以看见,本amr音频帧头都是0x3C,但是在0x000091e6处,帧头字节为0x44。与0x3C不一致。而在0x00009243处,才恢复到0x3C。 对异常帧的简单处理办法是,遇到异常帧就跳过异常帧。后面的读帧算法有描述。6. AMR帧读取算法因为可能存在异常帧,所以不一定所有的语音帧大小一致,对于跟正常帧大小不一致的,或者帧头跟正常帧头不一致的,就不交给解码器,直接抛弃该坏帧。 读取帧的算法,用C语言来编写,readAMRFrame.c,JAVA可以用类似的方法。下面是算法描述流程图。
赞
感谢分享 嗯,这个百度可以找得到的。。。。。。。。 不错,不错!!! 可也可以 谢谢分享
谢谢分享
感谢分享
页:
[1]