簡體   English   中英

Rtmidi - Ableton 遠程腳本 - 如何將 MIDI_CC 信號從 rtmidi 發送到 Ableton Python 遠程腳本

[英]Rtmidi - Ableton Remote Script - How to send MIDI_CC signals from rtmidi to Ableton Python remote script

我寫了一個 util 將 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,但不走運。 謝謝。

我終於解決了這個問題。 對於尋找相同答案的人,我犯了很多錯誤:

  1. 通道在 python 中設置為 0 而不是 1。如果你想在通道 1 上發送它,使用 0 是正確的,但 msg 連接導致它變成 16。
  2. 我以下列方式更改了 ButtonElement 結構: self.previous_track_button = ButtonElement(True, MIDI_CC_TYPE, 0, 102)

為了檢查我發送的 MIDI 命令,我使用了 MIDI-OX,非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM