-- http://sccode.org/1-1Ni import Control.Concurrent {- base -} import Control.Monad {- base -} import Sound.OSC {- hosc -} import Sound.SC3 {- hsc3 -} scr :: (UGen -> (UGen,UGen)) -> Int -> UGen -> UGen -> UGen scr h n f d = let (h0,h1) = h f o z = sinOsc AR (expRand z h0 h1) 0 * 0.2 m = mce (map o (take n ['α'..])) e = lfGauss AR d (1/4) 0 NoLoop RemoveSynth in splay (m * e) 1 0.25 0 True -- > audition (b 12) -- > Sound.SC3.UGen.Dot.draw (b 8) b :: Int -> Synthdef b np = let f = midiCPS (lchoose 'β' [40,45,52]) h n = (n,n + (n / 64)) in synthdef "b" (out 0 (scr h np f 9)) -- > audition (c 12) c :: Int -> Synthdef c np = let f = midiCPS (choose 'γ' (in' 3 KR 0)) h n = (n - (n / 128),n + (n / 128)) in synthdef "c" (out 0 (scr h np f 6)) -- > withSC3 (\fd -> send fd (c_setn [(0,x!!0)])) x :: Num a => [[a]] x = [[72,69,64],[70,64,62],[67,60,70],[65,60,69],[64,60,67],[65,60,69]] -- > t <- begin 7 -- > mapM_ killThread t begin :: Int -> IO [ThreadId] begin n = do t0 <- forkIO (forever (audition (b n) >> wait 4)) t1 <- forkIO (let set f = withSC3 (send (c_setn [(0,f)])) in mapM_ (\f -> set f >> wait 10) (cycle x)) t2 <- forkIO (wait 0.1 >> forever (audition (c n) >> wait 0.5)) return [t0,t1,t2] main :: IO () main = begin 8 >> return ()