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)