🎬 第四章 音频基础
📄 一句话概括

连续的声音要变成计算机能存的东西,必须走采样 → 量化 → 编码三步;这三步的取值直接决定了音频文件有多大。

📝 本节和前面几节的关系

4.1.1 说了声音是什么,这一节讲它怎么变成计算机能处理的数字。

一、为什么要数字化

模拟信号有两个绕不开的毛病:复制会一次次变差,而且没法检索与编辑。 磁带翻录一次糊一点,想找出第 3 分 12 秒那句话更是无从下手。 数字化之后,数据变成一串数字——可以无损复制、可以精确定位、可以被程序加工。 这就是第 2.4.1 节讲过的那件事:数字化不是【更好听】,是【能被计算】。

二、三步走:采样、量化、编码

第一步 采样:把连续曲线按固定间隔量下来——每秒量多少次就是采样率。 第二步 量化:每个采样点的值只能取有限档——有多少档就是位深。 第三步 编码:把这一串数字按标准写成文件——这一步决定文件长什么样。 三步各有取舍,但共同决定了音频的数据量。

三、一条算式:CD 音质有多大

拿最常见的 CD 音质算一遍:采样率 44100 Hz、位深 16 bit、双声道。 每秒原始字节 = 44100 × 16 ÷ 8 × 2 = 176,400 字节 一分钟 = 176,400 × 60 = 10,584,000 字节 ≈ 10.1 MB 也就是说,一首 4 分钟的未压缩歌就接近 40 MB——这就是后面必须压缩的理由。

四、采样定理:为什么是 44100

采样定理(奈奎斯特定理)说的是:采样率必须大于信号最高频率的 2 倍,否则会失真。 人耳上限约 20 kHz,2 倍就是 40 kHz——所以 CD 取了 44.1 kHz,留了一点余量。 反过来,如果采样率低于这个门槛,高频成分会【折回】到低频,听上去是刺耳的杂音。 这个现象叫混叠,4.1.8 还会再遇到它。

五、动手 Demo:一段声音变成数字,走了三步

采样、量化、编码——三步之后,声音就成了可以存储和压缩的数据。

sr, bit, ch = 44100, 16, 2      # 采样率、位深、声道
per_sec = sr * (bit // 8) * ch
print("采样率 %d Hz,位深 %d bit(%d 档),声道 %d" % (sr, bit, 2 ** bit, ch))
print("每秒原始字节 = %s" % format(per_sec, ","))
print("一分钟原始   = %.1f MB" % (per_sec * 60 / 1024.0 / 1024))

实跑输出:

--------------------------------------------------------------------
一段声音变成数字,走了三步
--------------------------------------------------------------------

采样、量化、编码——三步之后,声音就成了可以存储和压缩的数据。

  原始声波:连续曲线,任一点都有值

  第一步 采样:每秒量 44100 次 → 得到 44100 个点
  第二步 量化:每个点取 65536 档之一 → 每点 2 字节
  第三步 编码:按标准压成码流 → 每秒若干比特

  以 CD 音质为例:
    采样率 44100 Hz
    位深   16 bit(65536 档)
    声道   2(立体声)

  每秒原始字节 = 44100 x 16/8 x 2 = 176,400 字节
  一分钟原始   = 10,584,000 字节 = 10.1 MB

  这一步的数字,就是 4.2 节要压缩的对象。

三个参数一乘,就是未压缩音频的体积公式:采样率 × 位深 ÷ 8 × 声道 × 时长。 这一步算出来的数字,就是 4.2 节要压缩的对象。

30 秒实验

  1. 用这条公式算一下你手上一个 [16 bit / 44.1 kHz / 双声道] 音频的每秒字节数。
  2. 再看它转成 MP3 后的实际码率,两者的倍数就是压缩比。

常见误区

  1. 以为采样率越高越好。超过人耳上限的部分只是白占空间。
  2. 把位深当成音量。位深决定的是量化精度(动态范围),不是响度。
自测三问(点开对答案) 1. 模拟信号变数字要走哪三步? —— 采样、量化、编码。 2. CD 音质一分钟的原始数据有多大? —— 约 10.1 MB(每秒 176,400 字节)。 3. 采样定理说的是什么? —— 采样率要大于信号最高频率的 2 倍,否则会混叠失真。

相关笔记