Tim Hankins
Homework #6





TUBE MODELS   PLUCKED STRING MODELS
NO LPF LPF   NO LPF LPF
Wav File Wav File   Wav File Wav File
Sonogram Sonogram   Sonogram Sonogram




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))