0

我有一个播放 MIDI 文件的旧游戏,其中包含以下内容:

IDirectMusicPerformance8* m_pDMPerformance;
IDirectMusicLoader8* m_pDMLoader;
CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&m_pDMLoader);
CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8, (void**)&m_pDMPerformance);
m_pDMPerformance->InitAudio(NULL, NULL, m_hWnd, DMUS_APATH_SHARED_STEREOPLUSREVERB, 128, DMUS_AUDIOF_ALL, NULL);

无论用户的配置如何,这都会导致 MS GS Wavetable Synth + 混响。我需要能够将正确的原始 MIDI 输出到默认的 MIDI 设备,对于一些精明的用户来说,它是像 VirtualMidiSynth 或 FluidSynth 这样的软合成器、MT-32 仿真器、OPL3 仿真器,甚至是具有它自己的机载样本,例如真正的 MT-32。在应用程序中选择设备不是必需的——我宁愿让它选择默认/#0 MIDI 设备并将原始 MIDI 发送给它。.mid 文件本身是标准的,可以在其他媒体播放器中完美播放,这些播放器将原始 MIDI 输出到用户选择的设备或默认/#0 设备。

4

1 回答 1

0

你有两个选择:

UWP API 允许使用 Win32 API 支持的所有 MIDI 设备,以及 Windows 10 上的蓝牙 LE MIDI。

顺便说一句:VirtualMIDISynth 创建一个 MIDI 设备,模拟一个硬件 MIDI 设备,如 MS GS Wavetable Synth。但 FluidSynth 没有,因此您需要一个虚拟 MIDI 电缆驱动程序才能从 Windows 中的另一个应用程序向其输出 MIDI。

于 2019-09-19T13:19:07.153 回答