packages feed

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

-- http://create.ucsb.edu/pipermail/sc-users/2004-April/009692.html (jmcc)
{-# OPTIONS_GHC -F -pgmF hsc3-hash-paren #-}
module Sound.SC3.Graph.JMCC_tank_hp where

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

pling :: UId m => m UGen
pling = do
  let s = decay2 #(dustM AR 0.2) 0.1 0.5
          * cubed (fSinOsc AR #(expRandM 300 2200) 0)
          * 0.1
  return (pan2 s #(randM (-1) 1) 1)

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

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

-- > audition . out 0 =<< tank_f (soundIn 4)
tank_f :: UId m => UGen -> m UGen
tank_f i = do
  let [l,r] = mceChannels (onePole (localIn' 2 AR * 0.98) 0.33)
  let a = allpassN (rotate2 l r 0.23) 0.05 #(clone 2 (randM 0.01 0.05)) 2
      b = delayN a 0.3 (mce [0.17,0.23])
  let c = leakDC (allpassN b 0.05 #(clone 2 (randM 0.03 0.15)) 2) 0.995 + i
  return (mrg [c,localOut c])

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

main :: IO ()
main = do
  t <- tank
  audition (out 0 t)