声音的产生与声音的数字化

2017-05-16 21:30:38 AudioLife

声音的产生

学过初中物理的我们知道,声音是一种机械波,由物体振动产生,需要介质来传播。所以,从本质上讲,声音就是一段时间轴上的波形,就像下面这样。

(图片截取自Adobe Audition)

声音有三要素:音调、响度和音色,波形是怎么反映这三要素的呢?

  • 音调由声波的频率决定,频率越高音调越高。
  • 响度由声波的振幅决定,振幅越高响度越大。
  • 音色是由波形的“形”决定的。

举个直观的例子。

上面的4张图中,图1、图2是方波,图3、图4是三角波。

  • 图1比图2的振幅大,因此图1波形表示的声音比图2的响度大。
  • 图3比图4的频率高,因此图3波形表示的声音比图4的音调高。
  • 图1和图2都是方波,方波的声音听起来像是“嗒——”;图3和图4都是三角波,三角波的声音听起来像是“嘟——”。

了解了以上几点之后,我们就可以知道:如果我们想生成一段声音,音调和响度都很容易控制,至于音色,我们可以自由选择,除了方波和三角波,我们还可以用正弦波,甚至是我自己画的波形,只要它是周期的。当然我们也可以从真实世界中对声音进行采样,这样就可以得到任何音色的声音了。

但是到目前为止我们讨论的都是单一波形的情况,那真实世界中的声音是什么样的呢?事实上,它们也只是基本波形的叠加而已,形成了第一张图那样的波形。傅里叶变换告诉我们,任何波都可以表示成正弦波的叠加。也正是因为这样,我们可以得到一段声音的频谱图。其中,横坐标代表时间,纵坐标代表频率,颜色代表振幅。因此,它实际上是一个三维的图。

另外,人耳只可以听到频率在20Hz-20000Hz之间的声音。事实上,随着年龄的增长,人对高频信号的感知力是在下降的,因此你可能听不到20000Hz的声音。

乐音的音高与频率

既然讲了声音的产生,就不得不说一下乐音。

以钢琴为例,我们知道,钢琴上有88个键,相邻的键之间相差一个半音,12个键构成一个八度,这叫做十二平均律。相差八度的音的频率是2倍关系,也就是每个音的频率为前一个音的2的12次方根。

于是根据这个规律,我们可以得到一个钢琴键频率对照表

也就是说,只要我们规定了一些音的频率,也就确定了它们的音高,再使用这些音的组合创作出乐曲就可以了。

声音的数字化

声音的采样

人耳接收到的声波是连续的,而计算机只能存储离散的信息,怎么解决呢?这就要我们对声波进行采样。

所谓采样,就是每隔单位时间获取一次当前时刻声波的y值。如上图,每个用小正方形标出来的点就是一个采样点。

因此,采样就是将连续的数据离散化的过程。

这种采样方法叫做脉冲编码调制(PCM)。

数模转换

我们不禁要问几个问题:

  • 采样采完了,我们还得知道怎么还原吧?
  • 为什么离散的信息可以还原成连续的信息?
  • 我们采样需要多精细才能做到不遗漏信息?

这几个问题的本质就是数模转换的问题。奈奎斯特定理告诉我们,只要采样率超过样本中最高频率的两倍,就可以借助傅里叶变换完全还原出波形。

也就是说,由于人耳只能听到20000Hz以下的声音,因此采样率只要超过40000Hz就可以了。

在计算机中,振幅被量化为一个数值,而在3.5mm音频口还原出的模拟信号中,是使用电平的高低来表示的。

音频文件的参数

一个音频文件,一般有5个重要参数:编码方式、声道数、采样率、位深、码率。

  • 编码方式:这个格式是怎么组织二进制数据的以及压缩方式等。
  • 声道数:单声道、双声道还是5.1声道等。
  • 采样率:每秒采样的次数。
  • 位深:用来存储采样点y值所使用的二进制位个数。
  • 码率:该文件每秒的所需的二进制位个数。

我们知道WAV格式是不存在压缩的,因此,它的编码方式就是直接把所有采样的点按顺序排列写到文件里。而且只要它的声道数、采样率和位深确定了,那它的码率也就固定了,我们也很容易计算出它的容量。

WAV文件大小(B)=声道数*采样率(Hz)*位深(bit)/8+文件头的大小(B)

WAV文件头一般是44B。

其他格式的音频文件由于使用不同的压缩算法,即使使用同样的声道数、采样率和位深,也可能会存在不同码率的区别,例如192Kbps和320Kbps的mp3文件,甚至还存在变长的码率。

采样率只要超过40000Hz就可以完整还原出所有人能听到的波形,常见的采样率有44100Hz和48000Hz。

位深常见的有8bit、16bit和24bit等,当然最常见的还是16bit。虽然振幅是相对的,8bit的255和16bit的65535都代表了振幅的最大值,但是它们在粒度上的表现力是不一样的。

古董电脑如何产生声音

你可以看看这个the8bitguy的视频How Oldschool Sound/Music worked或者B站的这个有字幕的版本。其核心就是使用简单的波形产生所需的音调。

以任天堂红白机为例,它使用两个方波通道产生主旋律和副旋律,一个三角波通道产生低音BASS,一个噪声通道产生鼓点节奏。

你可以使用FamiTracker这个软件,轻松做出这种效果的音乐。

现在我们通常将这个风格的音乐统称为8bit音乐,因为他们几乎都使用8bit的位深。但实际上产生这种声音效果的根本在于音乐使用的波形比较单一,而不是位深8bit和16bit的区别。其实如果你把一个位深为16bit的mp3转成8bit的wav(因为不能转成其他格式,其他格式可能就是以此为基础做的压缩),你基本上是听不出来差别的。

如果你对这篇文章很感兴趣的话,建议你读一读下一篇文章。

如果长时间无法加载评论,请对 *.disqus.com 启用代理!