musikinformatik-wise-24.org
Process
Das process Makro implementiert die Möglichkeit, algorithmische
Prozesse zu definieren und anschließend parametrisiert zu
starten. Das Macro ist stark an das loop
Makro angelehnt und
übernimmt einen Großteil seiner Syntax.
Zusätzlich zu den Keywords von loop
gibt es das Keword wait
,
mit dem eine Deltazeit zwischen Iteration spezifiziert werden kann.
Die Funktion now
liefert die aktuelle Zeit des Schedulers in dem
Moment zurück, in dem die Funktion aufgerufen wird. Innerhalb eines
process bodies beginnt die Scheduler Zeit bei 0.
Beispiel
(sprout (process repeat 5 output (new sfz :time (now) :duration 0.2) wait 0.5))
Ein process kann auch innerhalb einer Funktion definiert und damit parametrisiert werden:
(defun prozess01 (num) (process repeat num output (new sfz :time (now) :duration 0.1) wait 0.2)) (sprout (prozess01 2)) (sprout (prozess01 6)) (defun prozess02 (num dur dtime) (process repeat num output (new sfz :time (now) :duration dur) wait dtime)) (sprout (prozess02 4 0.1 0.6)) (sprout (prozess02 16 0.1 0.1))
Im process Macro können auch andere Prozesse gesproutet werden:
(defun prozess03 (num dur dtime) (process repeat num output (new sfz :time (now) :keynum (between 60.0 84.0) :duration dur) wait dtime)) (sprout (prozess03 4 0.1 0.1)) (defun prozess04 (num) (process repeat num sprout (prozess03 (+ 3 (random 5)) 0.1 (between 0.02 0.2)) wait (between 0.2 0.7))) (sprout (prozess04 10))
Auch für process
kann man die #'events
Funktion
verwenden. Hier ein Beispiel, das eine svg Datei erzeugt:
(events (prozess04 10) (svg-gui-path "testprozess.svg")) ;; -> "/tmp/www/svg/testprozess.svg" (svg->browser "testprozess.svg") ; importing: testprozess.svg ; seq: #<seq "testprozess-seq"> ; => #<function (lambda () :in watch) {100908C7CB}>
Nach der Evaluation der Funktion #'svg->browser
wird das
Ergebnis im SVG-Player des Browsers unter der URL
http://127.0.0.1:54619/svg-display dargestellt.
Created: 2025-02-12 Mi 20:35