Rtmidi-Ableton远程脚本-如何将rtmidi的MIDI_CC信号发送到Ableton Python远程脚本

问题描述

我编写了一个实用程序,主要使用rtmidi将MIDI数据从python脚本发送到ableton。

在ableton方面,我有一个远程脚本,相当简单,在主类中只有几个按钮:

...
self._session = SessionComponent(8,1,is_enabled=True)

self.next_track_button = ButtonElement(True,MIDI_CC_TYPE,25,*a,**k)
self.previous_track_button = ButtonElement(True,26,**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,没有运气。 谢谢。

解决方法

我终于解决了这个问题。 对于寻找相同答案的人,我犯了很多错误:

  1. 通道在python中设置为0而不是1。 如果要在通道1上发送它,则使用0是正确的,但是msg串联导致它变为16。
  2. 我通过以下方式更改了ButtonElement的构造: self.previous_track_button = ButtonElement(真,MIDI_CC_TYPE,0,102)

要检查发送的MIDI命令,我使用了MIDI-OX,它非常有用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...