packages feed

hsc3-graphs-0.15: Sound/SC3/Graph/JMCC_tank_m.hs

-- tank (jmcc)
-- http://create.ucsb.edu/pipermail/sc-users/2004-April/009692.html
module Sound.SC3.Graph.JMCC_tank_m where

import Sound.SC3 {- hsc3 -}
import Sound.SC3.Common.Monad.Syntax {- hsc3 -}

pling :: UId m => m UGen
pling = do
  d <- dustM AR 0.2
  f <- expRandM 300 2200
  p <- randM (-1) 1
  let s1 = cubed (fSinOsc AR f 0)
      s2 = decay2 d 0.1 0.5 * 0.1 * s1
  return (pan2 s2 p 1)

bang :: UId m => m UGen
bang = do
  d <- dustM AR 0.01
  n <- brownNoiseM AR
  return (pan2 (decay2 d 0.04 0.3 * n) 0 1)

r_allpass :: UId m => UGen -> m UGen
r_allpass i = do
  r <- clone 2 (randM 0.005 0.02)
  return (allpassN i 0.03 r 1)

-- > audition . out 0 =<< tank_f (soundIn 4)
tank_f :: UId m => UGen -> m UGen
tank_f i = do
  r1 <- clone 2 (randM 0.01 0.05)
  r2 <- clone 2 (randM 0.03 0.15)
  let l0 = localIn' 2 AR * 0.98
      l1 = onePole l0 0.33
      [l1l,l1r] = mceChannels l1
      l2 = rotate2 l1l l1r 0.23
      l3 = allpassN l2 0.05 r1 2
      l4 = delayN l3 0.3 (mce [0.17,0.23])
      l5 = allpassN l4 0.05 r2 2
      l6 = leakDC l5 0.995
      l7 = l6 + i
  return (mrg [l7,localOut l7])

tank :: UId m => m UGen
tank = tank_f =<< chainM 4 r_allpass =<< bang .+. mixFillM 8 (const pling)

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