hsc3-graphs-0.9: src/non-real-time.hs
import Sound.OpenSoundControl {- hosc -}
import Sound.SC3
import System.Cmd {- process -}
graph :: UGen
graph =
let f = control KR "freq" 440
g = control KR "gain" 0.1
e = envGen KR 1 1 0 1 RemoveSynth (envPerc 0.1 1.0)
o = sinOsc AR f 0 * e
in out 0 (pan2 o 0 g)
score :: [OSC]
score =
let at t m = Bundle (NTPr t) m
mk_instr = d_recv (synthdef "test" graph)
mk_group = g_new [(1, AddToTail, 0)]
mk_node t f = at t [s_new "test" (-1) AddToTail 1 [("freq", f)]]
notes = take 128 (zipWith mk_node [1.0, 1.05 ..] [330, 350 ..])
in at 0.0 [mk_instr, mk_group] : notes
perform :: [OSC] -> IO ()
perform s = do
let f i fd x = do let (Bundle (NTPr t) x') = x
pauseThreadUntil (i + t)
send fd (Bundle immediately x')
withSC3 (\fd -> utcr >>= \i -> mapM_ (f i fd) s)
render :: [OSC] -> IO ()
render s = do
writeNRT "/tmp/nrt.score" s
system "scsynth -N /tmp/nrt.score _ /tmp/nrt.wav 44100 WAVE float"
return ()
main :: IO ()
main = do
render score
perform score