Oder Text markieren und Enter drücken…

Kommunikation zwischen Processing und vvvv

Echtzeitkommunikation zwischen Processing und vvvv mittels OSC (Open Sound Control)

Vorgehensweise

  1. Für Processing muss man zunächst "oscP5" herunterladen. Das ist eine OSC-Implementation von Andreas Schlegel.  
    Downloadlink: http://www.sojamo.de/libraries/oscP5/
    Das ZIP-Archiv enthält einen Ordner namens "oscP5", diesen kopiert man in den "Sketches"-Ordner. Unter Windows befindet dieser sich im Normalfall unter "Eigene Dateien\Processing".
  2. Ich habe bereits eine Processingdatei sowie einen vvv-Patch vorbereitet, ladet euch die folgende Datei herunter: osc_tutorial.zip (4 KB)
    Den Ordner vvvv_und_processing kopiert ihr ihn den Sketches-Ordner von Processing und öffnet dann die enthaltene Datei ("vvvv_und_processing.pde").
  3.  Startet den Sketch (Strg + R) und öffnet nun den vvvv-Patch ("OSC Tutorial.v4p"). Es ist wichtig, dass zuerst der Processing-Sketch gestartet und danach erst die vvvv-Datei geöffnet wird. Beim Starten des Sketches wird im Hintergrund ein virtueller UDP-Server gestartet. Möglicherweise erscheint eine Sicherheitswarnung der Firewall. Damit die Verbindung zu vvvv hergestellt werden kann, muss der Zugriff auf die Ziel-IP zugelassen werden. Bei möglichen Problemen empfiehlt es sich die Firewall testweise abzuschalten.

    OSC Tutorial Firewall-Hinweis
  4. Klickt man in das schwarze Processing-Ausgabefenster dann wird "123" an die Adresse "/processing_to_vvvv" geschickt und der Button "Empfängt gerade" in vvvv blinkt auf. Aktiviert man den Button "Senden ein/aus" in vvvv, dann wird in der Textkonsole von Processing die Nachricht "### OSC-Nachricht empfangen. Adresse: /vvvv_to_processing Typetag: s" ausgegeben. Man kann nun also in Echtzeit Daten von Processing nach vvvv schicken und umgekehrt.


Zur Funktion

Im vvvv-Patch ist auf der rechten Seite der Aufbau zum Empfangen. Beim Node mit der Bezeichnung "UDP" handelt es sich um den UDP-Network Server. Er empfängt in diesem Fall Daten von der Adresse "/processing_to_vvvv" auf dem Port

9000. Die emfpangen Daten werdem vom OSCDecoder in ihre Bestandteile zerlegt.  Aus dem Ausgang "Arguments" kommt der eigentliche übertragene Wert. Der TypeTag gibt an, um was für einen Datentyp es sich handelt. Immer wenn der OSCDecoder etwas empfängt wird außerdem eine "1" auf dem OnReceive-Ausgang ausgegeben. In Processing ist der bewirkt folgende Code dass etwas gesendet wird:

OscMessage myMessage = new OscMessage("/processing_to_vvvv");
  myMessage.add(123); // Integer "123" wird gesendet
  oscP5.send(myMessage, vvvv); 

OSC vvvv Receive

 

Fürs Senden wird ein UDP-Network Client benötigt. In diesem Fall wird auf dem Port 12000 gesendet, damit die Daten in Processing ankommen:

oscP5 = new OscP5(this,12000);
OSC vvvv Send

 

Mehrere Nachrichten auf einmal übermitteln

Mehrere Nachrichten können zu einem "Bundle" kombiniert und dann auf einmal verschickt werden. Wie man mit vvvv Nachrichten über OSC als "Bundle" verschickt wird im Hilfepatch des OSC Encoder (Network)-Node anschaulich beschrieben. In Processing lasssen sich "Bundles" mit new OscBundle(); verschicken. Eine genaue Erklärung gibt es im oscP5bundle-Sketch unter "Processing/oscP5/examples/oscP5bundle/oscP5bundle.pde".

Weiterführende Links

Open Sound Control in vvvv
http://vvvv.org/tiki-index.php?page=OSC
Offizielle OSC Homepage
http://opensoundcontrol.org/
oscP5 Online  Documentation
http://www.sojamo.de/libraries/oscP5/documentation/

Beachtet auch die folgenden ähnlichen Tutorials im IG-Wiki:
Kommunikation zwischen Processing und Flash (Win)
Kommunikation zwischen Processing und Flash (Mac)
Kommunikation zwischen vvvv und Flash