-- implosion (rd)
import Sound.SC3.Monad {- hsc3 -}
mkls :: [(UGen,UGen)] -> UGen -> UGen
mkls bp t =
let e = envCoord bp t 1 EnvLin
in envGen KR 1 1 0 1 RemoveSynth e
mkrmp :: UGen -> UGen -> UGen -> UGen
mkrmp l r = mkls [(0,l),(1,r)]
wrp :: UGen -> UGen -> UGen -> UGen
wrp i = linLin i (-1) 1
pmr_n :: UId m => Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> m UGen
pmr_n rt l0 l1 r0 r1 d = do
let le = mkrmp l0 r0 d
re = mkrmp l1 r1 d
n <- whiteNoise rt
return (wrp n le re)
implosion :: UId m => m UGen
implosion = do
n0 <- rand (-1) 0
n1 <- rand 0 1
d <- rand 7.5 13.5
f0 <- rand 10990 16220
f1 <- rand 9440 19550
f <- pmr_n AR 440 f0 f1 f1 d
l <- pmr_n KR n0 n1 0 0 d
a <- pmr_n KR 0.1 0.6 0 0 d
return (pan2 (saw AR f) l a)
main :: IO ()
main = audition . out 0 =<< implosion