我的笔记

灵感、随想与新技术
10 六月 2020

音频开发技术(一)数字音频基础知识



本教程面向开发【音频处理/音乐制作】类软件,如效果器、虚拟乐器、宿主、采样音源、应用了音频效果的应用与游戏。

不涉及编解码,不涉及语音识别。

 

前言

写这教程两个原因:

1.填补资料空缺

2.帮助想做 音源 或 VST/AU/AAX插件 的人

 

早在2017年,我就尝试写过几节《用JUCE开发VST插件》,当时阅历尚浅,卡在一些小问题上,教程也就搁置了。

再次想起这个教程,已是三年后。上网搜了下,国内在这方面至今还是没什么靠谱的资料。于是决定动笔。

现在我对音频技术有了更多的了解,在这版课程中,我有信心教会你一个完整且系统的知识体系。

说到采样,采样率,位深,声道等,你可能觉得再熟悉不过。但我希望你耐心看下去,因为你可能并根本不知道它们是什么意思。



(编程语言,不要求会写C++,了解任何一门面向对象的语言都可以,用到C++特性的时候我会详细讲的。本教程大部分示例使用JUCE,但是原理放之四海皆准。)

 

 

声音的本质

声音是人的直观感觉,它在物理世界中体现为空气的振动(压强变化)。

 

声音与电信号之间的转换 (ANALOG)

我们已经知道,声音是空气中的振动,现在用电路的方式把空气中的振动记录下来。

十九世纪,贝尔实验室发明了电话,人类第一次把声音转换成电信号。

【变化的磁场产生电场】一块磁铁前放一个贴有线圈的振动膜就做成了麦克风,声音的空气振动带动振膜振动,线圈随着振动,磁场相对也就振动着变化,然后就产生了电压连续变化的电流,这样一段声音就转化成了电信号。

【变化的电场产生磁场】依然是一块磁铁前放一个贴有线圈的振动膜,完全一样的结构在这里却是扬声器,把信号电流通向线圈,线圈在连续变化的电流下产生连续变化的磁场,这个磁场和磁铁的磁场相互作用,然后产生振膜的振动,振膜的振动又带动空气振动,于此电信号就变回了声音。

直到20世纪末,人类都是通过这样的电信号处理声音,唱片,磁带 记录的就是这样的电信号。

 

电信号与数字信号之间的转换(ADDA)

 

预备知识:比特

随着计算机的出现,我们有了比特的概念。

计算机记录与操作的是二进制的数据,也就是只有0和1两个数的数据,比如数字7转化为二进制就是111(4+2+1)。

类似于十进制的 个、十、 百、 千、 万 位, 二进制的位叫做比特(bit)

比如1001就是一个四个比特位的二进制数据

8个比特位称作一个字节(Byte) 像这样 10011100

1024个字节称为一个千字节(KB)

1024个千字节为一个兆字节(MB)

1024个兆字节为一吉字节(GB)

1024个吉字节为一个太字节(TB)

举个例子,一段大小为16MB的 .wav 文件 它包含的就是 16*1024*1024*8 个1或0这样的数据。

 

采样技术

我们已经知道,计算机里操作和储存的只能是像101010这样的一串二进制数字,而音频的电信号则是一段连续变化的波形电信号,为了把这个连续的波形电信号记录成计算机里101110这样的数据,就要采样。

 

比如一个1秒的波形

 

打了17个点,每隔十七分之一(1/17)秒打一个点,每个点记录波形在那个时间上振动到的位置(纵轴),这种记录就是采样。

这样 一段电信号就变成了一堆点。

 

那我用什么表示 每个点的振动位置呢 ?

用数字,比如我用1-3的,3代表在轴最上方,2代表在轴中央,1代表在轴最下方,第一个点在轴中央,就用2表示,二进制就是10, 第二个点在轴上方,用3表示,二进制就是11,取完17个点之后

得到整个信号的采样为 10 11 10 01 10 11 10 01 10 11 10 01 10 11 10 01 10

(PS: 真实情况中,每个点表示的位置绝不仅仅是在轴上下那么简单,还要考虑幅度多大,例如我们提升精度,用1-5表示,3代表轴中央,1代表轴最下方,2代表轴最下方二分之一处,5代表轴最上方,4代表轴最上方二分之一处。)

 

这样操作之后,我们得到以下几个概念。

 

术语

 

    采样频率(sample rate): 每秒打17个点,就说它的采样率是17Hz。44.1KHz就是说1秒内打44100个点,96KHz就是1秒打96000个点。采样频率指单位时间内采集的点数。

 

    采样深度(bit depth): 每个点只用1-3,也就是二进制01-11, 用了2个比特位 的精度表示,就说它的采样深度是 2 bits, 采样深度越大,每个点描述的振动位置就越精确,记录的动态也就越准。16 bits就是说每个点用16个二进制位表示0000 0000 0000 0000,转换成十进制范围就是0-65535,换句话说就是把动态空间分成65535段来表示在这个点时波形振动到了其中的哪一段位置。采样深度指取样中对声音强度记录的精细程度。

 

    比特率(bit rate):  每秒17个点且每个点用2个比特位,它的比特率就是每秒17*2个比特(bit),就说它的比特率是34bps (bit per second)。 比特率指单位时间内传送的比特量。

 

    声道(channel) : 实际操作中,我们处理的往往是立体声,甚至是环绕声,而不是单声道,每一个声道都是一个独立的采样序列,立体声就是左右声道,两个采样序列。如果本例是立体声,它的比特率则要翻一倍 34*2 = 68bps。

 

无损音频(lossless): 像本例这样的,直接采样得到后,没有经过任何压缩处理的,(比特率直接等于 采样频率*采样深度*声道 的),属于无损音频,即使它的采样频率和采样深度都非常低,它仍然是无损音频。所以,音质不一定和是否无损相关。

 

采样定理 :也叫香农采样定理、奈奎斯特采样定律为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。

采样频率不等于被采样的信号的频率,采样频率只是取点的频率,如果采样频率小于信号频谱最高频率的2倍,就会出现aliasing现象,还原的波形会发生畸变,点这观看aliasing现象。

我说个更直观的,比如以1Hz采样频率采样一个1Hz的Sine波,那把采样点连起来则是一个1Hz的三角波,他们虽然波形大致相同,但是泛音特征完全不一样的。

人耳听到的最高频一般在16000Hz左右 保留一点余量,就算是20000Hz,根据采样定理,取它的两倍做采样频率则是40000Hz (40KHz),这就是现代设备采样频率至少为44100Hz的原因。

 

为什么是44100

因为 44100 刚好等于 2^2 * 3^2 * 5^2 * 7^2

这会让运算变得简单

 

 

课程进度10%

上海外滩 – StudioEIM // MapleStory
  1. 上海外滩 – StudioEIM // MapleStory
  2. 神木村 – StudioEIM // MapleStory
  3. MapleStory – StudioEIM // MapleStory
  4. Pantheon – StudioEIM // MapleStory
  5. 逐梦飞翔 – StudioEIM // MapleStory
  6. 魔法密林 – StudioEIM // MapleStory