-- scritto (rd)
import Control.Monad
import Sound.OSC {- hosc -}
import Sound.SC3 {- hsc3 -}
import qualified Sound.SC3.Lang.Data.Vowel as V {- hsc3-lang -}
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 'α' KR 3
v_filter_b i =
let bi = linLin_b n0 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 m => (V.Fdata Double,Int) -> m ()
s_alloc (s,b) = do
let s_msg n (_,_,fr,am,bw) = b_setn1 n 0 (fr ++ am ++ bw)
_ <- async (b_alloc b 15 1)
send (s_msg b s)
s_init :: Transport m => m ()
s_init = mapM_ s_alloc (zip V.fdata_table [0..])
act :: Transport m => Bool -> m ()
act i = do
when i s_init
let n = constant (length (V.fdata_table::[V.Fdata Int]))
play (scritto_i n)
main :: IO ()
main = withSC3 (act True)
{-
withSC3 (act False)
-}