XG MIDI 信息

XG MIDI messages

我正在开发一个 Java 程序,该程序使用 javax.sound.midi 读取 MIDI 文件。

我遇到了一个用 XG 编码的 MIDI 文件。

当我在我的雅马哈键盘上演奏时,鼓声听起来不错。但是在 Java 中,如果 MIDI 是 XG,我不知道如何检测曲目是鼓,或者如何找出 MIDI 是 XG。

通过检测 Note ON 消息中的通道是否等于 9 来实现的方法似乎无法检测到所有 XG 鼓音符。

有人知道检测 XG 鼓音符的方法(希望简单)吗?

一般的答案是没有“简单”的方法来检测 MIDI 文件是否使用 XG 鼓音符。

如果您假设鼓在通道 10 [1-16] 上,这对于 XG 合成器不是强制性的,则 GM 鼓映射 [pitch 35-81] 之外的鼓音符的存在可能会给您一个提示。但它也可能是 GM2 文件!而且有些鼓风格可能不会使用这些非GM音符,即使它真的是一个XG文件。

更好的方法可能是搜索 XG 特定的 SysEx 消息,例如 XG SYSTEM ON (F0,43,10,4C,00,00,7E,00,F7),这是启用 XG 合成器的 'XG Mode' 所必需的。

此外,如果您的 XG 文件始终来自同一来源,您可以检查 Midi 文件是否包含一些元消息,例如文本、版权声明、乐器名称、轨道名称,这可能表明它是 XG 文件。

XG 允许在任何通道上设置鼓组。

您需要检查“Bank Select”和“Program Change”消息。

这是频道 9、10、11 上的鼓:

offset   tick  message
...
[  545]   842: b8 00 7f -- Bank Select MSB
[  549]   844: b8 20 00 -- Bank Select LSB
[  553]   846: c8 10 -- Program Change (Rock Drum Kit)
...
[  602]   872: b9 00 7f -- Bank Select MSB
[  606]   874: b9 20 00 -- Bank Select LSB
[  610]   876: c9 00 -- Program Change (Standard Drum Kit)
...
[  648]   900: ba 00 7f -- Bank Select MSB
[  652]   902: ba 20 00 -- Bank Select LSB
[  656]   904: ca 19 -- Program Change (Analog Drum Kit)

以上列表是使用 https://github.com/jazz-soft/test-midi-files

制作的