;;; ;;; A very simple additive synthesis instrument ;;; (nando, Oct 8 '96) ;;; (nando, Jan 8 '01 -> clm2) (definstrument doadd (start-time duration frequency amplitude &key (partial1 1.0)(amp1 0.3) (partial2 2.0)(amp2 0.3) (partial3 3.0)(amp3 0.3) (env '(0 0 0.5 1 1 0))) (multiple-value-bind (beg end) (times->samples start-time duration) (let* ((sine1 (make-oscil :frequency (* partial1 frequency))) (sine2 (make-oscil :frequency (* partial2 frequency))) (sine3 (make-oscil :frequency (* partial3 frequency))) (amp-env (make-env :envelope env :scaler amplitude :duration duration))) (run (loop for i from beg to end do (outa i (* (env amp-env) (+ (* amp1 (oscil sine1)) (* amp2 (oscil sine2)) (* amp3 (oscil sine3))))))))))