module Sound.SC3.UGen.Demand where

import Sound.SC3.UGen.Rate (Rate)
import Sound.SC3.UGen.UGen (UGen)
import Sound.SC3.UGen.UGen.Construct (mkOsc, mkOscMCE, mkFilterKeyed)
import Sound.SC3.UGen.Enum (DoneAction)
import Sound.SC3.UGen.Utilities (fromDoneAction)

-- | Demand results from demand rate ugens.
demand :: UGen -> UGen -> UGen -> UGen
demand t r d = mkFilterKeyed "Demand" 0 [t, r, d] 1

-- | Demand envlope generator.
demandEnvGen :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> DoneAction -> UGen
demandEnvGen r l d s c g rst ls lb ts a = mkOsc r "DemandEnvGen" [l,d,s,c,g,rst,ls,lb,ts,fromDoneAction a] 1

-- | Demand results from demand rate ugens.
duty :: Rate -> UGen -> UGen -> DoneAction -> UGen -> UGen
duty rate d r act l = mkOsc rate "Duty" [d, r, fromDoneAction act, l] 1

-- | Demand results as trigger from demand rate ugens.
tDuty :: Rate -> UGen -> UGen -> DoneAction -> UGen -> UGen
tDuty r d rst act l = mkOscMCE r "TDuty" [d,rst,fromDoneAction act] l 1