{- | 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.Real as Real -- import qualified Algebra.Ring as Ring -- import qualified Algebra.Additive as Additive -- import NumericPrelude import PreludeBase as P import Prelude () {-# INLINE constant #-} constant :: (Real.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', Real.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)