musikinformatik-wise-24.org
Scheduling in Common Music
Die Funktion #'output gibt ihr Argument –die Instanz eines Common Music Events– über die Audio Ausgänge aus. Der time slot des Events wird dabei ignoriert. Eine mögliche Zeitverzögerung kann mit dem keyword :at erreicht werden.
Hier Beispiele mit einem sfz Event:
(in-package :clamps) (output (new sfz)) ;; Mit einer Zeitverzögerung von 1 Sekunde nach der Evaluation des ;; Ausdrucks: (output (new sfz) :at 1)
Die Funktion #'sprout
bzw. die Methode #'events
1 sind
Möglichkeiten, mehrere zeitlich strukturierte Ereignisse
auszugeben, also z.B. eine Liste, oder einen Prozess. Die
Echtzeitausgabe aus den Audio/MIDI/OSC Ausgängen wird dabei in
Clamps mit dem scheduler von Incudine realisiert.
Hier vier äquivalente Beispiele einer Echtzeitausgabe 1 Sekunde
nach Evaluation des Ausdrucks mit #'sprout
und #'events
:
(sprout (new sfz :time 1)) (events (new sfz :time 1) *rts-out*) (sprout (new sfz :time 1) :to *rts-out*) (sprout (new sfz :time 0) :to *rts-out* :at 1)
Hier das gleiche Ergebnis mit der Funktion #'at
:
(at (+ (now) 1) #'output (new sfz))
Fußnoten:
Der Unterschied zwischen #'sprout
und #'events
ist sehr
fein und hat historische Gründe: Ursprünglich war #'events
für die Ausgabe von Sequenzen, Prozessen oder Eventlisten
gedacht, die zumeist in eine Datei (MIDI, Notation, etc.)
ausgegeben wurden. #'sprout
hingegen wurde im body des
#'process
Makros als Element von Prozessen verwendet. Mit der
Einführung von Echtzeitverarbeitung in CM wurde sprout
zunehmend ähnlich, wie #'events
in einem Echtzeitkontext
verwendet. In CM3 ist der Unterschied verschwunden und es wird
ausschließlich #'sprout
verwendet. Für Clamps wurde dieses
Verhalten angepasst, indem #'sprout
mit dem keyword :to
syntaktischer Zucker für den Aufruf von #'events
bildet. Der
Wert von :to entspricht dabei dem zweiten Argument von
#'events
Created: 2025-02-12 Mi 20:35