# Open Sound Control

Open Sound Control (OSC) ist ein nachrichtenbasiertes Netzwerkprotokoll, das hauptsächlich für die Echtzeitverarbeitung von Sound über Netze und Multimedia-Installationen verwendet wird.
Steuersignale können von Hardware (z. B. MIDI-Keyboard) oder Software (z. B. Processing, Vvvv, Csound, Max/MSP, Pure Data, SuperCollider, ChucK, EyesWeb) erzeugt und dann via OSC in Form von sog. Nachrichten (OSC-Messages), die wiederum in Bündel (OSC-Bundles) verpackt werden, an eine Schnittstelle weitergegeben werden und so eine Ausgabe steuern. Dieses können z. B. weitere Soundausgaben sein, etwa eine Soundanwendung auf einem anderen Computer.
OSC ist unabhängig vom Transportprotokoll, wobei in der Regel jedoch UDP verwendet wird. Je nach Anforderung ist es aber auch möglich, OSC etwa über TCP oder eine serielle Schnittstelle zu transportieren.
Open Sound Control wurde an der University of California in Berkeley entwickelt.

## Nachrichtenübermittlung

Nachrichten werden in OSC auf denkbar einfache Art übermittelt. Ein OSC-Paket besteht aus seinen Daten und einem Byte, das die Länge der Daten angibt. Die Länge ist immer ein Vielfaches von 4 (was an der Blockgröße von 32 Bit liegt).

### Datentypen

Als Datentypen gibt es:
* int32
* float32
* OSCString, Folge von ASCII-Zeichen, nullterminiert (C-String), mit 0..3 NULL-Zeichen auf eine durch vier teilbare Länge aufgefüllt.
* OSCTimetag (64 Bit). Die ersten 32 Bit sind die Sekunden seit 1. Januar 1900, die zweiten 32 Bit stellen den Sekundenbruchteil dar, dies ist das NTP-Format.
* OSCBlob

### Aufbau einer Nachricht

Eine OSC-Nachricht enthält zuerst eine (Null-terminierte) Zeichenkette mit der Adresse des zu ändernden Parameters.
z. B.: „/synthesizer/zynaddsubfx/filter/lowpass1“.
Nach einem Komma folgt die Anzahl und Art der Parameter in einer (Null-terminierten) Zeichenkette. Für zwei Float-Werte würde man „,ff“ angeben.
Dann folgen die einzelnen Werte für die Parameter. Will man an unserem imaginären Synthesizer z. B. die Resonanz von LP-Filter1 ändern, würde man senden:
„/synthesizer/zynaddsubfx/filter/lowpass1/resonance ,f 1998.4f“.
Werte werden binär übermittelt. „1998.4f“ repräsentiert die binäre Codierung des Gleitkommazahlwertes.

## Vorteile

Die größeren Datentypen und die Unterstützung von Gleitkommazahlen sorgen dafür, dass Parametersprünge nicht mehr hörbar sind.
Außerdem kann OSC übers Netzwerk versendet werden, also Internet, WLAN usw., was die theoretische Möglichkeit für Internet-Jams bietet. WLAN könnte den Kabelsalat im Studio reduzieren. Jeder moderne Computer hat schon eine Netzwerk-Schnittstelle integriert, was die Anschaffung eines Extra-Gerätes, wie bei MIDI, unnötig machen würde.
Ein weiterer Vorteil ist, dass die Integration und Steuerung von Hardware über OSC wesentlich einfacher ist als über MIDI-SysEx-Nachrichten.

## Nachteile

Der größte Nachteil an OSC ist, dass zwar festgelegt ist wie Nachrichten übermittelt werden, die Bezeichnungen der Nachrichten aber nicht standardisiert sind. So kann jeder Hersteller einen anderen Namensraum für die Ansteuerung seines Synthesizers wählen, also beispielsweise andere Befehle zum Notenansteuern verwenden als andere Hersteller. Durch diese fehlende Festlegung ist bei einer weiten Verbreitung mit Inkompatibilitäten zu rechnen.
Zudem ist OSC nicht abwärtskompatibel zum bisherigen MIDI-Standard. Daher würde ein ausschließlich auf OSC basierendes Gerät mit älteren MIDI-basierenden Geräten nicht ohne weiteres zusammenarbeiten können.
Obwohl OSC für Netzwerkprotokolle wie UDP ausgelegt ist, bei denen die Ankunft der Pakete nicht garantiert ist, beinhaltet der OSC-Standard keine Redundanz, um verlorene Pakete erneut zu senden.
Die höhere Flexibilität und erweiterten Adressen führen dazu, dass OSC-Pakete größer sind (somit auch mehr Bandbreite benötigen) und auch mehr Rechenleistung zum Parsen benötigen.

## Verwendung in Open Source

OSC findet auch immer mehr Anwendung in Open-Source-Programmen. Da es immer eine klare Trennung zwischen GUI und eigentlichem Programm auf Grund unterschiedlicher Thread-Prioritäten gibt, wird OSC als einfaches und universelles Protokoll zum Austausch zwischen GUI und Server benutzt. Dadurch hat jeder die Möglichkeit eine neue Oberfläche zu dem gleichen Programm zu schreiben, oder eine, über die sich mehrere Programme gleichzeitig steuern lassen.