曾经我非常热衷于MIDI音乐,原因是一直没有机会正儿八经的学习一种我喜欢的乐器,于是在电脑上用HappyEO和Cakewalk制作一些音乐(或者说噪音?)便成为了生活中的一个重要部分。但是最近相当长的一段时间中,我都没有再玩过MIDI音乐,原因只不过是因为我从台式机换成了用笔记本电脑和开始使用Linux……
先科普一下有关MIDI音乐的简单知识:MIDI音乐文件中存放的是音乐的乐谱信息,而不是实际的声音。乐谱信息以一系列的消息组成,比如:用最大力度的50%按下钢琴上小字一组的C键、持续1秒、松开小字一组的C键。电脑在播放MIDI文件时,需要由音源设备把MIDI消息转换成真正声音,再播放出来,音源设备的好坏就直接决定了MIDI音乐的回放质量。
在Linux中玩MIDI,本身也不该是件什么难事,但问题是在于Linux的声音系统一直以来处于非常混乱的状态,各家争鸣百花齐放,使得配置起来很是复杂。另外,现在很多电脑的的声卡上都不带音源设备,这样就没有办法直接用声卡合成声音。
要在Linux下玩转MIDI,就得从这以下方面入手:
驱动层:早期Linux用OSS来驱动声卡,而现在这一块基本上已经由ALSA来一统天下,当然ALSA也提供了OSS的兼容层来保证一些古老的应用。这年头,电脑装好Linux后能正常发声的话,ALSA应该就已经是在正常工作了。
中间层:一些新的发行版都用PulseAudio做为一个应用中间层,通过它去统一应用软件与ALSA的接口。不过这个东西对于玩MIDI这种“专业”的事情来说,不是很有用。我们需要的是Jack。Jack是大部分音频处理软件所使用的输入输出组件,它具有高性能低延迟等优秀的特质。
音源:如果声卡没有硬件的音源,或者硬件音源烂到只能发出电子味很重的声音。我们就需要一个软件音源,通过加载音色库(SoundFont)文件,把MIDI信号合成为声音。Linux下常用的软音源有fluidsynth或Timidity++。另外还需要准备合适的音色库文件。
音序器:简单的说就是用来作曲的软件啦,由于把各种MIDI信号组合到一起形成一个音乐作品。上面说的Cakewalk就是一款Windows下的古董级的音序器了。在Linux下,最有名的当属Rosegarden了。
最终的工作流程就是用Rosegarden谱曲,在fluidsynth或Timidity++中加载好音色库文件,用Jack把Rosegarden的General MIDI Device输出端口连接到fluidsynth或Timidity++生成的Synth输入端口。
以Debian Squeeze为例,在ALSA工作正常的前提下,安装以下软件包及其依赖包:jackd, qjackctl(Jack的图形前端), qsynth(fluidsynth的图形前端), rosegarden, fluid-soundfont-gm (一个音色库文件)。
sudo aptitude install jackd qjackctl qsynth rosegarden fluid-soundfont-gm
安装完后就可以启动JACK Control和Qsynth,首先点Qsynth界面上的Setup按钮,在Soundfonts页中指定要用的音色库文件,如:/usr/share/sounds/sf2/FluidR3_GM.sf2,重启音源引擎。然后可以打开Rosegarden,这时在JACK Control的Connect按钮对应的窗口的ALSA页中会可以看到Rosegarden的输出端口和Qsynth的输出端口,选中它们点“Connect”把它们连起来。同时确认一下在"Audio“页中,Qsynth的输出端口也已经与”system“的playback端口连接正常。
大功告成,在Rosegarden中打开一个MIDI文件,或者自己涂鸦几个音符吧,点播放以后就应该可以听到MIDI音乐声响起了。
除了Rosegarden,Linux中也有其它一些音序器软件,比如tuxguitar,就是专门为吉他爱好者准备的。
HappyEO是一款在Windows下用电脑键盘模拟电子琴的软件,也能当成音序器的MIDI信号输入输出设备。这个软件在2000年到2006年间占用了我无数的时间,我乐在其中的用它制造了无数的“噪音”,直到我换了笔记本电脑(没有了标准键盘)和开始用Linux。在把Linux下的MIDI环境配置好后我就迫不急待的用wine尝试运行这个软件,软件运行成功了!看到久违的界面,听着自己已经不再熟练的弹奏,还真是颇有一点激动呢。