Featured image of post 数字音频基础

数字音频基础

本文旨在言简意赅地帮助刚入坑的萌新建立对数字音频的基本正确理解,打下良好的基础。

如果需要视频的直观讲解,可以看这个 视频合集

波形的数字化

让我们从声音的本质开始讲起,注意,声音的本质绝对不是复读机,人类才是。声音的本质是什么?

对呀,声音不就是一种机械波嘛!那采样率是什么呢?简单来讲就是你每秒钟去测量它多少次嘛!

你看,这不就有了交点了吗?

采样率越高,是不是就能采到越多的点啦?

那我们实际在听的 CD 音质的采样率有多少呢?高达 44.1 kHz。也就是每秒钟要测量它 44100 次。

那位深度是什么?就是你在采样的时候,这个点的高度能有多接近波形,看吧,如果位深度非常不够,采样到的点就能差上十万八千里:

如果我们增加一位位深,也就是位深的数量翻倍的话,采到的点会精细一些。

由此看来,我们只要让这个网络足够细密,就能够比较完美地复原真实的波形了,但是似乎总是有偏差,看起来像是一条折线,对吗?

但我想说的是,这种被广为传播的解释方式是完全错误的!我们从数字信号还原模拟信号的时候,原理根本就不是这样!它的原理更接近:

能感受到其中的区别吗?我们之前所谓的采样,它得到的不是一个时段的位深,而仅仅是一个个分立的采样点,在把数字信号还原成模拟信号的时候,我们实际上是在利用这些点去构建波形,所以很多人脑海中理解的所谓「锯齿」是根本不存在的东西。好,下面我们要提到「采样定理」。

采样定理

如果信号带宽小于被采样频率的二分之一(奈奎斯特频率),那么此时这些离散的采样点能够完全表示原信号。

采样定理,也叫奈奎斯特–香农采样定理。下面举个例子。

一个车轮,每根辐条都有编号,一共是八根,这个车轮呢,每 8 秒转动一周,也就是在下一秒钟,1 移动到 2 的位置,2 移动到 3,以此类推。现在啊,我们给它拍照,如果我们每 8 秒拍摄一张照片(T = 8),在我们眼里它怎么样啊?

静止不动,对不对?

那如果每 4 秒拍一张(T = 4)呢?你会认为它动了,但是旋转的方向不知道,对吗?

那我们每 5 秒拍一张(T = 5)呢?

在这种情形下,我们会认为它是逆时针一次转 3 格而非顺时针一次转 5 格。这也就意味着,如果用低于奈奎斯特频率的采样率去采样,最后会还原出虚假的低频信息。不知道你小时候有没有这样的经验:看一些汽车逐渐加速,它的轮子在其中一段时间仿佛会反着转,对吗?

而如果用 3 秒为周期去采样就不会有这个问题。

数字音频的规格

在了解了上述两个重要概念以后,我们就可以很方便地计算音频文件的大小了。 上述原理构建的未压缩的音频文件的格式是 WAV,它就是我们计算的对象。

已知 CD 品质的音频文件采样率为 44.1 kHz,位深为 16 bit,双声道,则其所对应的 WAV 文件的比特率为?

答案是 1411.2 kbps。比特率 (bps) = 采样率 × 位深 × 声道数。比特率所指的就是文件每秒钟的大小,那通过它,我们也能很方便地计算整个文件的大小:文件大小 (B) = 比特率 × 时长 (s) ÷ 8。那这里为什么要除以 8 呢?你可以看到,文件大小的单位是大写的 B,而比特率的单位里有个小写的 b,它们的关系就是,一个大写的 B 即一字节等于 8 个小写的 b 也就是比特,所以要除以 8。看到这里,人们就不禁犯嘀咕了,我的天,这 WAV 文件的体积也太臃肿了,要怎么解决这个问题呢?

接下来,我会展示一行文字,我需要你以最快的速度记录它,可以用纸笔,然后复原到空白的地方,注意,请尽可能快,因为你只有 10 秒时间。

F F F F T T T N N N N N N N N N S S S S S S

结果如何?

你大概率会按 4F 3T 9N 6S 去记忆。

刚才这个过程已经揭示了数据压缩的诀窍,那就是寻找其中的规律并使用较短的数据描述较长的数据,而这种压缩是绝对无损的,能够在解压时得到逐位精确的结果。

那么利用无损压缩原理的音频格式有哪些呢?目前非常主流的代表就是 FLAC,同时,它还有另外一个杀手锏,那就是可变比特率。

像刚才的 WAV 文件,我们算出来每秒的比特率都是一样的,这就叫恒定比特率,那顾名思义,可变比特率就是比特率每秒都不同,这对于数据的压缩很有好处。举个例子,常规的歌曲,一般都有前奏、高潮这些复杂度不同的部分。对于复杂度较低的前奏,少给一点比特率,而对于复杂度较高的高潮,就多给一点比特率,这样既能保证质量,又能减少空间占用,没有比这更美妙的了。

此外还有一种,叫做平均比特率,它的原理是,每秒的比特率不一样,但是整个文件平均下来,每秒的比特率会达到你预设的那个值。

最后,向你推荐我翻译的一部科普视频 Digital Show & Tell,它能帮你进一步理解上述内容。

Written by ZexWoo. All rights reserved.
主题 StackJimmy 设计 | 使用 Hugo 搭建