Shuttersteuerung V0.9 CLI
Zunächst habe ich nur eine kleine "Machbarkeitsstudie" geschrieben. Ohne grafisches Interface oder irgendwelchen Schnickschnack.
Die Ausgaben erfolgen auf der Kommandozeile. Ich habe den Code ausgiebig kommentiert und hoffe es ist soweit verständlich was ich mir dabei gedacht habe.
Ableton Live muss entweder F8 oder G8 senden um den Shutter zu öffnen oder zu schließen.
Bei Proben hat sich schnell gezeigt, dass dieser Ansatz zuverlässig funktioniert. Allerdings habe ich auch sehr schnell eine Statusanzeige vermisst, die mich darüber informiert welchen Status der Shutter gerade hat.
Weiter zur grafischen Oberfläche.
Die Ausgaben erfolgen auf der Kommandozeile. Ich habe den Code ausgiebig kommentiert und hoffe es ist soweit verständlich was ich mir dabei gedacht habe.
Ableton Live muss entweder F8 oder G8 senden um den Shutter zu öffnen oder zu schließen.
Bei Proben hat sich schnell gezeigt, dass dieser Ansatz zuverlässig funktioniert. Allerdings habe ich auch sehr schnell eine Statusanzeige vermisst, die mich darüber informiert welchen Status der Shutter gerade hat.
Weiter zur grafischen Oberfläche.
from pygame import midi
import socket
def midi_decode(key): #Funktion zur Interpretation der eingehenden MIDI Daten
if key[0] == 144: #Wenn das eingehende MIDI Kommando ein Note On ist
s = True
else:
s = False
n = key[1]
return s, n #Rückgabe ob Note On gesendet wurde und Wert der Note
def shutter(aktion): #Funktion zur Steuerung des Shutters
ip = '192.168.20.68' #IP Adresse des Beamers
port = 4352 #Port für das PJLink Protokoll
if aktion == 'zu': #Nachricht für TCP Paket zusammenstellen
msg = '%1AVMT 31\r'
elif aktion == 'auf':
msg = '%1AVMT 30\r'
msg = msg.encode('UTF-8')
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) #TCP Verbindung aufbauen, Nachricht senden und Verbindung schließen
s.connect((ip, port))
s.send(msg)
s.close()
#Hauptprogramm
midi.init() #MIDI Schnittstelle initialisieren
default_id = midi.get_default_input_id()
midi_input = midi.Input(device_id=default_id)
print('Shuttersteuerung aktiv...')
print('Beenden mit CTRL+C')
try:
while True: #Endlosschleife bis User CTRL+C drückt
if midi_input.poll(): #Wenn etwas über die MIDI Schnittstelle empfangen wird
eingabe = midi_input.read(num_events=16)
note_on, taste = midi_decode(eingabe[0][0])
if note_on and taste == 125: #Wenn ein Note On von F8 empfangen wurde
shutter('zu')
if note_on and taste == 127: #Wenn ein Note On von G8 empfangen wurde
shutter('auf')
except KeyboardInterrupt as err:
print("Stopping...")