Next: Automation mit temporaler Rekursion , Previous: Beispiel 2 , Up: Einführung , Home: Einführung

musikinformatik-wise-24.org

Automation

Automation mit process

Ganz analog zum Kapitel Scheduling kann das process Makro von Common Music auch für Automationen von Slidern genutzt werden. Um den ersten Slider aus Beispiel 2 des letzten Kapitels zu bewegen, könnte man z.B. den folgenden Code verwenden:

(in-package :clamps)

(sprout
 (let ((duration 2)            ;; Dauer
       (resolution 0.01)       ;; zeitliche Auflösung
       (start 0)               ;; Startwert
       (end 127))              ;; Endwert
   (process
     repeat (1+ (round (/ duration resolution)))
     for x from 0 by (/ resolution duration)
     do (set-val *slider1* (n-lin x start end))
     wait resolution)))

;;; mit Hilfe einer Abstraktion:

(defun line-process (ref start end duration &optional (resolution 0.01))
  (process
    repeat (1+ (round (/ duration resolution)))
    for x from 0 by (/ resolution duration)
    do (set-val ref (n-lin x start end))
    wait resolution))

      (sprout (line-process *slider1* 0 127 2))

      (sprout (line-process *slider2* 0 127 3))

      ;;; generatoren:

(defun phasor-proc (freq max ref &optional (resolution 0.01))
  (process
    repeat 100000
    for x = 0 then (mod (+ x (* freq resolution)) 1)
    do (set-val ref (* max x))
    wait resolution))

(defun lfo-proc (freq max ref &optional (resolution 0.01))
  (process
    for x = 0.5 then (mod (+ x (* freq resolution)) 1)
    do (set-val ref (* max (abs (- (* 2 x) 1))))
    wait resolution))

(sprout (phasor-proc 0.5 127 *slider2*))

(sprout (lfo-proc 0.5 127 *slider1* 0.1))
(sprout (lfo-proc 0.5 127 *slider2* 0.1))
(sprout (lfo-proc 0.5 127 *slider3* 0.1))

Created: 2025-02-12 Mi 20:35

Validate