使用 Python Mido 库选择 GM MIDI Level 2 乐器
Posted
技术标签:
【中文标题】使用 Python Mido 库选择 GM MIDI Level 2 乐器【英文标题】:Select GM MIDI Level 2 instruments using the Python Mido library 【发布时间】: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 文档 我通过谷歌搜索发现非常令人困惑。
【问题讨论】:
【参考方案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))
【讨论】:
以上是关于使用 Python Mido 库选择 GM MIDI Level 2 乐器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 QFileDialog 打开带有 .mid 后缀的文件
在 Python MIDI MIDO 读取/保存文件中转换时间/刻度
在 Mac 上从 Python Mido 库输出 MIDI 声音
如何在 mido 中从 Message 中获取 note 属性?