hsc3-0.16: Sound/SC3/UGen/Envelope.hs
-- | Envelope / UGen.
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
{- | Trapezoidal envelope generator.
> import Sound.SC3.Plot
> plotEnvelope [envTrapezoid 0.99 0.5 1 1,envTrapezoid 0.5 0.75 0.65 0.35]
-}
envTrapezoid :: OrdE t => t -> t -> t -> t -> Envelope t
envTrapezoid = envTrapezoid_f ((<=*),(>=*))
-- | Singleton fade envelope.
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
in envGen KR gate_ level 0 fadeTime doneAction e
-- | Variant with default values for all inputs. @gate@ and
-- @fadeTime@ are 'control's, @doneAction@ is 'RemoveSynth', @curve@
-- is 'EnvSin'.
envGate' :: UGen
envGate' =
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