packages feed

hsc3-graphs-0.12: gr/implosion.hs

-- 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