Open Sound Control
OSC ist ein Kommunikationsprotokoll ohne spezifische Transportmechanismen.
Dies bedeutet, OSC-Pakete werden i. d. R. als UDP-Sockets gesendet und empfangen.
OSC verwendet eine offene, dynamische, URL Symbolik.
Die Address-Pattern Struktur ermöglicht mehreren Empfängern gleichzeitigen Zugriff auf Hochauflösende time tags (Zeitmarken), sowie Bundel von Nachrichten.
Das OSC-Datenformat entspricht der Big-Endian Spezifikation.
Die detaillierte OSC-Spezifikation finden Sie unter http://opensoundcontrol.org/
int32
float32
OSC-TimeTag (64-Bit-int im NTP Format (Internet timestamp), Sekunden und Pikosekunden seit Mitternacht 1. Januar 1900)
OSC-String (ASCII-Zeichenfolge mit einer durch 4 teilbaren Gesamtlänge, ggf. durch ASCII-Nullen ergänzt)
OSC-blob (32-Bit Zähler dessen Elemente ebenfalls ein Vielfaches von 4 ergeben müssen und ggf. mit ASCII-Null-Zeichen ergänzt werden müssen)
Die Grundeinheit einer OSC Übertragung ist eine OSC-Packet.
Alles, was eine OSC-Packet sendet, wird als eine OSC-Client bezeichnet.
Alles, was eine OSC-Packet empfängt, bezeichnen wir als OSC-Server.
Die Größe eines OSC-Packets ist immer ein Vielfaches von 4 Bytes (also 32 Bit).
Der Inhalt eines OSC-Paket muss entweder eine Message oder ein Bundle sein.
Eine Message hat folgende allgemeine Form: <address pattern> <type tag string> <Data>
Das address pattern ist ein String beginnend mit / gefolgt von einer Nachricht, die entweder ihre Herkunft oder ihr Ziel beschreibt.
Osc Adressen ähneln einer URL wie z.B. /Sounds/Synthesizer/VCF/CutOff-Frequency
Wildecats wie ? oder * Zeichen in [eckige Klammern] und CSV Strings in {geschweifte Klammern} werden verwendet um eine Message gleichzeitig an mehreren Ziele zu senden.
Sobald ein OSC-Server eine message empfängt, werden die Daten der address-pattern-struktur entsprechend ausgewertet.
OSC typ tags beginnen mit einem Komma, gefolgt von einem oder mehreren Zeichen,
welche den Datentyp int32, float32, string oder blob beschreiben.
Der OSC TimeTag ist ein 8 Byte character String stellvertretend für eine 64-Bit Festkommazahl im NTP-Format. Also die Zeitdifferenz zum 1.1.1900
z.B. der Wert 3523101604,595 Sekunden wird als ASCII Zeichenkette folgender Form gesendet: 065, 234, 063, 200, 116, 147, 010, 062
Oftmals werden in der Praxis nur die 32 relevanten Bits gesendet.
z.B. der Wert 55491,275 Sekunden entspricht dann einer ASCII Zeichenkette folgender Form: 000, 000, 000, 000, 127, 104, 204, 204
Der TimeTag ist Bestandteil eines Bundle und kann entweder wie im obigen Beispiel einen TimeStamp, oder als immediately Timetag der Form 000 000 000 000 000 000 000 001 einen zeitlosen TimeTag repräsentieren. z.B. als Clock Signal.
Ein OSC-Bundle besteht aus der Zeichenfolge #Bundle, gefolgt von einem TimeTag und einer Null, oder weiteren OSC Bundles
Ein OSC Bundle Element besteht aus einem int32 Wert mit Angabe zur Länge der Nachricht in Byte (muss ein Vielfaches von 4 sein) gefolgt vom Inhalten.
Die Inhalte können entweder eine OSC-Message oder wiederum ein OSC-Bundle sein. (Bundel können andere Bundle enthalten).
Beispiel eines OSC-Bundles als Text:
#bundle°°°°°žV¤°°°l/Bundle Element 1°°°,
Zwei Zeichen durch ein Minuszeichen getrennt, repräsentieren den entsprechenden Zeichenbereich (ASCII - ASCII) als WildCat.
Ein Ausrufezeichen am Anfang eines Klammern string negiert den Sinn der Liste.
Diese Zusammenfassung genormter OSC-Befehle entstand im Zusammenhang mit meiner Arbeit an der Mediensteuerung für die IAA
© 2011 | Rolf Meurer |
Worringer-Str.9 | |
D-40211 Düsseldorf |