Open Sound Control (OSC) ist ein Kommunikationsprotokoll für Musik, Medien und Netzwerke. Es legt keine festen Transportwege fest, wird aber meist über UDP-Sockets gesendet.
OSC verwendet eine offene, dynamische URL-Symbolik, ähnlich wie Webadressen.
Form einer OSC-Message:
<address pattern> <type tag string> <data>
/Sounds/Synthesizer/VCF/CutOff-Frequency
Erklärung: Dieser Befehl setzt den Parameter CutOff-Frequency auf 0,75.
Adresse mit Wildcards:
/Sounds/*/VCF/CutOff-?
→ Diese Nachricht würde gleichzeitig mehrere Parameter in verschiedenen Synthesizern ansprechen. Beispiele für Treffer:
So kann ein OSC-Server **alle passenden Adressen gleichzeitig erkennen** und die jeweiligen Daten anwenden.
Ein OSC-TimeTag ist eine 64-Bit-Zeitangabe (8 Bytes), die angibt, wann eine Nachricht ausgeführt werden soll.
Value: 3523101604,595 Sekunden ASCII: 065, 234, 063, 200, 116, 147, 010, 062
Oft werden nur die oberen 32 Bits gesendet:
Value: 55491,275 Sekunden ASCII: 000, 000, 000, 000, 127, 104, 204, 204
Immediate-TimeTag (sofort ausführen):
000 000 000 000 000 000 000 001
3523101604,595 Sekunden
| Teil | Dezimal | Hex |
|---|---|---|
| Ganze Sekunden | 3523101604 | D1 C7 40 14 |
| Bruchteile | 0,595 × 2^32 ≈ 2557352656 | 98 73 92 00 |
| Byte | Hex | Dezimal | Bemerkung |
|---|---|---|---|
| 1 | D1 | 209 | höchstes Byte Sekunden |
| 2 | C7 | 199 | |
| 3 | 40 | 64 | |
| 4 | 14 | 20 | niedrigstes Byte Sekunden |
| 5 | 98 | 152 | höchstes Byte Bruchteile |
| 6 | 73 | 115 | |
| 7 | 92 | 146 | |
| 8 | 00 | 0 | niedrigstes Byte Bruchteile |
Die Bytes werden zur Übertragung häufig als ASCII-Zahlen gesendet:
209, 199, 64, 20, 152, 115, 146, 0
Ein OSC-Bundle enthält mehrere Messages, optional mit Zeitstempel. Alle enthaltenen Nachrichten werden gemäß dem TimeTag ausgeführt.
#bundle /Sounds/Synthesizer/VCF/CutOff-Frequency ,f 0.75 /Sounds/Drums/Kick ,i 127
Beide Nachrichten werden gleichzeitig ausgeführt. Bundles können auch verschachtelt sein.
| Zeichen | ASCII |
|---|---|
| # | 35 |
| b | 98 |
| u | 117 |
| n | 110 |
| d | 100 |
| l | 108 |
| e | 101 |
| \0 (Padding) | 0 |
💡 Hinweis: OSC-Pakete müssen Vielfache von 4 Bytes sein → Nullbytes auffüllen.
Beispiel: TimeTag = sofortige Ausführung → 0 Sekunden
000 000 000 000 000 000 000 001
Die 8 Bytes entsprechen der 64-Bit-Zeitangabe.
Jedes Element = Länge (int32, 4 Bytes) + Inhalt (Message)
/Sounds/Synthesizer/VCF/CutOff-Frequency ,f 0.75
Nachricht in Bytes (inkl. Kommas, Leerzeichen) = z. B. 44 Bytes → auf 4er-Multiple prüfen → evtl. Nullbytes auffüllen
| Zeichen | ASCII |
|---|---|
| / | 47 |
| S | 83 |
| o | 111 |
| u | 117 |
| n | 110 |
| d | 100 |
| s | 115 |
| / | 47 |
| S | 83 |
| y | 121 |
| 0.75 | 48 46 55 53 |
| Padding | 0 0 |
Die komplette Nachricht als ASCII-Zahlen (Byte für Byte) für Übertragung:
035 098 117 110 100 108 101 000 000 000 000 000 000 000 001 000 000 000 044 047 083 111 117 110 100 115 047 083 121 110 116 ... 48 46 55 53 000 000
#bundle → markiert den Beginn des Bundles.OSC-Adressen ähneln URLs und können Wildcards enthalten, um Nachrichten flexibel zu routen. Hier erklären wir Schritt für Schritt, wie die verschiedenen Pattern funktionieren.
Beispiel:
/Sounds/Synthesizer/VCF/CutOff-?
→ Matcht genau ein Zeichen an der Stelle des ?.
Beispiele für Treffer: /Sounds/Synthesizer/VCF/CutOff-F, /Sounds/Synthesizer/VCF/CutOff-Q
/Sounds/*/VCF/CutOff-Frequency
→ Matcht beliebige Zeichen zwischen /Sounds/ und /VCF/CutOff-Frequency.
Beispiele für Treffer:
/Sounds/Synthesizer/VCF/CutOff-Frequency,
/Sounds/Drums/VCF/CutOff-Frequency
/Lights/LED[123]
→ Matcht genau eine Stelle, die 1, 2 oder 3 enthält.
Treffer: /Lights/LED1, /Lights/LED3. Nicht: /Lights/LED4
/Lights/LED[A-F]
→ Matcht einen Buchstaben von A bis F.
Treffer: /Lights/LEDA, /Lights/LEDF. Nicht: /Lights/LEDG
/Lights/LED[!123]
→ Matcht jedes Zeichen außer 1, 2 oder 3.
Treffer: /Lights/LED0, /Lights/LED4. Nicht: /Lights/LED2
Du kannst Wildcards kombinieren:
/Sounds/*/VCF/CutOff-?[A-C]
→ Matcht beliebige Zeichenkette nach /Sounds/, dann /VCF/CutOff-, gefolgt von genau einem Zeichen, das A, B oder C ist.
Beispiel: /Sounds/Drums/VCF/CutOff-B
Stell dir die OSC-Adresse als **Reihe von Zeichen** vor, die nacheinander überprüft werden:
Ein OSC-Server vergleicht die Adresse eingehender Nachrichten **Zeichen für Zeichen** mit dem Pattern, um zu entscheiden, ob die Nachricht passt.
Diese Zusammenfassung entstand im Zusammenhang mit meiner Arbeit an der Mediensteuerung für Daimler-Benz auf der IAA 2011.
© 2011 Rolf Meurer, Worringer-Str. 9, D-40211 Düsseldorf