module Sound.SC3.Server.NRT.UGen where
import Sound.OSC
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
nrt_ugen_rec :: Time -> UGen -> NRT
nrt_ugen_rec :: Time -> UGen -> NRT
nrt_ugen_rec Time
dur UGen
u =
let sg :: UGen
sg = case UGen -> Rate
rateOf UGen
u of
Rate
AR -> UGen
u
Rate
KR -> UGen -> UGen
k2a UGen
u
Rate
_ -> [Char] -> UGen
forall a. HasCallStack => [Char] -> a
error [Char]
"nrt_ugen_rec: rate?"
sy :: Synthdef
sy = [Char] -> UGen -> Synthdef
synthdef [Char]
"anonymous" (UGen -> UGen -> UGen
out UGen
0 UGen
sg)
m0 :: Message
m0 = Synthdef -> Message
d_recv Synthdef
sy
m1 :: Message
m1 = [Char] -> Synth_Id -> AddAction -> Synth_Id -> Message
s_new0 [Char]
"anonymous" Synth_Id
1 AddAction
AddToHead Synth_Id
0
in [Bundle] -> NRT
NRT [Time -> [Message] -> Bundle
bundle Time
0 [Message
m0,Message
m1],Time -> [Message] -> Bundle
bundle Time
dur [Message
nrt_end]]
nrt_ugen_render :: (FilePath, FilePath, Int, SampleFormat, [String]) -> Time -> UGen -> IO ()
nrt_ugen_render :: ([Char], [Char], Synth_Id, SampleFormat, [[Char]])
-> Time -> UGen -> IO ()
nrt_ugen_render ([Char]
osc_fn,[Char]
sf_fn,Synth_Id
sample_rate,SampleFormat
fmt,[[Char]]
opt) Time
dur UGen
u = do
let sc :: NRT
sc = Time -> UGen -> NRT
nrt_ugen_rec Time
dur UGen
u
nc :: Synth_Id
nc = [UGen] -> Synth_Id
forall (t :: * -> *) a. Foldable t => t a -> Synth_Id
length (UGen -> [UGen]
mceChannels UGen
u)
NRT_Render_Plain -> NRT -> IO ()
nrt_render_plain ([Char]
osc_fn,[Char]
sf_fn,Synth_Id
nc,Synth_Id
sample_rate,SampleFormat
fmt,[[Char]]
opt) NRT
sc