module Sound.SC3.UGen.Envelope where
import Sound.SC3.UGen.UGen (UGen(..))
import Sound.SC3.UGen.UGen.Construct (mkOsc, mkFilter)
import Sound.SC3.UGen.Rate (Rate)
import Sound.SC3.UGen.Enum (DoneAction)
import Sound.SC3.UGen.Utilities (fromDoneAction)
envGen :: Rate -> UGen -> UGen -> UGen -> UGen -> DoneAction -> [UGen] -> UGen
envGen r gate lvl bias scale act pts = mkOsc r "EnvGen" i 1
where i = [gate, lvl, bias, scale, fromDoneAction act] ++ pts
line :: Rate -> UGen -> UGen -> UGen -> DoneAction -> UGen
line r start end dur act = mkOsc r "Line" [start, end, dur, fromDoneAction act] 1
xLine :: Rate -> UGen -> UGen -> UGen -> DoneAction -> UGen
xLine r start end dur act = mkOsc r "XLine" [start, end, dur, fromDoneAction act] 1
freeSelf :: UGen -> UGen
freeSelf i = mkFilter "FreeSelf" [i] 0
freeSelfWhenDone :: UGen -> UGen
freeSelfWhenDone i = mkFilter "FreeSelfWhenDone" [i] 0
pause :: UGen -> UGen -> UGen
pause t n = mkFilter "Pause" [t, n] 1
pauseSelf :: UGen -> UGen
pauseSelf i = mkFilter "PauseSelf" [i] 0
pauseSelfWhenDone :: UGen -> UGen
pauseSelfWhenDone i = mkFilter "PauseSelfWhenDone" [i] 0
done :: UGen -> UGen
done i = mkFilter "Done" [i] 1
detectSilence :: UGen -> UGen -> UGen -> DoneAction -> UGen
detectSilence i a t act = mkFilter "DetectSilence" [i, a, t, fromDoneAction act] 0
free :: UGen -> UGen -> UGen
free i n = mkFilter "Free" [i, n] 1
linen :: UGen -> UGen -> UGen -> UGen -> DoneAction -> UGen
linen g at sl rt da = mkFilter "Linen" [g,at,sl,rt,fromDoneAction da] 1