synthesizer-dimensional-0.5: src/Synthesizer/Dimensional/Amplitude/Control.hs
{- |
Copyright : (c) Henning Thielemann 2008
License : GPL
Maintainer : synthesizer@henning-thielemann.de
Stability : provisional
Portability : requires multi-parameter type classes
Control curves which can be used
as envelopes, for controlling filter parameters and so on.
-}
module Synthesizer.Dimensional.Amplitude.Control (
-- * Primitives
constant, constantVector,
) where
import qualified Synthesizer.Dimensional.Signal.Private as SigA
import qualified Synthesizer.State.Control as Ctrl
-- import qualified Synthesizer.State.Signal as Sig
import qualified Number.DimensionTerm as DN
import qualified Algebra.DimensionTerm as Dim
-- import qualified Algebra.Module as Module
import qualified Algebra.Absolute as Absolute
-- import qualified Algebra.Ring as Ring
-- import qualified Algebra.Additive as Additive
-- import NumericPrelude.Numeric
import NumericPrelude.Base as P
import Prelude ()
{-# INLINE constant #-}
constant :: (Absolute.C y, Dim.C u) =>
DN.T u y {-^ value -}
-> SigA.R s u y y
constant =
uncurry constantVector .
DN.absSignum
{- |
The amplitude must be positive!
This is not checked.
-}
{-# INLINE constantVector #-}
constantVector :: -- (Field.C y', Absolute.C y', OccScalar.C y y') =>
DN.T u y {-^ amplitude -}
-> yv {-^ value -}
-> SigA.R s u y yv
constantVector y yv =
SigA.fromBody y (Ctrl.constant yv)