Steuerung von Flash MX durch ein Midi Interface unter Einsatz eines FLOSC-Servers

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Systemvoraussetzungen

Benötigte Hardware:

Benötigte Software:

  • EyesWeb und EyesWeb-Midi-Patch
  • FLOSC
  • Java Runtime Environment
  • Macromedia Flash MX 2004 und Flash Player 7

Die Teilsysteme im Überblick

Zur Steuerung von Macromedia Flash MX über ein MIDI-Keyboard bedarf es einiger Teilsysteme. Abb.1 zeigt in Blöcken die Reihenfolge der einzelnen Komponenten vom Eingangssignal, über die Verarbeitung bis hin zur Audio bzw. Videoausgabe, sowie die verwendeten Protokolle zur Kommunikation der einzelnen Anwendungen.

Abb.1

Im Folgenden werden die einzelnen Komponenten vorgestellt.

Signalerzeugung

Quelle der Benutzereingriffe ist hier ein MIDI-Keyboard, welches bei der Bedienung MIDI-Nachrichten an das MIDI Interface sendet. Das MIDI-Keyboard wird über die MIDI-Out Buchse mittels MIDI-Kabel mit der MIDI-In Buchse des Interface verbunden. Das Midi Interface ist eine weit verbreitete Schnittstelle und wird deshalb auch gerne von Sensorensystemen wie z.B I-CubeX zur Signalübertragung genutzt. Nach dem Anschluss des MIDI-Keyboards an das Interface steht das Keyboard dem Betriebssystem und somit den Anwendungen als MIDI-Quelle zur Verfügung.

EyesWeb

Die Anwendung EyesWeb bietet umfangreiche Möglichkeiten der Bild- und Audioverarbeitung. Der große Vorteil dieser Applikation ist der Zugriff auf fast alle Medienquellen, die ein Computer zur Verfügung stellen kann und dient in diesem Kontext zum Auslesen der MIDI-Nachrichten, die anschließend in OSC-Nachrichten konvertiert und über das UDP Netzwerk Protokoll an den FLOSC-Server gesendet werden.

FLOSC - Java Server Application

"FLOSC" steht für "Flash OpenSoundControl" und ist momentan die einzige Open Source Anwendung, die die Kommunikation zwischen OSC-Anwendungen und Flash MX ermöglicht (www.benchun.net/flosc/). Dabei fungiert FLOSC als eine Art Gateway/Server, das OSC-Nachrichten via UDP auf einem vordefinierten Eingangs-Port empfängt, in ein XML-Objekt umwandelt und dieses über einen definierten Ausgangs-Port an Flash MX via TCP weiterleitet. Flash muss dazu über eine XML-Socket-Connection mit FLOSC verbunden sein. Das dazugehörige "Flash Action Script" wird als Flash-Datei mitgeliefert.

Adobe Flash MX (vormals: Macromedia Flash MX)

Adobe Flash MX wird von Designern und Entwicklern zur Erstellung von Plattform unabhängigen Rich-Media Inhalten und Anwendungen benutzt. Populär sind Flash-Internetseiten, die nur ein kleines weit verbreitetes Flash-Player-Plugin für den Web-Browser benötigen (www.adobe.com/de/). Mit der Skriptsprache "Action Script" bietet die Multimediaanwendung eine leistungsfähige objektorientierte Programmiersprache, die erst die Gestaltung und Steuerung von interaktiven Anwendungen ermöglicht. Flash stellt die zu steuernde Endanwendung dar.

Protokolle und Flash Action Script

Damit die einzelnen Teilsysteme kommunizieren können, bedarf es den Einsatz des MIDI- und OSC-Protokolls zur Erfassung der Sensordaten, sowie das UDP- und TCP- Netzwerkprotokoll zur Übermittlung der Daten und schließlich Flash Action Script zum "Mapping" und Visualisieren der Sensordaten.

MIDI

Die MIDI-Schnittstelle und das MIDI-Protokoll wurden schon vor Jahrzehnten zur Steuerung von Musik-Synthesizern in Verbindung mit einem Keyboard eingeführt. Drückt man eine Taste des Keyboards oder dreht ein Kontrollrad, so erfolgt ein MIDI-Ereignis und wird als MIDI-Nachricht an die MIDI-Schnittstelle bzw. den Computer geschickt. Je nach Typ der Nachricht besteht diese aus 1-3 Bytes, nämlich Statusbyte, Adressierungsinformation, Befehlstyp und die Datenbytes. Abb.2 zeigt einen MIDI-Monitor midi-monitor.eyw, der in EyesWeb realisiert wurde und einen Überblick über die Funktionen und Werte eines MIDI-Keyboards schafft.

Abb.2

Open Sound Control (OSC)

"OSC" ist ein weiteres Protokoll, ähnlich wie MIDI für die Kommunikation von Synthesizern, Computern und Multimedianwendungen entwickelt worden. Der große Vorteil gegenüber MIDI ist der größere Wertebereich und die zur Verfügung stehenden Datentypen. War man bei MIDI auf Integerwerte von höchstens 0 bis 16383 begrenzt, so ist es mit OSC möglich, nicht nur 32-bit große Integer- und Floatwerte zu übertragen, sondern auch String ASCII-Zeichenketten zu übermitteln. Außerdem bietet "OSC" eine anwendungsspezifische Adressierung und die Übertragung von mehreren Werten gleichzeitig (www.cnmat.berkeley.edu/OpenSoundControl).

User Datagram Protocol (UDP) und Transmission Control Protocol (TCP)

Damit die verschiedenen Anwendungen Daten austauschen können, nutzen diese die Netzwerkprotokolle UDP und TCP, die wiederum auf das Internet Protocol (IP) zugreifen (www.cnmat.berkeley.edu/OpenSoundControl). Die Datenübertragung über Netzwerkprotokolle stellt nicht nur eine einfache Möglichkeit dar, einen Computer "mit sich selbst" kommunizieren zu lassen, sondern erlaubt es auch die einzelnen Teilsysteme auf mehrere Rechner zu verteilen.

Konfiguration der Teilsysteme

EyesWeb Midi/OSC-Konverter

Abb.3

Abb.3 zeigt den EyesWeb Patch "Midi/OSC-Konverter" MidiToOSC.eyw. Das Programm liest im Block "MIDI IN" die einkommenden MIDI- Nachrichten aus, diese Nachrichten werden nach Typ gefiltert und auf zwei "Äste" aufgeteilt. Der obere behandelt die "ControlChange" Nachrichten und der untere "Note On" Events. Typ und Wert der Nachricht wird in eine OSC-Nachricht konvertiert und über den Block "StringToOSC" an die Applikation FLOSC gesendet. Zur Konfiguration der MIDI-Schnittstelle öffnet man den Block "MIDI IN" und wählt das Midi Interface unter "DEVICE" aus. Unter den Einstellungen der zwei Blöcke "StringToOSC" muss unter "HOST" und "PORT" die Netzwerkadresse (IP-Adresse) und der Eingangs-Port des Computers eingetragen werden, auf dem der FLOSC-Server ausgeführt wird (Abb.4)

Abb.4

Nachdem die Einstellungen vorgenommen wurden, kann EyesWeb mit "Lock and Start" gestartet werden.

FLOSC Port Adressierung

Der FLOSC-Server benötig zum Starten nur die Nummern für den Ein- und Ausgangs-Port. Über die "Eingabeaufforderung" lässt sich das Programm per Kommandozeile starten (Abb.5):

Java Gateway <Port-IN> <Port-OUT>

Standardwerte für Port-IN: "1250"
und Port-OUT: "3000"

Abb.5

Flash MX - XML Socket Connection

Nach dem Start der Flash Applikation (die im internen Bereich verfügbar ist), müssen wieder die "HOST-Adresse" (IP-Adresse) des Rechners auf dem FLOSC ausgeführt und der FLOSC Ausgangsport eingetragen werden. Jetzt nur noch "Verbindung herstellen" drücken und die Verbindung zum MIDI-Keyboard steht (Abb.6/7; www.cnmat.berkeley.edu/OpenSoundControl)!

Abb.6

Abb.7

Die Funktion oscAuswertung(var_value, var_name) wird bei ankommender Nachricht aufgerufen und der Inhalt beziehungsweise Name der OSC-Nachricht übergeben. Das folgende Tutorial zeigt eine einfache Anwendung dieser Flash-Datei.

Tutorial zum Testen der Flashapplikation beziehungsweise der Teilsysteme

Das folgende Tutorium zeigt einen Weg, wie man erfolgreich eine OSC-Nachricht in Flash auswertet und auf ein grafisches Objekt anwendet. In diesem Beispiel wird die Deckkraft (Alphakanal) des Logos der Fachhochschule Nürnberg geändert. Zunächst wird der FLOSC-Server und die Flash Anwendung gestartet und über die Flash-Anwendung eine OSC-Nachricht erzeugt.

  1. Start des FLOSC-Servers:
    • Öffnen der MS-Eingabeforderung
    • Öffnen des Programmverzeichnisses "flosc"
    • start der Java-Applikation über die MS-Eingabeaufforderung: "gateway"
  2. Start der Flash-Applikation
    • Die Datei "flosc-connection.swf" in einem Flashplayer 7 öffnen
    • Button "Verbindung herstellen" drücken
    • Nach erfolgreichem Verbinden mit dem FLOSC-Server einen Wert von 0-100 in das Eingabefeld "Nachricht" eingeben und senden drücken
    • Die Transparenz des Logos nimmt den eingegeben Wert an

Folgendes Skript wurde für diese Funktionalität implementiert:

// Funktion zum Auslesen der Werte und der OSC-message
function oscAuswertung(var_value, var_name){ //String, String
  // Mit Hilfe einer if-Abfrage kann die Nachricht
  // identifiziert werden. In diesem Beispiel
  // ist das Statement "true”, solange überhaupt
  // etwas in "var_name" steht.
  if(var_name != ""){
    trace(var_name);//gibt Inhalt von "var_name" auf Console aus
  }
  var_value = new Number(var_value); //String --> Number
  _root.mc_logo._alpha = var_value; // wendet "Value" auf Transparenz an
 
  // übergibt Daten Variablen auf Ebene: level0 (_root)
  // _root.OSCWert = var_wert;
  // _root.OSCAdresse = var_name;
}

Die Funktion oscAuswertung(var_value, var_name) wird bei ankommender Nachricht folgendermaßen aufgerufen:

oscAuswertung(xmlValue, xmlName);

Weblinks