Выберите инструменты GM MIDI уровня 2 с помощью библиотеки Python Mido
Я использую
библиотеку 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 уровня 1. Я также хочу получить доступ к инструментам GM MIDI уровня 2.
Пожалуйста, покажите мне с помощью кода, как это сделать. Вся документация по MIDI, которую я нашел в Google, невероятно сбивает с толку.
1 ответ
Спецификация GM 2 гласит:
3.2 Сообщение об изменении программы
[…]
Устанавливает тембр для указанного канала.Если канал является каналом мелодии, тембр выбирается из банка, заданного параметром выбора банка (с помощью выбора банка 79H/xxH, с банком 79H/00H, соответствующим набору звука GM1). […]
3.3.1 Выбор банка (cC#0/32)
Выбор банка выбирает желаемый банк для указанного канала. Первым перечисленным байтом является старший бит, передаваемый на cC#0. Второй байт в списке - это LSB, передаваемый на cC#32. Банки перечислены в таблице набора звуков GM2 (Приложение A). Выбор банка 79H/00H соответствует звуковому набору GM1. […]
Сообщение выбора банка не влияет на изменение звука до тех пор, пока не будет получено последующее сообщение об изменении программы.
Таким образом, чтобы получить доступ к другим инструментам, вы должны выбрать другой банк перед отправкой сообщения об изменении программы. Например, чтобы выбрать "Пузырь":
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))