Mido - Как получать данные midi в реальном времени с разных портов

Я создал 2 порта в качестве входных для захвата данных с клавиатуры и контроллера MIDI-поверхности (который имеет кучу ползунков и ручек). Хотя я не уверен, как получить данные от обоих

for msg1 in input_hw:
    if not msg1.type == "clock":
        print(msg1)
    # Play the note if the note has been triggered
    if msg1.type == 'note_on' or msg1.type == 'note_off' and msg1.velocity > 0:
        out.send(msg1)

for msg in input_hw2:
    #avoid to print the clock message
    if not msg.type == "clock":
        print(msg)

Первый цикл For работает, я включаю и выключаю миди-ноту при игре на клавиатуре, которая привязана к input_hw порт, но второй цикл никогда не проходит.

1 ответ

Решение

Нашел решение; вам нужно обернуть циклы for в цикл while, а также использоватьiter_pending() функция, которая позволяет mido продолжать работу и не застревать в ожидании первого цикла.

Возможно есть более элегантное решение, но это то, что мне удалось найти

while True:
    for msg1 in input_hw.iter_pending():
        if not msg1.type == "clock":
            print(msg1)
        # Play the note if the note has been triggered
        if msg1.type == 'note_on' or msg1.type == 'note_off' and msg1.velocity > 0:
            out.send(msg1)

    for msg in input_hw2.iter_pending():
        #avoid to print the clock message
        if not msg.type == "clock":
            print(msg)
Другие вопросы по тегам