Python: Fußschalter für SooperLooper
Hallo Leute, ich habe folgendes vor: Ich möchte SooperLooper mit zwei Fußschalter bedienen (wegen der Gitarre sind die Hände beschäftigt). Dafür greife ich an einem seriellen Port die Steuerleitungen ab. In einem Thread und python-serial empfange ich die Schalterzustände. Bis dahin ist alles gut. Nun ergibt sich das Problem: SooperLopoper kann man über Tastenkürzel bedienen. Wie bekomme ich die Verbindung zur einzelnen Taste hin? Gibt es in Pyhon ein Modul, mit dem ich Tastatureingaben Systemweit simulieren kann? Oder kann man auch Midi-Signale mit Python senden? Kann mir mal jemand auf die Sprünge helfen? Vielleicht sehe ich ja den Wald voller Bäume nicht! Mathias
Hi Mathias, Sooperlooper lässt sich doch über OSC Steuern. Nimm doch "python-liblo" Die Python-bindings für OSC. Gruß Michael Mathias Uebel schrieb:
Hallo Leute,
ich habe folgendes vor: Ich möchte SooperLooper mit zwei Fußschalter bedienen (wegen der Gitarre sind die Hände beschäftigt). Dafür greife ich an einem seriellen Port die Steuerleitungen ab. In einem Thread und python-serial empfange ich die Schalterzustände. Bis dahin ist alles gut. Nun ergibt sich das Problem: SooperLopoper kann man über Tastenkürzel bedienen. Wie bekomme ich die Verbindung zur einzelnen Taste hin? Gibt es in Pyhon ein Modul, mit dem ich Tastatureingaben Systemweit simulieren kann?
Oder kann man auch Midi-Signale mit Python senden?
Kann mir mal jemand auf die Sprünge helfen? Vielleicht sehe ich ja den Wald voller Bäume nicht!
Mathias
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Mathias Uebel schrieb:
Oder kann man auch Midi-Signale mit Python senden?
Ja, kann man. Am besten nimmt man dazu die Python bindings für ALSA "pyalsa" (Vorsicht, dies ist NICHT http://pypi.python.org/pypi/pyalsa): ftp://ftp.alsa-project.org/pub/pyalsa/ Leider ist die Dokumentation dafür etwas sparsam. Man sollte sich auch auf jeden Fall die Library Referenz der C-Bilibliotheken ansehen: http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html Außerdem kann man sich mit pydoc die API-Referenz von pyalsa.alsaseq erzeugen lassen: $ cd pyalsa-1.0.20/pyalsa $ pydoc -w alsaseq Außerdem enthält die Distribution auch einige sehr erhellende Beispiel-Skripte, z.B. Portierungen von aconnect, aseqdump und amidi. Aber SuperLooper unterstützt ja auch OSC. Auch dafür gibt es verschiedene Python Module, z.B. http://opensoundcontrol.org/implementation/python-simple-osc Ich könnte mir vorstellen, dass die API einfacher ist als die von ALSA und OSC hat wohl weniger Einschränkungen als MIDI (Stichwort: Auflösung von Controller-Werten). Hdh, Chris
Christopher Arndt schrieb: Danke Chris und Tux,
Aber SuperLooper unterstützt ja auch OSC. Auch dafür gibt es verschiedene Python Module, z.B.
Okay ich nehme OSC. Ich gebe zu: Ich kannte das bis dato nicht. Und so habe ich auch gleich Schwierigkeiten: Das funktioniert: --------------------------- anfang import osc.OSC as OSC from socket import * m = OSC.OSCMessage() m.setAddress('/quit') oscdata = m.getBinary() s = socket(AF_INET, SOCK_DGRAM) s.sendto(oscdata, ("localhost", 9951)) ----------------------------------------ende # Aber andere Commandos wollen nicht funktionieren. m.setAddress('/sl/0/hit s:record') Was mache ich falsch? Oder mit liblo? -----------------------------anfang import liblo try: target = liblo.Address(9551) except liblo.AddressError, err: print str(err) sys.exit() # Wie muss das Commando hier aussehen? liblo.send(target, '/quit' ) -----------------------------ende Bitte um Hilfe. Mathias
Mathias Uebel schrieb:
Das funktioniert: --------------------------- anfang import osc.OSC as OSC from socket import *
m = OSC.OSCMessage() m.setAddress('/quit')
oscdata = m.getBinary()
s = socket(AF_INET, SOCK_DGRAM) s.sendto(oscdata, ("localhost", 9951)) ----------------------------------------ende
# Aber andere Commandos wollen nicht funktionieren. m.setAddress('/sl/0/hit s:record') Was mache ich falsch?
Warum so umständlich? import osc osc.init() osc.sendMsg('/sl/0/hit', ['s:record'], port=9951) (ungetestet) Chris
Christopher Arndt schrieb:
Mathias Uebel schrieb:
Danke, Chris, für die schnelle Antwort. [...]
Warum so umständlich?
import osc
osc.init() osc.sendMsg('/sl/0/hit', ['s:record'], port=9951)
(ungetestet)
Nicht ganz: Ich habe mir einen Listener gebaut und geschaut was ankommt: Das Prefix braucht es in Python nicht: ['record'] Danke Mathias
Hallo Leute, Danke für die Hilfe. Ich bin soweit: http://debian.pastebin.com/m7d867e38 es funktioniert hervorragend. Man muss erst Jackd, dann Sooperlooper und dann mein Programm starten. Testen geht mit einem Terminal und: python >>> import osc python >>> osc.init() python >>> osc.listen('127.0.0.1', 9951) Wenn IPs und Ports übereinstimmen werden die Tastendrücke empfangen. Tasten an COM sind: DSR _____/___________ DTR _________________| DCD______/___________| Bis denne, ... muss Jammen!!!
Hallo Mathias, herzlichen Glückwunsch zu deinem gelungenen DIY Projekt. Mathias Uebel schrieb:
Ich bin soweit: http://debian.pastebin.com/m7d867e38
try: import threading except ImportError: sys.stderr.write("Error: Modul not found!\npython-threading?\n") sys.exit(1) Gibt es Systeme, auf denen das "threading" Modul nicht verfügbar ist?
Tasten an COM sind:
DSR _____/___________ DTR _________________| DCD______/___________|
Mich würde interessieren, wie die zugehörige Hardware aussieht. Kannst du die mal beschreiben? Chris
Christopher Arndt schrieb:
Hallo Mathias,
herzlichen Glückwunsch zu deinem gelungenen DIY Projekt.
Danke, Chris. Ich musste nachschauen: Do It Yourself ;-)
Mathias Uebel schrieb:
Ich bin soweit: http://debian.pastebin.com/m7d867e38
try: import threading except ImportError: sys.stderr.write("Error: Modul not found!\npython-threading?\n") sys.exit(1) Gibt es Systeme, auf denen das "threading" Modul nicht verfügbar ist?
Ja, das kommt aus einem meiner früheren Projekten: Web-Radio für Zaurus. http://www.meeloon.de/index-0-9-0.html [...]
Mich würde interessieren, wie die zugehörige Hardware aussieht. Kannst du die mal beschreiben?
Ich habe einen Behringer V-Amp. Das Teil kommt mit einem Doppeltaster, mit dem man normalerweise die Banke hoch und runter schaltet. http://www.behringer.com/EN/Products/V-AMP2.aspx Ich habe also ein Kabel mit einem D-Sub-Stecker und an der anderes Seite eine Klinkenbuchse gelötet. Leider ergibt sich noch ein Problem: Mein Thinkpad (das Zielgeräte, da mobil) hat keine Serielle. Jetzt habe ich mir einen Adapter (D-Sub zu USB) bestellt und werde das dann damit testen. Ich kann nicht genau abschätzen, wie hoch der Aufwand für eine USB-Kontroller-Platine sein würde. Ich habe in dem Segment keine Erfahrungen. Das wäre mal eine Herausforderung für später. Die üblichen Schalter* (den habe ich auch) sind keine Taster! * http://www.thomann.de/de/lead_foot_fs2.htm Ich überlege, ob ich die Flanken der Schalter als Hits auswerte. Dann könnte ich auch diesen Fußtreter nehmen. Gruß Mathias Hier mal ein Beispiel mit Sooperlooper: http://www.youtube.com/watch?v=Y7V-E5tT5zc&NR=1
Mathias Uebel schrieb:
Ich habe also ein Kabel mit einem D-Sub-Stecker und an der anderes Seite eine Klinkenbuchse gelötet.
Leider ergibt sich noch ein Problem: Mein Thinkpad (das Zielgeräte, da mobil) hat keine Serielle. Jetzt habe ich mir einen Adapter (D-Sub zu USB) bestellt und werde das dann damit testen. Ich kann nicht genau abschätzen, wie hoch der Aufwand für eine USB-Kontroller-Platine sein würde. Ich habe in dem Segment keine Erfahrungen. Das wäre mal eine Herausforderung für später.
Du kriegst für 6 Euro USB-Serial Konverter bei ebay, das lohnt sich m.M. nach nicht, selbst was zu basteln. Falls du das doch möchtest, schau dir mal Arduino an: http://arduino.cc/ Da hast du mehrere analoge und digitale Ein- und Ausgänge, die du mit dem eingebauten Mikrokontroller steuern kannst. Kostenpunkt ca. 30 Euro inkl. Versand. Chris
Christopher Arndt schrieb:
Mathias Uebel schrieb:
Ich habe also ein Kabel mit einem D-Sub-Stecker und an der anderes Seite eine Klinkenbuchse gelötet.
Leider ergibt sich noch ein Problem: Mein Thinkpad (das Zielgeräte, da mobil) hat keine Serielle. Jetzt habe ich mir einen Adapter (D-Sub zu USB) bestellt und werde das dann damit testen. Ich kann nicht genau abschätzen, wie hoch der Aufwand für eine USB-Kontroller-Platine sein würde. Ich habe in dem Segment keine Erfahrungen. Das wäre mal eine Herausforderung für später.
Du kriegst für 6 Euro USB-Serial Konverter bei ebay, das lohnt sich m.M. nach nicht, selbst was zu basteln. Falls du das doch möchtest, schau dir mal Arduino an:
Da hast du mehrere analoge und digitale Ein- und Ausgänge, die du mit dem eingebauten Mikrokontroller steuern kannst. Kostenpunkt ca. 30 Euro inkl. Versand.
Alternativ zu dem gibt's noch den AT90USBKey_. Der ist mit 40 Euro auch preiswert, und ein Vorteil (der allerdings auch mit ein bisschen mehr Komplexitaet bei der Programmierung einhergeht) ist dass er ein general-purpose USB-Host/Slave ist. Der Arduino hingegen hat nur den Standard-FTDI drauf, womit er seriell kann (ohne seriell-2-usb-konverter natuerlich) D.h. man koennte den AT90USBKey gleich midi ueber USB erzeugen lassen. Diez .. _AT90USBKey:: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3879
participants (4)
-
Christopher Arndt -
Diez B. Roggisch -
Mathias Uebel -
tux