module Synthesizer.Amplitude.Filter (
amplify,
negate,
envelope,
) where
import qualified Synthesizer.Amplitude.Signal as SigV
import qualified Synthesizer.Plain.Filter.NonRecursive as FiltNR
import qualified Algebra.Ring as Ring
import qualified Algebra.Additive as Additive
import qualified Algebra.Module as Module
import NumericPrelude hiding (negate)
import Prelude ()
amplify :: (Ring.C y') =>
y'
-> SigV.T y y' yv
-> SigV.T y y' yv
amplify volume x =
SigV.Cons (volume * SigV.amplitude x) (SigV.samples x)
negate :: (Additive.C yv) =>
SigV.T y y' yv
-> SigV.T y y' yv
negate x =
SigV.Cons (SigV.amplitude x) (Additive.negate (SigV.samples x))
envelope :: (Module.C y0 yv, Ring.C y') =>
SigV.T y y' y0
-> SigV.T y y' yv
-> SigV.T y y' yv
envelope y x =
SigV.Cons
(SigV.amplitude y * SigV.amplitude x)
(FiltNR.envelopeVector (SigV.samples y) (SigV.samples x))