音频应用

 找回密码
 快速注册

QQ登录

只需一步,快速开始

阅读: 6181|回复: 1

[音频] 数字音频编码概览

[复制链接]

1214

积分

1

听众

28

音贝

音频应用新手发布

Rank: 3

积分
1214
发表于 2008-4-5 | |阅读模式
音频应用公众号资讯免费发布推广
数字音频编码概览
什么是声音
我们每天都能接触到声音,你家的猫打个呼噜、隔壁邻居蹦个迪,你都能听到。简单来讲,振动就能产生声音,我们日常听到的声音由空气传播,固体和液体也一样能传播声音。从本质上来说,声音是波的一种。

声音具有哪些可以量化的数据
声道
众所周知,我们能够通过双耳感知到的声音定位声源。但如果捂上一只耳朵,就做不到这一点了。这就是说,单声道缺乏对声音的位置定位。一旦将声道增加一个,成为立体声,人就能分辨音乐中各种乐器的方向和距离,形成丰富的听音体验,当然,这也要求在录音时就将声音信号分配到两个独立的声道,这也是为什么 FPS 玩家那么需要一个好耳机以供「听声辨位」的原因所在。多声道同理,几个声道就需要在录制时分配几个声道的信号。

频率
声音的频率就是指介质每秒振动的次数,次数越多,频率越高,听起来越尖锐。它的单位是赫兹(Hz)。你在天热的时候拿扇子扇风,扇地快就是频率高,只要够快(显然你做不到),就能发出声音,这也是蚊子、蜜蜂能发出「嗡嗡」声的缘故。

振幅
声音的振幅就是指介质振动两端距离的一半,距离越远,振幅越大,听起来越响亮。我们还是拿扇子做例子,你让扇子摆动的幅度越大,同等频率下,扇出来的风也越大。

音频编码
脉冲编码调制(PCM,即 Pulse-code modulation)
PCM 是一种用数字表示采样所得的模拟信号的方法。它是计算机、光盘、数字电话和其他数字音频应用程序中数字音频的标准形式。PCM 的原理是以相等的间隔采样模拟信号的幅度,再将每个幅度量化到某个最接近的数值。PCM 的两个基本属性决定了对原始模拟信号的保真度:采样率和位深度。

采样率(Sampling rate)
采样率,就是每秒采样的次数,单位是赫兹(Hz)。为涵盖人类的听觉范围(20~20000 Hz),采样率通常选择 44.1 kHz(CD)及以上(采样定理:如果要从相等时间间隔抽取的采样数据中毫无失真的恢复原模拟信号,则采样频率必须大于等于模拟信号最高频率的两倍)。换言之,采样率决定了所能准确记录的声音频率的上限。

位深度(Bit depth)
位深度,就是每个采样的位数,直接决定了采样的分辨率高低。每增加 1 bit,分辨率就翻倍,因此,16 bit(CD)位深度具有 65536(2^16)个可能值的位深度。我们一般认为 1 bit 对应于 6 dB 的信噪比(SQNR,即 Signal-to-quantization-noise ratio),16 bit 的位深度可带来 96 dB 的信噪比,或曰「动态范围(dynamic range)」。

抖动(Dither)
抖动 可使动态范围在不提高位深度的情况下大幅提升,通过 噪声整形(noise shaping) 抖动,动态范围可提升至 120 dB 甚至更高。它是 CD 母带制作的最后一步。抖动的原理是什么呢?我们以拥有 8 个值的波形为例,记为 1~8,如果波形减小了 20%,则得到以下的新值:

0.8 1.6 2.4 3.2 4.0 4.8 5.6 6.4

由于它们不是整数,因而需要重新量化,量化时有不同的方案,比如直接截断,得到:

0  1  2  3  4  4  5  6

抑或是四舍五入:

1  2  2  3  4  5  6  6

每当波形达到 3.2 这个值,所得结果都会偏离 0.2;而每当波形达到 4,却又不会产生任何错误。在整个波形中,误差的大小会反复且有规律地变化(误差和信号完全相关,比如原值是 6.4,就一定会跑偏 0.4),这种变化导致的量化误差会产生额外的离散频率的声音,这种声音就是一种 失真(distortion),也就是和原本的声音不一样了。

抖动,便是先增加位深度,在多出来的位深中加入随机噪声,然后再将位深度减回去。如此一来,多出来的声音与原本的波形就没有了相关性,大脑对于这样的杂音就会认为是无意义、不重要的,并将之忽略,我们的目的也就达到了。

比特率(bit rate)
比特率 指的是单位时间传输或处理的比特数,单位是千比特每秒(kbps)。对于电脑上音频数据的比特率可以通过以下公式计算:

比特率 = 采样率 × 位深度 × 声道数

对于 CD-DA,我们有:

44100 × 16 × 2 = 1411200 bps = 1411.2 kbps

电脑中的文件单位一般是 MB(兆字节),1 B = 8 bit。则抛去文件头和元数据,只算音频数据,可有如下公式:

文件大小 = 采样率 × 位深度 × 声道数 × 时长 ÷ 8

80 分钟(4800 秒)的 CD-DA 会占用约 847 MB 的空间:

44100 × 16 × 2 × 4800 ÷ 8 = 846720000 bytes ≈ 847 MB

WAV(Waveform Audio File Format)
WAV 由微软与 IBM 公司所开发的,在个人电脑存储音频流的编码格式标准,受到 Windows 平台应用软件的广泛支持。WAV 容器存储的 PCM 音频未经压缩,因而它的体积相当庞大。上述的文件大小计算公式也同样适用于 WAV。

AIFF(Audio Interchange File Format)
AIFF 是由苹果公司于 1988 年 1 月 21 日发布的音频文件格式标准,用以在个人电脑和其他电子音频设备存储音频数据。多数 AIFF 存储的音频数据也是未经压缩的 PCM。

DSD(Direct Stream Digital)
DSD 是索尼和飞利浦为其 SACD 的数字重建音频信号系统使用的商标。它使用脉冲密度调制(PDM,即 pulse-density modulation)编码,信号以 积分-微分调制(Delta-sigma modulation)的数字音频形式存储。它的规格是 1 bit 位深度,2.8224 MHz 采样率(CD 采样率的 64 倍,位深度的 1/32768)。与之相近的 PCM 规格是 20 bit/96 kHz。

此后,DSD 的采样率还在继续攀升,出现了二倍速、四倍速、八倍速的 DSD,名称分别是 DSD128、DSD256、DSD512,因其采样率是 CD 的 128、256、512 倍而得名。

DSD 的缺点在于它不能被软件直接处理,也就是说不能数字后期制作;当前最佳的数字处理方法是采用 24 bit/352.8 kHz 的 PCM 格式录音及后期制作,然后再转换成 DSD 格式。

容器(container)
容器 用以标识和兼容不同种类的数据。较简单的容器格式能容纳多种不同的音频格式,而较高级的容器格式则能支持多条音频和视频流、字幕、章节信息和元数据(标签)——以及回放它们所需的同步信息。像前文中提到的 WAV 和 AIFF 都是音频专有的容器,而当下在民间广受喜爱的多媒体容器当属Matroska(MKV),几乎可以容纳任何内容。

格式(file format)与编解码器(codec)
格式,就是一种将信息编码存储在电脑文件中的标准方法。它限定比特在数字存储介质中以何种方式编码信息。格式分收费和免费的,也分开源和不开源的。那么操作系统要怎么确定文件的格式呢?答案是,根据文件名最后一个句点后的字母。而文件名的这一部分就被称为文件扩展名(filename extension)。我们通常称呼的「LOG 文件」、「CUE 文件」、「FLAC 文件」正是因其文件扩展名而得名。音频文件格式 是一大类格式。

编码(encoding)能将源头的信息转化为便于通信或存储的符号,解码(Decoding)则是将其逆向还原的过程,将代码符号转化回收件方可以理解的形式。因此,在将连续的波形以电脑可以理解的形式(比特流)存储时,需要经过编码,PCM、DSD 都是编码方法,成功存储了从模拟信号转换而来的数字信号。

前文中提到的 WAV 和 AIFF 都存储了未经压缩的 PCM,因而体积庞大,聪明的科学家们就开始思考如何压缩它们以节约空间。举个例子吧,现在我在黑板上写了一串文字:AAAAACCCCCCCCCCCCCBBBDDDDDDDDDDDDDDDDDDD,允许你抄,但是要尽快,然后我会擦掉它们,要你一模一样重写出来,你会怎么抄?你可能会写成「5A13C3B19D」,是不是从数据量上来说就变少了?但是信息量没有变化,你看着这段小抄可以丝毫不差地把我原来写给你的文字重现出来,这就是无损压缩编码的原理所在,因为数据是有规律可寻的。因此,比特率不能作为独立的音频/视频质量度量标准,因为更有效的压缩方法能使用较少的比特编码完全相同的数据。

所以你可以发现,音频编解码器实际上所做的是将音频文件从一种编码方式转换成另一种以实现缩减体积的目的,它是一个纯数字的过程,这个过程就是所谓的 转码(transcoding)。因此,虽说叫编解码器,但实际上做的事情是转码,同时,它也能将转码后的文件再转换回去。编解码器(codec) 正是编码器-解码器(coder-decoder)的混成词。

无损压缩固然好,但体积大致只能减少 40%,人们仍不满足,希望瘦身更多,那怎么办?抛弃一些原始数据吧!那抛弃谁呢?手心手背都是肉啊。科学家一拍脑门,嘿,人的听力范围不是有限么?我们扔掉超出人类听力范围的数据不就好了吗?当然了,丢弃足够多的数据后,必然会影响到人类听力范围内的数据,所以有损压缩的目的就是在「欺骗」人类感官的同时尽可能地减小体积。

特别注意:「无损压缩」只能保证压缩前后数据量没有任何变化,并不能补回已经丢失了的数据,将有损格式转码到无损格式,音质只能不变糟。而若是以有损格式作为素材再转码到另一种有损格式,数据的损失会非常厉害,这两种行为都应该杜绝。

无损格式与无损编解码器
FLAC(Free Lossless Audio Codec),意为「自由无损音频编解码」,开发者是 Josh Coalson 和 Xiph.Org 基金会。注意,此处的 free 所指的乃是 自由软件,而非免费。FLAC 压缩的音频在品质上无任何损失,这和 Zip、WinRAR 一样,但 FLAC 的压缩比率要大得多,因为它是专门为音频压缩设计的。它采用流媒体的方式存储数据,即每一帧的压缩数据都包含了那一帧内容的所有数据,因此即便是「缺胳膊少腿」,剩下的部分也能正常播放,错误的部分则会被跳过。FLAC 是最快且支持最广泛的无损音频编解码,它还内建了 MD5 校验机制,便于检查文件的完整性。

Vorbis 注释是一种元数据格式,类似于 ID3 和 APE 标签,由 Xiph.org 指定用于 (Ogg) Vorbis 和 FLAC。这是一种相对简单的格式,允许用户使用 UTF-8 Unicode 作为字符编码来指定字段名/值组合。为避免不兼容,Vorbis 注释规范建议了一些标准字段名(TITLE、VERSION、ALBUM、ARTIST、TRACKNUMBER 等)。每个字段名都是允许的,且值没有强制性格式。每个字段名可被多次使用。相较于 ID3,Vorbis 注释在规则上相当自由。不过,为建立 Vorbis 注释规范的一种标准,人们已经付出了一些非官方的努力。

ALAC(Apple Lossless Audio Codec)由苹果公司开发。ALAC 的数据存储在 MP4 或 MOV 容器中,其文件扩展名分别是 .m4a 或 .mov。由此可见,编解码器名和容器名并不一定相同,这是值得注意的一点。

APE(Monkey's Audio)免费,开发者是 Matt Ashland。其用户主要使用 Windows 系统,与其他无损编解码器相比,其解压速度较慢。此外,在文件有损坏或错误时,会直接导致不能播放。

WavPack 是一款免版税、开源的无损或高音质有损音频编解码,开发者是 David Bryant。它支持压缩 DSD 音频,这是值得注意的一点。

TTA(True Audio)免费、简单、实时。

TAK(Tom's lossless Audio Kompressor)声称它的压缩性能和 APE 差不多好,解压速度和 FLAC 差不多快。不过它既不开源,也无硬件支持,没有流行起来也在情理之中。

Windows Media Audio Lossless 在 WMA 编解码器中自然是山中无老虎,猴子称大王,和其他无损编解码器比起来,并没有什么出彩之处。



备注:

压缩设置来自每种编解码器的默认设置,速度基于此测出,相互之间的速度对比也基于此。
压缩比指的是压缩后体积/压缩前体积 × 100%,所以是越小越好。
错误处理指的是编解码器能够检测文件中的错误(位反转现象)并警告用户,但仍将解码文件的其余部分。
官方的 Monkey's Audio 解码器并不支持在解码时克服错误,但FFmpeg 或 Winamp 能增益其所不能,虽然在「Insane」预设使用时恐怕就不能了。
非官方(但工作正常)的 TAK 开源解码器可作为 FFmpeg 的一部分获取到。
有损格式与有损编解码器
MP3(MPEG-1 Audio Layer 3)格式非常著名且流行,设计初衷便是为了大幅缩减音频数据的体积,但听起来仍与原始未压缩的音频相差无几。MP3 有损音频数据压缩算法利用了人类听觉的感知限制,即听觉掩蔽。

LAME 是 Hydrogenaudio 推荐的 MP3 编码器。从 1998 年起,开源社区就一直在开发它,目前它已是中高比特率下最佳的 MP3 编码器。它的优点包括但不限于:高度优化的预设、高度可定制性。

MP3 分为多个帧,每个帧都有特定的大小,以比特率表示。如果整个文件中每个帧的比特率都相同,则该文件被视为 恒定比特率(CBR,即 Constant Bitrate)。否则,它是 可变比特率(VBR,即 Variable Bitrate)。LAME 提供 CBR 和 VBR 编码模式,以及被称为 平均比特率(ABR,即 Average Bitrate)的特殊 VBR 编码模式。

对于 CBR,MP3 最高可达 320 kbps。对于 VBR,LAME 提供从 V0 到 V9 的多种选择,但本站只允许 V0、V1 和 V2,显而易见,数字越小,品质越好。V0 和 320 kbps 的品质并无什么差别,但比特率平均下来大约在 256 kbps。它还有个曾用名,叫做 APX(即 alt-preset fast extreme),APX 的小伙伴叫做 APS(即 alt-preset standard),也就是现在的 V2,嗯,好记多了。需要着重讲解的是 ABR。

ABR 是 VBR 的一种形式,编码器将尝试达到目标平均比特率,同时也允许比特率在音频的不同部分之间变化,无非是变化的幅度没有 VBR 那么大。对于既希望各帧获取最佳比特率,有希望文件大小可预测的用户而言,ABR 无疑是最佳选择。准确的 ABR 编码通常需要编码两遍,因为编码器在第一遍编码时无法知道音频的哪些部分需要最高的比特率进行编码。

MP3 并无存储内容相关信息的原生方案,除了一些简单的是/否参数,有如「private」、「copyrighted」和「original home」(表示这是原始文件而非副本)。此问题的一条解决之道是引入由 Eric Kemp(别名 NamkraD)于 1996 年制作的名为 Studio3 的软件:通过在文件尾部增加一小块额外数据,便能使 MP3 文件携带音频相关信息。

在数据被调用时,标签的位置是可能是挑选过的,因此它几乎不会干扰解码器的工作。这样选择是为了便于检测固定的 128 字节大小。在这 128 字节中,前三字节总是「TAG」;它们作为这确实是一个 ID3 标签的身份识别。歌曲标题、艺术家、专辑和注释字段各被预留了 30 字符,年份则被预留了 4 字节。流派标签只占 1 字节:在类型字段中输入的值对应于预定义列表中的值,列表中共有 80 个条目,范围是 0 到 79。

IDv1.1 有个小改进:从注释字段中拿出 2 字节提供给音轨编号。

IDv1.1 允许嵌入多得多的元数据;每个帧(或曰元数据字段)能包含几乎任何可能的信息类型,包括了标题、专辑、表演者、歌词、均衡器预设、专辑艺术家和其他图像,还有更多。ID3v2 格式被塑造成容器格式以做到这一点。这就允许在 ID3v2 标签中创建新的帧而无需担心它们会破坏其他项目:所有的 ID3v2 解析器会简单地忽略任何它们无法识别的帧。每个帧都可达 16 MB,整个标签可达 256 MB。此外,ID3v2 支持 Unicode 作为标准,允许元数据以任何语言创建。

ID3v2 标签一般加在 MP3 文件的头部,允许音频播放器在文件末尾被读取前显示标签元数据(对于流式 MP3 文件很有用)。然而,对于也可被添加至文件尾部的 ID3v2.4,它意味着任何 ID3 帧中长度的改变不一定会引起整个文件的重写。

加了 ID3v2 标签的文件在并未为支持它们而设计的播放器上播放的时候,通常不会有什么问题。它们是同步安全的,允许 MPEG 音频解码器确定标签不包含音频数据,然后安全地跳过。

尽管 ID3v2 旨在支持大量空间密集型功能,例如内嵌图片和内含文件,但具有讽刺意味的是,ID3v2 仍尝试尽可能高效地使用字节,并允许压缩每个帧。如果你将 ID3v1 标签转换为 ID3v2 标签,后者可能会变得小一些。但如果你将使用了所有字段(就是说,每个字段都用尽 30 字节)的 ID3v1 标签转换为 ID3v2 标签,它会变大 56 字节。

下图展示了 ID3v1、IDv1.1 和 ID3v2 是如何布局的:

  

AAC(Advanced Audio Coding)格式是 MPEG-4 系统标准的一部分,也是流行 MP3 格式的正式继承者。与 MP3 一样,AAC 格式是一种国际标准,并得到了杜比、索尼和诺基亚等多家知名公司的支持。它使用 MP4 容器(基于苹果的 MOV 容器)以存储元数据(即标签信息),文件扩展名是 .m4a(同 ALAC)。

现如今常见的 AAC规格有三种:LC-AAC(最基本,LC 即 low complexity,低复杂性),HE-AAC(AACPlus v1,HE 即 high efficiency,高效性),HE-AAC v2(AACPlus v2)。

HE-AAC:用容器的方法实现了 频段复制(SBR,即 Spectral Band Replication)技术。音乐的频率主要集中在低频段,但高频段对于音质起着决定性作用。如果一次性编码整个频段,会因为了保护高频而用过多比特编码低频造成文件体积的庞大;反之,就会明显降低音质。SBR 将高低频分开编码,化解了这一矛盾。
HE-AAC v2:用容器的方法实现了 参数立体声(PS,即 parametric stereo)技术。原本,在其他规格相同的情况下,立体声是单声道文件大小的两倍,但是很显然,两个声道的数据存在着某种相似性,去掉相似的部分不就可以减小文件体积了么?于是 PS 存储一个声道的所有信息,然后用少量信息去描述另一声道与该声道的不同之处。
AAC 的编码器有很多种,包括但不限于苹果(Apple AAC)、Nero AG(Nero Burning Rom 的创建者),抑或是开源的、与 LAME 相似的 FAAC。

Apple AAC:由苹果公司开发,包含在苹果的音频框架 Core Audio 之中。Core Audio 应用于 iTunes、Safari 浏览器和其他苹果产品中。它被认为是最优质的中比特率 CBR 和 VBR LC AAC 编码器之一。
Nero AAC:由 Nero AG 发布的可免费获取的一套软件,包含了 LC 和 HE AAC 编解码器以及元数据工具。它仅限于个人非商业/技术评估用途。
FAAC(Freeware Advanced Audio Coder):最古老的免费且开源的 AAC 编码器,它几乎可用于所有Linux发行版。它随附有解码器,名为 faad2。
当下的 AAC 编码器(推荐程度递减):

Apple AAC M/W
Fraunhofer FDK AAC S/L/M/W
Nero AAC L/W
FFmpeg 3.0+ AAC encoder S/L/M/W
FAAC S/L/M/W
Libav (pre-3.0 FFmpeg) AAC encoder S/L/M/W
备注:S=可获取源代码;L=Linux;M=macOS;W=Windows

Vorbis:一种完全开放、非专有、无专利和免版税的通用压缩音频格式,用于中到高质量(8~48 kHz,16+ bit,多声道)CBR 和 VBR,从 16 到 >256 kbps/声道的音乐。这使 Vorbis 与诸如 AAC 之类的音频编码同场竞争,且与 MP3、WMA 等相似,但性能更高。Vorbis 是 Xiph.org 的 ogg 多媒体项目的一部分。

它的问题在于,官方开发比较有限(因而始终鼓励第三方开发);与 MP3 相比,某些实现所需的解码计算量更大。

Opus:由国际互联网工程任务组(IETF,即Internet Engineering Task Force)开发,适用于互联网实时互动应用的音频传输,音乐、演讲什么的。在低比特率(64~96 kbps)下是非常有竞争力的存储和回放格式。

WMA(Windows Media Audio):微软的压缩音频格式,它是一系列正在使用的多个编解码器的通用名称,包括:Windows Media Audio(WMA)、Windows Media Audio Professional (WMA Pro)、Windows Media Audio Voice 和之前已经提到过的 Windows Media Audio Lossless。微软还开发了一种数字容器格式,称为高级系统格式(ASF,即 Advanced Systems Format),用于存储 WMA 编码的音频。该容器支持 数字版权管理(DRM,即 Digital rights management)。

网易云用户对 DRM 应该不陌生,它曾推出文件扩展名为 .ncm (NetEase Cloud Music)的音频文件,非得用网易云音乐才能播放不可,然而它就是加了层壳的 FLAC,被反对派戏称为「脑残吗」。QQ 音乐也推出了带 DRM 的音频格式,叫 QMC,这无疑是开历史的倒车。热爱自由的互联网用户与 DRM 的斗争从来就没有停止过,手段包括但不限于开发破解软件、向有关公司提起诉讼等。
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

2万

积分

4

听众

-766

音贝

音频应用初级会员

Rank: 6Rank: 6

积分
20046
发表于 2008-4-5 |
数字音频编码概览 ;P ;P
欢迎厂家入驻,推文!免费!微信:yinpinyingyong
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

音频应用搜索

小黑屋|手机版|音频应用官网微博|音频招标|音频应用 (鄂ICP备16002437号)

Powered by Audio app

快速回复 返回顶部 返回列表