电脑 MIDI 播放常用工具推荐

我入坑 MIDI 这段时间,了解到一些在电脑上播放 MIDI 文件需要依赖的一些工具。这些工具对于各位资深玩家可能已经十分熟悉,但对于我这样的新手来说仍需花不少时间才能了解清楚。因此这篇帖子主要向那些刚入坑的朋友推荐一些常用软件,这些软件大多在站内的帖子里被提及过,这里只是起到一个信息汇总的作用,希望能消除一些信息差。

电脑播放 MIDI 文件,一般需要播放器和合成器两类软件。以下分别进行介绍。

合成器

常见的软件合成器按连接方式可分为驱动调用、通过端口调用两种,按合成方式又分为 SoundFont 合成器、VSTi 包装两大类。

合成方式分类

如果是 SoundFont 合成器,需要加载 SF2 等音色库文件作为音源。最常用的比如说 CoolSoft VirtualMIDISynth,可以注册多个虚拟 MIDI 设备;与它类似的有 OmniMIDI,这两个合成器的底层都是 un4seen 的 BASS 库。另外还有基于 FluidSynth 底层的 Qsynth 合成器,它就没有注册驱动,只能通过设置输入端口接收 MIDI 消息(这个软件我在站内有发过:Qsynth 1.0.6 Windows 汉化构建版及编译教程 - MIDI 技术 - TAT)。

VirtualMIDISynth

Qsynth

另一类是 VSTi 类的合成器,需要加载 VSTi 插件作为音源。VSTi 插件原来一般是与宿主软件搭配使用,但通过简单的包装也可以变成通用合成器。比如说 Falcosoft 的 VST MIDI Driver 就可以将 VSTi 包装为 MIDI 驱动,不过只能创建一个虚拟设备需要手动切换插件。而 SAVIHost 可用端口的方式调用 VSTi。部分正版 VSTi 安装时就附带了包装程序,使用和 SAVIHost 类似。

VST MIDI Driver

SAVIHost

SAVIHost

调用方式分类

像是 VirtualMIDISynth 和 VST MIDI Driver 这样的驱动式的合成器通过系统的 WinMM/MME API 进行调用的,大多数播放器都支持手动选择它作为输出设备。部分播放器无法选择,由于 Vista 后系统内置的 MIDI 映射器被弃用,会默认输出到设备 0 也就是系统内置的软件合成器(Microsoft GS Wavetable Synth,简称 MSGS 或 GS Synth)。这个合成器音质很差,为了能正常选择输出设备,可以安装 CoolSoft MIDIMapper 替代系统 MIDI 映射器功能。

MIDIMapper

而若使用 SAVIHost 等通过端口连接的合成器/外壳,需要通过特定软件创建 MIDI 端口作为连接输入、输出的桥梁,如 loopMIDI 等。然而在较新的 Windows 11 上,由于系统为适配 MIDI 2.0 升级 服务,传统的 MIDI 端口软件可能会不稳定甚至失效;建议下载微软官方的 MIDI Settings 应用预览版 和配套的 MIDI 1.0 端口创建工具 来创建 MIDI 端口。

loopMIDI

Windows MIDI Settings

音源选择

有了合成器接下来就是选择音源。SoundFont 音色库常见为 SF2 文件。最经典的是 FluidR3_GM;个人推荐 GeneralUser-GS,因为它在文件体积极小的情况下音质并不明显逊于前者。而 VSTi 一般使用早期完整支持 GM 音色的通用插件,如经典的 Yamaha S-YXG50Roland Sound Canvas VA 等。现在下到的大多是重新打包的破解版,形式是一个 DLL 文件或包含 DLL 的文件夹,可以直接用 VST MIDI Driver 加载或用 SAVIHost 套壳使用。这些音源都可以在网上找到资源。

播放器

播放器方面就较为简单。本站的教程里推荐了 vanBasco’s Karaoke Player,不过该软件早已停更,官方链接也失效了。而我个人比较推荐的是下面几款播放器:

TMIDI Player

该软件提供丰富的控制功能,且支持曾经在日本 MIDI 社区里流行的 WRD 格式歌词文件,可以通过简单绘制功能实现丰富的视觉效果。

MIDITrail

本身是一个 MIDI 可视化工具,支持打开本地 MIDI 文件和 MIDI 端口输入两种使用方式。由于同时支持端口输入输出,可以将其作为 MIDI 端口链中的一部分随意组合,颇具可玩性。

foobar2000 + foo_midi

foobar2000 是一个经典的音乐播放软件,以其极高的可自定义性而闻名。软件本体并不支持 MIDI 播放,但搭配上 foo_midi 组件,它就成了一个 MIDI 播放器。foo_midi 支持使用 BASSMIDI、FluidSynth 以及 VSTi 插件等多种合成方式。

Falcosoft Soundfont Midi Player

这是我最推荐的播放器,它的功能可谓极其全面便捷。它支持 MIDI 端口输入输出和以及 WinMM 驱动调用,也就是说可以使用上面提到的任何合成器。然而它甚至不需要依赖外置合成器:它内置的 BASSMIDI 可同时实现 Soundfont 合成和 VSTi 合成,不需要外接任何程序,这种内置合成器的方式可以说既便捷又稳定。不过要确保 VSTi 插件和软件本身同时为 32 位或 64 位,或安装 jBridge,播放器将自动进行版本转换。它还支持录制功能,也就是说可以将使用内置合成器播放的任意音源播放的 MIDI 音乐渲染为正常的音频。

3 Likes

目前不要用Windows MIDI Service的MIDI1 Loopback,该插件仍处于预览阶段,容易导致服务崩溃重启或卡死。
建议改用MIDI2 Loopback,虽然是MIDI2,但MIDI2向下兼容MIDI1。

感谢大佬回复。我使用的一些软件不是很兼容 MIDI 2.0 Loopback,因此我目前主要用 MIDI 1.0 Loopback,还没碰到过太大的问题,也许是我运气好吧 :joy:

1 Like

我目前正在使用网页MIDI合成器SpessaSynth,这个应用也有本地版,但需要安装nodejs。
应用使用了WebMIDI,可以在几乎所有平台上使用MIDI端口。

1 Like

厉害!纯 Web 实现的 MIDI 播放?看起来很方便。不知道 MidiShow 以后会不会换用这个合成器。我有台电脑上用 Jazz MIDI 插件播放就没成功过,也不知道是哪个环节出了问题。还有MIDI云那个网站的播放体验堪称痛苦,它会一次性打开我安装的所有 MIDI 设备导致它们之间互相冲突。用上这个应该会好很多。MIDI 就是太古老了,相关的各种技术适配都没跟上,只能靠爱好者发电 :grin:

1 Like

这似乎是Chromium的WebMIDI实现导致的,Chromium会在第一次访问MIDI设备时自动打开所有设备,且不会自动关闭。

1 Like

原来如此,看来还有不少改进空间啊。另外请问大佬 WEBMIDI.js 和 JZZ.js 定位是否重合,两者孰优孰劣呢?

1 Like

WEBMIDI.js本质上是对浏览器WebMIDI API的封装,本身并不具备播放MIDI文件的功能。
而JZZ.js提供了更多的功能,比如MIDI文件播放器、虚拟端口、MIDI2和浏览器扩展Jazz-MIDI等。
两者的共同点是都使用WebMIDI API,而使用WebMIDI需要申请权限才能使用。
另外我并不是什么大佬。

1 Like

谢谢解惑,别太自谦嘛!还有我求教也得显得虚心些吧 :joy: 早睡啊

1 Like