module Sound.SC3.UGen.Composite.ID where
import Sound.SC3.UGen.Demand.ID
import Sound.SC3.UGen.Filter
import Sound.SC3.UGen.Identifier
import Sound.SC3.UGen.Noise.ID
import Sound.SC3.UGen.Type
import Sound.SC3.UGen.UGen
dcons :: ID m => (m,m,m) -> UGen -> UGen -> UGen
dcons (z0,z1,z2) x xs =
let i = dseq z0 1 (mce2 0 1)
a = dseq z1 1 (mce2 x xs)
in dswitch z2 i a
mceN :: UGen -> UGen
mceN = constant . length . mceChannels
lchoose :: ID m => m -> [UGen] -> UGen
lchoose e a = select (iRand e 0 (fromIntegral (length a))) (mce a)
choose :: ID m => m -> UGen -> UGen
choose e = lchoose e . mceChannels
tChoose :: ID m => m -> UGen -> UGen -> UGen
tChoose z t a = select (tIRand z 0 (mceN a) t) a
tWChoose :: ID m => m -> UGen -> UGen -> UGen -> UGen -> UGen
tWChoose z t a w n =
let i = tWindex z t n w
in select i a