packages feed

hsc3-graphs-0.11: src/bottle-m.hs

-- bottle (sc)

import Sound.SC3.Lang.Control.OverlapTexture
import Sound.SC3.Monadic

bottle :: UId m => m UGen
bottle = do
  freq <- rand 220 880
  wn <- whiteNoise AR
  pn <- pinkNoise AR
  let (>=>) f g x = f x >>= g
      chain n f = foldl (>=>) return (replicate n f)
      perc = envPerc 0.1 0.6
      ex = envGen KR 1 1 0 1 DoNothing perc * wn * 0.02
      flute = ringz ex freq 0.3
      r = resonz pn (5 + (freq / 2)) 0.1
      breath = envGen KR 1 1 0 1 DoNothing perc * r
      rapf i = do x <- linRand 0.001 0.1 (-1)
                  return (i + allpassN i 0.1 x 1.0 * 0.5)
      cls i = let en = let c = EnvNum (-4) in (c,c,c)
                  l = envLinen' 0.01 3.0 1.0 1 en
                  z = (breath + i) * envGen KR 1 1 0 1 RemoveSynth l
              in mce2 z z
  f <- chain 2 rapf flute
  return (cls f)

main :: IO ()
main = overlapTextureU (0,2,2,maxBound) =<< bottle