OSC kurz und knapp erklärt
Open Sound Control
- OSC ist ein Kommunikationsprotokoll, das unabhängig von spezifischen Transportmechanismen ist.
- Das bedeutet, OSC-Pakete werden in der Regel als UDP-Sockets gesendet und empfangen.
- OSC verwendet eine offene, dynamische, URL-style Symbolik.
Das Protokoll
- Die Address-Pattern Struktur ermöglicht mehreren Empfängern gleichzeitig einer Nachricht zu empfangen und auszuwerten.
- Hochauflösende time tags (Zeitmarken)
- "Bundel" von Nachrichten, deren Auswertung dynamisch und von mehreren Servern gleichzeitig ausgewertet werden kann.
- Das OSC-Datenformat entspricht der Big-Endian Spezifikation.
- Die detaillierte OSC-Spezifikation finden Sie unter http://opensoundcontrol.org/
TypeTags
- 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-Null) ergänzt)
- OSC-blob (32-Bit Zähler dessen Elemente ebenfalls ein Vielfaches von 4 ergeben müssen ggf. mit ASCII-Null Zeichen ergänzen)
Packet
- 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 OSC-Message oder eine OSC-Bundle sein.
Message
- Eine OSC-Message hat folgende allgemeine Form: <address pattern> <type tag string> <Data>
- Das address pattern ist ein String beginnent mit "/" gefolgt von einer Nachricht, die entweder ihre Herkunft oder ihr Ziel beschreibt.
- Osc Adressen entsprechen in etwar einer URL oder File-Hirarchie wie z.B. /Sounds/Synthesizer/VCF/CutOff-Frequency
- "Wildecats" wie z.B. "?" , "*" , Zeichen in [eckige Klammern] und CSV Strings in {geschweifte Klammern} können verwendet werden um eine OSC-Message gleichzeitig an mehreren Ziele zu senden.
- Sobald ein OSC-Server eine OSC message empfängt, werden die Daten der address-pattern-struktur entsprechend ausgewertet.
TypeTag
- OSC typ tags beginnen mit einem Komma (',') gefolgt von einem oder mehreren der Zeichen 'i', 'f', 's' oder 'b', welche die Datentypen int32, float32, String oder OSC-blob beschreiben.
TimeTag
- 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, denn nicht jedes System ist in der Lage 64 Bit Werte ohne Overflow zu verarbeiten.
- 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 OSC-Bundle und kann entweder wie im obrigen Beispiel einen aktuellen TimeStamp,
- oder als "immediately" Timetag der Form 000 000 000 000 000 000 000 001 einen zeitlosen TimeTag repräsentieren.
Bundle
- Ein OSC-Bundle besteht aus der OSC-Zeichenfolge "#Bundle", gefolgt von einem OSC-TimeTag und einer Null, oder weiteren OSC Bundle Elementen.
- 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 von den 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°°°,siss°°°1st element of this bundle°°°°°¤Next Data is (Date/Time)°°°°23.08.2011 15:34:36°°°°l/Bundle Element 2°°°,siss°°°2nd element of this bundle°°°°°¤Next Data is (Date/Time)°°°°23.08.2011 15:34:36°°°°l/Bundle Element 3°°°,siss°°°3rd element of this bundle°°°°°¤Next Data is (Date/Time)°°°°23.08.2011 15:34:36°°°°l/Bundle Element 4°°°,siss°°°4th element of this bundle°°°°°¤Next Data is (Date/Time)°°°°23.08.2011 15:34:36°
- Und hier die tatsächlich gesendeten Ascii Werte:
- 035 098 117 110 100 108 101 000 000 000 000 000 127 158 086 004 000 000 000 108 047 066 117 110 100 108 101 032 069 108 101 109 101 110 116 032 049 000 000 000 044 115 105 115 115 000 000 000 049 115 116 032 101 108 101 109 101 110 116 032 111 102 032 116 104 105 115 032 098 117 110 100 108 101 000 000 000 000 000 001 078 101 120 116 032 068 097 116 097 032 105 115 032 040 068 097 116 101 047 084 105 109 101 041 000 000 000 000 050 051 046 048 056 046 050 048 049 049 032 049 053 058 051 052 058 051 054 000 000 000 000 108 047 066 117 110 100 108 101 032 069 108 101 109 101 110 116 032 050 000 000 000 044 115 105 115 115 000 000 000 050 110 100 032 101 108 101 109 101 110 116 032 111 102 032 116 104 105 115 032 098 117 110 100 108 101 000 000 000 000 000 002 078 101 120 116 032 068 097 116 097 032 105 115 032 040 068 097 116 101 047 084 105 109 101 041 000 000 000 000 050 051 046 048 056 046 050 048 049 049 032 049 053 058 051 052 058 051 054 000 000 000 000 108 047 066 117 110 100 108 101 032 069 108 101 109 101 110 116 032 051 000 000 000 044 115 105 115 115 000 000 000 051 114 100 032 101 108 101 109 101 110 116 032 111 102 032 116 104 105 115 032 098 117 110 100 108 101 000 000 000 000 000 003 078 101 120 116 032 068 097 116 097 032 105 115 032 040 068 097 116 101 047 084 105 109 101 041 000 000 000 000 050 051 046 048 056 046 050 048 049 049 032 049 053 058 051 052 058 051 054 000 000 000 000 108 047 066 117 110 100 108 101 032 069 108 101 109 101 110 116 032 052 000 000 000 044 115 105 115 115 000 000 000 052 116 104 032 101 108 101 109 101 110 116 032 111 102 032 116 104 105 115 032 098 117 110 100 108 101 000 000 000 000 000 004 078 101 120 116 032 068 097 116 097 032 105 115 032 040 068 097 116 101 047 084 105 109 101 041 000 000 000 000 050 051 046 048 056 046 050 048 049 049 032 049 053 058 051 052 058 051 054 000
Pattern Matching
- Die "WildCat" '?' im OSC Address Pattern repräsentiert jedes beliebige Zeichen.
- Die "WildCat" '*' im OSC Address Pattern repräsentiert jede beliebige Zeichenkette.
- Eine Reihe von Zeichen in eckigen Klammern (zB "[string]") repräsentiert die entsprechende Zeichenliste als "WildCat".
- Die Zeichen "-" und "!" in eckigen Klammen haben eine Sonderstellung.
- 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
© 2011 Rolf Meurer Worringer-Str.9 D-40211 Düsseldorf