【问题标题】:Select GM MIDI Level 2 instruments using the Python Mido library使用 Python Mido 库选择 GM MIDI Level 2 乐器
【发布时间】:2020-04-08 12:13:55
【问题描述】:

我正在使用 Python Mido 库来创建 MIDI 文件。我已经想出要改变 乐器您将program_change 消息添加到轨道 给定频道:

from mido import Message, MidiFile, MidiTrack
track = MidiTrack()
...
track.append(Message('program_change', program = 36,
                     time = 1234, channel = 0)

这可行,但我只能访问 GM MIDI Level 1 乐器。一世 想要访问 GM MIDI Level 2 仪器也是。

请使用代码告诉我如何做到这一点。所有 MIDI 文档 我通过谷歌搜索发现非常令人困惑。

【问题讨论】:

    标签: python midi midi-instrument mido


    【解决方案1】:

    GM 2 specification 说:

    3.2 程序变更消息

    […]
    设置指定通道的音色。

    当 Channel 是 Melody Channel 时,音色从 Bank Select 指定的 Bank 中选择(使用 Bank Select 79H/xxH,Bank 79H/00H 对应 GM1 声音集)。 […]

    3.3.1 银行选择 (cc#0/32)

    Bank Select 为指定通道选择所需的 Bank。列出的第一个字节是 MSB,在 cc#0 上传输。列出的第二个字节是 LSB,在 cc#32 上传输。组列在 GM2 声音集表(附录 A)中。 Bank Select 79H/00H 对应于 GM1 Sound Set。[…]

    在收到后续的 Program Change 消息之前,Bank Select 消息不会影响声音的任何变化。

    因此,要访问其他乐器,您必须在发送程序更改消息之前选择不同的银行。 例如,选择“气泡”:

    track.append(Message('control_change', control =  0, value = 0x79, channel = 0, time = 1233))
    track.append(Message('control_change', control = 32, value = 0x05, channel = 0, time = 1233))
    track.append(Message('program_change', program = 0x7a,             channel = 0, time = 1234))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      相关资源
      最近更新 更多