Nie możesz wybrać więcej, niż 25 tematów
Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
|
- ;;; NREV (the most popular Samson box reverb)
-
- (provide 'snd-nrev.scm)
-
- (if (provided? 'snd)
- (require snd-ws.scm)
- (require sndlib-ws.scm))
-
-
- (definstrument (nrev (reverb-factor 1.09) (lp-coeff 0.7) (volume 1.0))
- ;; reverb-factor controls the length of the decay -- it should not exceed (/ 1.0 .823)
- ;; lp-coeff controls the strength of the low pass filter inserted in the feedback loop
- ;; output-scale can be used to boost the reverb output
-
- (let ((dly-len (if (= (floor *clm-srate*) 44100)
- #(2467 2753 3217 3533 3877 4127 599 197 67 101 97 73 67 53 37)
- (and (= (floor *clm-srate*) 22050)
- #(1237 1381 1607 1777 1949 2063 307 97 31 53 47 37 31 29 17))))
- (chan2 (> (channels *output*) 1))
- (chan4 (= (channels *output*) 4)))
-
- (if (not dly-len)
- (let ((srscale (/ *clm-srate* 25641)))
-
- (define (next-prime val)
- (if (or (= val 2)
- (and (odd? val)
- (do ((i 3 (+ i 2))
- (lim (sqrt val)))
- ((or (= 0 (modulo val i)) (> i lim)) (> i lim)))))
- val
- (next-prime (+ val 2))))
-
- (set! dly-len #(1433 1601 1867 2053 2251 2399 347 113 37 59 53 43 37 29 19))
- (do ((i 0 (+ i 1)))
- ((= i 15))
- (let ((val (floor (* srscale (dly-len i)))))
- (if (even? val) (set! val (+ val 1)))
- (set! (dly-len i) (next-prime val))))))
-
- (let ((len (+ (floor *clm-srate*) (framples *reverb*)))
- (comb1 (make-comb (* .822 reverb-factor) (dly-len 0)))
- (comb2 (make-comb (* .802 reverb-factor) (dly-len 1)))
- (comb3 (make-comb (* .773 reverb-factor) (dly-len 2)))
- (comb4 (make-comb (* .753 reverb-factor) (dly-len 3)))
- (comb5 (make-comb (* .753 reverb-factor) (dly-len 4)))
- (comb6 (make-comb (* .733 reverb-factor) (dly-len 5)))
- (low (make-one-pole lp-coeff (- lp-coeff 1.0)))
- (allpass1 (make-all-pass -0.700 0.700 (dly-len 6)))
- (allpass2 (make-all-pass -0.700 0.700 (dly-len 7)))
- (allpass3 (make-all-pass -0.700 0.700 (dly-len 8)))
- (allpass4 (make-all-pass -0.700 0.700 (dly-len 9))) ; 10 for quad
- (allpass5 (make-all-pass -0.700 0.700 (dly-len 11)))
- (allpass6 (and chan2 (make-all-pass -0.700 0.700 (dly-len 12))))
- (allpass7 (and chan4 (make-all-pass -0.700 0.700 (dly-len 13))))
- (allpass8 (and chan4 (make-all-pass -0.700 0.700 (dly-len 14)))))
-
- (let ((filts (if (not chan2)
- (vector allpass5)
- (if (not chan4)
- (vector allpass5 allpass6)
- (vector allpass5 allpass6 allpass7 allpass8))))
- (combs (make-comb-bank (vector comb1 comb2 comb3 comb4 comb5 comb6)))
- (allpasses (make-all-pass-bank (vector allpass1 allpass2 allpass3))))
- (do ((i 0 (+ i 1)))
- ((= i len))
- (out-bank filts i
- (all-pass allpass4
- (one-pole low
- (all-pass-bank allpasses
- (comb-bank combs (* volume (ina i *reverb*))))))))))))
-
-
- ;;; (with-sound (:reverb nrev) (outa 0 .1) (outa 0 .5 *reverb*))
|