[分享] AMR文件格式分析

[复制链接]

该用户从未签到

472

主题

532

回帖

1万

积分

[INTOHARD]旅长

Rank: 9Rank: 9Rank: 9

积分
16542
发表于 2014-10-27 14:48:52 | 显示全部楼层 |阅读模式
目录


1.    概述
2.    AMR编码方式
3.    AMR文件结构示范图
4.    AMR帧头格式分析
5.    异常帧分析
6.    AMR帧读取算法
7.    参考资料


1.      概述
现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而AMR文件格式是手机端普遍支持的音频文件格式。
AMR,全称是:Adaptive Multi-Rate,自适应多速率,是一种音频编码文件格式,专用于有效地压缩语音频率。
AMR音频主要用于移动设备的音频压缩,压缩比非常高,但是音质比较差,主要用于语音类的音频压缩,不适合对音质要求较高的音乐类音频的压缩。
下面是两个AMR示范文件,一个是新闻类,一个是歌曲,可以听出来,音乐类压缩成AMR格式后,音质大大降低。
编号
文件名
文件长度
时长
1
h.amr              (歌曲)
409KB
04:21
2
zbc1217.amr
242KB
02:36
2.   AMR编码方式
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字节。
3.      AMR文件结构示范图
下面是一个AMR文件示范:
从图中可以看出,所有AMR文件头标志是6个字节。(最后一个字节是换行符“/n”)
后面就紧跟的是音频帧。这个文件是每帧32字节。
文件头
语音帧 1
语音帧 2
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,对应不同编码模式。(参见“2. AMR编码方式”中表格中的说明)
Q:帧质量指示器,0:表示为坏帧。
后面的P补0。
5.      异常帧分析
下图是一个出现异常帧的示例:(zbc1217.amr)

从上图可以看见,本amr音频帧头都是0x3C,但是在0x000091e6处,帧头字节为0x44。与0x3C不一致。而在0x00009243处,才恢复到0x3C。
对异常帧的简单处理办法是,遇到异常帧就跳过异常帧。后面的读帧算法有描述。
6.      AMR帧读取算法
因为可能存在异常帧,所以不一定所有的语音帧大小一致,对于跟正常帧大小不一致的,或者帧头跟正常帧头不一致的,就不交给解码器,直接抛弃该坏帧。
读取帧的算法,用C语言来编写,readAMRFrame.c,JAVA可以用类似的方法。
下面是算法描述流程图。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  • TA的每日心情
    开心
    2019-12-13 11:39
  • 签到天数: 327 天

    [LV.8]三品御史

    7

    主题

    728

    回帖

    2255

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    2255
    发表于 2014-10-27 15:38:13 | 显示全部楼层
    [s:9] 赞
    感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-27 14:43
  • 签到天数: 1415 天

    [LV.10]一品大学士

    43

    主题

    4413

    回帖

    2万

    积分

    Intohard Team

    Rank: 7Rank: 7Rank: 7

    积分
    20254
    QQ
    发表于 2014-10-28 09:07:13 | 显示全部楼层
    嗯,这个百度可以找得到的。。。。。。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表