64K动画技术剖析:Mod音乐的制作和使用
一. 什么是MOD音乐
MIDI总该知道吧,不知道的话这里再简单介绍一下:所谓MIDI,即 Musical Instrument Digital Interface,音乐设备数字接口,其实就是一种通信标准,来作为音乐设备之间、音乐设备与PC之间传输MIDI信号的约定规范。逐渐地,MIDI也就成了电脑音乐的代名词,现在我们所说的“MIDI音乐”,通常也就是指使用电脑和数字音乐设备制作出来的音乐,特别地,有时也是指一种存储MIDI信息的文件格式,即标准MIDI格式(Standard MIDI File Format, SMF),后缀名一般为“mid”。通俗来说,MIDI音乐文件可以看做是一张乐谱,记录了何时演奏某个音符,何时停止某个音符,以及各个音符的音色、力度、声像、表达、延音等一系列控制信息。而MIDI播放器相当于一个演奏者,在回放MIDI音乐文件的时候,根据文件中记录的MIDI信息演奏出原本的音乐来。当然,在演奏的时候,光有谱也是不靠谱的,还得有乐器才行。在MIDI文件中并不携带有乐器的音色或者采样信息,而仅仅是给出了一个编号,告诉你应该用哪种乐器来演奏。那么各个不同的编号到底是代表哪些乐器呢?这里又涉及到了一个标准,General MIDI,GM。这个标准规定了128种旋律乐器的排放顺序,比如编号0代表原声钢琴,编号1代表明亮的原声钢琴,编号25代表原声钢弦吉它等等。这样,在MIDI音乐制作者与MIDI播放器之间都建立了统一的切口,在制作MIDI音乐文件中指定了何种乐器,在回放时也会以某一乐器来演奏。但是这样还是有一个问题,因为即使是同一样乐器,音色的差距也是十万八千里,比如几百块和几万块的小提琴拉出来的声音肯定有区别。于是MIDI文件回放的质量也依赖于所采用的音色库的质量。通常在你的电脑已经上预装一个基本的音色库,那就是Microsoft GS 波表合成器。这套软波表的平衡性极好,但是音色也极烂,这就是为什么MIDI音乐播放起来像花生壳刮黑板的原因。如果希望改善一下MIDI文件的回放质量的话,可以采用Roland或者Yamaha的波表合成器来替换Microsoft GS 波表合成器,也可以使用Timidity加载SF2音色来进行回放,等等。
一不小心长舌了。上面说了这么多关于MIDI的东西,只是为了引出MOD音乐格式。MIDI格式虽然文件极小,但是牺牲了回放的质量和一致性。而通常的wav、mp3等采样格式虽然回放质量高,但占用空间较大。MOD格式其实是这二者的折中,同MIDI格式一样,MOD也记录了乐谱信息(当然,与MIDI文件的记录方式有所不同),但是同时也记录了所用到的乐器的采样信息,这样就解决了回放的一致性问题(虽然,相同的MOD音乐文件在不同的播放器上回放的效果可能仍有差别,但基本上可以忽略)。
MOD音乐由于其占用空间小,回放质量高的特点,在早期的游戏和其它媒体程序中得到了广泛的应用。虽然现在由于存储介质越来越廉价,各种采样音乐格式(比如mp3)成了更好的选择,但是MOD音乐还是有其用武之地。比如大家经常用到的各种软件的注册机、算号器,其背景音乐通常就是MOD音乐。直正将MOD音乐运用到极致的则是64k Intro,即大家所说的64k动画。这也是我写这篇文章的动机。
二. MOD音乐的制作
制作电脑音乐,需要用到一个十分重要的工具——音序器(Sequencer)。音序器的作用相当于在编写程序时用到的IDE,在音序器中,可以进行音符的录入,各种控制信息的录入等操作。制作MIDI音乐常用到的音序器有Steinberg公司的Nuendo/Cubase,Cakewalk公司的Sonar,以及Image-Line公司的专用于制作舞曲的FL studio(俗称水果)等等。另外,有一款国产的音序器也还不错,即中音公司开发的TT音乐家,这款音序器支持简谱输入,还提供自动伴奏的功能,非常适合于初学者。
制作MOD音乐当然也需要用到音序器,一般叫做Tracker。比较常见的Tracker有Scream Tracker,Fast Tracker,Impulse Tracker等。通常各种Tracker都拥有自己的MOD音乐格式,比如Scream Tracker的格式是.s3m,Fast Tracker的格式是.xm,Impulse Tracker的格式为.it,其中,Fast Tracker的.xm格式最为常见,因此本文也只涉及到.xm格式的MOD音乐。
虽然.xm格式来源于Fast Tracker,但后者并不是制作.xm格式的MOD音乐的唯一选择,支持.xm格式的Tracker还有Milky Tracker,ModPlug Tracker等。Milky Tracker可以被认为是Fast Tracker的一个跨平台的仿真版本,界面和操作都与Fast Tracker十分相似。而ModPlug Tracker是标准的Windows界面,支持多种MOD音乐格式,较容易上手。下面是Fast Tracker2和ModPlug Tracker的运行截图。
本文将要使用的Tracker是Milky Tracker,最新版本为v0.90.80,可以在这里免费下载。该软件的主界面如下图。
即使是有过一些MIDI音乐制作经验的人,在初次使用这种Tracker软件时,也一定会很茫然,根本摸不着北,空有一肚子好乐思而无处施展。熟悉的五线谱窗口不见了,钢琴卷帘窗口也找不着了,于是就连输入一个简单的音符都不知道从哪下手。反而满屏都是一些稀奇古怪的16进制数字,顿时就晕了。这里很有必要介绍一下一些基本的概念。
在MOD音乐的世界中,一首曲通常是由一系列的Pattern组成(这点跟水果等基于LOOP的音序器很相似),每个Pattern由一系列的Channel组成,每个Channel又有若干Row,一个Row即是一行,为最基本的音符信息编辑单位。在Fast Tracker/Milky Tracker中,一个Row的格式是这样的:XXX-XX-XX-XXX,比如C-3 02 30 037,其中C-3为音符名,02是乐器的编号,30是音量(音量的范围为0到40之间,注意这两位也有可能是其它的控制信息,具体请查看Milky Tracke的帮助文档),037是效果信息(Effect),其中第一位0代表是琶音效果,后两位37是效果的参数,部分常用效果及其参数意义如下表所示。
刚才说了,MOD音乐中的Pattern跟水果中的Pattern在概念上很相似,但是二者还是略有不同。水果中的Pattern是一个二维的概念,多个Pattern不仅可以横向(时间轴方向)组合,而且还可以纵向组合(即多个Pattern可以在同一时刻上进行叠加组合)。而MOD音乐中的Pattern是个一维的概念,各Pattern只能横向组合,不能纵向组合,在同一时刻只能有一个Pattern。此外,MOD音乐中的Pattern在音序的控制上相对要灵活许多,比如通过跳转指令,可以立刻终止当前Pattern,并跳转到下个Pattern的某个Row处继续播放。
三. Milky Tracker的其它一些操作说明
了解了上面介绍的一些概念后,下面再来看看Milky Tracker的一些基本操作。
上图是Milky Tracker的主菜单。一些主要按钮的意义如下:Zap是重置按钮,Smp. Ed.是打开采样编辑器,Ins. Ed.是打开乐器编辑器,Play Sng是播放乐曲,Pat是播放当前Pattern,Pos是从光标所在行开始播放,Rec是切换编辑模式。其它按钮的作用可以参考其标题文字,就不在一一解释了。这里需要注意的是,在Milky Tracker中有两种模式,即编辑模式和非编辑模式,只有在编辑模式下,才能进行音符的输入。这两种模式可以通过Rec按钮或者快捷键“Space”来切换。
上面的音序窗口,用于指定各个Pattern的播放顺序。最左边的0,1是order号,也即是乐曲进行的序号,order号总是从0,1,2,3…递增。稍右边的数字00,00则是每个order所对应的Pattern号,比如在上图中共有两个order,这两个order对应的Pattern都是00,那么整个乐曲也就是将00号Pattern播放两遍。点击Ins.按钮可增加一个Pattern,BPM是乐曲的播放速度,Spd是指一个Row中的tick数。Add是指当完成某个Row的输入后,光标自动向下移动的偏移数,如果设成01,则当你完成当前行的输入后,光标自动向下移动一行。
接下来是乐器窗口和采样窗口,每个乐器可有多个采样,每个键位对应的采样号可以在乐器编辑窗口中进行编辑。你可以新建乐器,并导入wav格式的采样,也可以直接导入现成的.xi格式的乐器。在这里提供大量.xi乐器的下载。
上图是乐器编辑窗口,在左边的网格窗口中可以画音量或者声像的包络线,右边是一些具体的乐器参数,此处不再详细说明。下面是一个模拟键盘,在Play模式(注意左下角的按钮)下可以点击该键盘进行预览播放,如果此时Milky Tracker位于编辑模式,那么将完成音符的输入。在Edit模式(注意左下角的按钮)下可以为每个键位设置对应的采样号,默认是00,也就是第一个采样。
Milky Tracker提供两套快捷键设置,分别是Milky Tracker模式和Fast Tracker 2模式,默认是Fast Tracker 2模式。Fast Tracker 2模式下的一些常用快捷键如下表。
四. 一个简单的实例
光说不练假把式,下面就来实地制作一首简单的MOD音乐。水平不高,权当抛砖引玉。乐曲用到的乐器及最终的.xm文件可以在这里下载。准备好乐器素材,有个大概的构思后就可以开始制作了。首先将乐器导入到Milky Tracker,这里只用到了四种乐器:鼓 loop,原声钢琴,弦乐合奏,及一个合成音色。然后开始制作Pattern,打开乐器编辑窗口,点击虚拟键盘输入音符并根据需要添加效果参数,这是一个漫长而又艰幸的过程,要有耐心才好。输入完成后的截面如下所示,一些关键地方已经标注了出来。
最后是设置音序(其实各Pattern的组合方式是应该最早就考虑好的),这里简单的直接将00号Pattern重复两遍。好了,大功告成,可以保存为.xm文件,在其它播放器上试听一下,如果和先前在Milky Tracker试听的效果稍微有些不一样,这也实属正常,因为不同的播放器对.xm文件的解析和渲染也不会完全一样,特别是在对效果的处理上容易出现偏差。
另外,由于在上面这个例子中,使用了较大采样的音色,乐曲也很短,所以并没有体现出MOD音乐体积小的优势。要制作出质量高,体积小的MOD音乐,还需要用到一些其它的技巧。比如,尽量使用简单的采样,尽量复用采样(比如可以使用低音部分来代替贝司,使用下滑音来模拟打击乐器)和Pattern等等。这些技巧还需要自己去慢慢琢磨,大家也可以打开Milky Tracker的自带示范曲进行观磨学习,这些示范曲体积都极小,效果却很不错,从中应该能看出不少道道来。
五. 在程序里使用MOD音乐
有很多音频库都支持MOD音乐的播放,比如BASS,FMOD等。如果是需要静态链接并且尽可能的减小可执行文件的体积的话,Mini FMOD可能是一个不错的选择。在我以前写的四维空间屏保中,就是使用的Mini FMOD来播放背景MOD音乐。Mini FMOD有两个版本比较流行:1.60版和1.70版,这里推荐使用1.70版,因为1.60版不能很好的处理循环播放的问题。我简单的将Mini FMOD封装成了一个类,源代码可以在这里下载。使用方式很简单,首先将需要播放的MOD音乐添加为资源,然后以资源ID为参调用Load成员函数进行加载,最后Play即可。