packages feed

hsc3-0.4: Help/Graphs/e-lamell.lhs

e-lamell (rd)

> let { rrand l r = getStdRandom (randomR (l, r))
>     ; i_rrand l r = return . floorE =<< rrand l r
>     ; exp_rrand a b = do { n <- rrand 0 1
>                          ; let r = b / a 
>                            in return ((r ** n) * a) }
>     ; choose l = return . (l !!) =<< rrand 0 (length l - 1)
>     ; threadPause :: Double -> IO ()
>     ; threadPause t = when (t>0) (threadDelay (floor (t * 1e6)))
>     ; sendSynth fd n u = async fd (d_recv (synthdef n u))
>     ; e_lamell = let { ctl s v = Control kr s v
>                      ; f = ctl "f" 440
>                      ; n = ctl "n" 12
>                      ; d = ctl "d" 0.1
>                      ; l = ctl "l" 0
>                      ; a = ctl "a" 1 }
>                  in do { t <- M.tChoose 1 (mce2 1 32)
>                        ; let { 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 return (out 0 (pan2 s l e)) }
>     ; r_note o p = do { oe <- choose o
>                       ; pe <- choose p
>                       ; return (oe * 12 + pe) }
>     ; l_sel = r_note [2, 3] [0]
>     ; h_sel = r_note [2, 3, 4] [0]
>     ; mk_s_new f n d a l = s_new "blip" (-1) AddToTail 1
>                                  [("f", f)
>                                  ,("n", n)
>                                  ,("d", d)
>                                  ,("a", a)
>                                  ,("l", l)]
>     ; pattern fd = do { p <- do { f <- liftM midiCPS l_sel
>                                 ; n <- rrand 2 36
>                                 ; d <- exp_rrand 0.01 0.4
>                                 ; a <- rrand 0 0.75
>                                 ; l <- rrand (-1) 1
>                                 ; return (mk_s_new f n d a l) }
>                       ; q <- do { f <- liftM midiCPS h_sel
>                                 ; n <- rrand 2 36
>                                 ; d <- exp_rrand 0.01 0.4
>                                 ; a <- choose [0, 0.25, 0.5, 1]
>                                 ; l <- rrand (-1) 1
>                                 ; return (mk_s_new f n d a l) }
>                       ; send fd (Bundle (-1) [p, q]) 
>                       ; threadPause 0.1 } }
> in withSC3 (\fd -> do { sendSynth fd "blip" =<< e_lamell
>                       ; replicateM_ 64 (pattern fd) })