packages feed

hsc3-graphs-0.11: src/e-lamell.hs

-- e-lamell (rd)

import Control.Monad
import Sound.OpenSoundControl
import Sound.SC3.ID
import qualified Sound.SC3.Lang.Random.IO as R

e_lamell :: UGen
e_lamell =
    let ctl = control KR
        f = ctl "f" 440
        n = ctl "n" 12
        d = ctl "d" 0.1
        l = ctl "l" 0
        a = ctl "a" 1
        t = iChoose 'a' (mce2 1 32)
        h = line AR n t d DoNothing
        s = blip AR f h
        e_d = envPerc 0.005 d
        e = envGen AR 1 a 0 1 RemoveSynth e_d
    in pan2 s l e

now :: Time
now = NTPi 1

sendSynth :: Transport t => t -> String -> UGen -> IO OSC
sendSynth fd n u = async fd (d_recv (synthdef n u))

mk_s_new :: Double -> Double -> Double -> Double -> Double -> OSC
mk_s_new f n d a l =
    let p = [("f",f)
            ,("n",n)
            ,("d",d)
            ,("a",a)
            ,("l",l)]
    in s_new "blip" (-1) AddToTail 1 p

pattern :: Transport t => t -> IO ()
pattern fd = do
  let r_note o p = do oe <- R.choose o
                      pe <- R.choose p
                      return (oe * 12 + pe)
      l_sel = r_note [2,3] [0]
      h_sel = r_note [2,3,4,5] [0,2,5,7]
  p <- do f <- liftM midiCPS l_sel
          n <- R.rrand 2 36
          d <- R.exprand 0.01 0.8
          a <- R.rrand 0 0.75
          l <- R.rrand (-1) 1
          return (mk_s_new f n d a l)
  q <- do f <- liftM midiCPS h_sel
          n <- R.rrand 2 36
          d <- R.exprand 0.01 1.2
          a <- R.choose [0,0.25,0.5,1]
          l <- R.rrand (-1) 1
          return (mk_s_new f n d a l)
  send fd (Bundle now [p,q])
  pauseThread 0.1

run :: Transport t => t -> IO ()
run fd = do
  _ <- sendSynth fd "blip" (out 0 e_lamell)
  replicateM_ 64 (pattern fd)

main :: IO ()
main = withSC3 run