packages feed

hsc3-graphs-0.8: src/karplus-strong.lhs

karplus strong (alex mclean)

> import Sound.SC3.Monadic

> main =
>   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/