音频重采样有什么用_音频基础与音频编码(AMR和PCM)

音频基础与音频编码(AMR和PCM)

1、音频基础

1.1 声音是什么

引用百度百科中对声音的一段描述:

声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次 振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率

大致来说,声音需要以下过程才能转变成计算机所能识别的音频编码:

bd115d163cee0442e942d4e8f69840dd.png

在介绍音频编码的整体知识之前,我们先认识在音频编码中的一些专业术语以及名词。

* 码率/比特率 = 采样率*采样大小*声道数 - 一般情况码率越高代表音频质量越高

* 采样率:每秒从连续信号中提取并组成离散信号的采样个数,一般为44.1KHz 16KHz 8KHz

* 采样大小:将采样个数的采样数据进行整合的单位大小,一般为16bit,8bit,即为一次1字节或者2字节,采样大小越大会使得音频更清晰。

人耳听见的声音范围是20Hz-20KHz,所以根据采样率来计算,每秒40KHz的采样率可以采样20Hz的声音2000次,采样20KHz的声音2次,而生活中大部分的声音都是低频的,所以40KHz采样率已经可以让声音极大程度的还原了。

1.2 有损和无损

我们经常会讨论说音频的有损和无损,其实呢,有损和无损是相对的。相对于大自然中的原始声音,计算机中音频无论怎么编码都是有损的,无法做到完全的复原。而我们大多数人口中的无损一般是指音频采样率为44.1KHz、采样大小16bit、双声道的音频,有损自然是相较于质量差的音频了。

2、音频编码

2.1 PCM

引用百度百科中对PCM的概念描述:

PCM 脉冲编码调制是Pulse Code Modulation的缩写。前面的文字我们提到了PCM大致的工作流程,我们不需要关心PCM最终编码采用的是什么计算方式,我们只需要知道PCM编码的音频流的优点和缺点就可以了。PCM编码的最大的优点就是音质好,最大的缺点就是体积大。我们常见的Audio CD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息。

PCM是一种波形编码,其记录的信息会尽可能的接近原始采集的信息,没有经过处理,所以体积大。一般来说,较高音质的PCM 1秒需要170KB的大小来存储。

2.2 AMR

AMR音频编码下面又分为两种,分别为:Amr-nb 和 Amr-wb

AMR-NB一般代表8bit 采样大小 8KHz 采样率的音频

AMR-WB一般代表16bit 采样大小 16KHz 采样率的音频

AMR一般用于语音通信的音频数据传输,其具有体积小,转码快,音质能满足基本需求的特点。

一般来说 1秒需要8KB左右

2.3 PCM编码

一段PCM编码的数据结构是非常简单的。因为PCM编码仅仅是将采样的音频数据原样的放起来,所以数据中并没有保存采样率,采样大小等信息。

对于一个16bit双声道的PCM编码数据如下:

ded87aaf560ac87784b8c7a7ab48e622.png

上图采样大小为16bit,每一次采样的氛围高8位和低8位。有两个声道,所以是按照声道0,1,0,1依次排列。

在音频里面,帧这个概念不如视频那么明显。对于音频来说,一帧可以变化的,对于44.1 KHz采样率的音频来说,通常1024个采样点为一帧。这样一帧的时间是23.22ms。由于在实际播放中,用户可以调整播放的速度,音频的加快或方面,所以加速播放即为让更多的采样点变为一帧,反之亦然。

2.4 AMR-NB编码

这里我们主要讨论AMR-NB,AMR-WB不做讨论。

首先AMR编码和PCM编码有着很大的不同,也不属于一种编码模型。

AMR编码器将原始的音频数据(PCM)经过AMR编码的模型处理后,才能得出AMR的音频数据。这个过程叫做编码。AMR编码模型主要分为以下几种:

cd0067f9eca5608cd38efb333efbc35f.png

这里我们主要以AMR_12.20来分析。其余的可以举一反三。

AMR_12.20 - 12.20kbps 代表码率为12.20kbps的AMR音频。

首先我们来看AMR音频文件的结构。

AMR文件头为6个字节固定,以这6个字节打头代表这是一个音频文件。

4a15a645994f0434a243a0bbc4823049.png

在AMR编码中,

1帧 = 20ms 1s = 50帧。

所以对于我们所选的AMR_12.20编码模型来说。我们可以倒退每一帧所需要的大小。

AMR_12.20 - 12.2 kbps

1帧 = 12200 / 50 = 244bit = 30.5Byte

而每一个语音帧都有1个字节的帧头。

所以一帧的大小为:

1Byte(帧头) + 30.5Byte(数据) ≈ 32Byte

c8d1e1624ff249695316ab1da953d26d.png

那么这30.5个字节的音频数据和PCM也是有很大区别的,主要结构如下:

2948ddad8826524e93d20fba26ed5c3d.png

这里解释一下每一个部分的作用:

AMR辅助信息这一块,一般来说记录这这个帧的类型,是否坏帧,以及一些其他帧的参数。这里就不做更加深入的介绍了,如需了解,可以查阅AMR-NB的相关编码文档。

Class A部分为整个音频帧数据最重要的部分,我们可以以重要程度排序为:

Class A > Class B > Class C

这三个Class都存储着AMR音频数据。我们可以理解为,如果Class A的数据缺失或者损坏,那么这一段音频帧将无法播放被丢弃。而Class C缺失或损坏依然不影响播放。

AMR 编码参考资料(RFC3276):

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

以上就是PCM和AMR编码的基本介绍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值