KeyFansClub

首页 » - 同人讨论区 - » 声乐舞台 » midi軟件一問
koniygn - 2008/12/19 11:46:00
小弟最近在試玩幾個midi編輯軟件, 有些是五線譜輸入的,
但是發現同一個midi檔案, 不同的軟件下, 播放的聲音是不同的.
但 "另存新檔" 成*.mid檔案後, 播放是一樣的. (不是錄成*.wav, *.ogg之類)
為什麼呢??
是不是每一個軟件都會有它自己的一個獨立的midi庫呢??
nemoma - 2008/12/19 12:49:00
所谓Midi文件,其实就是一串数据
这个和Wav等波形格式是不一样的。
而Midi文件里面,有音色的定义
不过只定义了音色代码。
而每个软件用的音色库,的确是不一样的
这个不只是软件,电子琴都是这样
本人家里的PSR-640,排在音色库001的是大钢琴,排在音色库第5位的是爵士乐钢琴。
但是软件里自己附带的音色库,也许排在音色库005的,是其它的乐器。
这时我在PSR-640上面用这两种音色录制成得Midi,到了电脑上,就有可能不同。
当然,001是大钢琴,这个很多软件都是统一的就是了。
至于播放Mid档案效果一样。那是因为播放的时候,调用的是同一个音色库,就是微软的GM Midi音色库。(当然如果你装了Yamaha等软波表则另当别论就是了……)
1=1 - 2008/12/19 22:01:00
midi文件可以看成是“为电子设备准备的乐谱”
在windows里默认播放midi的音源是GS,当然你可以改变它
同样编号在不同的音源里可能对应不同的音色,所以midi在不同设备上播放效果不同是很正常的事情
当播放midi时如果CPU负荷过大还容易出现播放错误杂音错音的现象,再加上不同音源不同效果的特性,现在用midi表现的成品音乐已经很少了,不过在以前存储器容量不像现在这么宽裕的情况下用midi做BGM是很多游戏的选择
koniygn - 2008/12/19 23:04:00
那麼就是說, 在必要時, 寫譜和錄製需要用不同的軟件??
(不知道各位高手的偏好...)
因為我是鋼琴控, 想用5線譜輸入, 但是那個軟件的midi聲很難聽;
另一個軟件的midi聲不錯, 但是它的輸入方法對我來說很艱難...

還有, 怎樣能減少 / 避免cpu重載而出現雜音呢???

呀, 補充一點, 我不是想用midi來作最後作品格式,
而是想用一個較好的midi音色來錄成*.wav,
無奈現在用的那個軟件, midi音色太差了...
亡灵之猫 - 2008/12/20 4:14:00
关于之这个问题猫也来稍微解释一下

MIDI这个标准和Wave、Ogg、Mp3一类的标准是两种不同的概念。
MIDI记录的是一种描述,就像乐谱一样,他从逻辑上描述一首曲子使用了哪些乐器,这个乐器演奏的音符是什么样的,这个乐器是采用怎么样的技法来演奏的,是一本可以被电脑识别和读取的数据化的乐谱和演奏指南。而Wave、Mp3这类格式则是记录声音的物理信号,好比唱片或者录音带,它不管音乐是怎么演奏的,它只是把声音的物理振动波形进行记录和还原。

MIDI就像乐谱,你需要一支乐队来演奏乐谱才能明白乐谱中到底写了什么。
Wave就像录音带,你只需要放到录音机里你就能听到音乐。

关于为什么不同的软件播放MIDI的声音不同,楼主需要明白MIDI的技术构成,猫简单的讲一下:
关于MIDI标准:
MIDI是数字乐器的一种工业化的通用通信协议,就像网络上的TCP/IP协议一样。MIDI标准约定各种数字乐器或者MIDI设备之间如何对话和通信。
就像人和人之间使用简谱或者五线谱这些音乐语言互相交流音乐一样,MIDI是各种电子设备之间通行的数字化音乐语言。
关于MIDI设备:
MIDI的设备五花八门,但是有一点是共同的,那就是除了“音源”之外,任何MIDI设备都不能发出声音。
关于音源,猫会在后面具体描述。
我们首先针对MIDI设备举个例子:
例如MIDI键盘,他的外表和一架钢琴的键盘几乎是一样的,但是MIDI键盘不像钢琴那样拥有音锤和钢弦等发声装置。取而代之是一系列的电子仪器装置,他们随时记录键盘的演奏者按下了哪个键,按键的力度有多大。这些信息将被转化为数字信息并通过通信电缆(或其它通信方式)传达给其他的MIDI设备。也许我们的MIDI设备会收到来自MIDI键盘发来这样的信息:“37,100”,这时37可能是按键编号,也许就对应着音乐学上的小字1组a音,而这个100则量化的表明我们到底用了多大的力气来按键。MIDI标准阐述的就是这一堆数字到底代表什么意思,当然我们人无需去理解这些信息,阅读这些信息的是各种电子设备。
关于音源:
猫前面说过,我们有乐谱的时候,需要一支乐队来演奏乐谱,我们才能明白乐谱到底是描述了什么样的音乐内容。
音源这个设备正扮演着MIDI世界中的乐队角色。
音源中包含着一系列的预置声音信息,当有其他MIDI设备向音源发来消息的时候,音源就到自己预置的声音数据中查找收到的消息所相对应的声音信息,并将这些声音信息转变为我们能够听到的音频信号。
例如:音源收到一条消息这样描述:“用1号乐器,演奏第60号音符,演奏力度100”。
这时音源可能理解为:
1号乐器:钢琴
60号音符:小字组c音
100力度:演奏按键力度为最大力度的100/127
于是音源从自己的的资料库中取出钢琴乐器的小字组c音样本,调整样本的声音强度为最大值的127分之100,然后将这个样本信息输出到声卡,于是我们听到了钢琴弹奏中央C的声音。
一个音源中可以包含多种乐器的样本,这些样本可能是通过数学计算模拟出来的,也可能是通过真实的乐器录音获得的,他们都是演奏音乐的最基本的音符发音,当这些发音按照MIDI的乐谱数据编排组合起来并输出的时候,我们就听到了动听的音乐。

正如猫上面所说,音源中的样本可能是从多种途径产生的。现今有很多著名的MIDI设备制造商都出品了大量的音源产品,这些产品既有软件形式的音源也有硬件形式的音源,不同的厂商,不同的音源产品由于使用了截然不同的技术或者录制了截然不同的样本而使得相互之间的音色存在着差异。
例如两个不同的音源对于1号乐器的定义,其中一个音源认为是钢琴,而另一个音源认为是小提琴,同样是是要求使用1号乐器的MIDI音乐可能演奏出截然不同的声音来。是事实上即便两个音源都认为1号乐器是钢琴,但是其中一个音源也许是录制了YAMAHA钢琴的音色,而另一个则录制了Steinway钢琴的音色,则两者还原相同的MIDI信息也会存在声音上的差异。

特别说明:以上仅仅只是猫的举例,那些数字并不一定真的就代表上面所说的东西

楼主使用不同的软件编辑MIDI信息的时候虽然MIDI数据可能是完全相同的,但是由于不同的软件使用了不同的音源导致听上去声音存在差异。
而导出MIDI文件(*.mid)之后,由于大多数播放器都使用了Windows自带的Roland GM/GS音源来播放音乐,所以楼主认为音乐的信号是一致的,但是假如楼主将这个.mid文件放到Quick Time、Windows Media Player和WinGroove Player三种不同不同的播放器中分别播放的时候,很容易就会发现他们播放出来的音乐听上去都有不同之处,原因就是3中播放器都使用了不同的音源来播放MIDI


关于楼主后来提出的关于合成录音的问题
猫建议楼主使用一些音乐工作站软件来达到自己的目的,所谓音乐工作站,就是那些可以将从音乐编辑、合成和混音工作全部包揽下来的软件。例如Cakewalk Sonar或者Steinberg Cubase。
音乐工作站软件大多可以挂载多种不同的音源,我们通常称这些可挂载的音源为音源插件。Windows环境下最常见最通用的是DXi和VSTi两种不同标准的音源插件。
各种音源的信号质量参差不齐,有数百KB容量的超轻量合成器,也有数百GB容量的超豪华取样器,他们的功能特性和使用场合也各不相同。

关于音频插件的使用方法和音乐工作站的使用方法,我们可以写出一大摞的书。楼主要真的做到通晓这些东西可能需要花费几年的时间来学习和积累经验。猫不再过多的赘述。

除了音频工作站之外,猫还有一种解决办法——打谱编辑软件+MIDI合成软件的方式
也就是说利用Guitar Pro或者Overtrue之类的乐谱编辑软件编辑一份乐谱并将其输出为MIDI文件(*.mid),然后使用合成软件将MIDI合成为音频(WAVE)。
这种方式非常原始,但是最容易构建和使用。
常见的可以将MIDI合成为软件WAVE的方案有:Roland VSC波表方案、WinGroove波表方案,QuickTime Pro波表方案,Foobar2000+foo_midi+VSTi方案,Timidity+soundfont方案。
前3种方案都是利用合成器自带的转换功能将MIDI转化为音频数据,操作非常简单但是都只是单一的一个合成器,效果取决于合成器的风格和个人的喜好,总体来说这几个合成器都不算很好的音源,但是确实能够达到目的。当然这几个软件都是收费软件,使用代价都比较高(用PJ的就当猫没有说)。
Foobar2000+foo_midi+VSTi是一种非常不错的解决方案,灵活性、易用性和合成质量都有着不俗的表现,缺点就是目前只能兼容很少的几种VSTi插件,使用需要具备VSTi的相关知识和经验。另外Foobar虽然是免费的,但是大多数VSTi的价格都不菲(用PJ的再次无视猫吧)

Timidity+soundfont方案:
Timidity+soundfont方案是猫的推荐方案,理由有三:
1.搭配组合方式灵活,可以选择很多不同的Sounfront音色库来完成不同的任务。
2.采用音色取样的合成方式,合成质量相对比较高,特别对于真实乐器的还原演绎,这个方案比大多数的低端合成都要强得多。
3.Timidity++是基于GPL协议的开源自由软件,可以跨平台使用,使用可以不支付任何费用而功能不会受到任何限制,如果自己编译的话更不用担心软件存在任何不良插件和病毒。而Timidity++所支持的SoundFont音色库数量庞大,拥有很多达人制作的免费版本可供下载。
说了那么多的优点,猫也谈谈他的缺点:
首先Timidity++的配置和使用相对其他方案来说较为复杂,需要自己去写配置文件。
其次Timidity++将音色库加载到内存里运行,如果加载那些百来MB的音色库文件的话,内存消耗还是比较大的,内存低于512的电脑用起来是一种折磨
当然不管是什么样的缺点,这个方案在猫看来是经典中的经典,这个方案也支持猫度过了长达两年的创作生活。

下面是针对楼主的需求,猫写的一个简单的Timidity+soundfont合成方案构建教程:
1.我们需要下载Timidity++这个软件,如果楼主精通编程的话可以到以下地址下载Timidity++的源代码,并在Cygwin环境使用Autoconfigu和Automake来编译软件
http://timidity.sourceforge.net/
当然你也可以直接下载有爱的达人们已经编译好的Windows应用程序,下面的地址可以获得下载
http://timidity.s11.xrea.com/index.en.html
2.解压缩后可以获得如下几个文件
timw32g.exe
twsyng.exe
twsynsrv.exe
timpp32g.ini
timidity_window.ini
timidity_output.ini
这里我们主要只会使用timw32g.exe这个应用程序,它是Timidity++在Windows下的图形界面程序,而twsyng.exe和twsynsrv.exe则是Windows下的服务程序和管理服务的托盘按钮(其实猫还没有见过什么软件能够用上他们><);
timpp32g.ini、timidity_window.ini和timidity_output.ini几个文件是Timidity++的系统配置文件,从这几个文件可以更改Timidity++的各种配置参数诸如:音色库配置文件的地址、显示字号、显示字体和音频输出方式等,如果不是很明白的话,其实可以不配置这3个文件,大多数我们需要的操作可以在Timidity++的图形界面中解决。
3.除了获得软件之外,我们还需要获得一个SoundFont音色库,楼主喜欢钢琴,那么可以去下载一个钢琴音色库,以下猫给楼主提供一个Fazioli大钢琴音色库的下载地址:
http://www.hum.aau.dk/~bovbjerg/piano3.html
下载的音色库为SfArk格式,这个文件还不能用,它是一个压缩后的SoundFont音色库,需要下载SfArk来解压缩,下载地址如下(网站下点击左侧栏的”SfArk“,在右边打开页面中选择”sfArk v2.15 Download“):
http://www.melodymachine.com/
下载安装并启动SfArk后,将下载的音色库文件”Fazioli Grand Piano v1.3.sfArk“拖放到SfArk中,点击Start,稍候将在原文件所在目录下生成一个同名的SF2格式的文件”Fazioli Grand Piano v1.3.SF2“,喵~这就是我么么想要的音色库文件了 ^^
4.在Timidity++的程序目录下请新建一个文本文档,输入以下内容:
bank 0
0 %font "<path>\Fazioli Grand Piano v1.3.SF2" 0 0 amp=100 pan=0
上述文字中请自己将<path>替换为”Fazioli Grand Piano v1.3.SF2“音色库文件所在的文件目录,例如文件在D:\soundfont目录下,那么语句应当写作
bank 0
0 %font "D:\soundfont\Fazioli Grand Piano v1.3.SF2" 0 0 amp=100 pan=0
请保存文件,并将文件名称改为”TIMIDITY.CFG“
5.启动timw32g.exe程序,点击程序界面Config -> Preference菜单
在弹出的对话框中Player选项卡下的点击”Config File“按钮,在弹出的文件选择对话框中选择刚才编辑的”TIMIDITY.CFG“文件,点击确定。
接着对话框上方点击”Output“选项卡,在”output“标题下第一个组合框中有好几个选项,其中”Windows audio drivers“选项表示播放MIDI时将音频输出到声卡,这样就可以播放MIDI实际听一下合成的效果;如果选择了”RIFF Wave file“则表示,播放时将音频输出到WAVE文件,也就是将MIDI转化为WAVE。
完成需要的配置后点击OK,然后关闭软件重新打开(其实不重启软件,回到Player选下卡下点击Reload Config file也可以,但是如果此时音乐正在播放中,那么可能引发内存错误)
6.完成上面的步骤后,可以用Timidity++载入自己的MIDI文件然后播放之,听听效果如何把,亦或着按照上面的说明改一改软件的配置,输出Wave文件看看,输出的Wave存在于Timidity程序目录下,如果没有特别修改过的话,输出的WAVE文件文件名应当为”Output.wav“。

除了上面提到的Fazioli大钢琴音色库,楼主也可以去下载其他的音色库
Steinway C大钢琴音色库下载:
http://www.hum.aau.dk/~bovbjerg/piano4.html
配置文件写法:
bank 0
0 %font "<path>\Steinway Grand Piano 1.2.SF2" 0 0 amp=100 pan=0

实际的使用中文件名路径等可能有所不同,希望楼主能够举一反三
如果遇到什么自己不会配置的音色库可以回帖或者PM告诉猫,猫有空的话就来帮助编写一下配置文件。
注意,以上猫提供给楼主的音色库文件都只能支持大钢琴音色,其他乐器都无法播放
………………

好吧,好人做到底,传一个 ><
http://cat.w-sdc.org/keyfc/8MB_GM_LIB.sfArk
这是当年的创新声卡自带的8MB容量GM标准音色库,内含128个GM标准乐器音色和1套标准GM鼓组
配置文件的写法(偷懒的写法):
soundfont <path>\8MB_GM_LIB.sf2
以上的写法也可以载入音色库,但是缺少乐器映射和可调节性,纯粹是偷懒的写法,想来写完这篇文章居然已经是深夜4点,猫终于熬不住了,等啥时候比较闲猫来补完一个完整的配置文件吧

猫写得匆忙,如果有口胡和疏漏请好人们指出
喵~睡觉去了
laputachen - 2008/12/20 10:18:00
OTL,猫君的回答实在太好人太有爱了……我忍不住进来拜一下……

话说我家的某电钢琴已经寂寞的放在一个角落很久了……
1=1 - 2008/12/20 10:42:00
如果想用midi录制wav的话,如同猫猫所说,用音序器软件打开midi档后加载音源插件导出wav是最方便的了
koniygn - 2008/12/20 11:19:00
佩服... 五體投地... 貓實在太厲害了...

試了一首純鋼琴的midi, 音色果然很大的分別...

追問一下, 如果用這種方法錄製*.wav的話,
那麼每次只可以錄一種樂器, (假設有很多樂器的話... 而google一下, 又真的很多種soundfont... )
之後再混音嗎??

呀還有, 那個melody machine好像改了網址, google一會後找到
http://melodymachine.com/, 沒有www的

不過真的很謝謝貓的幫助!!!!
亡灵之猫 - 2008/12/21 0:36:00
并不是说一次只能合成一种乐器
一般的MIDI标准中,最多允许16条音轨,MIDI文件基于这个标准,因此MIDI文件记录的音乐信息最大也就是16个音轨
16个音轨意味着我们可以同时加载并播放16种不同的乐器,通过一些控制器的技巧也可以突破16种乐器的限制,但是无论如何,制作和播放一个midi文件的时候最多只允许同时有16种乐器同时演奏。

在很多音源和音色库当中(GM派生的标准音源),第10音轨都用于作为节奏轨,此音轨的音符具体映射到一套打击乐鼓组,剩余的1~9和11~16音轨则是一般乐器轨道,可以加载各种不同的乐器。
简单地说就是,通常的MIDI文件可以支持15个乐器和一套鼓同时演奏。

前面猫提供给楼主的Soundfont音色库由于只有钢琴这一种音色,所以midi中包含其他乐器的时候,用这个音色库无法播放大钢琴之外的任何乐器。

那个8MB的GM音色库倒是预置了GM标准定义的128种乐器和一套鼓组,楼主可以尝试用一下

关于GM标准乐器的定义,楼主可以参阅以下文献(英文):
http://www.midi.org/techspecs/gm1sound.php
cat88hzh - 2008/12/21 2:01:00
感觉猫咪大人现在越来越专业了,啊,真是让人羡慕呢
koniygn - 2008/12/21 9:12:00
那麼, 如果已下載多於一種soundfont的話, timidity是不是可以支援最多16種樂器的聲音呢?? 它的timidity.cfg是怎樣寫的呢??
(看不懂程式碼...)

愛上了timidity... 謝謝貓的介紹~~
亡灵之猫 - 2008/12/22 1:37:00
Timidity++拥有符合MIDI标准的16个合成轨道,它们可以载入任何乐器
也就是说Timidity++可以把同一个乐器载入不同的16个轨道,也可以从同一个或者多个不同的音色库中载入最多16种相同或不同的乐器。
遵循GM以及派生标准,Timidity的第10音轨通常是打击乐器轨,这里不定义乐器,而是打击乐器鼓组

CFG文件的写法实际上也不是很难,但是需要MIDI的基础知识作为铺垫。
要学会配置想要看懂下面猫关于一些基本知识的介绍:

关于音轨(Track):
纯粹的MIDI标准中,拥有16条固定的音轨,不管你是否使用他们,16条音轨既不能增加也不能减少
每条音轨可以被理解为一名多才多艺的乐手,这名乐手精通各种你所拥有的乐器,而且所有乐器都被这名乐手当作钢琴来演奏,也就是说即便是小号或者长笛这类单音乐器,这名乐手也能同时演奏出所有可能的复音组合。
但是这个乐手同一时间只能演奏一种乐器,那么你拥有的16名乐手只能同时演奏16种乐器,就像猫之前说过的那样。
当然,需要补充说明的是:
16条音轨代表你有16名多才多艺的乐手,而不是说你只有16件乐器。MIDI制作中允许你让一名乐手演奏的途中更换不同的乐器,例如乐手正在演奏钢琴,这时你可以根据你的需要,快速把这名乐手调到提琴手的位置那里演奏小提琴,之后又快速调到其他地方演奏其他不同的乐器。
这是一种MIDI制作上的技巧
现今的很多音乐工作站都已经不再限制音轨的数量,然而很不幸的是,MIDI文件以及Timidity++本身都是遵循MIDI标准的产物,因此使用Timidity+midi文件这样的工作模式我们只有16条音轨(16名乐手)。

关于乐器架(Program):
MIDI标准中每个音轨都可以演奏若干种乐器,这些乐器被编号放到乐器架上,需要音轨使用哪种乐器演奏的时候,就告诉音轨乐器在乐器架上的编号,音轨就会自己去寻找这件乐器并将自己乐谱中的音符用这件乐器演奏出来。参考上面关于音轨的介绍,猫想这个问题应该不难理解。
MIDI标准中乐器架上可以放置的乐器最多可以有128件,编号从0~127

关于音色库(Bank):
由于一个乐器架上只能放置127件乐器,这个数字相对于乐器海洋来说,实在是太渺小了,于是MIDI标准中有音色库的概念,不同的音色库代表着不同的乐器架,例如我们需要做摇滚和爵士两种音乐,这时我们在乐器架上摆上了键盘、过载吉他、噪音吉他、掌击贝斯和架子鼓,这时我们已经有一个简单的乐器架了;然而这些乐器用于演奏爵士绝对不是一个好主意,于是我们又架设了一个乐器架,把相同编号的乐器替换为钢琴、爵士吉他,清音吉他,低音提琴和刷子演奏的爵士鼓,这样我们就可以利用切换音色库的方式用相同的乐器架编号来使用不同的乐器;这样的方法更大幅扩展了支持乐器的数量,每个音色库当中我们都可以排满128种乐器,而且互相不会干扰。
音色库在MIDI标准中被作为控制器(Control)来实现,因此音色库的编号分配范围有2个字节(只用每个字节的前7位),既0~16383(128*128),由此MIDI中可以预置的乐器数量最大可以达到16384*128=2097152种乐器。
为了和“音色样本库”(它的名字通常也叫做音色库)区分开来,我们也称音色库为音色组或者直接按照英文称为Bank。

关于Timidity++的音色库配置文件的写法:
1.基本语法
注释:
使用“#”号开头的整行数据为注释,注释的信息不会Timidity读取,只是供编写者留下必要的解释和标注。
定义目录:
在行首以"dir"标签开头的内容描述一个关于目录的定义,如果在配置文件中引用了没有说明全路径的其它文件,Timidity会从定义的目录中去寻找文件。Timidity++使用“${basedir}”变量来描述Timidity++的程序目录
例如以下定义:
dir ${basedir}/sf2
soundfont samp.sf2
这时Timidity执行配置文件时就会自己到timidity的程序目录下寻找名为“sf2”的子目录,并在子目录下寻根找名为“samp.sf2”的音色库文件并加载之,关于soundfont标签,可参看下面的描述。
可以定义多个目录,程序将会按顺序再定义的各个目录下寻找指定的文件。
引用其他配置文件:
在行首以“source”标签开头的内容描述引用另外一个音色配置文件。
例如下面的定义:
dir ${basedir}/config
source samp.cfg
这时程序会到timidity的程序目录下的config子目录寻找samp.cfg文件,并执行其中的配置信息。
直接引用音色库:
在行首以“soundfont”标签开头的内容描述加载一个SF2音色库文件,播放MIDI时将直接调用音色库中自身的定义来合成MIDI的数据为音乐。用法参看前面的例子。
可以一次加载多个音色库,乐器架上的音色序列将会被后加载的音色库逐一覆盖。
如果音色库自身的定义的音色序列和逐一覆盖的规则不能满足你的需求,那么就需要看猫在下面的章节中所讲述的音色库具体配置方法了。

2.音色库编辑语法
例如我们存在这样一些音色库
音色库A里面这样定义乐器架
0.小提琴
1.大提琴
2.钢琴
4.长笛
5.双簧管
音色库B里面这样定义乐器架
0.钢片琴
1.管风琴
2.长笛
3.钢琴
这是我们期望这样来组合一个符合我们需求的乐器架:
0. B-3的钢琴
1. B-1的管风琴
2. B-0的钢片琴
3. A-0的小提琴
4. A-1的大提琴
5. B-2的长笛
6. A-5的双簧管
这时我们已经完全无法通过音色库的自身排列来满足我们的需求了,这就需要我们自己来编辑合成取样的序列。下面猫介绍编辑的语法:

bank <编号>
定义下面各行中描述的乐器架信息属于哪个midi标准的音色库,直到出现下一个bank标签或者配置文件结束。<编号>的范围为0~127。
乐器架的定义格式如下:
<乐器架编号> %font "<sf2文件路径名>" <sf2的bank号> <sf2的program号> [<音符编号> amp=<输出的音量级别> pan=<输出的立体声平衡> [note=0] ...]
其中的可选参数:
amp是输出音量等级的百分比,低于100则减少该乐器的输出音量等级,反之则增大,这个值应当为整数
pan是输出音量的立体声平衡,取值在+100~-100之间,0为不修正,负数时值越高越偏左声道,正数时值越高越偏右声道
note是一个可选的标记,如果设置其为0那么timidity将自动缩放波形演奏任何可能的音符,如果不设置note标记则按照音色库定义的音域来响应音符,超音域的音符将不被响应。

drumset <编号>
定义下面各行中描述的乐器架信息为鼓组信息,鼓组这个概念很特殊,在很多sf2音色库中他被定义为编号128的乐器,而实际在timidity中通常是没有128这个乐器可选的,而是用第10音轨来描述打击乐鼓组。
鼓组的定义语法和乐器架的一致,但是鼓组更多是精确到各个音符的映射。

3.配置示例
上面我们已经讲怎么样编辑和定义音色了,那么我们就上一章提出的那个举例来制作音色库的配置示例:
假设音色库A的文件名为a.sf2,一色库B的文件名为b.sf2
那么配置文件应当写成这样
bank 0
0 %font "b.sf2" 0 3 amp=110 pan=0
1 %font "b.sf2" 0 1 amp=100 pan=0
2 %font "b.sf2" 0 0 amp=100 pan=0
3 %font "a.sf2" 0 0 amp=100 pan=0
4 %font "a.sf2" 0 1 amp=100 pan=0
5 %font "b.sf2" 0 2 amp=100 pan=0
6 %font "a.sf2" 0 5 amp=100 pan=0

基于以上的配置假设我们还有一套鼓音色C,其中的定义如下:
音色库0的乐器架编号128的音符:
1.大鼓
2.低音大鼓
3.高音圆鼓
4.低音圆鼓
5.鼓边
6.击镲(闭合)
7.击镲(开放)
8.锣
音色库1乐器架编号1的音符:
1.高音桶鼓
2.中高音桶鼓
3.中低音桶鼓
4.低音桶鼓
5.踩镲
我们需要的鼓组为:
1.大鼓(0.128.1)
2.低音大鼓(0.128.2)
3.高音圆鼓(0.128.3)
4.低音圆鼓(0.128.4)
5.鼓边(0.128.5)
6.高音桶鼓(1.1.1)
7.中高音桶鼓(1.1.2)
8.中低音桶鼓(1.1.3)
9.低音桶鼓(1.1.4)
10.击镲(闭合)(0.128.6)
11.击镲(开放)(0.128.7)
12.踩镲(1.1.5)
13.锣(0.128.8)
这时当C的文件名为c.sf2时,侧有如下的配置:
drumset 0
0 %font "c.sf2" 0 128 1 amp=100 pan=0
1 %font "c.sf2" 0 128 2 amp=100 pan=0
2 %font "c.sf2" 0 128 3 amp=100 pan=0
3 %font "c.sf2" 0 128 4 amp=100 pan=0
4 %font "c.sf2" 0 128 5 amp=100 pan=0
5 %font "c.sf2" 1 1 1 amp=100 pan=0
6 %font "c.sf2" 1 1 2 amp=100 pan=0
7 %font "c.sf2" 1 1 3 amp=100 pan=0
8 %font "c.sf2" 1 1 4 amp=100 pan=0
9 %font "c.sf2" 0 128 6 amp=100 pan=0
10 %font "c.sf2" 0 128 7 amp=100 pan=0
11 %font "c.sf2" 1 1 5 amp=100 pan=0
12 %font"c.sf2" 0 128 8 amp=100 pan=0

好的,配置完成了我们把把配置文件保存。
恩,加载这个配置文件到timidity上运行,啊 >< 啥声音都没有,为什么?
呵呵,猫写的这个配置还差了一些必要的东西,看上面的音色库定义中文件都只有文件名没有访问路径的描述,这样的话除非把音色库放在timidity的程序目录下,否则音色库无法被正常加载的。
那么我们来做一些修改吧:
我们首先把a.sf2、b.sf2、c.f2三个sf2音色库文件放到一个文件目录下,例如D:\soundfont\
然后把上面的配置信息保存到Timidity的程序目录下的config子目录,命名配置文件为mytt.cfg
嗯,现在我们再建立一个新的配置文件,填入如下内容:
dir ${basedir}\config #这是mytt.cfg配置文件所在的目录
dir D:\soundfont #这是sf2音色库文件的目录
source mytt.cfg #好的现在只需要引用前面的配置文件就能正常工作了

Timidity的配置文件某些细节其实蛮复杂的,许多涉及XG、GS、GM音色之间的映射和处理的语句猫都不懂,又缺少相关的文档,能够教给楼主的也只有这些了,希望能对阁下有所帮助
koniygn - 2008/12/23 10:32:00
多謝貓主的專業回答...
暫時還沒試得到多種樂器的配搭, 不過...
萬分感謝 + 佩服...
1
查看完整版本: midi軟件一問