(define fm
(lambda*
(comienzo duracion frecuencia
amplitud #:key
(envolvente-amplitud '(0 0 25 1 75 1 100 0))
;; radio c:m
(radio-portadora 1) (radio-moduladora 1)
;; Indice de modulacion
(indice 1)
(envolvente-indice '(0 1 100 1)))
;;
(let* ((inicio (floor (* comienzo (srate))))
(final (floor (* duracion (srate))))
;;
(onda-portadora
(make-oscil
:frequency frecuencia))
(onda-moduladora
(make-oscil
:frequency
(* frecuencia
(/ radio-moduladora radio-portadora))))
;;
(funcion-amplitud
(make-env
:envelope envolvente-amplitud :scaler amplitud
:start inicio :end final))
(funcion-indice
(make-env
:envelope envolvente-indice
:scaler (in-hz
(* frecuencia radio-moduladora indice))
:start inicio :end final))
;;
(salida (make-vct final)))
;;
(vct-map! salida
(lambda ()
(* (env funcion-amplitud)
(oscil onda-portadora
(* (env funcion-indice)
(oscil onda-moduladora))))
))
;;
(vct->samples inicio final salida)) ))
|