packages feed

synthesizer-inference-0.2: src/Synthesizer/Inference/Monad/SignalSeq/Control.hs

{-# 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)