撰写了文章 更新于 2021-03-19 11:06:25
好曲也需好乐器——改善Windows的MIDI播放效果
PS1:本文不是要“还原”当年的效果,只是改善现在的Windows操作系统播放MIDI的效果。
PS2:本文只是能“发声”的教程,一般来说足够用了,不会涉及进阶技巧。
0.警告
MIDI有毒,听惯了你会受不了系统自带的,回不去了别找我。
啥?我?在那个声卡还自带播表的时代玩了英雄伝説Ⅴ-海の檻歌,玩到暗之太阳升起那段就已经回不去了。(染病)
后来新电脑新系统,再重温旧作却发现音乐质量大不如前,我知道回忆是会美化的,可也不至于到这种程度啊。(发病)
于是想到了软播表。这东西在以前内存主流还在32MB时代就有人要硬上8MB大的。
当时的“超前”科技现在岂不是……(一番捣鼓后病入膏肓)

1.为啥要改善MIDI的效果?
这与MIDI特性有关,简单地来说,如果用乐队来形容的话,MIDI文件相当于乐谱,而播表(SoundFonts)相当于乐器,也就是说MIDI实际播放出来的效果受到播表(乐器)影响很大。
如今Windows使用的播表是自带的Microsoft GS Wavetable Synth(前身是Microsoft GS Wavetable SW Synth,再往前叫Microsoft Synthesizer),文件在C:\Windows\System32\drivers文件夹里以gm.dls文件命名,只有3.28MB大。这个播表如今只是为了向下兼容而继续存在多年来只是小修小补,问题非常多,搭载的音色较差,特定情况下音色会被略过不演奏、部分命令不会被正确执行、部分音色被省略掉等等,说得难听点就是能出个响。
这导致在现在的机器上播放MIDI的效果很差,虽说好师傅不怨工具差,在这种情况下依旧有很优秀的MIDI音乐问世,不过……谁不希望它更好点?而本文就是为了改善这种效果。
除此之外还能达到一些特殊目的,比如说有人做了GB音色的播表,通过下面调整后可以让MIDI播放“GB”风格的音乐。
2.本文涉及改善对象:
a、非IBM-PC的早期计算机模拟器
b、DOSBOX
c、RPGツクール95、2000、2003
d、绝大多数Windows下使用MIDI的游戏软件(一般来说是上个世纪90年代的作品)
本文无法改善自带MIDI音源的作品,如:
a、RPGツクールXP、VX、VX Ace
b、Ys1 Eternal 1998年版
c、WOLF RPGエディター
3.相关软件下载:
主体:https://coolsoft.altervista.org/en/virtualmidisynth
程序下面有播表(SoundFonts)链接的下载,也要下载,至于选哪个...这就见仁见智了,不一定是越大的越好。新人的话推荐SGM-V2.01。
附加:https://coolsoft.altervista.org/en/midimapper
Windows8/10必须得用,因为Windows8以后的操作系统已经取消了MIDI Mapper机能。
4.设置方法
(必须)单一设备的设置
随便下载一个播表后打开设置,在“音色库”里添加上面提到的播表(SoundFonts)。

之后进入“MIDI映射器”选择“默认MIDI输出设备”,选择VirtalMIDISynth #1即可。如果想用Media Player播放MIDI的话下面的也顺便改了。
(进阶、非必看)复数设备的设置
如果手上有多个播表,你需要在A软件内用一个,B软件里用另外一个,那么需要进行如下设置。
进入“设置”的“设备设置”的“设备数量”(VirtalMIDISynth),最大可以选择4个设备(一般来说没必要)。
之后进入“音色库”,把播表全部添加进去,之后关键点来了,对音色库链的调整,添加完毕的播表前面会有数字,因为我在“设置”里设置的“设备数量”是3个,下面截图里显示的就是1、2、3。这个数字是选择播表载入哪个设备的,数字为绿色状态是载入到指定的设备。如截图中我的设置就是SGM-V2.01载入1号设备(VirtalMIDISynth #1)、FluidR3_GM载入2号设备(VirtalMIDISynth #2)……
之后进入“MIDI映射器”选择“默认MIDI输出设备”,这里的VirtalMIDISynth #1、2、3与之前在音色库里设置的1、2、3号设备一一对应。
(进阶、非必看)音色库链
有人会有问题了,那么如果两个播表(SoundFonts)在同一个设备(VirtalMIDISynth)里载入会怎么样?“后”载入的会覆盖“先”载入的相同部分,以上面截图为例如果图中两个播表都在同一个设备里且都有鼓点的话,因为SGM-V2.01在“先”,FluidR3_GM在“后”,实际播放时使用的是FluidR3_GM。
这个有什么用呢?有些播表是“专精”于特定音色的,比如钢琴,如果MIDI没有用到钢琴的时候它是不会发声的,可游戏里恐怕很难有一部作品的音乐全是用钢琴演奏的,这种情况下就必须与其他播表配合使用。又比如如果遇到A播表是全能型可钢琴音色比不上专门针对钢琴优化的B播表的时候,这个先后载入就可以改善A播表的缺陷了。
5.软件调整
经过上面设置之后一开始提到的改善对象里的
c、RPGツクール95、2000、2003
d、绝大多数Windows下使用MIDI的游戏软件
就会得到改善了,而
a、非IBM-PC的早期计算机模拟器
b、DOSBOX
还需要进行进一步调整。
DOSBOX
实际上DOSBOX的播放MIDI效果已经得到改善了,部分开发版本甚至对这方面进行了扩展可以直接载入播表。不过考虑到通用程度以及使用便捷程度还是老老实实设置一下吧,尤其是使用了复数设备的情况下,再说也不是所有版本都能用。
输入指令mixer /listmidi后会列出当前所有的MIDI输出设备,记住设备前面的数字,比如下图中的VirtalMIDISynth #1前面的数字是2。
打开DOSBOX设置文件(根据开发版本不同以及初期设置不同设置文件名不一样,位置也有差别,不过文件后缀都是统一的conf),查找midiconfig=(根据开发版本不同midiconfig和=之间会有空格,例如我用的版本是“midiconfig =”),在后面填上数字2,这样DOSBOX就会用VirtalMIDISynth #1播放MIDI了。模拟器设置完毕了接下来还要对模拟器里执行的软件进行设置,DOSBOX对MIDI的支持是通过虚拟的Roland MPU-401声卡实现的,你需要在软件里设置,让软件认识到这个声卡的存在,这个类似现在的装驱动,不同的是DOS下每一个软件都需要。(DirectX的便利性体现出来了)
可……我一时半会想不起来DOS上有啥游戏用MIDI播放的,测试了几个作品都没用到MIDI,没办法只好用安装简单也比较能反应出真实情况的Windows3.1举例了。驱动程序、端口、中断一个都不能错,其中端口、中断是默认情况下的设置,如果修改模拟器设置的话有可能会不同。比如默认情况下在Windows95里Roland MPU-401会和Sound Blaster 16在端口上发生冲突,需要改端口。


在游戏里安装驱动的时候可能会碰到这么一种情况那就是软件没有对应的驱动,这样就无法发声,不过DOSBOX模拟的硬件都是当年比较有名的,可以说是作为DOS时代标准的硬件,这种硬件基本上各家都支持,因此一般来说不会碰上这种情况。如果确实碰到了特立独行的,可以选择同硬件商的其他驱动碰碰运气,也许就响了。
非IBM-PC的早期计算机模拟器
各家基本上都是大同小异,找到MIDI输出(MIDI IN),选择对应的设备即可。
另外还需要(早期计算机)软件本身支持,与IBM-PC不同,其他早期计算机的声音输出多数是在游戏里改或者启动之前选择,还有少数是自动识别自动使用。比如偽典・女神転生 東京黙示録就是自动识别自动使用的。
MSX……印象里似乎没有支持MIDI的作品问世,那个年代对音乐有着近乎病态追求的Konami在MSX平台上最后的作品MetalGear2用的也是自家的SCC。我唯一知道的是MSX-BASIC可以使用MIDI,可这个就不是游戏相关了,再说MSX-BASIC编程我只会调用PSG,MIDI完全不懂,最重要的是我连五线谱都看不懂。
Fm-towns在早期计算机里我摆弄的相对较少,不知道支持MIDI的作品。
X68000需要选择SC-55。
PC-9801则是MPU-401。

Falcom Windows作品特有问题
因为使用的播放接口问题,WindowsXP以后的操作系统在MIDI播放前会卡一下,现在的Windows10这种卡的时间能短不少,不过还是很明显。
此问题在WindowsXP时代有人开发出mciHook得以解决,不过很遗憾的是根据我的测试该软件在Windows10上无效,如果对卡非常在意的话,我能想到的也就是用虚拟机来解决问题了。甚至可以用下图这种PC-9821模拟器达成。不过因为虚拟显卡速度较慢,且调试较为复杂,要达到比较好的效果很难。

简易QA
Q:播表一个一个载入太麻烦了,我一次性全载入不行么?
A:不行,因为“后”载入会覆盖掉“先”载入的,结果很有可能实际用到播放的没有多少做了很多无用功甚至导致曲子乱套。
就算枕头(播表)很多人人有份也要适可而止(天之音:这图的吐槽点好像不在这里吧?)
Q:内存占用量很大/MIDI首次播放前很卡,这正常么?
A:你加载的播表太多或者太大了,播表是全部载入内存的,因此你使用的播表越多越大启动时间越长占用内存越大。
Q:没有声音。
A:理由有很多,排除掉软件和游戏本身设置错误,有一种可能是你选择了“特化”型播表,比如说只负责钢琴的,这种需要和其他的播表配合使用。此外据说有可能会与浏览器冲突,因为本人使用环境问题,没有碰到过。
Q:如何判断播表正在工作?
A:点“设置”里的“关于”。看VirtalMIDISynth部分,下面会列出正在使用的程序以及工作情况。
没有使用的情况。VirtalMIDISynth显示<free>。

正在使用的情况。VirtalMIDISynth显示出正在使用的程序路径以及使用情况。

Q:怎么声音还不如原来?
A:有可能是游戏内的音源选错了,比如说X68000支持的MIDI是MT-32和SC-55,如果选择MT-32的话声音会变得很奇怪。
还有就是播表选择问题,像选用了并非给游戏用的播表,又或者选择了某些特殊播表如GB音色播表对特定音色支持不佳(用GB音源播表的DMG-CPU播放Ruina 廃都の物語的climax.mid这首音乐你就明白了),再或者就是全能型播表常见的特定音色质量不好,比如FluidR3GM比系统自带的强不少,不过钢琴完全不行,需要用钢琴类专用播表补强。
其他还有一些可能不过一般不会碰到,再说要是碰到了整起来就麻烦了,最重要的是我懒。
Q:有啥作品推荐么?
A:X68000上的悪魔城ドラキュラ和GradiusII,那个时代的Konami的金字招牌可不是盖的,特别是对音乐的追求是其他厂商难以企及的。两部作品中特别推荐悪魔城ドラキュラ,仅仅两张软盘做出了非常丰富的内容(举例:时计塔的钟表时间还有最终关的壁画季节是和现实世界联动的),系列2D横版过关型作品中最好的作品之一,同时也是最难的作品之一。后来的PS1移植版也不过是劣化移植。再说我一个Gradius系列死忠都放着GradiusII不管选择悪魔城ドラキュラ。
Falcom从1996-1999年的作品,Falcom的作品风格始终在变喜好的人群也始终变化,不变的是音乐质量的金印。尤其是Ys1 Eternal 1998年版支持的4种音乐格式中,有3种是MIDI(GM/GS/SC-55),不过很遗憾的是该作在Falcom作品中非常罕见地使用了自带播表的播放方式,更改系统播表不会对其造成任何影响。

Ruina 廃都の物語 作品本身就不多说了。虽然MIDI使用的都是免费素材,不过选曲很好,配置好的话可以大幅度提升效果。
Q:有啥播表推荐么?
一人一个“听法”,说两个新人(懒人)首选。SGM-V2.01、FluidR3GM,这两个二选一。想换点风格可以选择DMG-CPU,这个是GB音源风。
琪露诺 1年前
想起之前拿废都物语测试音源,结果同一首曲子愣是听出了好多种不同的效果hhh
liyuqi [作者] 1年前
发布
光之鹰 1年前
发布