【问题标题】:XG MIDI messagesXG MIDI 信息
【发布时间】:2021-12-18 21:11:42
【问题描述】:

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

我发现了一个用 XG 编码的 MIDI 文件。

当我在 Yamaha 键盘上弹奏时,鼓声听起来不错。但是在 Java 中,如果 MIDI 是 XG,我不知道如何检测音轨是鼓,或者如何找出 MIDI 是 XG。

通过在 Note ON 消息中检测通道是否等于 9 来执行此操作的方法似乎并未检测到所有 XG 鼓音符。

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

【问题讨论】:

标签: java midi javax.sound.midi


【解决方案1】:

一般的答案是没有“简单”的方法来检测 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 模式”所必需的。

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

【讨论】:

  • 好吧,我设法找到了 F0,43,10,4C,00,00,7E,00,F7 sysex 消息。所以现在我知道如何检测它的 XG 文件了。现在我只需要知道哪些音符是鼓,哪些是音符。
  • 大部分时间鼓音符在通道 10 [1-16] 上。
【解决方案2】:

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

您需要检查“银行选择”和“程序更改”消息。

这是您在 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制作的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    相关资源
    最近更新 更多