;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; Sonidos para brisa y viento
;;;
;;;
;;; Funciones para sacar los coeficientes de los filtros
;;; resonantes.
;;;
;;;
;;; juanig\_at\_ccrma
;;;
;;; (c) 2005
(define b1-de-frec-rad
(lambda (r freq)
(- (* 2.0 r (cos (hz->radians freq))))))
(define b2-de-radianes
(lambda (r)
(* r r)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;;
;;; La siguiente funcion produce ruido blanco filtrado
;;; Puede ser usada para efectos de doppler
;;;
;;;
;;;
(define brisa
(lambda* (comienzo dur amp
#:key
(frecuencias '(0 20 1 10000))
(radianes '(0 0.707 1 0.707))
)
(let* ((inicio (floor (* comienzo (srate))))
(longitud (floor (* dur (srate))))
(ruido (make-rand :frequency (* 0.44 (srate))
:amplitude amp))
(env-frecu (make-env :envelope frecuencias
:duration dur))
(env-rad (make-env :envelope radianes
:duration dur))
(filtro (make-formant :frequency 440
:radius 0.25))
(salida (make-vct longitud)))
(vct-map! salida
(lambda ()
(let ((rd (env env-rad))
(fr (env env-frecu)))
(set! (mus-xcoeff filtro 2) (- rd ))
(set! (mus-ycoeff filtro 1)
(b1-de-frec-rad rd fr))
(set! (mus-ycoeff filtro 2) (b2-de-radianes rd))
(formant filtro (rand ruido)))))
(vct->channel salida inicio longitud ))))
;; (brisa 0 1 0.5)
;; (brisa 0 1 0.5 :frecuencias '(0 100 1 3000))
;;; (load "brisa.scm")
|