Next: Zeitliche Rekursion , Previous: Scheduling in Common Music , Up: Scheduling , Home: Einführung

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

Validate