好久没发帖了,可能我这个人研究的东西比较杂,什么都喜欢插一脚..
今天发的这个东西看似和crack关系不大,但他们具有相同起源,大家看看就行了.原本的文章见:http://www.csksoft.net/blog/post/intro2track_music.html
是我写给开发Demo Sence程序的人的,不过crack程序中也可以用到

大家应该都看过国内外一些有名的crack组织发布的crack程序是有背景音乐的,这种音乐酷似FC游戏机的音乐,同时几乎不占体积,这就是这里说的模块音乐
-----------------------------------------
模块音乐(mod)其实我们每个人都听过,再熟悉不过的例子就是FC游戏的音乐!当然那只是最简单的应用了。他广泛的应用在各类游戏背景音乐、电子乐器以及crack程序和Demo程序(就是那种64kb却能放很长时间3d动画的程序,见:http://www.csksoft.net/blog/post/154.html)里面。

1.简介,对于Mod较为熟悉的话不妨略过

Module files (MODs) are a class of file formats used to represent music on a computer. They store several patterns or pages of music data in a form similar to that of a spreadsheet. These patterns contain note numbers, instrument numbers, and controller messages. The number of notes that can be played simultaneously depends on how many tracks there are per pattern.

Module files also give a list of the order in which to play the patterns. However, the biggest advantage of MOD family over standard MIDI files is that MODs include their own audio samples and should sound exactly the same from one player to another barring interpolation methods and any errors in players.

--Wikipedia

上面是wikipedia对于Mod音乐的解释。个人认为这个解释是恰到好处的,不过不够形象,下面我简要介绍下Mod的一些知识:

大家可以下载下面这个链接中的程序:

ftp://FTP_Visitor:visitor@ftp.cskso...xm_exsample.rar


解包后,在资源管理器里面用鼠标把"my dirty old kamel.xm"这个文件拖放到"fmod_mini_player.exe"文件图标上,放开鼠标,此时就会启动这个程序开始播放音乐。

对于这个程序以及".xm"文件我稍候会作具体介绍。

现在你应该听到播放器里面传出音乐了,这就是所说的模块音乐,而那个程序就是一个播放器。

是不是和FC游戏的音乐很像呢?的确,他们就是同一类型的,但是这里的音质要好得多。

看了文件体积,你可能认为它是一种类似于midi音乐序列的文件,的确,他们之间有相似处。

Mod音乐和其他格式音乐文件的比较:

我们通常定义的音乐格式wav,snd,mp3,wav等各式音乐是直接对原始音频信号的采样,或者说就是把波形信息直接保存了下来,所以他们的音质自然是最佳的,但是体积也很大。不过由于直接采样,任何类型的声音都可以得以记录,除了各类乐器,还可以使人声

midi音乐序列:他好比是一首歌曲的曲谱,他只是记录了一首歌曲用到的乐器,以及每个乐器的弹奏信息(何时起音、音高等)。而具体乐器的音色信息是预先定义好并且事先存储在目标播放器上的。这就带了2个问题:

1.不同播放器上对同一乐器的音色可能存在差别:比如MS的midi波表中对于钢琴音色的采样要比老式yamaha声卡采用FM(频率调制)合成的钢琴音色好很多。这样产生的后果就是midi文件在不同设备上播放可能听起来不同。你的手机铃声是不是在pc里听起来和手机上不同?

2.midi中的乐器是固定的,也就是说midi中弹奏的乐器必须是midi已经定义过的,如果近期诞生了一种新的音色的乐器,那么除非midi修改播放器程序,这种乐器才能被支持,但是不可能全世界的midi播放器都会更改。这就好比24和弦铃声的手机无法播放48和弦音乐中的一些音色

Mod音乐格式正好位于上面2种格式之间,一方面它采用midi类似的乐谱定义,只保存了一首歌曲如何去弹奏的信息,而不是保存所有波形信息。同时,他可以定义每种乐器的音色,也就是说保存了其中用到的乐器的波形信息。

这样不但使得Mod具有很小的文件体积,同时可以表示几乎所有的音乐,甚至人声!(在fr团队的一些demo中就有这样的例子)

由于乐器波形是文件给出的,所以track在不同设备上播放效果几乎一样(当然还受DSP采样率和位宽限制)

基于上述特点,Mod自然是各类电子游戏和demo的首选

2.Mod的简要原理介绍

通常,用于制作Mod文件的编辑软件称为Tracker。Wikipedia对其的定义:

Tracker is the generic term for a class of software music sequencers which, in their purest form, allow the user to arrange sound samples stepwise on a timeline across several monophonic channels. A tracker's interface is primarily numeric; notes are entered via the keyboard, while parameters, effects and so forth are entered in hexadecimal. A complete song consists of several small multi-channel patterns chained together via a master list.

如果有用过一些节拍编辑软件,比如FL studio,那么track的原理就很好理解了

和这些软件类似,tracker除了保存一首歌曲的钢琴卷帘(paino roll)外,还保存了乐器的音色信息。一个音色称为一个模块(module,之所以叫做模块,是因为在早期的硬件合成器上,音色是通过一个通用的硬件波形发生器加上配套的滤波系统和包络器组成的。这样一个通用的音色系统就叫做模块,现在也沿用了当时的叫法,其实也是一样的)

Mod中记录音色的信息包括:

原始采样(sample),也就是一个音色原始的采样波形信息,他可能就是钢琴的C#音

包络信息(envelope),记录音色的起音、音长、释音信息

谐波信息(harmonic),可以用来控制音色的共振行为,使得音色悦耳

滤波信息,就是滤波器的具体参数

波形信息,用以控制再现的音色的基波类型:正弦、方波、锯齿、三角波

循环信息,可以记录在原始采用中用于循环播放的部分,这样可以把原始很短的采样音色延长

可以说一个mod文件就是简单的节拍编辑器的工程文件(其实就是如此)

3.mod音乐格式的种类和相关的编辑器

你可以为自己定义一个track的格式(貌似FC游戏就这样),但是已经有很多通用的标准了,每种标准都对应了各自的文件格式和相关的编辑器和播放器。利用他们可以使demo和游戏的开发大为简化(此部分本文最后会介绍)

下面就介绍目前比较常见的3种格式

Fast Tracker(.xm)

就是上面例子中的格式了,下面是摘自wikipeida对他的描述:

Fast Tracker, specifically Fast Tracker 2 (FT2), is a program that was one of the most widely used trackers in the world. It was created by Fredrik "Mr. H" Huss and Magnus "Vogue" Högdahl, two members of a PC demo group called Triton (now commonly known as Starbreeze Studios) which set about releasing their own tracker after breaking into the scene in 1992 and winning several demo competitions.

从这段文字就能看出track和demo有着多么奇妙的联系了!它就是demo比赛中产生的

和下面将介绍的编辑器一样,他们都是dos时代的产物,当然目前有基于win32和linux平台的替代品,但dos版本是无可替代的经典

*前面给出的例子音乐是Razor 1911的作品parasight_razor_11.exe中提取出来的,这个程序你应该在一些Diablo II的破解版本目录中找到(原因我就不解释了:-)

Fast Tracker2的官方网站:www.fasttracker2.com

其经典版本是dos平台的2.09,最近又放出了win32的Fasttracker 3 0.25 BETA。不过这个版本极端的不稳定!

下面是他们的一些截图信息,如果一定要用Fast Tracker开发,建议用Dosbox运新那个2.09版本。win32版本是通过dx加速的


主界面

包络编辑

采样波形编辑

Impulse Tracker(.it)

Jeffrey "Pulse" Lim 的作品,同样也是DOS时代的作品了,完全由asm编写。目前较为流行的版本是linux下的cheesetronic (http://www.reduz.com.ar/cheesetronic).

Tux Racer中的背景音乐就是这种格式的文件。


Scream Tracker(.STM,.S3M)

和上面类似,看wikipedia的解释:

Scream Tracker is a versatile multi-track digital sequencer created by members of Finland's Future Crew (FC), legendary in the PC demoscene. It was coded in C language and assembly language. Versions prior to 3.0 created STM files, later ones used S3M.

上面我简要罗列了3个流行的tracker程序和他们对应的格式,可以说目前demo程序中一般就是用这3个格式的了。其中以xm较多见

对于更详细的格式,可以参看wikipedia的条目:http://en.wikipedia.org/wiki/List_of_audio_trackers

3.mod的创作

这是我只是介绍mod创作软件的选用,至于如何创作这应该去参考音乐合成器和节拍器的教程

其实大部分信息我在上面章节已经给出了,你可以直接使用我介绍的软件,对于选用的格式,我推荐用xm文件。

基于下面这个原因:可以采用现成的fmodmini库作为播放前段,对于开发demo和cracker这是非常方便的。fmodmini本文最后部分会介绍

如果你打算直接使用上面的软件,推荐去下载他们的DOS稳定版本,然后配合DOSBOX使用。不过一般除了怀旧和炫耀(我觉得这个软件的界面就是用来炫耀的,否则为何到了win32版本还要dx加速...)外还是推荐你采用一些比较“现实”的版本,比如linux下用cheesetronic。

一个Win32的通用版本:ModPlug Tracker


他采用插件模式,基本上已经支持目前常见的各类mod文件的创作了

更好的消息时他是100%free的,可以从其官网上下载到:http://www.modplug.com/

同时可以在sourceforge找到他的代码:http://sourceforge.net/projects/modplug/

仿Fasttracker2界面的跨平台替代品:MilkyTracker

如果喜欢Fasttracker的界面,但又受不了模拟器模拟的效果,不妨试试这款编辑器,不过他的主推平台是linux。但经过我的使用,winNT版本也相当稳定。同样采用DX加速,界面不知比ModPlug 好多少(不过推荐有能力的用linux去跑它:-)

同时他的官方网站还提供了他的使用视频教程:http://www.milkytracker.net/?HOME


4.如何在程序中使用mod

如果要作大规模应用,完全可以采用fmod组件,如果仅仅为了用于demo或者crack程序,可以做下面尝试:

1.使用fmodmini

虽然也叫做fmod,同样也是官方产品,但他说白了就是xm播放组件。主要是minifmod.lib这个文件,通过合理设置编译头文件xmeffects.h可以编译出体积很小的播放程序,如例子中给出的只有11kb(采用UPX加壳后)

2.采用cheesetronic提供的播放器代码

这个我没有测试,代码可以在cheesetronic首页中找到,目前有BSD、linux、win32、OSX、PPC等版本。

3.亲自编写

我也没有亲自写过一个真正的tracker player,所以就不多说了:-)

5.总结

最近发现自己成“理论家”了——只说不练,所以其中的一些东西我介绍的并不是很具体,希望给各位有一定的参考意义,具体的实行还是要靠亲自的实践。

到现在一个事实已经很明朗了:crack、demo和mod,这3者的起源和发展有着千丝万缕的联系。虽然后2者在国内基本上没有起步,至于mod,至少出了本文我就再没见过别的中文文章了。

不过很荣欣我周围的朋友正好可以涵盖这3个领域,所以借此机会把本文发到每个领域对应的论坛,毕竟Computer Science是一门艺术,它并不是死板的书面理论,crack、demo和mod就是最好的例证!(回归现实,看我的龙书了)

-------------------------------------------------

本文遵照Creative Commons 2.5/cn 发表,欢迎转载和传播,请保留作者信息

CSK 2006