必威体育Betway必威体育官网
当前位置:首页 > IT技术

AMR文件格式分析

时间:2019-08-30 14:11:08来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

amr文件

最近在传输手机录音时,遇到了AMR编码的问题,开始以为可以任意截断amr文件,加个文件头就可以播放的,后来发现是有问题,这样得到的amr音频有些不能正常播放,后来参看amr格式后,才知道amr文件是一帧一帧的,如果是按照完整的帧前面添加文件头,就没问题了,下面是参考的一篇文章

原文地址:http://blog.csdn.net/dinggo/archive/2007/12/25/1966444.aspx

目录

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

0C00001100

0001

2

AMR 5.9

16

14 00010100

0010

3

AMR 6.7

18

1C00011100

0011

4

AMR 7.4

20

24 00100100

0100

5

AMR 7.95

21

2C00101100

0101

6

AMR 10.2

27

34 00110100

0110

7

AMR 12.2

32

3C00111100

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可以用类似的方法。

下面是算法描述流程图

7.参考资料

lrfc3267

http://www.rfc-editor.org/rfc/rfc3267.txt

http://ietfreport.isoc.org/rfc/pdf/rfc3267.pdf

l3GPP TS 26.104 V 6.1.0 (2004-03)

http://www.3gpp.org/ftp/Specs/html-info/26104-CRs.htm

l

http://blog.sina.com.cn/s/blog_6276232c0100qm0z.html

相关阅读

支付宝9.0产品分析报告

这份产品分析报告本来是我最近在网申支付宝时写的分析报告,结果在简历评估阶段就被退回来了,回复曰:此地僧多肉少,请转投其他部门。我

团购网groupon模式有钱赚无竞争 运营模式分析

团购网groupon模式有钱赚无竞争,不知道这个标题会不会惹得大家再次一窝蜂的涌进groupon模式的团购网站,曾经看过不完全统计,说目前国

数据分析逻辑:流量转化漏斗模型详解

数据分析能够帮助我们更好地进行运营决策,数据分析能够很好的为转化用户提供参考与数据支撑。商业领域的数据分析,就是为了给商业行

SRS 代码分析【mpeg-ts解析】

SRS 代码分析【mpeg-ts解析】1.SrsTsContext的decode接口定义如下:int SrsTsContext::decode(SrsBuffer* stream, ISrsTsHandler*

这可能是最全最深度的分析了:杜蕾斯营销策略分析

杜蕾斯的营销名声可谓人尽皆知,本文将全方位多角度,以独特的洞察视角,揭开杜蕾斯的神秘面纱,带给你精妙绝伦的分析~全文从简介、网络

分享到:

栏目导航

推荐阅读

热门阅读