Mido - Как получить данные MIDI в режиме реального времени из разных портов - PullRequest
0 голосов
/ 12 февраля 2020

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

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)

Первый Для l oop работает, я включаю и выключаю Midi Note при игре на клавиатуре, которая привязана к input_hw порт, но второй l oop никогда не проходит.

1 Ответ

0 голосов
/ 12 февраля 2020

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

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

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)
...