-- sam i am (jr) -- http://www.listarc.bham.ac.uk/lists/sc-users/msg00280.html import Control.Monad.Random import Data.List import Data.Maybe import Sound.SC3 import Sound.SC3.Lang.Control.Event import Sound.SC3.Lang.Random.Monad import Sound.SC3.Lang.Pattern.ID text :: [String] text = ["I could not would not in a house" ,"I would not could not with a mouse" ,"I would not eat them with a fox" ,"I would not eat them in a box" ,"I would not eat them here or there" ,"I would not eat them anywhere" ,"I would not eat green eggs and ham" ,"I do not like them Sam-I-am"] x :: [[String]] x = map words text a :: [String] a = nub (concat x) sam :: Synthdef sam = let f1 = control KR "freq1" 440 f2 = control KR "freq2" 440 f3 = control KR "freq3" 440 e = xLine KR 0.1 0.001 0.5 RemoveSynth o = sinOsc AR f1 0 * pulse AR f2 0.5 * saw AR f3 * e in synthdef "sam" (out 0 o) b :: RandomGen g => g -> [(String,[(String,Double)])] b g = let mk w = do f1 <- exprand 200 9000 f2 <- exprand 20 9000 f3 <- exprand 20 9000 let d = 0.1 * fromIntegral (length w) return (w,[("freq1",f1),("freq2",f2),("freq3",f3),("dur",d)]) in evalRand (mapM mk a) g main :: IO () main = do g <- getStdGen let t = b g ae = mapMaybe (\w -> fmap event (lookup w t)) (concat x) audition (sam,pseq (map return ae) 1)