音频入门
声音三要素
-
音调
声音震动的频率。高音低音、女声男生。
-
音量
声音震动的幅度。
-
音色
取决于材质,本质是谐波。
人类听觉范围
在进行音频压缩时,对于特定赫兹的数据(比如超声波和次声波),可以选择忽略。音频的量化与编码
量化的过程
五张图代表不同的阶段:
-
截取一个音频片段
-
对音频振幅进行采样
若干次横向均分量化
-
对音频高度进行量化
若干次纵向均分
-
对片段进行编码
将量化的音频信息进行二进制转化
-
数字信号转化
在二进制
1
位置时进行发声
-
采样大小
一个振幅高度采样用多少位(bit)存放。通常是16位(bit)
-
采样率
在音频中,每秒采集的高度信息次数。8k、16k、32k、44.1k、48k
不同的编码方式有不同的采样率,比如AAC
使用的是44.1k采样率。
-
声道数
单声道,双声道,多声道
码率计算
采样率×采样大小×声道数
AAC
编码压缩后可以大概128kb/s,AAC HE V2
编码可以达到32kb/s。
音频压缩
有损压缩技术
消除冗余数据
关于冗余信息:
- 超出人类听觉范围
- 被遮蔽掉的音频信号
- 频域遮蔽
- 时域遮蔽
- 频域遮蔽效应
一个声音会掩盖另一个声音(图中横向为频率,总想为分贝)。
红色声源
会掩盖其他紫色声源
而无法掩盖绿色声源
白色区域
虽然在人耳听觉范围之内,但是由于音量不够,也是听不到的。
- 时域遮蔽效应
当一个高分贝的声音出现时,其前后一定时间内的低分贝声音会被遮蔽
该图横向为毫秒,纵向为分贝
编码过程
无损压缩
哈夫曼无损编码
音频编解码器
常见的音频编解码器:OPUS、ACC、Vorbis、Speex、iLBC、AMR、G.711
OPUS
当前十分流行的音频编解码器。内部具有基于口(速度快)、耳(高保真)两个编解码模型。
AAC
也是一种流行的音频编解码器。具有高保真的特性,由于RTMP协议的支持性良好,主要应用于直播业务中。
Speex
在AAC与OPUS之前的主流音频编解码器。包括回音消除,降噪等等辅助模块。
G.711
固话的编解码器
解码器的比较
网上的测评结果中:OPUS>ACC>Vorbis
上图中横轴是音频编码码率,纵轴是音频频带信息。从图中我们可以获得如下几方面信息。
(1)对于固定码率的编码标准,如G.711或者G.722,图中采用单点表示,说明这两个编码标准是固定码率编码标准。其他如Opus、Speex,它们的曲线是连续的,说明这类编码标准是可变码率的编码标准。
(2)从频带方面看,G.711、G.722、AMR和iLBC等标准适用于narrowband(8khz采样率)和wideband(16khz采样率)范围,针对普通的语音通话场景。AAC和MP3适用于fullband(48khz采样率)范围,针对特殊的音乐场景。而Opus适用于整个频带,可以进行最大范围的动态调节,适用范围最广。
(3)从标准的收费情况看,适用于互联网传输的iLBC、Speex和Opus都是免费且开源的;适用于音乐场景的MP3和AAC,需要license授权,而且不开源。
AAC编解码器
应用范围广
- 大部分的直播系统。
- RTMP传输协议支持ACC与Speex,但并不支持OPUS。
- 音频编码可以做到高保真。
产生的目的
取代MP3格式
MP3使用的是MPEG-2编解码规范的有损压缩。 而AAC使用的是MPEG-4规范,压缩率更高,损耗更小。
常用规格
AAC LC
、AAC HE V1
、AAC HE V2
对应关系如下所示
-
AAC LC (Low Complexity)
低复杂度,码流128kb/s
-
AAC HE V1
在
AAC LC
的基础上增加了SBR(Spectral Band Replication)
,码流64kb/s左右
SBR指的是
简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。
SBR把频谱切割开来,降低低频波段的采样率以减少文件大小,提高高频波段的采样率以提高音质。
-
AAC HE V2
在
AAC HE V1
的基础上增加了Parametric Stereo)
,码流32kb/s左右
PS指的是
原来的立体声文件文件大小是一个声道的两倍。
但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
AAC音频文件解析
-
ADIF
Audio Data Interchange Format 音频数据交换格式
这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
-
ADTS
Audio Data Transport Stream 音频数据传输流
种格式的特征是它的每一帧头部都包含一个同步字,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
-
二者区别
简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。
目前一般编码后的和抽取出的都是ADTS格式的音频流。
二者的头部信息以及组织结构也有区别,具体可以参阅
AAC的编解码库
Libfdk_AAC > ffmpeg AAC > libfaac > libvo_aacenc
其中最常用的是Libfdk_AAC
AAC文件处理流程
1. 判断文件格式,确定为ADIF或ADTS。
2. 若为ADIF,解ADIF头信息,跳至第6步。
3. 若为ADTS,寻找同步头。
4. 解ADTS帧头信息。
5. 若有错误检测,进行错误检测。
6. 解块信息。
7. 解元素信息。