python mido MIDI 包中的 MultiPort 使用问题
Problem with MultiPort use in python mido MIDI package
我正在使用一个在播放时自动保存 MIDI 消息的程序,当使用单个输入端口时,一切都运行良好。
我想扩展到同时使用 2 或 3 个端口(该应用程序针对 VST 钢琴演奏者,有些人将钢琴用作一个 MIDI 设备,将延音踏板用作另一个 USB 插槽中的第二个设备)。我能够使用两个单独的输入端口让它工作,然后使用 2 iter_pending() 循环。基本代码是这样的:
ports = mido.get_input_names()
port_A = mido.open_input(ports[0])
port_B = mido.open_input(ports[1])
for msg_A in port_A.iter_pending():
...
for msg_B in port_B.iter_pending():
...
问题在于循环是顺序的。当我通过 2 个端口发送相同的 MIDI 消息进行测试时,通过 port_B 进入的事件处理有几毫秒的延迟。
MIDO 包包含一个不同类型的端口,正是为此:mido.ports.MultiPort()
我的问题是我无法让它工作。
如果我尝试:
multi = mido.ports.MultiPort([port_A, port_B])
for msg in multi:
print (msg)
如 MIDO 文档中所建议,未打印任何消息...
我已经为 multi 中的端口做了各种语法组合,但似乎没有任何效果。
我做错了什么?
你试过了吗:
open_ports = [portA, portB]
while True:
for port in open_ports:
do_whatever(port.poll())
或使其异步:
portA = mido.open_input(ports[0], callback=do_whatever)
portB = mido.open_input(ports[1], callback=do_whatever)
while True:
pass
在这两种情况下,do_whatever 是一个函数,它将一条消息作为参数,并根据您的需要对该消息执行任何操作。
我正在使用一个在播放时自动保存 MIDI 消息的程序,当使用单个输入端口时,一切都运行良好。 我想扩展到同时使用 2 或 3 个端口(该应用程序针对 VST 钢琴演奏者,有些人将钢琴用作一个 MIDI 设备,将延音踏板用作另一个 USB 插槽中的第二个设备)。我能够使用两个单独的输入端口让它工作,然后使用 2 iter_pending() 循环。基本代码是这样的:
ports = mido.get_input_names()
port_A = mido.open_input(ports[0])
port_B = mido.open_input(ports[1])
for msg_A in port_A.iter_pending():
...
for msg_B in port_B.iter_pending():
...
问题在于循环是顺序的。当我通过 2 个端口发送相同的 MIDI 消息进行测试时,通过 port_B 进入的事件处理有几毫秒的延迟。
MIDO 包包含一个不同类型的端口,正是为此:mido.ports.MultiPort() 我的问题是我无法让它工作。
如果我尝试:
multi = mido.ports.MultiPort([port_A, port_B])
for msg in multi:
print (msg)
如 MIDO 文档中所建议,未打印任何消息...
我已经为 multi 中的端口做了各种语法组合,但似乎没有任何效果。
我做错了什么?
你试过了吗:
open_ports = [portA, portB]
while True:
for port in open_ports:
do_whatever(port.poll())
或使其异步:
portA = mido.open_input(ports[0], callback=do_whatever)
portB = mido.open_input(ports[1], callback=do_whatever)
while True:
pass
在这两种情况下,do_whatever 是一个函数,它将一条消息作为参数,并根据您的需要对该消息执行任何操作。