tube characteristic | plucked string |
(define echofilter ; IIR version, aka feed-back or recursive delay
(lambda* (secs bz #&optional (att 1.0) samps) (let ((del (make-delay (round (* secs (srate))))) (del0 (make-delay samps)) (yz 0.0) (yz0 0.0) (fy0 0.0) ;fy0 is output from delay process, gets fed in as input for low-pass filter (a0 0.5) (y0 0.0)) (lambda (x0) (set! yz (tap del)) ; where it comes back from delayline (set! yz0 (tap del0) (set! fy0 (+ x0 (* att yz))) (set! y0 (- (* a0 fy0) (* bz yz0))) ; add low-pass filtering here, taking fy0 as input (delay del y0) (delay del0 y0) y0) ))) (map-chan (echofilter .01 -0.5 .5 1)) ; smaller attenuation gets shorter echo series, by damping it faster |
(map-chan (echofilter .01 -0.5 .95 1)) ; smaller attenuation gets shorter echo series, by damping it faster |
echofilterpipe.wav | echofilterstring.wav |