-- 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