amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】

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

下面是算法描述流程图。

 

 

 

 

 



7.      参考资料

l         rfc3267

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

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

l         3GPP TS 26.104 V 6.1.0 (2004-03)

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

l         3GPP AMR Floating-point Speech Codec

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

l         “amr编程汇总”

http://blog.csdn.net/windcao/archive/2006/01/04/570348.aspx

l         关于AMR文件格式的解释

http://www.mcublog.com/blog/user1/11409/archives/2006/16832.html

l          

 

转载于:https://www.cnblogs.com/songtzu/archive/2013/03/15/2961519.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之解析GML并显示

本例主要实现在APP中解析GML数据并显示 GML,地理标记语言(外语全称:Geography MarkupLanguage、外语缩写:GML),它由开放式地理信息系统协会(外语缩写:OGC)于1999年提出,…

中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》...

来源:中国电子学会当前,全球正在经历科技和产业高度耦合、深度迭加的新一轮变革,大数据的形成、理论算法的革新、计算能力的提升及网络设施的演进驱动人工智能进入新一轮创新发展高峰期,新技术持续获得突破性进展,呈现…

晓得不,中间表是这样被消灭的

目录 一、中间表的产生 1、一步算不出来 2、实时计算等待时间过长 3、多样性数据源参加计算 4、中间表难以删除 二、文件计算 三、高性能文件格式 四、易管理性 五、多数据源支持 六、集成性 七、资料 一、中间表的产生 中间表是数据库中专门存放中间计算结果的数据…

美国五大科技巨头的人工智能竞赛

来源:资本实验室毫无疑问,人工智能已经开始渗透到各行各业,并正在改变我们的工作方式和生活方式。2017年,全球与人工智能相关的资金投入总额达到152亿美元,比上一年增加144%。而无论在投资,还是…

模拟Struts2实现

本文主要是一个模拟的Struts2的简单实现 真正的MVC架构 实现主要思路 定义一个过滤器&#xff0c;接收传递过去的Action&#xff0c;根据处理的结果重定向或者转发。 首先定义index.jsp <% page language"java" import"java.util.*" pageEncoding&q…

实战教学--怎样提高报表呈现的性能?

报表的性能很重要&#xff0c;是一个总被谈及的问题&#xff0c;跑的慢的报表用户体验恶劣&#xff0c;无法忍受。解决这些慢的性能问题&#xff0c;也成了项目方和工程师头疼的事情。一出状况&#xff0c;就得安排技术好的&#xff0c;能力强的工程师去救火&#xff0c;本来利…

WiFi共享精灵 - 不需路由器一键轻松把网线共享给手机、笔记本等同时无线上网...

现在人们身边手机、游戏机等各种使用WiFi上网的设备已经越来越多&#xff0c;但经常遇到一些地方只有有线网络&#xff0c;或者没有无线路由器的情况&#xff0c;这时&#xff0c;用笔记本上网&#xff0c;然后把网络通过WiFi共享给其他设备上网那么就最合适了。我们之前有介绍…

干货|李开复最新刷屏演讲:人工智能最难取代这13种工作,也最容易威胁人性与爱!...

来源&#xff1a;澎湃新闻这两年&#xff0c;创新工场董事长兼首席执行官李开复&#xff0c;一直为人工智能站台和奔走&#xff0c;还出新书帮助人们规划未来的AI生活。他预言&#xff0c;中国有望在全球范围内首先实现OMO&#xff08;Online-Merge-Offline&#xff0c;线上线下…

SQL 为什么动不动就 N 百行以 K 计

发明 SQL 的初衷之一显然是为了降低人们实施数据查询计算的难度。 SQL 中用了不少类英语的词汇和语法&#xff0c;这是希望非技术人员也能掌握。确实&#xff0c;简单的 SQL 可以当作英语阅读&#xff0c;即使没有程序设计经验的人也能运用。 然而&#xff0c;面对稍稍复杂的查…

Struts2入门

搭建Struts2的开发环境 找到所需的jar包&#xff1a;发行包的lib目录中&#xff08;不同版本需要的最小jar包是不同的&#xff0c;参见不同版本的文档。本文使用的是2.1.7&#xff09; struts2-core.jar 核心jar包xwork-2.jar xwork核心jar包ognl.jar ognl表达式freemarker…

Apifox vs Eolink,国内 Api 工具哪家强?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。 在国内&#xff0c;我们可以看到有国产 API 管理工具&…

人工智能、区块链、混合现实:2019年新闻、媒体与技术趋势

来源&#xff1a;资本实验室近日&#xff0c;未来今日研究所&#xff08;Future Today Institute&#xff09;发布了《2019年新闻、媒体与技术趋势报告》&#xff0c;报告提出了涵盖多个领域的108个新兴技术趋势。报告显示&#xff0c;未来的新闻、媒体等行业将受到各种技术错综…

活久见:都 2203 年了,你还在使用 word 调试 API

随着信息技术的发展&#xff0c;API 变得无处不在&#xff0c;无处不用。但令人费解的是&#xff0c;都 2203 年了&#xff0c;竟然还有很多人使用 word 调试 API&#xff1f; 今天&#xff0c;西红柿将带领大家打开新世界的大门&#xff0c;放下诺基亚&#xff0c;抄起智能机&…

php 之fsockopen(转)

1.函数作用 打开网络的socket连接 2.使用参数 int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]); 3.简介 目前这个函数提供二个 Socket 资料流界面&#xff0c;分别为 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。当在 Internet 情形…

Struts2基础知识

本文主要包括以下内容 struts2常用常量的定义与意义struts2处理流程拆分struts动态方法调用,使用通配符接收请求参数中文编码问题自定义类型转化器访问或添加request/session/application常用servlet对象的获取 struts2常用常量的定义与意义 struts2处理流程 每一次请求都会创…

自动驾驶汽车测试在美惹争议,原因为何?

来源&#xff1a;中国汽车报摘要&#xff1a;近日&#xff0c;针对美国总统特朗普提出的&#xff0c;汽车制造商需自愿提交他们在公共道路上测试自动驾驶汽车安全报告一事&#xff0c;回应者寥寥&#xff0c;目前只有三家汽车公司响应了上述要求&#xff0c;提交了相关材料。据…

Struts2基础知识(二)

本文主要包括以下内容 文件上传&#xff0c;多文件上传 自定义拦截器 用户输入验证国际化 文件上传 将头设置为enctype”multipart/form-data” <body><form action"${pageContext.request.contextPath}/upload/upload1.action" method"post" …

SQL Performance Analyzer SPA常用脚本汇总

SPA常用脚本汇总 附件为 一个SPA报告 spa_buffergets_summary SQL 性能分析器 SQL Performance Analyzer SPA Oracle Database 11g 引入了 SQL 性能分析器&#xff1b;使用该工具可以准确地评估更改对组成工作量的 SQL 语句的影响。SQL 性能分析器可帮助预测潜在的更改对 SQL 查…

想做自动驾驶技术的入,这回分享一个简单好用的开放平台

前言 自动驾驶已经是现在技术开发领域最热门的方向之一&#xff0c;作为程序员&#xff0c;很多人也都想来这个领域试试水。但是这个领域的门槛也挺高&#xff0c;不过想开始的话&#xff0c;其实可以从一些专门针对自动驾驶的开放平台开始入手&#xff0c;目前比较主流的可以…

潘建伟团队再登Nature:全球首次实现器件无关量子随机数,量子保密通信安全再升级...

岳排槐 编辑量子位 出品 | 公众号 QbitAI据消息&#xff0c;潘建伟团队日前成功实现了器件无关的量子随机数&#xff0c;将在数值模拟、密码学等领域广泛应用&#xff0c;并有望形成新的随机数国际标准。相关研究成果于北京时间20日由国际权威学术期刊《自然》在线发表&#xf…