hsc3-0.18: Sound/SC3/Server/NRT/UGen.hs
-- | NRT / UGen
module Sound.SC3.Server.NRT.UGen where
import Sound.OSC {- hosc -}
import Sound.SC3.Common.Rate
import Sound.SC3.Server.Command.Plain
import Sound.SC3.Server.Enum
import Sound.SC3.Server.NRT
import Sound.SC3.Server.Synthdef
import Sound.SC3.UGen.Bindings.DB
import Sound.SC3.UGen.Type
-- | Make NRT score that runs /u/ for /dur/ seconds to output bus zero.
-- If /u/ is at KR insert 'k2a' UGen.
nrt_ugen_rec :: Time -> UGen -> NRT
nrt_ugen_rec dur u =
let sg = case rateOf u of
AR -> u
KR -> k2a u
_ -> error "nrt_ugen_rec: rate?"
sy = synthdef "anonymous" (out 0 sg)
m0 = d_recv sy
m1 = s_new0 "anonymous" 1 AddToHead 0
in NRT [bundle 0 [m0,m1],bundle dur [nrt_end]]
-- | 'nrt_render_plain' of 'ugen_rec_nrt'.
-- The number of channels is equal to the degree of /u/.
nrt_ugen_render :: (FilePath, FilePath, Int, SampleFormat, [String]) -> Time -> UGen -> IO ()
nrt_ugen_render (osc_fn,sf_fn,sample_rate,fmt,opt) dur u = do
let sc = nrt_ugen_rec dur u
nc = length (mceChannels u)
nrt_render_plain (osc_fn,sf_fn,nc,sample_rate,fmt,opt) sc