-- scritto (rd) import Control.Monad import Sound.OpenSoundControl import Sound.SC3.ID import qualified Sound.SC3.Lang.Data.Vowel as V scritto_i :: UGen -> UGen scritto_i bx = let buf_at b n = bufRd 1 KR b (mce [n .. n + 4]) NoLoop NoInterpolation v_filter i f a b = resonz i f (b / f) * dbAmp a n0 = lfNoise2 'a' KR 3 v_filter_b i = let bi = linLin n0 (-1) 1 0 bx b = buf_at bi in v_filter i (b 0) (b 5) (b 10) t = impulse AR (n0 * 9 + 9) 0 ble (e,d) = let n1 = tRand e 0.02 0.06 t n2 = tIRand e 30 52 t n3 = tIRand e 16 32 t p = pulseDivider t d 0 b = blip AR (midiCPS n2) n3 in (decay2 p 0.01 n1 * b * 12) voice = mix . v_filter_b in out 0 (mce (map (voice . ble) (zip "ab" [1,2]))) s_alloc :: Transport t => t -> (V.Fdata Double,Int) -> IO () s_alloc fd (s,b) = do let s_msg n (_,_,fr,am,bw) = b_setn1 n 0 (fr ++ am ++ bw) _ <- async fd (b_alloc b 15 1) send fd (s_msg b s) s_init :: Transport t => t -> IO () s_init fd = mapM_ (s_alloc fd) (zip V.fdata_table [0..]) act :: Transport t => Bool -> t -> IO () act i fd = do when i (s_init fd) let n = constant (length V.fdata_table) play fd (scritto_i n) main :: IO () main = withSC3 (act True) {- withSC3 (act False) -}