-- | Explicit identifier functions for composite 'UGen's. 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 -- | Demand rate (:) function. 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 -- | Count 'mce' channels. mceN :: UGen -> UGen mceN = constant . length . mceChannels -- | Randomly select one of a list of UGens (initialiastion rate). lchoose :: ID m => m -> [UGen] -> UGen lchoose e a = select (iRand e 0 (fromIntegral (length a))) (mce a) -- | 'mce' variant of 'lchoose'. choose :: ID m => m -> UGen -> UGen choose e = lchoose e . mceChannels -- | Randomly select one of several inputs on trigger. tChoose :: ID m => m -> UGen -> UGen -> UGen tChoose z t a = select (tIRand z 0 (mceN a) t) a -- | Randomly select one of several inputs on trigger (weighted). 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