Homework6: Filters

tube-filt.jpg
        tube-filt.wav        tube-pluck.jpg        tube-pluck.wav   (old files)

tube-filt2.jpg        tube-filt2.wav        tube-pluck2.jpg        tube-pluck2.wav  (new files after code revision)

(define echoFilt
     (lambda* (secs #&optional (att 1.0)(a0 -0.5)(bz -0.5)(samps 1))
            (let ((delEcho (make-delay (round (* secs (srate)))))
                    (delFilt (make-delay samps))
                    (yzEcho 0.0)
                    (yzFilt 0.0)                      
                    (y0Echo 0.0)
                    (y0Filt 0.0))
               (lambda (x0)
                    (set! yzEcho (tap delEcho))
                    (set! yzFilt (tap delFilt))         
;                   (set! y0Echo (+ x0 (* att yzEcho)))              ; one by one or 
;                   (set! y0Filt (- (* a0 y0Echo) (* bz yzFilt)))
;                   (set! y0Filt (+ (- (* a0 x0) (* bz yzFilt))       ; IIRfilt into IIRecho
;                                          (* att yzEcho)))                      ; or
                    (set! y0Filt (- (* a0 (+ x0 (* att yzEcho)))    ; IIRecho into IIRfilt
                                            (* bz yzFilt)))                        ; (note:
                    (delay delEcho y0Filt)                                  ; feed y0Filt in both)
                    (delay delFilt y0Filt)
                    y0Filt)
      )))

((click .2)
  (map-chan (echoFilt .00318 .93)))                           ; tube with TVLPF
                                                                                    ; orig att 0.813
((click 2)
  (map-chan (echoFilt .00318 0.93 -0.5 -0.534)))        ; tube like a string