关于之这个问题猫也来稍微解释一下
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.html2.解压缩后可以获得如下几个文件
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 00 %font "<path>\Fazioli Grand Piano v1.3.SF2" 0 0 amp=100 pan=0上述文字中请自己将
<path>替换为”Fazioli Grand Piano v1.3.SF2“音色库文件所在的文件目录,例如文件在D:\soundfont目录下,那么语句应当写作
bank 00 %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 00 %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点,猫终于熬不住了,等啥时候比较闲猫来补完一个完整的配置文件吧
猫写得匆忙,如果有口胡和疏漏请好人们指出
喵~睡觉去了