在游戏里,我们经常会听到凄厉的风声、怪物的号角,甚至人物惨死时的叫声,音乐和声效是游戏的重要组成部分,那么它们是如何播放的呢?
《取悦的工序:如何理解游戏》这本书由十个短篇组成,每篇围绕着不同的主题,介绍游戏开发的原理和过程,试图解答一款制作精良的游戏到底是怎么做出来的。它并不是为专业的游戏制作者们写的,相反,它是以科普为主要目的,更加强调易读性,而不是细致性,旨在给非行业内的读者们一个大概的介绍。看完这个系列的文章后,当你再次进入一款游戏的时候,你或许会有不同的感受。
本文是《取悦的工序:如何理解游戏》中的第七章。
查看前文:
音乐和声效是游戏的重要组成部分。这篇文章说说声音是如何播放的。
在《图片是怎么画到屏幕上的?》一文里,我们把游戏设备画图的过程看做是给屏幕上每个像素格子赋值的过程。像素格子知道自己被赋予何种颜色之后,会根据这个颜色发出相应的光波,于是我们透过屏幕看到了一个五颜六色的世界。
那么如何把声音和数值联系起来呢?
假设游戏里有个西瓜,这个西瓜被切掉的时候需要发出“噗嗤”的叫声。
现在我们拿起麦克风,然后对着它噗嗤一下。声源(你的喉咙)在振动的时候会不断地扰动周围的空气,空气在它的扰动下形成了一道疏密波。我想了半天也不知道怎么组织有效的语言来说清楚这事,直接看图吧:
图里深黄色的区域空气比较稠密,浅黄色的区域空气比较稀疏,所以叫疏密波。图片里某个固定的地方,空气的疏密程度随着时间一直在变化,如果我们在这里放一个麦克风,麦克风上有个敏感的振动膜,它会被这附近的空气挤得一抖一抖,这一抖就在麦克风里产生了一个大小随着时间变化的电压,这就是“噗嗤”的模拟信号。
接着呢,我们要把模拟信号转变为数字信号。这个转变是通过采样来完成的。
我们可以把采样想象成这么一个过程:在麦克风里有一个电路,它的电压随时间在不断地抖动着,我们每过一会就去看一下此刻的电压是多高,并且把这个数字记录下来。那么一段时间以后,我们就会得到一系列的电压值。这一系列数值就是“噗嗤”的数字信号。假如我们手够快,一秒钟能记录44100次,那么我们就说采样率是44100赫兹。显然,采样率越高,记录下来的这组数字就越接近原始的声音。
这一系列的数值,经过编码后,变成了一个叫做“噗嗤.mp3”的文件。到这里为止,我们已经把声音表达成数据了,就像我们把颜色表达成三个数字一样。
如果你看过《西瓜是怎样被切掉的?》一文,你就知道,在游戏者划掉西瓜的时候,游戏会立刻改变西瓜的状态,跳到下一个状态时,游戏突然发现咦西瓜爆掉了,于是它得把爆掉的场面画出来,现在则多了一个事情:播放了上面那个“噗嗤.mp3”。
播放的过程和录音的过程相反。现在,我们只有一列数据,而原始的模拟信号已经没有了。为了还原它,我们得想个办法把两次记录之间的电压值给补上,这个过程叫做插值,对应着上文所说的采样过程。插值的方法很多,例如最简单粗暴的,在两次记录之间插入第一次的电压值。通过插值,我们把数字信号变成模拟信号——一个随着时间抖动的电压,这个抖动着的电压则会让扬声器的膜片产生振动,于是,空气在它的扰动下又产生了一道疏密波:“噗嗤”。这道疏密波传到游戏者的耳朵,引发鼓膜的振动,最后传递到他们的大脑里。
于是,在看到西瓜爆裂的一瞬间,我们也听到了它的一声叹息。