(define onda-mas
(lambda* (comienzo duracion frecuencia amplitud armonicos)
(let* ((inicio (floor (* comienzo (srate))))
(longitud (floor (* duracion (srate))))
;;
;; crear una tabla llamada forma de onda para los armónicos
;;
(formadeonda (partials->wave armonicos ))
;;
;; crear un generador de unidades en base a una tabla
;;
(s (make-table-lookup :frequency frecuencia :wave formadeonda))
;;
;; adicionar una envolvente de amplitud simple
;;
(amp-env (make-env :envelope '(0 0 0.5 1 1 0)
:duration duracion
:scaler amplitud))
(salida (make-vct longitud)))
(do ((i 0 (1+ i)))
((= i longitud))
(vct-set! salida i (* (env amp-env) (table-lookup s)) ))
(vct->channel salida inicio longitud))))
|