我写了一个实用程序来将midi数据从python脚本发送到ableton,主要使用rtmidi。
在ableton 方面,我有一个远程脚本,相当简单,主类中只有几个按钮:
...
self._session = SessionComponent(8, 1, is_enabled=True)
self.next_track_button = ButtonElement(True, MIDI_CC_TYPE, 0, 25, *a, **k)
self.previous_track_button = ButtonElement(True, MIDI_CC_TYPE, 0, 26, *a, **k)
self.next_track_button.add_value_listener(self._next_track)
self.previous_track_button.add_value_listener(self._prev_track)
def _next_track(self, value):
self.log_message("Next Track")
self._session.set_offsets(1, 0)
self._session.update()
def _prev_track(self, value):
self.log_message("Prev Track")
self._session.set_offsets(-1, 0)
self._session.update()
...
远程脚本编译没有错误,但两个回调(_next_track 和 _prev_track)永远不会命中。
我想知道这是否与我从 rtmidi 发送 midi 信号的方式有关?
import rtmidi
from rtmidi.midiconstants import *
class MidiController:
...
def send_midi_signal(self, data):
self._init_midi_out()
with self.midiout:
#The issue is probably here
msg = [(CONTROL_CHANGE & 0xF0) | ((self.channel) - 1 & 0xF)]
msg.append(data & 0x7F)
self.midiout.send_message(msg)
time.sleep(0.5)
del self.midiout
...
正如我在左上角的 MIDI 图标照明中看到的那样,Ableton 肯定会接收到一个 MIDI 信号。问题是它没有击中回调,根据要求更改轨道偏移。
知道问题出在哪里吗?这几天一直在打我的头。
我什至尝试将按钮设置为监听 MIDI_CC,但不走运。谢谢。