Below, you can see the script which created the previous examples...
;---------------------------------------------------------------------------------------------
(define echo ; IIR version, aka feed-back or recursive delay
(lambda* (secs #&optional (att 1.0))
(let ((del (make-delay (round (* secs (srate)))))
(yz 0.0) ; use yd, i.e., send output to delay
(y0 0.0))
(lambda (x0)
(set! yz (tap del)) ; where it comes back from delayline
(set! y0 (+ x0 (* att yz)))
(delay del y0) ; feed into delayline
y0)
)))
;TUBE MODEL
(define tubeModel ; IIR version, aka feed-back or recursive delay
(lambda* (freq att feedbackGain)
(let ((del (make-delay (round (* freq (srate)))))
(shortDelay (make-delay 1))
(yz 0.0)
(y0 0.0)
(tempz 0.0) ; use yd, i.e., send output to delay
(temp0 0.0))
(lambda (x0)
(set! tempz (tap del)) ; where it comes back from delayline
(set! temp0 (+ (* att x0) (* feedbackGain tempz)))
(set! yz (tap shortDelay))
(set! y0 (+ (* att temp0) (* feedbackGain yz)))
(delay del y0) ; feed into delayline
(delay shortDelay y0)
y0)
)))
(click .5)
(map-chan (echo .0036 .886))
(map-chan (tubeModel 0.0036 0.7 0.58))
;PLUCKED STRING MODEL
(define pluckedString ; IIR version, aka feed-back or recursive delay
(lambda* (freq att feedbackGain)
(let ((del (make-delay (round (* freq (srate)))))
(shortDelay (make-delay 1))
(yz 0.0)
(y0 0.0)
(tempz 0.0) ; use yd, i.e., send output to delay
(temp0 0.0))
(lambda (x0)
(set! tempz (tap del)) ; where it comes back from delayline
(set! temp0 (+ (* att x0) (* feedbackGain tempz)))
(set! yz (tap shortDelay))
(set! y0 (+ (* att temp0) (* feedbackGain yz)))
(delay del y0) ; feed into delayline
(delay shortDelay y0)
y0)
)))
(click 4)
(map-chan (echo .0036 0.994)) ; smaller attenuation gets shorter echo series, by damping it faster
(map-chan (pluckedString 0.0036 0.8 0.555))
|