module Synthesizer.State.Filter.Delay where
import qualified Synthesizer.Interpolation as Interpolation
import qualified Synthesizer.State.Interpolation as InterpolationS
import qualified Synthesizer.State.Signal as Sig
import qualified Algebra.RealField as RealField
import qualified Algebra.Additive as Additive
import NumericPrelude
static :: Additive.C y => Int -> Sig.T y -> Sig.T y
static = staticPad zero
staticPad :: y -> Int -> Sig.T y -> Sig.T y
staticPad = InterpolationS.delayPad
staticPos :: Additive.C y => Int -> Sig.T y -> Sig.T y
staticPos n = Sig.append (Sig.replicate n zero)
staticNeg :: Int -> Sig.T y -> Sig.T y
staticNeg = Sig.drop
modulatedCore :: (RealField.C a, Additive.C v) =>
Interpolation.T a v -> Int -> Sig.T a -> Sig.T v -> Sig.T v
modulatedCore ip size =
Sig.zipWithTails
(\t -> InterpolationS.single ip (fromIntegral size + t))
modulated :: (RealField.C a, Additive.C v) =>
Interpolation.T a v -> Int -> Sig.T a -> Sig.T v -> Sig.T v
modulated ip minDev ts xs =
let size = Interpolation.number ip minDev
in modulatedCore ip
(size Interpolation.offset ip)
ts
(staticPos size xs)