{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.State.Filter.Delay (
static,
staticPad,
staticPos,
staticNeg,
modulated,
) 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.Numeric
{-# INLINE static #-}
static :: Additive.C y => Int -> Sig.T y -> Sig.T y
static :: forall y. C y => Int -> T y -> T y
static = forall y. y -> Int -> T y -> T y
staticPad forall a. C a => a
zero
{-# INLINE staticPad #-}
staticPad :: y -> Int -> Sig.T y -> Sig.T y
staticPad :: forall y. y -> Int -> T y -> T y
staticPad = forall y. y -> Int -> T y -> T y
InterpolationS.delayPad
{-# INLINE staticPos #-}
staticPos :: Additive.C y => Int -> Sig.T y -> Sig.T y
staticPos :: forall y. C y => Int -> T y -> T y
staticPos Int
n = forall a. T a -> T a -> T a
Sig.append (forall a. Int -> a -> T a
Sig.replicate Int
n forall a. C a => a
zero)
{-# INLINE staticNeg #-}
staticNeg :: Int -> Sig.T y -> Sig.T y
staticNeg :: forall y. Int -> T y -> T y
staticNeg = forall y. Int -> T y -> T y
Sig.drop
{-# INLINE modulatedCore #-}
modulatedCore :: (RealField.C a, Additive.C v) =>
Interpolation.T a v -> Int -> Sig.T a -> Sig.T v -> Sig.T v
modulatedCore :: forall a v. (C a, C v) => T a v -> Int -> T a -> T v -> T v
modulatedCore T a v
ip Int
size =
forall y0 y1 y2. (y0 -> T y1 -> y2) -> T y0 -> T y1 -> T y2
Sig.zipWithTails
(\a
t -> forall t y. C t => T t y -> t -> T y -> y
InterpolationS.single T a v
ip (forall a b. (C a, C b) => a -> b
fromIntegral Int
size forall a. C a => a -> a -> a
+ a
t))
{-# INLINE modulated #-}
modulated :: (RealField.C a, Additive.C v) =>
Interpolation.T a v -> Int -> Sig.T a -> Sig.T v -> Sig.T v
modulated :: forall a v. (C a, C v) => T a v -> Int -> T a -> T v -> T v
modulated T a v
ip Int
minDev T a
ts T v
xs =
let size :: Int
size = forall t y. T t y -> Int
Interpolation.number T a v
ip forall a. C a => a -> a -> a
- Int
minDev
in forall a v. (C a, C v) => T a v -> Int -> T a -> T v -> T v
modulatedCore T a v
ip
(Int
size forall a. C a => a -> a -> a
- forall t y. T t y -> Int
Interpolation.offset T a v
ip)
T a
ts
(forall y. C y => Int -> T y -> T y
staticPos Int
size T v
xs)