一、什么是AMR、AMR-WB

全称Adaptive Multi-Rate和Adaptive Multi-Rate Wideband,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。

二、编码方式

这里都是针对AMR narrow-band (AMR-NB)进行讨论
Amr有以下一些编码方式:

Mode 0 - AMR 4.75 - Encodes at 4.75kbit/s
Mode 1 - AMR 5.15 - Encodes at 5.15kbit/s
Mode 2 - AMR 5.9 - Encodes at 5.9kbit/s
Mode 3 - AMR 6.7 - Encodes at 6.7kbit/s
Mode 4 - AMR 7.4 - Encodes at 7.4kbit/s
Mode 5 - AMR 7.95 - Encodes at 7.95kbit/s
Mode 6 - AMR 10.2 - Encodes at 10.2kbit/s
Mode 7 - AMR 12.2 - Encodes at 12.2kbit/s
8~15位一些 noise frames 和保留位的定义。

每种格式对应的帧的大小如下。
CMR Mode Frame size (bytes)
0 AMR 4.75 13
1 AMR 5.15 14
2 AMR 5.9 16
3 AMR 6.7 18
4 AMR 7.4 20
5 AMR 7.95 21
6 AMR 10.2 27
7 AMR 12.2 32

我们来做一个简单的计算,PCM16和AMR之间的转换
Amr 一帧为20毫秒
AMR 4.75Kbits/s:

每秒产生的声音位数 = 4750bits/s
每20ms帧占用的位数 = 4750bits/s / 50frames/s = 95bits
每20ms帧占用的字节数 = 95bits / 8bits/byte = 11.875bytes - 圆整到12字节,不足的补0
加上一个字节的帧头,所以,20ms一帧的AMR: 12-bytes + 1-byte = 13-bytes

相反,转换回来就成了
13-bytes * 50frames/s * 8bits/byte = 5200bits/s

注意,这里两个数值并不对应,是由于圆整地原因

三、文件格式
Amr的文件格式极为简单,如图1所示:

文件最开始时6个字节的header,
[#!AMR/n] 括号间的部分
(或者十六进制表示为 0x2321414d520a ).

接下来就是连续的语音帧,
每个帧包含一个帧头+语音数据
帧头如图2所示:

P设置为0
FT为编码模式,上面已经列举了可用的值。
Q为帧质量指示器,如果为0表明帧被损坏,接受者需要将RX_TYPE设置成SPEECH_BAD或者SID_BAD。
何为RX_TYPE请参考RFC3267,其实该节介绍的内容都可以在RFC3267里面找到。

图3 这个图表为 5.9 kbit 编码的文件格式 (with 118 speech bits)
其中P为补0位。

AMR NB格式解析相关推荐

  1. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  2. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  3. java 解析日期格式_日期/时间格式/解析,Java 8样式

    java 解析日期格式 自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期 ...

  4. 日期/时间格式/解析,Java 8样式

    自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间. 在这段时间内, ...

  5. 3D模型格式解析(OBJ)

    文章目录 OBJ格式解析 一.OBJ格式 二.vtkOBJReader源码解析 1.主要部分 总结 OBJ格式解析 通过解读vtk源码中对OBJ文件的读取代码,讲解如何获取obj模型的顶点(verte ...

  6. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)

    在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSO ...

  7. mysql binlog c++_MySQL binlog的格式解析

    我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...

  8. JSON格式解析和libjson使用简介-转

    Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSON格式的简单概念及JSON在Rss Reader中的应用. JSON格式解析和libjs ...

  9. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

最新文章

  1. Learn OpenGL (三):着色器
  2. SQLServer-sysobjects-type
  3. mybatis报错解决办法 :Result Maps collection does not contain value for java.lang.String
  4. 客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示
  5. ConcurrentHashMap的源码分析-sizeCtl扩容退出机制
  6. PAT乙类之1011 A+B 和 C
  7. 华为手机怎么隐藏按键图标_mac桌面图标怎么快速隐藏?
  8. [Lottie动画工具 v3.4.4]
  9. mysql开启slowquery_log_MySQL slow_query_log慢查询日志配置详解
  10. 利用ziparchive压缩文件、zip_file解压文件
  11. 新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流
  12. PCR概述及前沿技术
  13. 飞信的 SIP 协议分析
  14. 止汗 咒语_如何使用咒语制作诗歌机器人
  15. Java解决下载--文件名乱码
  16. 从四个维度谈谈如何做好团队管理
  17. jqGrid简单使用、json格式和jsonReader介绍
  18. bash通配符(wildcard)和特殊符号
  19. python读取excel写入数据库_python读取Excel内容并写入MySQL数据库脚本
  20. 我是这样看搜狗搜索与知乎合作的

热门文章

  1. 微信小程序转头条/抖音小程序的方法
  2. 案例十三、模仿微信打飞机游戏
  3. [c语言]c语言中的#和##作用、参数表省略号作用
  4. 计算机科学(Computer Science)到底学什么?
  5. 【MySQL】MySQL复制技术
  6. html ace编辑器,Springboot 集成 Ace editor前端编辑器
  7. 钉钉网页版入口,存档
  8. Springboot毕业设计毕设作品,人脸识别签到考勤系统设计与实现
  9. 什么是电子邮件地址?
  10. 什么品牌的台灯适合学生用?适合学生党用的台灯推荐