AMR文件格式分析

2023-11-09

最近在传输手机录音时,遇到了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

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

FTFrame Type,对应不同编码模式。(参见“2. AMR编码方式”中表格中的说明)

Q:帧质量指示器,0:表示为坏帧。

后面的P0

 


5.      异常帧分析

下图是一个出现异常帧的示例:(zbc1217.amr

 

 

 

 

从上图可以看见,本amr音频帧头都是0x3C,但是在0x000091e6处,帧头字节为0x44。与0x3C不一致。而在0x00009243处,才恢复到0x3C

 

对异常帧的简单处理办法是,遇到异常帧就跳过异常帧。后面的读帧算法有描述。

 


6.      AMR帧读取算法

因为可能存在异常帧,所以不一定所有的语音帧大小一致,对于跟正常帧大小不一致的,或者帧头跟正常帧头不一致的,就不交给解码器,直接抛弃该坏帧。

 

读取帧的算法,用C语言来编写,readAMRFrame.cJAVA可以用类似的方法。

下面是算法描述流程图。

 

 

 



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   





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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AMR文件格式分析 的相关文章

  • webrtcvad 安装失败

    倒腾了两个小时终于解决了这个问题 所有办法都试了 只有这个管用 下载安装VC 不要下载那种在线安装的 我试了很多次 都是安装包丢失或损坏 直接复制下面链接去下载 百度网盘链接 https pan baidu com s 1IaqkukMzb
  • Wwise指引贴

    几种音频软件的比较 Criware音频引擎跟Wwise在功能上有什么直接的区别么 为什么很多大厂都选择Wwise
  • 音频系统POP音的原理和解决方法

    音频系统POP音的原理和解决方法 目录 文章目录 音频系统POP音的原理和解决方法 目录 音频IC与功放IC的电源时序与功能模块使能时序 功放IC输入端INP与INN的阻抗匹配 增大VBIAS滤波电容 BTL输出和SE输出 减小输出端耦合电
  • 怎样使用Cubase进行人声消除

    所谓分离伴奏 指的就是消除人声 通常在一首歌曲的音频文件中 混音师一般都会将人声放在声像位置的正中间再输出为一个立体声音频文件 一般情况下是这样 但不代表全是这样 因此 人声的波形在该立体声音频文件的左声道和右声道中应该是相同或相似的 所以
  • 关于安卓上pcm文件转wav全是噪音解决办法

    1 一开始发现8bit的pcm能正常转换 但换成16bit转换出来全是噪音 网上资料也不全 思考了很久 突然想起大小端的问题 进行大小端处理后再进行转换 完美播放 下面贴出大小端转换方法 public class BigorLittle p
  • 10分钟上手Azure Blob Storage

    文章目录 Azure Blob Storage快速上手 背景 什么是Azure Blob Storage Blob Storage的应用场景 环境搭建 安装 运行 修改Blob Storage中的数据 基本操作 使用C 修改文件属性 遇到问
  • 运用Microsoft.DirectX.DirectSound和Microsoft.DirectX实现简单的录音功能

    1 首先要使用Microsoft DirectX DirectSound和Microsoft DirectX这两个dll进行录音 需要先安装microsoft directx 9 0cz这个组件 百度云盘下载地址 http pan baid
  • HTML5实现音频和视频嵌入

    简介 HTML5未出来之前 在线的音频和视频都是借助Flash或者第三方工具实现的 现在HTML5也支持了这方面的功能 在一个支持HTML5的浏览器中 不需要安装任何插件就能播放音频和视频 原生的支持音频和视频 为HTML5注入了巨大的发展
  • 基于线性预测的语音编码原理解析

    早期的音频系统都是基于声音的模拟信号实现的 在声音的录制 编辑和播放过程中很容易引入各种噪声 从而导致信号的失真 随着信息技术的发展 数字信号处理技术在越来越多领域得到了应用 数字信号更是具备了易于存储和远距离传输 没有累积失真 抗干扰能力
  • Android合并音频文件

    java view plain copy 需求 将两个amr格式音频文件合并为1个 注意 amr格式的头文件为6个字节的长度 param partsPaths 各部分路径 param unitedFilePath 合并后路径 public
  • AMR文件格式的解释

    一 什么是AMR AMR WB 全称Adaptive Multi Rate和Adaptive Multi Rate Wideband 主要用于移动设备的音频 压缩比比较大 但相对其他的压缩格式质量比较差 由于多用于人声 通话 效果还是很不错
  • AMR 文件解析及编解码流程

    CONTENT AMR简介 AMR 话音质量评定 AMR 文件结构解析 AMR 帧结构解析 AMR 帧读取算法 AMR 解码原理及流程 AMR 模式选择自适应机制 一 AMR 简介 基于新的网络和新的要求 无论是从节省传输频带资源 还是保持
  • A²B汽车音频总线介绍

    A B使远程I S TDM成为可能 I S是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准 该总线专责于设备之间的数据传输 广泛应用于各种多媒体系统 I C是两线式串行总线 用于连接微控制器及其外围设备 简单来说就是I C传
  • 六、Audio-ALSA架构中的codec

    一 codec简介 处理器如果既想 听到 外界的声音 又想向外界传达自己的 心声 那么就需要同时用到 DAC 和 ADC 这两款芯片 那是不是买两颗 DAC 和 ADC 芯片就行了呢 答案肯定是可以的 但是音频不单单是能出声 能听到就行 我
  • DirectX编程:利用 DirectSound 录音

    DirectX编程 利用 DirectSound 录音 转载 http www cnblogs com stg609 archive 2008 10 24 1318931 html 花了一阵子 把DirectX安装后自带的帮助文件中的那部分
  • Using DirectSound to Play Audio Stream Data

    Download demo project 30 5 Kb Download source 3 27 Kb Introduction This article with its code shows how to play audio st
  • 内行看门道:看似“佛系”的《QQ炫舞手游》,背后的音频技术一点都不简单

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯游戏云发表于云 社区专栏 内行看门道 看似 佛系 的 QQ炫舞手游 背后的音频技术一点都不简单 3月14日 腾讯旗下知名手游 QQ炫舞 正式上线各大应用商店 并迅速登上Ap
  • 麦克输入

    如图所示 单端输入只有一个输入引脚ADCIN 使用公共地GND作为电路的返回端 ADC的采样值 ADCIN电压 GND的电压 0V 这种输入方式优点就是简单 缺点是如果vin受到干扰 由于GND电位始终是0V 所以最终ADC的采样值也会随着
  • 实时音视频的那些事儿(三)—— 音频编码

    前言 上一篇文章 实时音视频的那些事儿 二 音频采集 中我们讲到了如何在iOS Android Windows平台实现音频采集 今天将介绍如何实现音频的编码 一 iOS 中使用 AudioUnit 实现音频编码的过程 AudioUnit 是
  • 免费音效素材网站,一次性介绍清楚

    不管是在游戏 电影 电视剧 短视频还是音频中 合适的音效能够更好的表达内容和渲染氛围 今天给大家分享几个免费音效素材 感兴趣的话可以接着往下看 一 制片帮素材 找音效 制片帮素材不仅有海量的优质视频素材 还有丰富的音效资源 分类清晰 更重要

随机推荐

  • APP开发如何批量生成不同尺寸的图标?

    在我们开发APP的时候 我们使用到大量的不同尺寸的APPLogo的图片 如下图 通常 我们的做法是和设计师沟通 让他们切出这儿所以的图片 然后我们一个一个图片放在对应的位置 这样处理的话 我们比较容易出错 比如说 图片的格式 苹果对图片的格
  • 4-数据结构-顺序表的查找

    说明 顺序表的查找 分为按照位置查找 返回对应值和按照值查找 返回该值位置 思路 getlist sqlist l int k 为按位查找 返回具体数值 locatelist sqlist l int k 按照值 去查找位置 因为顺序表都是
  • 吐血整理,性能测试-Jmeter分布式压测实战(超细详解)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • wiringPi引脚编号方式

    树莓派引出的20 2排针引脚 引脚定义使用gpio readall命令查看 如下 可以看到wiringpi库有三种引脚编号方式 分别为 BCM编号方式 就是使用芯片的GPIO引脚编号 wiringpi库编号方式 使用wiringpi库自己规
  • LR(1)项目集族的构造:如何确定前向搜索符(新版)

    旧版链接 https blog csdn net hhhhhhhhhhkkkkkkkkkk article details 19990287 按照这个标题搜进来的各位是不是以为这也是和课本一样的内容呢 其实这是我看了两天课本才理解出来的内容
  • C++ Primer笔记——查找算法

    目录 一 简单查找 find first last val find if find if not count count if all of any of none of 二 重复值的查找 adjacent find first end
  • Centos8 重新安装yum

    手残卸载了cnetos8自带的yum命令 然后各种搜索重新安装 有centos7下重新安装的 也有dnf重新安装yum的 结果都不好用 一 准备工作 重新安装yum前 请自行卸载yum相关参与包 卸载python rpm qa grep p
  • umi中操作mock中的数据实现搜索操作

    我们定义两个属性 分别是我们的原始数据和渲染的数据 const book setbook useState 原始数据 const sear setSear useState 用于渲染的数据 input搜索框绑定onChange事件 通过e
  • dedecms自定义内容模型怎么采集

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在用织梦cms系统进行网站开发时 经常会碰到各种各样复杂的需求 因此我们需要用到dedecms提供的自定义内容模型功能去添加自定义内容模型来满足需求 那么dedecms自定
  • 输入第一个字符串A,输入第二个字符串B,统计B在A中出现的次数 abcabcabd abc

    public class strCount public static void main String args 定义字符串 String str abc String ss abcabcabc 定义返回的次数 int count 0 f
  • 【C++ windows多线程使CPU 100%】

    用于windows 平台的CPU 100 预警测试程序 c 实现 cpp程序文件名 win32HighCpuTest cpp include
  • vue3中的setup方法

    一 vue2中的定义变量和方法的写法 在介绍v3的setup之前 我们先来看看在v2中是如何定义变量和方法的
  • stm32——PWM概述

    一 PWM生成方波 C51是用软件的方式进行模拟出方波 STM32F103C8T6中硬件就可以生成PWM方波 芯片中的PWM资源 高级定时器 TIM1 7路 通用定时器 TIM2 TIM4 各4路 共19路PWM 二 PWM输出模式 pwm
  • 【Redis】主从复制

    Redis主从复制 文章目录 Redis主从复制 搭建一主多从 复制原理 常用3招 一主二仆 薪火相传 反客为主 哨兵模式 sentinel 使用步骤 故障恢复 主机数据更新后根据配置和策略 自动同步到备机的master slaver机制
  • 每个程序员都必须遵守的编程原则

    每个程序员都必须遵守的编程原则 来源 外刊IT评论 发布时间 2011 09 03 16 15 阅读 1781 次 原文链接 全屏阅读 收藏 摘要 好的编程原则跟好的系统设计原则和技术实施原则有着密切的联系 本文是从 The Princip
  • Kafka消费者组重平衡(二)

    文章目录 概要 重平衡通知机制 消费组组状态 消费端重平衡流程 Broker端重平衡流程 概要 上一篇Kafka消费者组重平衡主要介绍了重平衡相关的概念 本篇主要梳理重平衡发生的流程 为了更好地观察 数据准备如下 kafka版本 kafka
  • 猫和老鼠服务器维修有问题,猫和老鼠手游老是掉线怎么办 频繁网络中断解决方法...

    猫和老鼠手游为什么老是掉线呢 许多玩家在玩的过程中频繁遇到这个掉线的问题 导致体验非常糟糕 有什么方法可以减轻或者彻底避免掉线的问题呢 下面小编就为大家介绍一下吧 1 信号不好 如果你是身处于火车 地铁 地下室 电梯 或者比较偏远信号不好的
  • Solidity学习笔记2——Webase积分合约

    代码段学习笔记 代码来源 Webase合约仓库 我只做了增加注释的工作用来记录相关知识点 pragma solidity 0 4 24 import SafeMath sol import Roles sol import Address
  • 特征值_特征值的性质:特征多项式角度

    本文从特征多项式展开角度介绍了特征值的性质 从而使读者有更加深刻的理解 一 特征值的性质 二 特征值性质的联系 若A为3阶方阵 我们将系数行列式展开 最后得到特征多项式如下 推导过程见李永乐线性代数辅导讲义 2021版 P2 评注 部分 现
  • AMR文件格式分析

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