{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {- | Copyright : (c) Henning Thielemann 2006 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.Inference.Monad.SignalSeq.Control ({- * Primitives -} constant, linear, exponential, exponential2, {- * Piecewise -} piecewise, Control(..), ControlPiece(..), (-|#), ( #|-), (=|#), ( #|=), (|#), ( #|), -- spaces before # for Haddock {- * Preparation -} mapLinear, mapExponential) where import qualified Synthesizer.Inference.Monad.Signal as SigI import qualified Synthesizer.Inference.Monad.Signal.Control as CtrlI import Synthesizer.Inference.Monad.Signal.Control (constant, linear, exponential, exponential2, piecewise, Control(..), ControlPiece(..), (-|#), ( #|-), (=|#), ( #|=), (|#), ( #|)) import qualified Algebra.OccasionallyScalar as OccScalar import qualified Algebra.Transcendental as Trans import qualified Algebra.Field as Field import qualified Algebra.Real as Real import qualified Algebra.Ring as Ring import UniqueLogicNP.Monad(liftP) -- import NumericPrelude mapLinear :: (Ring.C a, Field.C q, Real.C q, OccScalar.C a q) => q -> q -> SigI.Process a q a -> SigI.Process a q a mapLinear range center = liftP (CtrlI.mapLinear range center) mapExponential :: (Field.C q, Trans.C a, OccScalar.C a q) => a -> q -> SigI.Process a q a -> SigI.Process a q a mapExponential range center = liftP (CtrlI.mapExponential range center)