-- fm-kltr (rd) import Sound.OpenSoundControl import Sound.SC3.Monadic import System.Random fm_kltr :: UId m => m UGen fm_kltr = do r1 <- rand 0.975 1.025 r2 <- rand 0.5 1.5 r3 <- rand 0.975 1.025 r4 <- rand 0.75 1.25 let o = control IR "out" 0 a = control KR "amp" 0.1 d = control KR "dur" 0.1 f = control KR "freq" 400.0 i = control KR "index" 40.0 p = control KR "pan" 0.0 f2 = control KR "freq2" 600 ep = envPerc 0.01 d e = envGen AR 1 a 0 1 RemoveSynth ep so = sinOsc AR (xLine KR f (f * r1) d DoNothing) 0 xl = xLine KR f2 (f2 * r3) d DoNothing m = so * line KR i (f * r2) d DoNothing + xl l = line KR p (p * r4) d DoNothing return (out o (pan2 (sinOsc AR m 0) l e)) rrand :: Random a => a -> a -> IO a rrand l r = getStdRandom (randomR (l, r)) type R = Double fm :: Transport t => t -> R -> R -> R -> R -> R -> IO () fm fd f ff a d i = do r1 <- rrand (-1) 1 r2 <- rrand (-1) 1 let p = [("freq", midiCPS f) ,("freq2", midiCPS ff + r1) ,("amp", a) ,("dur", d) ,("index", i) ,("pan", r2)] send fd (s_new "fm_kltr" (-1) AddToTail 1 p) nd :: Transport t => t -> IO () nd fd = do ff <- rrand 48 96 a <- rrand 0.1 0.4 d <- rrand 1.2 7.2 i <- rrand 240 1480 t <- rrand 0.15 1.25 fm fd 53 ff a d i pauseThread t run :: Transport t => t -> IO () run fd = do u <- fm_kltr _ <- async fd (d_recv (synthdef "fm_kltr" u)) sequence_ (replicate 32 (nd fd)) main :: IO () main = withSC3 run