(define echo ; IIR version, aka feed-back or recursive delay (lambda* (secs #&optional (att 1.0)) (let ((long-delay (make-delay (round (* secs (srate))))) (prev-echo (make-delay 1)) (echo_old 0) (echo_new 0) (a 0.707) (input_scale 0.5) (yz 0.0) (y0 0.0) (from_delay 0)) (lambda (x0) (set! echo_old (tap prev-echo)) (set! from_delay (tap long-delay)) (set! echo_new (+ (* input_scale x0) (* att from_delay))) (set! y0 (* a (+ echo_old echo_new))) (delay long-delay y0) (delay prev-echo echo_new) y0) ))) ;------------------------------------- ;Make a tube-like sound (click 0.3) (map-chan (echo .0025495 .4)) ;------------------------------------- ;Make a string-like sound (click 2) (map-chan (echo 0.0025495 0.707))