Hallo Community,
ich hab eine Lösung gesucht, um den Mikrofon-Status (ON/OFF) visuell über meine RGB-Hardware (Tastatur, Monitor-Hintergrundbeleuchtung, etc.) anzuzeigen. Da ich unter der Suche nichts gefunden habe, teile ich hier, wie ich das Ganze zum Laufen gebracht habe.
Wir nutzen das OpenRGB SDK (Software Development Kit), um die LED-Farben zu steuern. Weil mAirList nicht direkt mit diesem Protokoll sprechen kann, brauchen wir eine kleine Python-Brücke als Übersetzer zwischen mAirList und OpenRGB.
Die Architektur
- Dein mAirList-Script (Sender): Registriert Dein MIDI-Signal für Mic-ON/OFF und sendet einen einfachen HTTP-Befehl an die Brücke.
- Die Python-Brücke (Übersetzer): Startet einen kleinen Webserver (Flask), empfängt den HTTP-Befehl und steuert dann über die
openrgb-python-Bibliothek Deine LEDs. - Der OpenRGB SDK Server (Empfänger): Läuft im Hintergrund und führt die Farbanpassungen durch.
1. Vorbereitung und Python-Brücke einrichten
Stell sicher, dass Du Python 3 installiert hast und der OpenRGB SDK Server in den OpenRGB-Einstellungen auf Port 6742 aktiviert ist.
A. Python-Bibliotheken installieren
Öffne die Kommandozeile und installiere die notwendigen Pakete:
pip install flask openrgb-python
B. Zielgeräte identifizieren (Wichtig!)
Bevor Du die Brücke startest, musst Du die exakten Namen Deiner steuerbaren RGB-Geräte kennen, da die Python-Brücke diese Strings erwartet.
Du kannst die Namen über eine temporäre Python-Konsole auslesen:
from openrgb import OpenRGBClient
client = OpenRGBClient('127.0.0.1', 6742)
print("--- Gefundene Geräte ---")
for i, device in enumerate(client.devices):
print(f"Index {i}: Name: {device.name}")
Kopiere den exakten Namen (inkl. Groß-/Kleinschreibung und Leerzeichen) und verwende ihn im nächsten Schritt.
B. Python-Brücke (python_bridge.py)
Speichere diesen Code als python_bridge.py. Ganz wichtig: Pass die Zeile TARGET_DEVICE_IDENTIFIERS an und ersetz die Beispiel-Gerätenamen durch die exakten Namen Deiner eigenen OpenRGB-Geräte (z. B. “TopMonR”, “Corsair K95”). Bei mir sind es die LEDs über meinen beiden Monitoren. Ich schau ja in die selbigen während meiner Sendung.
from openrgb import OpenRGBClient
from openrgb.utils import RGBColor
from flask import Flask, request
import time
TARGET_DEVICE_IDENTIFIERS = ["TopMonR", "TopMonL"]
OPENRGB_IP = "127.0.0.1"
OPENRGB_PORT = 6742
APP_PORT = 5000
MIC_ON_COLOR = RGBColor(255, 0, 0)
MIC_OFF_COLOR = RGBColor(0, 255, 0)
app = Flask(__name__)
client = None
def connect_to_openrgb():
global client
try:
client = OpenRGBClient(OPENRGB_IP, OPENRGB_PORT)
print("Verbindung zu OpenRGB erfolgreich hergestellt.")
return True
except Exception as e:
client = None
return False
connect_to_openrgb()
def set_multiple_devices_color(color: RGBColor):
global client
if client is None:
if not connect_to_openrgb():
return "Connection Error", 503
color_name = "ROT" if color == MIC_ON_COLOR else "GRÜN"
devices_changed = []
try:
for identifier in TARGET_DEVICE_IDENTIFIERS:
target_device = None
try:
target_index = int(identifier)
if 0 <= target_index < len(client.devices):
target_device = client.devices[target_index]
except ValueError:
for device in client.devices:
if device.name == identifier:
target_device = device
break
if target_device:
target_device.set_color(color)
devices_changed.append(target_device.name)
if devices_changed:
print(f"Farbe auf {color_name} für Geräte: {', '.join(devices_changed)} gesetzt.")
return "OK", 200
except Exception as e:
client = None
return "Internal Error", 500
@app.route('/mic_on', methods=['GET'])
def mic_on():
return set_multiple_devices_color(MIC_ON_COLOR)
@app.route('/mic_off', methods=['GET'])
def mic_off():
return set_multiple_devices_color(MIC_OFF_COLOR)
if __name__ == '__main__':
print(f"Starte Python Bridge Server auf Port {APP_PORT}...")
app.run(host='0.0.0.0', port=APP_PORT, threaded=False)
C. Brücke starten
Starte die Python-Brücke in einer Konsole und lass das Fenster im Hintergrund geöffnet:
python python_bridge.py
2. Dein mAirList Script (MIDI-Trigger)
Das folgende mAirList-Hintergrund-Script (.mls) fängt das Signal Deines Controllers ab.
Hinweis zur Hardware (AKAI Professional APC mini MK2): Ich verwende den letzten Slider dieses Controllers, um das Mikrofon zu steuern. Die MIDI-Nachrichten sind standardmäßig:
- Slider ganz oben (ON):
B0 38 7F - Slider ganz unten (OFF):
B0 38 00
// openrgb_midi_trigger.mls
const
BRIDGE_URL = 'http://127.0.0.1:5000/';
APCMini = 2; // bei mir ist es das Device 2 ... hier im Forum gibt es eine Beschreibung wie man das herrausfindet sofern du es nicht schon weißt!
// MIDI-Werte für Mic-Controller (ANPASSEN!)
MIDI_STATUS = $B0;
MIDI_DATA1 = $38;
MIDI_ON_DATA2 = $7F;
MIDI_OFF_DATA2 = $00;
procedure OnLoad;
begin
MidiOutOpen(APCMini);
end;
procedure OnMidiMessage(Status, Data1, Data2: Integer);
begin
if (Status = MIDI_STATUS) and (Data1 = MIDI_DATA1) then
begin
if Data2 = MIDI_ON_DATA2 then
begin
HTTPGet(BRIDGE_URL + 'mic_on');
SystemLog('OpenRGB Trigger: Mic ON (ROT) gesendet.');
end
else if Data2 = MIDI_OFF_DATA2 then
begin
HTTPGet(BRIDGE_URL + 'mic_off');
SystemLog('OpenRGB Trigger: Mic OFF (GRÜN) gesendet.');
end;
end;
end;
procedure OnUnload;
begin
MidiOutClose(APCMini);
end;
begin
end.
Script aktivieren
- Speichere diesen Code als
openrgb_midi_trigger.mls. - Füge das Skript in der mAirList Konfiguration unter Hintergrund-Scripts hinzu.
- Starte mAirList neu.
Jetzt sollte beim schieben des letzten Sliders die Python-Brücke reagieren und Deine ausgewählten Geräte in Rot (AN) oder Grün (AUS) schalten!
Viel Erfolg beim Nachbauen und Senden! ![]()
Edit: mls fehlende Prozeduren OnLoad /OnUnLoad hinzugefügt inkl Midi-Device angabe.