Как заставить MIDI-устройство сообщать о состоянии управления? - PullRequest
0 голосов
/ 11 мая 2019

Я использую python-rtmidi для чтения MIDI-устройства с помощью ползунков и регуляторов.

Я получаю события CONTROL_CHANGE всякий раз, когда движется ползунок или поворачивается регулятор (это прекрасно работает).

Но как я могу опрашивать MIDI-устройство, чтобы узнать начальную позицию ползунков и регуляторов при запуске моей программы?

Пользователь ничего не перемещал, поэтому сообщения CONTROL_CHANGE не отправляются.

(У меня нет документации по MIDI-устройству; это "WORLDE Easycontrol 9" ; я просто пытаюсь использовать стандартные MIDI-сообщения.)

Также - покаОбращаю ваше внимание - есть ли стандартная команда для включения / выключения светодиодов кнопок?Я попытался отправить команды CONTROL_CHANGE на номер контроллера кнопки (значения 0 и 127), но светодиоды загораются только при нажатии кнопок вручную.

Мой существующий код:

import rtmidi

class Midi:

    CONTROL_CHANGE = 0xB0

    def __init__(self, port=0):
        self.midi_in = rtmidi.MidiIn() # gets BUT DOES NOT OPEN a midi input port
        self.midi_out = rtmidi.MidiOut()

        try:
            self.midi_in.open_port(port)
            self.midi_out.open_port(port)

            self.running = True

        except:
            self.running = False # in case there was no such MIDI port

    def read(self):

        if self.running:
            event = self.midi_in.get_message()

            if event:
                return event[0]

        return None

    def write(self, message):
        if self.running:
            self.midi_out.send_message(message)

1 Ответ

2 голосов
/ 12 мая 2019

Официальные спецификации MIDI не определяют механизм для чтения текущего состояния элемента управления.Однако многие устройства имеют специфичные для поставщика команды для запуска массового дампа параметров.

Возможность изменения элементов управления с компьютера зависит от устройства.

...