module Synthesizer.Inference.Reader.Control
(
constant, constantVector, linear, line, exponential, exponential2,
piecewise, piecewiseVolume, Control(..), ControlPiece(..),
(-|#), ( #|-), (=|#), ( #|=), (|#), ( #|),
mapLinear, mapExponential, )
where
import Synthesizer.Plain.Control
(Control(..), ControlPiece(..), (-|#), ( #|-), (=|#), ( #|=), (|#), ( #|))
import qualified Synthesizer.SampleRateContext.Control as CtrlC
import qualified Synthesizer.Inference.Reader.Signal as SigR
import qualified Synthesizer.Inference.Reader.Process as Proc
import qualified Algebra.OccasionallyScalar as OccScalar
import qualified Algebra.Module as Module
import qualified Algebra.Transcendental as Trans
import qualified Algebra.RealField as RealField
import qualified Algebra.Field as Field
import qualified Algebra.Real as Real
import qualified Algebra.Ring as Ring
constant :: (Field.C y', Real.C y', OccScalar.C y y') =>
y'
-> Proc.T t t' (SigR.T y y' y)
constant y =
SigR.lift (CtrlC.constant y)
constantVector ::
y'
-> yv
-> Proc.T t t' (SigR.T y y' yv)
constantVector y yv =
SigR.lift (CtrlC.constantVector y yv)
linear ::
(Field.C q, Field.C q',
Real.C q', OccScalar.C q q') =>
q'
-> q'
-> Proc.T q q' (SigR.T q q' q)
linear slope y0 =
SigR.lift (CtrlC.linear slope y0)
line ::
(RealField.C q, Field.C q',
Real.C q', OccScalar.C q q') =>
q'
-> (q',q')
-> Proc.T q q' (SigR.T q q' q)
line dur (y0,y1) =
SigR.lift (CtrlC.line dur (y0,y1))
exponential :: (Trans.C q, Field.C q', Real.C q', OccScalar.C q q') =>
q'
-> q'
-> Proc.T q q' (SigR.T q q' q)
exponential time y0 =
SigR.lift (CtrlC.exponential time y0)
exponential2 :: (Trans.C q, Field.C q', Real.C q', OccScalar.C q q') =>
q'
-> q'
-> Proc.T q q' (SigR.T q q' q)
exponential2 time y0 =
SigR.lift (CtrlC.exponential2 time y0)
piecewise :: (Trans.C q, RealField.C q,
Real.C q', Field.C q', OccScalar.C q q') =>
[ControlPiece q']
-> Proc.T q q' (SigR.T q q' q)
piecewise cs =
SigR.lift (CtrlC.piecewise cs)
piecewiseVolume ::
(Trans.C q, RealField.C q,
Real.C q', Field.C q', OccScalar.C q q') =>
[ControlPiece q']
-> q'
-> Proc.T q q' (SigR.T q q' q)
piecewiseVolume cs amplitude =
SigR.lift (CtrlC.piecewiseVolume cs amplitude)
mapLinear :: (Ring.C y, Field.C y', Real.C y', OccScalar.C y y') =>
y'
-> y'
-> Proc.T t t'
(SigR.T y y' y
-> SigR.T y y' y)
mapLinear range center =
SigR.lift (CtrlC.mapLinear range center)
mapExponential :: (Field.C y', Trans.C y, Module.C y y') =>
y
-> y'
-> Proc.T t t'
(SigR.T y y y
-> SigR.T y y' y)
mapExponential range center =
SigR.lift (CtrlC.mapExponential range center)