packages feed

hsc3-graphs-0.15: gr/oscillator-cluster-m.hs

-- oscillator cluster (rd)

import Sound.SC3 {- hsc3 -}
import qualified Sound.SC3.Lang.Pattern.Plain as P {- hsc3-lang -}

oscillator_cluster :: (Functor m,UId m) => m UGen
oscillator_cluster = do
  let ln a b d = line KR a b d RemoveSynth
      rln r a b d = fmap (\n -> ln (a + n) b d) (randM 0 r)
      prt d a cf = do r1 <- randM cf (cf + 2)
                      r2 <- rln 1 5 0.01 d
                      r3 <- rln 10 20 0 d
                      r4 <- randM 0.1 0.2
                      let f = mce2 cf r1 + sinOsc KR r2 0 * r3
                          o = fSinOsc AR f 0
                          e = decay2 (impulse AR 0 0) r4 d * a
                      return (o * e)
      np = 12
      fp = sequence (replicate np (randM 220 660))
  d <- randM 4 7
  a <- randM 0.01 0.05
  fmap sum (mapM (prt d a) =<< fp)

main :: IO ()
main = do
  u <- oscillator_cluster
  let s = synthdef "oscillator_cluster" (out 0 u)
      p = [("dur",P.rand 'α' [0.25,0.5,1,3,5])]
  audition (P.sbind1 (s,p))

{-
audition . (out 0) =<< oscillator_cluster
let otu = Sound.SC3.Lang.Control.OverlapTexture.overlapTextureU
otu (3,1,5,maxBound) =<< oscillator_cluster
-}