Muster-Abgleich

Beim Holen und Setzen von Informationen unter Verwendung von Time-State lassen sich komplexere Schlüssel verwenden als einfache Symbole wie :foo und :bar. Du kannst auch Zeichenketten in der Art von URLs verwenden, wie z.B. "/foo/bar/baz". Sobald wir anfangen mit Pfaden zu arbeiten, können wir auch die Vorteile des ausgeklügelten Muster-Abgleich-Systems von Sonic Pi nutzen, um get und sync mit ‘ähnlichen’ und nicht mit ‘identischen’ Pfaden zu synchronisieren. Lass uns einen Blick darauf werfen.

Abgleich mit allen Pfad-Segmenten

Lass uns annehmen wir möchten auf das nächste Ereignis warten, das die folgenden drei Pfad-Segmente enthält:

sync "/*/*/*"

Dieses Muster wird zu jedem Time-State-Ereignis passen, das aus exakt drei Pfadsegmenten besteht, unabhängig von deren Namen. Zum Beispiel:

Allerdings wird es nicht zu Ereignissen mit wenigeren oder mehr Pfad-Segmente passen. Die folgenden würden nicht passen:

Jeder * bedeutet jeder Inhalt. Das bedeutet, wir können Pfade mit nur einem Segment mit /* oder Pfade aus fünf Segmenten mit /*/*/*/*/* abgleichen

Abgleich mit Teilsegmenten

Wenn wir wissen, womit das Segment beginnen oder enden wird, können wir ein * zusätzlich zum Namen eines Teilsegments verwenden. Zum Beispiel: "/foo/b*/baz"passt zu jedem Pfad, der drei Segmente hat, von denen das erste foo, das letzte baz und das mittlere Segment alles sein kann, was mit b beginnt. Also, es würde passen zu:

Allerdings würde es nicht zu Folgendem passen:

Du kannst das * auch an den Anfang des Segments setzen, um die letzten Zeichen eines Segments anzugeben: "/foo/*zz/baz", wird zu jedem cue or set bestehend aus 3 Segmenten passen, wo das erste Segment foo, das letzte baz ist und das mittlere Segment auf zz endet, so wie "cue "/foo/whizz/baz".

Abgleich mit verschachtelten Pfadsegmenten

Manchmal weißt du nicht, wie viele Pfadsegmente du abgleichen möchtest. In diesen Fällen kannst du den mächtigen Doppelstern ** verwenden, wie in "/foo/**/**/baz", das übereinstimmt mit:

Abgleich mit einzelnen Buchstaben

Du kannst das ? verwenden, um mit einem beliebigen einzelnen Zeichen abzugleichen. "/?oo/bar/baz" passt zu:

Abgleich mit mehreren Wörtern

Wenn du weißt, das ein Segment eines aus einer bestimmten Reihe von Wörtern ist, kannst du eine Auswahlliste zwischen { und } setzen, so wie "/foo/{bar,beans,eggs}/quux", was nur auf das Folgende passt:

Abgleich mit mehreren Zeichen

Schließlich kannst du auch noch gegen eine Auswahl von Buchstaben abgleichen, indem du eine Auswahlliste zwischen { und } setzt, so wie "/foo/[abc]ux/baz", was nur passen wird zu:

Du kannst mit -auch Buchstabenbereiche angeben. Zum Beispiel "/foo/[a-e]ux/baz", was nur passt zu:

Kombination von Abgleichen

Wenn du sync oder get aufrufst, kannst du Abgleiche mit Mustern in beliebiger Reihenfolge miteinander kombinieren, um sehr effektiv jedes beliebige Time-State-Ereignis, das durch cue oder set erzeugt wurde, zu erkennen. Lass uns ein verrücktes Beispiel anschauen:

in_thread do
  sync "/?oo/[a-z]*/**/ba*/{quux,quaax}/"
  sample :loop_amen
end
sleep 1
cue "/foo/beans/a/b/c/d/e/bark/quux/"

OSC Musterabgleich

For those curious, these matching rules are based on the Open Sound Control pattern matching specification which is explained in detail here: https://opensoundcontrol.stanford.edu/spec-1_0.html