;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Arpeggio a_la_ Risset,
;;; Ejemplo de síntesis aditiva utilizando
;;; Waveshape synthesis
;;;
;;; juanig\_at\_ccrma
;;;
;;; (c) 2005
(define arpeggio
(lambda* (beg dur freq amp
#:key
(ampenv '(0 0 0.5 1 1 0))
(offset 1.0))
(let* ((start (floor (* beg (srate))))
(end (+ start (floor (* dur (srate)))))
(waveshbank (make-vector 12))
(amp-env (make-env :envelope ampenv
:scaler (* amp .25)
:start start
:end end))
(output (make-vct end)))
(do ((i 0 (1+ i)))
((= i 12))
(vector-set! waveshbank i (make-waveshape
:frequency (+ freq (* offset (1+ (* i 0.1))))
:partials '(1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9))
))
(do ((i 0 (1+ i)))
((= i end))
(let ((wvsum 0.0))
(do ((j 0 (1+ j)))
((= j 12))
(set! wvsum (+ wvsum (waveshape (vector-ref waveshbank j)))))
(vct-set! output i (* (env amp-env) wvsum ))))
(vct->channel output start end ))))
|