-- | Monadic constructors for composite 'UGen's. module Sound.SC3.UGen.Composite.Monadic where import qualified Sound.SC3.UGen.Composite.ID as C import Sound.SC3.UGen.Demand.Monadic import Sound.SC3.UGen.Filter import Sound.SC3.UGen.Noise.Monadic import Sound.SC3.UGen.UGen import Sound.SC3.UGen.UGen.Lift import Sound.SC3.UGen.UId -- | Demand rate (:) function. dcons :: (UId m) => UGen -> UGen -> m UGen dcons x xs = do i <- dseq 1 (mce2 0 1) a <- dseq 1 (mce2 x xs) dswitch i a -- | 'liftU' of 'C.iChoose'. iChoose :: UId m => UGen -> m UGen iChoose = liftU C.iChoose -- | 'liftU' of 'C.iChoose''. iChoose' :: UId m => [UGen] -> m UGen iChoose' = liftU C.iChoose' -- | Randomly select one of several inputs. tChoose :: (UId m) => UGen -> UGen -> m UGen tChoose t a = do r <- tIRand 0 (constant (length (mceChannels a))) t return (select r a) -- | Randomly select one of several inputs (weighted). tWChoose :: (UId m) => UGen -> UGen -> UGen -> UGen -> m UGen tWChoose t a w n = do i <- tWindex t n w return (select i a)