音频基础与音频编码(AMR和PCM)
1、音频基础
1.1 声音是什么
引用百度百科中对声音的一段描述:
声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次 振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率
大致来说,声音需要以下过程才能转变成计算机所能识别的音频编码:
在介绍音频编码的整体知识之前,我们先认识在音频编码中的一些专业术语以及名词。
- 码率/比特率 = 采样率*采样大小*声道数 - 一般情况码率越高代表音频质量越高
- 采样率:每秒从连续信号中提取并组成离散信号的采样个数,一般为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编码数据如下: 上图采样大小为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编码模型主要分为以下几种:
这里我们主要以AMR_12.20来分析。其余的可以举一反三。 AMR_12.20 - 12.20kbps 代表码率为12.20kbps的AMR音频。 首先我们来看AMR音频文件的结构。
AMR文件头为6个字节固定,以这6个字节打头代表这是一个音频文件。 在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
那么这30.5个字节的音频数据和PCM也是有很大区别的,主要结构如下:
这里解释一下每一个部分的作用: 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编码的基本介绍。
本文由博客一文多发平台 OpenWrite 发布!