AAC音频格式分析

AAC概述 

    AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。

    AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。 

AAC规格简述 

      AAC共有9种规格,以适应不同的场合的需要:

       MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了

  编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点

       MPEG-2 AAC Main 主规格

       MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)

       MPEG-4 AAC LC低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中

  的音频部份就包括了该规格音频文件

       MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好

       MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)

       MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

      MPEG-4 AAC LD 低延迟规格(Low Delay)

      MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有Nero ACC 编码器支持

       

      目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术

AAC音频格式分析

              Hev1和HEv2用此图简单表示:

            (图中AAC即指的是原来的AAC-LC) 

 

      HE:“High Efficiency”(高效性)。HE-AAC v1(又称AACPlusV1,SBR),用容器的方法实现了AAC(LC)+SBR技术。SBR其实代表的是Spectral Band Replication(频段复制)。简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。

 

      HEv2:容器的方法包含了HE-AAC v1和PS技术PS指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。 

频段复制(SBR)

       简要叙述,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质。如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质。SBR把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾。
 

参数立体声(PS)

       对于之前的立体声文件来说,其文件大小是单声道的两倍,但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以PS技术存储了一个声道的全部信息,之后,用很少的字节当作参数来描述另一个声道和它不同的地方。 

AAC特点 

       (1)  AAC是一种高压缩比的音频压缩算法,但它的压缩比要远超过较老的音频压缩算法, 如AC-3、MP3等。并且其质量可以同未压缩的CD音质相媲美。

       (2)  同其他类似的音频编码算法一样,AAC也是采用了变换编码算法,但AAC使用了分辨率 更高的滤波器组,因此它可以达到更高的压缩比。

       (3)  AAC使用了临时噪声重整、后向自适应线性预测、联合立体声技术和量化哈夫曼编码等最新技术,这些新技术的使用都使压缩比得到进一步的提高。

     (4)  AAC支持更多种采样率和比特率、支持1个到48个音轨、支持多达15个低频音轨、具有多种语言的兼容能力、还有多达15个内嵌数据流。

     (5)AAC支持更宽的声音频率范围,最高可达到96kHz,最低可达8KHz,远宽于MP3的16KHz-48kHz的范围。

     (6)不同于MP3及WMA,AAC几乎不损失声音频率中的甚高、甚低频率成分,并且比WMA在频谱结构上更接近于原始音频,因而声音的保真度更好。专业评测中表明,AAC比WMA声音更清晰,而且更接近原音。

     (7)AAC采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力。 

AAC音频文件格式 

   1. AAC的音频文件格式有ADIF & ADTS:

       ADIFAudio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

      AAC的ADIF格式见下图:

AAC音频格式分析

       ADTSAudio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

AAC音频格式分析

      图中表示出了ADTS一帧的简明结构,其两边的空白矩形表示一帧前后的数据

      简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的目前一般编码后的和抽取出的都是ADTS格式的音频流

ADIF和ADTS的header

        ADIF 的头信息:

AAC音频格式分析

  ADIF头信息位于AAC文件的起始处,接下来就是连续的 raw data blocks。

     组成ADIF头信息的各个域如下所示:

AAC音频格式分析

     ADTS 的固定头信息:

AAC音频格式分析

·  syncword:帧同步标识一个帧的开始,固定为0xFFF

·  ID:MPEG 标示符。0表示MPEG-4,1表示MPEG-2

·  layer:固定为'00'

·  protection_absent:标识是否进行误码校验。0表示有CRC校验,1表示没有CRC校验

·  profile:标识使用哪个级别的AAC。1: AAC Main 2:AAC LC (Low Complexity) 3:AAC SSR (Scalable Sample Rate) 4:AAC LTP (Long Term Prediction)

·  sampling_frequency_index:标识使用的采样率的下标

·  private_bit:私有位,编码时设置为0,解码时忽略

·  channel_configuration:标识声道数

·  original_copy:编码时设置为0,解码时忽略

·  home:编码时设置为0,解码时忽略

     ADTS的可变头信息:

AAC音频格式分析

·  copyrighted_id_bit:编码时设置为0,解码时忽略

·  copyrighted_id_start:编码时设置为0,解码时忽略

·  aac_frame_length:ADTS帧长度包括ADTS长度和AAC声音数据长度的和。即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length

·  adts_buffer_fullness:固定为0x7FF。表示是码率可变的码流

·  number_of_raw_data_blocks_in_frame:表示当前帧有number_of_raw_data_blocks_in_frame + 1 个原始帧(一个AAC原始帧包含一段时间内1024个采样及相关数据)。

 

1)帧同步目的在于找出帧头在比特流中的位置,13818-7规定,aac ADTS格式的帧头同步字12比特1111 1111 1111”.

2)ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信则在帧与帧之间可变

  3.AAC元素信息

       在AAC中,原始数据块组成可能有六种不同的元素

       SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个

           原始数据块最可能由16个SCE组成。

       CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体

            声编码信息组成。一个原始数据块最多可能由16个SCE组成。

       CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息

           或者多语种程序的对话信息。

       LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。

       DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。

       PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在

            ADIF 头部信息中。

       FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。

 

   4.AAC文件处理流程

       (1) 判断文件格式,确定为ADIF或ADTS

       (2) 若为ADIF,解ADIF头信息,跳至第6步。

       (3) 若为ADTS,寻找同步头。

       (4)   解ADTS帧头信息。

       (5)   若有错误检测,进行错误检测。

       (6)   解块信息。

       (7)   解元素信息。

 

术语说明

AAC: Advanced Audio Coding 高级音频编码

AAC LC: AAC with Low Complexity AAC的低复杂度配置

AAC plus: 也叫HE-AAC, AAC+,MPEG4 AAC LC加入SBR模块后形成的一个AAC版本

MPEG:Motion Picture Expert Group

IMDCT:反离散余弦变换

ADIF:Audio Data Interchange Format 音频数据交换格式

ADTS:Audio Data Transport Stream 音频数据传输流

SCE: Single Channel Element单通道元素

CPE: Channel Pair Element 双通道元素

CCE: Coupling Channel Element 藕合通道元素

DSE: Data Stream Element 数据流元素

PCE: Program Config Element 程序配置元素

FIL: Fill Element 填充元素

ICS: Individual Channel Stream 独立通道流

PNS: Perceptual Noise Substitution 知觉噪声替换

SBR: Spectral Band Replication 频段复制

TNS: Temporal Noise Shaping 瞬时噪声整形

ch:channel 通道

PS:parametric stereo 参数立体声

SBR:Spectral Band Replication 频段复制

参考

AAC 文件解析及解码流程

AAC的ADTS头解析