module Sound.SC3.UGen.Envelope where
import Sound.SC3.Common.Envelope
import Sound.SC3.UGen.Bindings
import Sound.SC3.UGen.Math
import Sound.SC3.UGen.Enum
import Sound.SC3.UGen.Rate
import Sound.SC3.UGen.Type
import Sound.SC3.UGen.UGen
envTrapezoid :: OrdE t => t -> t -> t -> t -> Envelope t
envTrapezoid = envTrapezoid_f ((<=*),(>=*))
env_circle_u :: UGen -> Envelope_Curve UGen -> Envelope UGen -> Envelope UGen
env_circle_u = env_circle_z (latch 1 (impulse KR 0 0))
envGate :: UGen -> UGen -> UGen -> DoneAction -> Envelope_Curve UGen -> UGen
envGate level gate_ fadeTime doneAction curve =
let startVal = fadeTime <=* 0
e = Envelope [startVal,1,0] [1,1] [curve] (Just 1) Nothing 0
in envGen KR gate_ level 0 fadeTime doneAction e
envGate_def :: UGen
envGate_def =
let level = 1
gate_ = meta_control KR "gate" 1 (0,1,"lin",1,"")
fadeTime = meta_control KR "fadeTime" 0.02 (0,10,"lin",0,"s")
doneAction = RemoveSynth
curve = EnvSin
in envGate level gate_ fadeTime doneAction curve