OSC-Schnittstelle

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

OSC Schnittstelle

Ähnlich wie MIDI, stammt die OSC-Schnittstelle („Open Sound Control“) ursprünglich aus dem Musik-Bereich. Der Vorteil der Übertragung von Steuersignalen als OSC-Messages liegt in der Möglichkeit, die Daten über Netze (LAN, WLAN, …) zu senden sowie im größeren Wertebereich der Daten (incl. Gleitkommazahlen). Damit erreicht man eine schnellere und exaktere Datenkommunikation als z.B. bei MIDI. Viele Standardsysteme gerade im Bereich Multimedia und Interaktion (wie z.B. EyesWeb, MaxMSP, vvvv) erlauben eine Ein- und Ausgabe mittels OSC. Anwendungsprogramme wie Flash können über einen entsprechende OSC-Server (z.B. „Flosc“) mittels OSC mit anderen Systemen kommunizieren. Dadurch sind interaktive Multimedia-Anwendungen auf verteilten Systemen einfach und standardisiert realisierbar.

OSC wurde an der University of Berkeley entwickelt. Dort sind detaillierte Unterlagen zu OSC zu finden (http://archive.cnmat.berkeley.edu/OpenSoundControl/).

Eine OSC-Message ist folgendermaßen aufgebaut:

- Adresse (String beginnend mit dem Zeichen ‚/’)

- Anzahl und Typ der nachfolgend übertragenen Parameter (Type-Tag String) (beginnt mit einem Komma und enthält pro Parameter einen Kennbuchstaben)

- Parameter/Werte


Beispiele:

/synthesizer/lautstaerke ",f" 67.5

/eyesweb/schwellwerte ",ii" 70 50


Die ursprüngliche Definition von OSC war etwas unsauber. So war zunächst die Definition der Datentypen nicht vorhanden - der Type Tag String wurde erst später hinzugefügt.

Wichtig ist auch, dass bei OSC-Nachrichten ein 4 Byte Alignment durchgeführt wird. Die muss insbesondere dann beachtet werden, wenn nicht vorgefertige Funktionen verwendet werden, sondern das Protokoll für die Datenübertragung selbst (über UDP) realisiert wird.

Dies soll an folgendem Beispiel erläutert werden: Es soll ein Wert für die Koordinate x (bezeichnet mit "/x") als "float"-Wert (4 Byte) übertragen werden. Die OSC-Nachricht sieht dann z.B. wie folgt aus:

/x ",f" 0.12345

Wegen des 4-Byte-Alignments werden in der Nachricht die "leeren" Bytes zwischen den 4-Byte-Grenzen mit "\0" (also binär 00000000) aufgefüllt, also ergbit sich der folgende Aufbau (die Bytes sind durch das Zeichen "|" getrennt dargestellt):

| / | x | \0 | \0 | , | f | \0 | \0 | <4 Bytes mit dem float-Wert 0.12345>


Nachfolgend einige Auszüge aus der OSC-Definition (http://archive.cnmat.berkeley.edu/OpenSoundControl/):


Atomare Datentypen

int32 32-bit big-endian two's complement integer
OSC-timetag 64-bit big-endian fixed-point time tag, semantics defined below
float32 32-bit big-endian IEEE 754 floating point number
OSC-string A sequence of non-null ASCII characters followed by a null, followed by 0-3 additional null characters to make the total number of bits a multiple of 32. (OSC-string examples) In this document, example OSC-strings will be written without the null characters, surrounded by double quotes.
OSC-blob An int32 size count, followed by that many 8-bit bytes of arbitrary binary data, followed by 0-3 additional zero bytes to make the total number of bits a multiple of 32.

The size of every atomic data type in OSC is a multiple of 32 bits. This guarantees that if the beginning of a block of OSC data is 32-bit aligned, every number in the OSC data will be 32-bit aligned.


Type Tags

OSC Type Tag Type of corresponding argument
i int32
f float32
s OSC-string
b OSC-blob


Weitere Nicht-Standard Type Tags sind:

OSC Type Tag Type of corresponding argument
h 64 bit big-endian two's complement integer
t OSC-timetag
d 64 bit ("double") IEEE 754 floating point number
S Alternate type represented as an OSC-string (for example, for systems that differentiate "symbols" from "strings")
c an ascii character, sent as 32 bits
r 32 bit RGBA color
m 4 byte MIDI message. Bytes from MSB to LSB are: port id, status byte, data1, data2
T True. No bytes are allocated in the argument data.
F False. No bytes are allocated in the argument data.
N Nil. No bytes are allocated in the argument data.
I Infinitum. No bytes are allocated in the argument data.
[ Indicates the beginning of an array. The tags following are for data in the Array until a close brace tag is reached.
] Indicates the end of an array.


Beispiele:

Argument types OSC Type Tag String
One float32 argument ",f"
Two int32 arguments followed by one OSC-string argument followed by three float32 arguments ",iisfff"
No arguments ","
An int32 argument followed by two OSC-blob arguments ",ibb"