45 lines
1.4 KiB
Racket
45 lines
1.4 KiB
Racket
#lang scribble/manual
|
|
@(require (for-label racket))
|
|
|
|
@title{(pluck in tr maxdelaytime delaytime decaytime coef)}
|
|
|
|
Karplus-Strong synthesis.
|
|
|
|
in - an excitation signal
|
|
|
|
tr - upon a negative to positive transition, the excitation signal
|
|
will be fed into the delay line
|
|
|
|
maxdelaytime - the max delay time in seconds (initializes the
|
|
internal delay buffer).
|
|
|
|
delaytime - delay time in seconds.
|
|
|
|
decaytime - time for the echoes to decay by 60 decibels. Negative
|
|
times emphasize odd partials.
|
|
|
|
coef - the coef of the internal one-pole filter. Values should be
|
|
between -1 and +1 (larger values will be unstable... so be
|
|
careful!).
|
|
|
|
Excitation signal is white-noise, triggered twice a second with
|
|
varying one-pole coef.
|
|
|
|
(let ((n (mul (white-noise ar) 0.1))
|
|
(t (impulse kr 2 0))
|
|
(x (mouse-x kr -0.999 0.999 0 0.1))
|
|
(dl (/ 1 440)))
|
|
(audition (out 0 (pluck n t dl dl 10 x))))
|
|
|
|
(let* ((n 25)
|
|
(gen (lambda (n f) (mce-fill n (lambda (_) (f)))))
|
|
(f (gen n (lambda () (rand 0.05 0.2))))
|
|
(p (gen n (lambda () (rand 0 1))))
|
|
(x (mouse-x kr 60 1000 1 0.1))
|
|
(o (lin-lin (sin-osc kr f p) -1 1 x 3000))
|
|
(w (clone n (mul (white-noise ar) 0.1)))
|
|
(i (impulse kr (gen n (lambda () (rand 10 12))) 0))
|
|
(ks (pluck w i 0.01 (fdiv 1 o) 2 (rand 0.01 0.2)))
|
|
(l (gen n (lambda () (rand -1 1)))))
|
|
(audition (out 0 (leak-dc (mix (pan2 ks l 1)) 0.995))))
|
|
|