hsc3-0.5: Help/Graphs/karplus-strong.lhs
karplus strong (alex mclean)
> import Sound.SC3
> let { aA = ( "aA"
> , [800, 1150, 2800, 3500, 4950]
> , [0, -4 , -20, -36 , -60]
> , [80, 90, 120, 130, 140] )
> ; aU = ( "aU"
> , [325, 700, 2530, 3500, 4950]
> , [0, -12 , -30, -40, -64]
> , [50, 60, 170, 180, 200] )
> ; cs (_, c1, c2, c3) = c1 ++ c2 ++ c3
> ; vf i s = let { f = in' 5 kr i
> ; a = in' 5 kr (i + 5)
> ; b = in' 5 kr (i + 10) }
> in mix (resonz s f (b / f) * dbAmp a)
> ; ks n d = let { x = mouseX kr 0 0.01 Linear 0.1 {- delay -}
> ; y = mouseY kr 0.85 1 Linear 0.1 {- blend / gain -}
> ; ugenIf a b c = (a * b) + ((1 - a) * c)
> ; n0 = (n / 2) + 0.5
> ; probSwitch i prob = ugenIf (n0 >* prob) i (negate i)
> ; laggedDelay = lag x 0.01
> ; o = sinOsc ar 200 0
> ; a0 = decay d 0.025 * o
> ; a1 = localIn 1 ar + (a0 * (y - 0.25))
> ; a2 = delayN a1 0.01 laggedDelay
> ; a3 = delay1 a2
> ; a4 = (a2 + a3) / 2.0
> ; a5 = probSwitch a4 y
> ; a6 = vf (toggleFF d * 15) a5
> ; a7 = a6 * 1.5 }
> in mrg [localOut (a5 * 0.99), out 0 (mce [a7, a7])] }
> in withSC3 (\fd -> do { send fd (c_setn [(0,cs aA), (15, cs aU)])
> ; n <- whiteNoise ar
> ; d <- dust kr 4
> ; play fd (ks n d) })
Variant on http://doc.gold.ac.uk/~ma503am/alex/vocable-source-released/