Muster-Erkennung

Beim Abrufen und Einstellen von Informationen in den Zeitzustand ist es möglich, komplexere Tasten zu verwenden als einfache Symbole wie :foo und :bar. Sie können auch Zeichenketten im URL-Stil verwenden, wie z.B. "/foo/bar/baz". Sobald wir mit Pfaden arbeiten, können wir dann die Vorteile des ausgeklügelten Pattern-Matching-Systems von Sonic Pi nutzen, um get und sync mit ähnlichen' und nicht mit identischen’ Pfaden zu synchronisieren. Lass uns einen Blick darauf werfen.

Erkennen von Pfad-Segmenten

Angenommen wir möchten auf ein Ereignis warten, das die folgenden drei Pfad-Segmente enthält:

sync  "/*/*/*"

Hiermit kann man auf jegliches Time State Ereignis syncen, dass aus exakt drei Pfadsegmenten besteht, unabhängig davon, was genau der Inhalt der Segmente ist. Schauen wir uns das an einem Beispiel an:

Allerdings wird es nicht auf Ereignisse “matchen”, die weniger oder mehr Pfad-Segmente hätten. Die folgenden würden nicht erkannt und damit kein Ereignis triggern:

Jeder * bedeutet irgendein Inhalt. Das heisst, wie können Pfade mit nur einem Segment mit /* oder Pfade aus fünf Segmenten mit /*/*/*/*/* erkennen

Erkennen von Teilsegmenten

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

Allerdings erkennt es nicht das Folgende:

Du kannst das * auch an den Anfang des Segments setzen, um die letzten Zeichen eines Segments anzugeben: "/foo/*zz/baz", das jedem 3-Segment cue oder set entspricht, wobei das erste Segment foo ist, das letzte baz ist und das mittlere Segment mit zz endet, wie "cue "/foo/whizz/baz".

Erkennen von verschachtelten Pfadsegmenten

Manchmal weiß man nicht, wie viele Pfadsegmente man zuordnen möchte. In diesen Fällen kannst Du den mächtigen Doppelstern: ** wie "/foo/**/**/baz" verwenden, der übereinstimmt:

Erkennen von einzelnen Buchstaben

Du kann das ? verwenden, um auf ein bestimmtes einzelnes Zeichen zu erkennen. "/?oo/bar/baz" passt auf:

Erkennen von mehrfachen Wörtern

foo

Erkennen von mehrfachen Zeichen

foo

foo

Kombinieren von Mustererkennungen

Wenn du sync oder get aufrufst, kannst du Mustererkenner in beliebiger Reihenfolge kombinieren um jedes beliebige Time State Event, 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 Mustererkennung

Für die Neugierigen, diese Regeln zur Mustererkennung basieren auf der Open Sound Control Spezifikation zur Mustererkennung, die hier im Detail erklärt ist: http://opensoundcontrol.org/spec-1_0