OSC
Die Ansicht OSC ist der Ort, an dem Sie Open Sound Control (OSC 1.0) von Hand über UDP sprechen. Sie hat drei Teile:
- Sender: eine Nachricht mit typisierten Argumenten, gesendet mit Enter.
- Monitor: empfängt auf einem Port und dekodiert jedes Paket, das eintrifft.
- Signalgenerator: sendet einen Wert, der einer Wellenform folgt, viele Male pro Sekunde, und zeichnet ihn.
Signal Lab kodiert und dekodiert OSC selbst. Was es sendet, ist genau das, was der Inspektor zeigt, Byte für Byte.
Eine Nachricht senden
- Öffnen Sie OSC.
- Geben Sie unter Ziel Host:Port die IP-Adresse oder den Hostnamen des Geräts und seinen Port ein, zum Beispiel
127.0.0.1:9000oderstage-mixer.local:9000. - Geben Sie unter OSC-Adresse die Adresse ein, auf die das Gerät hört, zum Beispiel
/mixer/fader/1. - Setzen Sie unter Argumente Typ und Wert jedes Arguments. Drücken Sie + Argument für ein weiteres; ✕ entfernt eines.
- Drücken Sie Senden, oder Enter in einem beliebigen Feld des Senders.
Die Zeile unter den Schaltflächen sagt, was hinausging: die Adresse, ihre Größe in Bytes und das Ziel. Wird dieselbe Nachricht erneut gesendet, zählt sie hoch (×2, ×3…), sodass Sie sehen, dass ein wiederholtes Senden etwas bewirkt hat. Ein Fehler wird stattdessen dort gezeigt, und in der Konsole.
Ziel, Adresse und Argumente bleiben erhalten, wenn Sie die Ansicht wechseln und wenn Sie die App neu starten.
Felder
| Feld | Was | Standard |
|---|---|---|
| Ziel Host:Port | IP:port oder host:port des Empfängers. Eine IPv6-Adresse steht in eckigen Klammern: [::1]:9000. Ein Hostname wird bei jedem Senden nachgeschlagen; hat er eine IPv4-Adresse, wird diese verwendet (so erreicht localhost einen Empfänger, der auf 127.0.0.1 empfängt), sonst seine IPv6-Adresse. Ein Ziel ohne Port wird abgelehnt. | 127.0.0.1:9000 |
| OSC-Adresse | Die OSC-Adresse, beginnend mit /, Teile durch / getrennt. Eine ohne führendes / wird abgelehnt, bevor etwas gesendet wird. | /hello/avatar/1 |
| Argumente | Typisierte Werte nach der Adresse, in ihrer Reihenfolge. Eine Nachricht darf keine haben. | ein float, 1.0 |
Argumenttypen
Der Typ jedes Arguments ist Teil der Nachricht (sein Typ-Tag), daher kann ein Gerät, das einen float erwartet, ein int mit demselben Wert ignorieren.
| Typ in der Liste | OSC-Tag | Wert | Wie Sie ihn eingeben |
|---|---|---|---|
int | i | 32-Bit-Ganzzahl mit Vorzeichen | eine ganze Zahl |
float | f | 32-Bit-Gleitkommazahl | eine Zahl, 0.75 |
str | s | Text | beliebiger Text, als UTF-8 gesendet |
bool | T / F | wahr oder falsch | true oder false aus einer Liste; trägt keine Bytes, nur das Tag |
long | h | 64-Bit-Ganzzahl mit Vorzeichen | eine ganze Zahl |
double | d | 64-Bit-Gleitkommazahl | eine Zahl |
nil | N | nichts | kein Wert |
blob | b | Bytes | hier nicht typisiert: Es erscheint, schreibgeschützt und in Hex, wenn Sie ein Signal öffnen, das eines enthält |
Ein Zahlenfeld, das keine Zahl enthält, sendet 0.
TIP
Ein OSC-true ist das Tag T, nicht der Text "true". Ein Gerät, das auf einen bool wartet, ignoriert einen String stillschweigend.
Bundles
Der Sender sendet einzelne Nachrichten, keine Bundles. Trifft ein Bundle (#bundle) ein, packen es der Monitor, die Warteknoten des Experiments und die Emulatoren aus: Jede Nachricht darin wird für sich behandelt, und ihr Zeit-Tag wird ignoriert.
Einen Port überwachen
Um zu sehen, was ein Gerät oder ein Show-Controller sendet:
- Geben Sie unter Empfangsadresse die Adresse und den Port zum Empfangen ein.
0.0.0.0:9000(die Voreinstellung) empfängt auf jeder Netzwerkkarte;127.0.0.1:9000nur auf diesem Computer. - Drücken Sie Empfangen. Das Feld ist gesperrt, solange der Monitor läuft.
- Richten Sie den Sender auf die IP-Adresse dieses Computers und diesen Port.
Jedes Paket wird zu einer Zeile, das Neueste oben:
| Spalte | Was |
|---|---|
| Zeit | Wann es eingetroffen ist, auf die Millisekunde |
| Von | IP:port des Absenders |
| Adresse | Die OSC-Adresse, oder (Dekodierfehler), wenn das Paket kein gültiges OSC ist |
| Argumente | Die Argumentwerte; ein Blob erscheint als blob[n], nil als nil. Bei einem Paket, das nicht dekodiert werden konnte, der Grund. |
Ein Bundle ergibt eine Zeile pro Nachricht. Die Liste behält die neuesten 300 Zeilen; Leeren leert sie. Drücken Sie Stoppen, um den Port zu schließen. Der Monitor ist außerdem ein Job in der Leiste der Konsole, sodass er auch von dort gestoppt werden kann.
Der Monitor liest Pakete bis 64 KiB. Er dekodiert die Tags i f s S b h d T F N I (S liest sich als Text, I als nil); ein Paket mit einem anderen Tag oder ein abgeschnittenes wird als Dekodierfehler gezeigt statt verworfen.
Eine Nachricht in einen Warteknoten verwandeln
Jede Zeile hat eine Schaltfläche ⇠, Darauf warten. Sie fügt dem geöffneten Experiment einen Auf OSC warten-Schritt hinzu, der auf dem Empfangsadresse des Monitors auf diese Adresse wartet, mit einer Regel „ist gleich" für jedes Text-, Ganzzahl- und Wahr/Falsch-Argument — Floats, Blobs und nil bekommen keine — bis zu 16 Regeln. Sein Timeout beträgt 2000 ms. Der Editor öffnet sich mit dem neuen Schritt ausgewählt.
WARNING
Stoppen Sie den Monitor, bevor Sie dieses Experiment ausführen. Der Durchlauf öffnet denselben Port selbst, und zwei Empfänger können ihn sich nicht teilen.
Eine Wellenform ausgeben
Der Signalgenerator sendet eine Nachricht nach der anderen an eine Adresse, mit einem einzigen Argument, dessen Wert einer Wellenform folgt — ein Fader, ein Lichtpegel, eine Position. Nutzen Sie ihn, um zu sehen, wie ein Gerät einem bewegten Wert folgt, oder um einen Empfänger mit einem gleichmäßigen Strom zu belasten.
- Setzen Sie Ziel Host:Port und Adresse. Beide werden beim Drücken von Generator starten geprüft, wie der Sender sie prüft.
- Wählen Sie eine Wellenform, ihre Freq. (Hz) und die Rate (pps).
- Setzen Sie Min und Max, den Bereich des Werts.
- Drücken Sie Generator starten. Er läuft, bis Sie Generator stoppen drücken oder seinen Job in der Leiste der Konsole stoppen.
| Feld | Was | Standard |
|---|---|---|
| Ziel Host:Port | IP:port oder host:port des Empfängers; ein Name wird einmal nachgeschlagen, beim Start des Generators | 127.0.0.1:9000 |
| Adresse | Die Adresse, an die jede Nachricht gesendet wird; sie beginnt mit / | /hello/lfo |
| Wellenform | Die Form des Werts über die Zeit (unten) | Sinus |
| Freq. (Hz) | Zyklen der Wellenform pro Sekunde | 1 |
| Rate (pps) | Nachrichten pro Sekunde, von 0,1 bis 5000; ein Wert außerhalb wird auf diesen Bereich begrenzt | 60 |
| Min, Max | Der niedrigste und der höchste Wert. Liegt Max unter Min, bewegt sich der Wert nicht. | 0, 1 |
| als int senden | Auf die nächste ganze Zahl runden und ein int statt eines float senden | aus |
| Wellenform | Was der Wert in jedem Zyklus tut |
|---|---|
| Sinus | Schwingt weich zwischen Min und Max, beginnt in der Mitte und steigt |
| Dreieck | Steigt von Min auf Max, fällt dann zurück auf Min, beginnt bei Min |
| Sägezahn | Ein fallendes Sägezahn: beginnt bei Max, fällt auf Min, springt dann zurück auf Max |
| Rampe | Ein steigendes Sägezahn: beginnt bei Min, steigt auf Max, springt dann zurück auf Min |
| Rechteck | Max in der ersten Hälfte, Min in der zweiten |
| Zufall | Ein neuer Zufallswert zwischen Min und Max mit jeder Nachricht; die Frequenz wird nicht verwendet |
| Konstant | Jedes Mal Max; die Frequenz wird nicht verwendet |
Der Scope
Neben den Feldern zeichnet der Scope den Wert, wie er gesendet wird: die neuesten 300 Punkte, so skaliert, dass sie hineinpassen. Darunter stehen die Wellenform, die Frequenz und die Rate sowie der zuletzt gesendete Wert. Der Scope wird etwa 30-mal pro Sekunde aktualisiert, so schnell der Generator auch sendet; bei hohen Raten zeigt er daher eine Stichprobe der Nachrichten, nicht jede einzelne.
Scheitert ein Senden, stoppt der Generator, und die Konsole sagt, warum.
Im Inspektor
Läuft der Mitschnitt (Mitschnitt starten in der Inspektor), erscheint OSC-Verkehr mit dem Protokoll osc:
| Quelle | Was | Hinweise |
|---|---|---|
osc-send | Jede Nachricht, die der Sender, ein Bibliothekssignal, ein Schritt OSC-Nachricht oder signallab send osc sendet | Ein Schritt, der auf eine Antwort wartet, erscheint als experiment |
osc-monitor | Jedes Paket, das der Monitor empfängt | Ein Bundle wird durch seine erste Nachricht und +n more in bundle zusammengefasst; ein fehlerhaftes Paket hat das Urteil decode error: … |
osc-gen | Die Nachrichten des Generators | Höchstens eine alle 100 ms wird mitgeschnitten, mit dem Urteil sampled; die nächste nach übersprungenen Nachrichten ergänzt, wie viele nicht gezeichnet wurden, als sampled · +5 not shown |
Jeder Frame behält die Bytes, aus denen er gebaut wurde. Siehe Inspektor.
Speichern und wiederverwenden
- Als Signal speichern. Speichern… unter den Schaltflächen behält die Nachricht — Ziel, Adresse und Argumente — in der Signalbibliothek, in einem Ordner Ihrer Wahl. Von da an ist der Sender an dieses Signal gebunden: Speichern (oder Ctrl+S im Sender) aktualisiert es, Speichern unter… legt eine Kopie an, und der Chip daneben öffnet es in Signale. Senden Sie es später aus Signale oder mit Ctrl+K von jeder Ansicht aus. Siehe Signale.
- Zu einem Experiment hinzufügen. Zum Experiment hinzufügen fügt dem geöffneten Experiment einen Schritt OSC-Nachricht mit demselben Ziel, derselben Adresse und denselben Argumenten hinzu — direkt vor Ende oder nach dem ausgewählten Schritt — und öffnet es. Während das Experiment läuft, kann nichts hinzugefügt werden; die Konsole sagt es.
In Experimenten
| Schritt | Was er tut |
|---|---|
| OSC-Nachricht | Sendet eine Nachricht. Sein Ziel, seine Adresse und seine Textargumente nehmen {{templates}}. Mit auf eine Antwort warten sendet er von einem eigenen Port und wartet dort im selben Schritt auf die Antwort. Details |
| Auf OSC warten | Wartet auf eine Nachricht, deren Adresse auf ein Muster passt und deren Argumente die Regeln erfüllen. Details |
| Emulator | Ein OSC-Gerät, das für den ganzen Durchlauf nach Regeln antwortet. Siehe Emulatoren. |
Der OSC-Schritt nimmt IP:port oder host:port wie die Ansicht, und seine Adresse muss mit / beginnen. Ein Hostname wird bei jedem Senden des Schritts nachgeschlagen.
Adressmuster
Auf OSC warten, die Antwort von OSC-Nachricht und die Regeln eines OSC-Emulators gleichen Adressen mit Mustern nach OSC 1.0 ab:
| Muster | Passt auf |
|---|---|
* | eine beliebige Folge von Zeichen, auch keine |
? | genau ein Zeichen |
[0-9], [a-c] | ein Zeichen aus der Menge oder dem Bereich |
[!0-9] | ein Zeichen, das nicht in der Menge ist |
{ping,pong} | eines der Wörter |
Platzhalter bleiben innerhalb eines Teils zwischen Schrägstrichen: /cue/* passt auf /cue/7, aber nicht auf /cue/7/go, und ein Muster passt nur auf eine Adresse mit derselben Anzahl von Teilen. Die Übereinstimmung ist groß- und kleinschreibungssensitiv. Ein Muster beginnt mit /, hat keinen leeren Teil (//), keine Leerzeichen, kein # und keine Zeichen außerhalb von ASCII, und ist höchstens 512 Zeichen lang.
Argumentregeln vergleichen Argument Nummer 0–63 mit einem Wert (ist gleich, kleiner als, enthält, passt auf einen regulären Ausdruck und so weiter); ein Warteknoten hat höchstens 16. Trifft ein Bundle ein, nimmt der Warteknoten es an, wenn irgendeine Nachricht darin passt. Was eine passende Nachricht den Schritten danach gibt, steht unter Daten und Vorlagen.
Von der Kommandozeile
signallab send osc sendet eine Nachricht, wie es der Sender tut:
signallab send osc 127.0.0.1:9000 /cue/go f:0.75 s:main✔ sent /cue/go (24 bytes) → 127.0.0.1:9000Jedes Argument ist tag:value: i:3, f:0.5, d:1.5, h:64, s:text, b:de ad be ef (Hex-Bytes) oder T, F, N für sich allein. Ohne Tag ist eine ganze Zahl i, eine Zahl mit Dezimalpunkt f und alles andere s; schreiben Sie s:7, um den Text 7 zu senden. Das Ziel ist IP:port oder host:port. Es endet mit 0, wenn die Nachricht hinausging, mit 1, wenn das Senden fehlschlug (ein Hostname, der sich nicht auflösen lässt, eingeschlossen), und mit 2, wenn ein Argument, die Adresse oder das Ziel ungültig ist. signallab fire sendet ein gespeichertes Signal. Siehe Kommandozeile.
TIP
In Git Bash unter Windows wird ein Argument, das mit / beginnt, in einen Dateipfad umgewandelt, bevor signallab es sieht. Führen Sie den Befehl mit MSYS_NO_PATHCONV=1 davor aus, oder verwenden Sie PowerShell oder cmd.
Probleme
| Was Sie sehen | Übliche Ursache |
|---|---|
… is not a valid address beim Senden | Das Ziel hat keinen Port oder ist weder IP:port noch host:port. |
Cannot resolve … beim Senden | Der Hostname lässt sich auf diesem Computer nicht auflösen. Prüfen Sie ihn, oder verwenden Sie die IP-Adresse. |
OSC addresses start with / (…) | Der Adresse fehlt das führende /. |
| Die Nachricht wird gesendet, aber das Gerät tut nichts | Falscher Port oder falsche Adresse; ein anderer Typ, als es erwartet (int statt float, ein Text "true" statt eines bool). Beobachten Sie es im Inspektor, oder richten Sie das Ziel auf den Monitor auf diesem Computer, um zu sehen, was hinausgeht. |
… is already in use by another program bei Empfangen | Ein anderes Programm — oder ein laufendes Experiment, ein Emulator oder ein zweiter Monitor — hat den Port. |
… is not an address of this computer | Die IP unter Empfangsadresse gehört zu einem anderen Rechner. Verwenden Sie 0.0.0.0 oder eine der Adressen dieses Computers. |
| Pakete von anderen Rechnern kommen nie an | Unter Windows kann die Firewall sie abhalten: Lassen Sie Signal Lab zu, wenn die App es anbietet. Lokaler Verkehr (127.0.0.1) ist nicht betroffen. Siehe Problemlösung. |
| Zeilen mit (Dekodierfehler) | Der Sender spricht auf diesem Port kein OSC 1.0 oder verwendet ein Typ-Tag, das Signal Lab nicht dekodiert. |
Auf einem Server arbeitet die Ansicht im Netzwerk des Servers: 127.0.0.1 ist der Server selbst, und der Monitor empfängt auf den Ports des Servers. Siehe Server.
Jede Fehlermeldung steht unter Fehlermeldungen.