packages feed

hsc3-graphs-0.11: src/h-chatter.hs

-- h-chatter (rd)

import Control.Monad
import Sound.SC3.Monadic

wrp :: UGen -> UGen -> UGen -> UGen
wrp i = linLin i (-1) 1

h_chatter :: UId m => m UGen
h_chatter = do
  let mma m a = return . (+ a)  . (* m)
      h0 = do n <- mma 5 5 =<< lfNoise0 KR 1
              a <- mma 0.2 1.2 =<< lfNoise2 KR n
              b <- mma 0.15 0.15 =<< lfNoise2 KR n
              let f = 40
                  h = henonN AR (mce2 f (f * 0.5)) a b 0 0
              return (saw AR (h * 3200 + 1600) * 0.35)
      h1 = do n0 <- lfNoise0 KR 32
              n1 <- lfNoise0 KR 2
              let a = mouseX' KR 1.2 1.4 Linear 0.1
                  b = mouseY' KR 0.2 0.3 Linear 0.1
                  h = wrp n0 1 32
                  p = wrp n1 2400 3200
                  l = wrp n1 (-0.75) 0.75
                  g = wrp n1 0.55 0.85
                  f = 40
                  o = blip AR (wrp (henonN AR f a b 0 0) p (p * 2)) h
              return (pan2 o l g * 0.35)
  liftM2 (+) h0 h1

main :: IO ()
main = audition . out 0 =<< h_chatter