(require 'envutil "sjlib/envutil") (in-package "CLM") (export '(DLFO MAKE-DLFO FOO) 'CLM) ;; Create oscil and env objects. ;; (defun make-dlfo (&key (dur 1)(vfrq 1)(vdelay 0)) (values (make-oscil :frequency vfrq) (make-env (envutil:dasr :delay (* 1/2 vdelay) :a (* 1/2 vdelay)) :duration dur))) ;; Apply amplitude envelope venv to lfo. ;; cfrq - carrier frequency. ;; depth - vibrato depth. ;; lfo - oscil object ;; venv - env object. ;; (defmacro dlfo (cfrq depth lfo venv) `(* 1e-4 ,cfrq ,depth (oscil ,lfo) (env ,venv))) ;; An instrument to test the LFO ;; (definstrument foo (&key (dur 1)(frq 400)(vfrq 7)(vdelay 0)(vib 0.1)) (multiple-value-bind (s0 s1)(times->samples 0 dur) (multiple-value-bind (lfo venv)(make-dlfo :dur dur :vfrq vfrq :vdelay vdelay) (let ((osc (make-oscil :frequency frq))) (run (loop for s from s0 below s1 do (outa s (oscil osc (dlfo frq vib lfo venv)))))))))