Python RTMidi 控制 Ableton Live

1 投票
1 回答
1276 浏览
提问于 2025-04-18 05:07

我正在尝试通过rtmidi_python库来控制Ableton。现在,我可以通过蓝牙向从设备发送消息,从设备接收到这些消息后再发送给Ableton。问题是,发送一个“播放”命令并不能让Ableton在另一端启动。我能看到Ableton接收到了这个命令,但并没有做出反应。

当我点击播放时,“停止”按钮会变成灰色,但音轨并没有开始播放,同时控制台会打印出以下内容:

[242, 0, 0]
[250] 0.0

当我停止音轨时,我会收到:

[252]

当我改变我的位置时,从设备也会改变音轨的位置,所以我觉得“播放”命令可能不对。当我发送一个note_on消息时,从设备会播放这个音符。我也尝试把命令改成十六进制表示法,但似乎没有解决问题。

这是主设备的MIDI部分:

midi_in = rtmidi.MidiIn()
for port_name in midi_in.ports:
    print(port_name)
selected_device = int(input('Select a device '))
midi_in.open_port(selected_device)

while recording:
    message, delta_time = midi_in.get_message()
    if message:
        data = json.dumps(message)
        sock.send(data)
        print(message, delta_time)

这是从设备的部分:

midi_out = rtmidi.MidiOut()
for port_name in midi_out.ports:
    print(port_name)
midi_device = int(input('Select a device: '))

midi_out.open_port(midi_device)
data = client_sock.recv(1024)
while data != '':
    stream = client_sock.recv(1024)
    message = json.loads(stream.decode())
    print(message)
    midi_out.send_message(message)

有没有人能帮我一下?另外,如果有人有关于获取MIDI节拍时钟的建议,我也很想听听!

编辑 我刚发现我在找的是[248]这个命令,它应该每个四分音符发送24次。但在我的控制台里没有显示出来。

1 个回答

1

关于[248]的MIDI时钟事件消息:默认情况下,它们会被忽略。

我使用MidiIn.ignore_types()这个方法来接收这些消息:

midiIn.ignore_types (sysex        = True, 
                     timing       = False,
                     active_sense = True)

通常是在调用open_port()之后。

撰写回答