AAC(Advanced Audio Coding,高级音频编码)是一种感知音频编码技术。它诞生于1997年,由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司联合开发,旨在取代MP3格式,在相同的比特率下提供更好的声音品质。2000年,AAC被纳入MPEG-4标准,增加了PNS(Perceptual Noise Substitution,感知噪声替换)等新技术。
本文将从心理声学原理、核心编码工具、规格与封装格式三个层面,深入拆解AAC的工作原理。
一、核心基石:心理声学模型
AAC之所以能用较低的比特率保持高音质,其核心秘密在于心理声学模型。简单来说,这个模型会分析音频信号,并计算出人耳能感知到的掩蔽阈值。
1.1 听觉掩蔽效应
人耳对声音的感知并非线性,存在两种关键的掩蔽效应:
- 频域掩蔽:一个强信号(如鼓声)会“盖住”它附近频率的弱信号。AAC会计算出这个掩蔽曲线,将被掩蔽的、听不见的频率成分丢弃。
- 时域掩蔽:强信号出现前/后的短暂时间内,人耳灵敏度会降低。AAC利用此特性处理信号瞬变。
基于这些原理,AAC的心理声学模型会计算出每个频段的 “信掩比”(Signal-to-Mask Ratio),指导后续量化过程——给需要被“掩蔽”的频率成分分配更少的比特,甚至直接丢弃,从而在保证主观听感的前提下,大幅压缩数据量。
1.2 量化与编码:双循环控制
在心理声学模型计算出掩蔽阈值后,AAC进入量化与编码阶段。AAC使用了双循环控制(Two Nested Loops) 结构来精确控制每个帧的比特消耗和量化噪声:
- 外层循环(Rate Loop):检查编码后数据是否超过目标比特数,若超过则调整量化步长(量化步长越大,数据量越小,质量也越低)。
- 内层循环(Distortion Loop):检查量化噪声是否已低于心理声学模型计算出的掩蔽阈值,若低于则停止,否则进一步调整量化步长。
通过这两个循环的反复迭代,AAC能在文件大小和声音质量之间取得最佳平衡。
二、核心编码工具
除了心理声学模型,AAC还集成了一系列先进的编码工具:
2.1 滤波器组(Filter Bank)
AAC使用 MDCT(Modified Discrete Cosine Transform,改进型离散余弦变换) 将时域音频信号转换到频域。它支持两种块长度:
- 长块(1024点):适用于稳态信号(如弦乐),频率分辨率高,压缩效率好。
- 短块(128点):适用于瞬态信号(如打击乐),时间分辨率高,能有效避免“预回声”(Pre-echo)失真。
2.2 时域噪声整形(TNS)
TNS是AAC一个非常重要的工具。它通过在频域上进行预测,来精确控制量化噪声在时域上的分布形状。对于类似打击乐的瞬态信号,TNS能将量化噪声“整形”到信号能量高的区域附近,从而显著抑制“预回声”现象。
2.3 立体声编码(Joint Stereo Coding)
AAC提供了两种高效的立体声编码技术,用于消除左右声道间的冗余:
- M/S(Mid/Side)立体声:记录“左右声道之和(M)”与“左右声道之差(S)”。当两个声道内容相似时,差值(S)的能量很小,可以用极少比特编码,大幅提升压缩效率。
- 强度立体声(Intensity Stereo):利用人耳在高频区域对相位不敏感的特性,在高频部分只用一个声道加方向信息,从而节省比特。
2.4 预测(Prediction)与PNS
- 预测(Prediction):利用已解码的前一帧数据来预测当前帧,只需编码预测误差,能有效去除信号间的冗余。但在AAC LC规格中被禁用,以降低复杂度。
- PNS(Perceptual Noise Substitution,感知噪声替换):对于类似噪声的信号(如风声、镲片声),编码器不传输具体频谱,而只传输一个“噪声”参数,解码端据此重建相似的噪声信号,能大幅节省比特。
三、AAC的规格(Profile)与封装格式
3.1 AAC的常见规格(Profile)
AAC提供了多种规格以适应不同场景,常见的一些如下:
| Profile | 特点 | 典型应用 |
|---|---|---|
| AAC LC | 最常见规格,复杂度低,音质优异 | 音乐流媒体(Apple Music、YouTube)、便携播放器 |
| HE-AAC (v1) | AAC LC + SBR(频段复制)。SBR技术专门编码高频成分,在低码率下效率极高 | 数字广播(DAB+)、低码率流媒体 |
| HE-AAC v2 | HE-AAC v1 + PS(参数立体声)。PS技术用极少数据描述立体声信息 | 极低码率(< 32kbps)的音频流,如移动网络广播 |
| AAC-LD | 低延迟(Low Delay),算法延迟极低 | 实时双向通信:视频会议、在线游戏 |
3.2 两种常见的封装格式:ADIF vs ADTS!!!!!
AAC编码后需要封装成文件或流,主要有两种格式:
-
ADIF(Audio Data Interchange Format,音频数据交换格式):
- 所有数据共用一个头信息。
- 特点:必须从头开始解码,无法随机访问和从中间开始播放。
- 用途:适合本地文件存储。
-
ADTS(Audio Data Transport Stream,音频数据传输流):
- 每一帧(1024个采样点)数据前都有一个独立的头信息,头部包含同步字
0xFFF。 - 特点:解码器可随时找到同步字并从任意一帧开始解码,非常适合网络流媒体传输。
- 每一帧(1024个采样点)数据前都有一个独立的头信息,头部包含同步字
总结: AAC编码的整个过程,可以理解为:高分辨率MDCT变换将信号映射到频域;心理声学模型计算出人耳听不到的“冗余”信息;TNS、M/S立体声、预测等工具进一步去除信号间的相关性;量化与Huffman编码对最终数据进行高效的无损压缩;最终数据以ADTS格式封装,用于实时传输,或以ADIF格式存储为本地文件。这一套精密流程,造就了AAC在同等码率下优于MP3的声音品质。