{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Basic.DistortionControlled (
clip, logit,
zigZag, sine,
quantize,
) where
import qualified Synthesizer.Basic.Distortion as Dist
import qualified Algebra.Transcendental as Trans
import qualified Algebra.RealField as RealField
import qualified Algebra.Field as Field
import qualified Algebra.RealRing as RealRing
import Data.Ord.HT (limit, )
import NumericPrelude.Numeric
clip :: (RealRing.C a) => a -> a -> a
clip :: forall a. C a => a -> a -> a
clip a
c = (a, a) -> a -> a
forall a. Ord a => (a, a) -> a -> a
limit (a -> a
forall a. C a => a -> a
negate a
c, a
c)
logit :: (Trans.C a) => a -> a -> a
logit :: forall a. C a => a -> a -> a
logit a
k = a -> (a -> a) -> a -> a
forall a. C a => a -> (a -> a) -> a -> a
rescale a
k a -> a
forall a. C a => a -> a
Dist.logit
zigZag :: (RealField.C a) => a -> a -> a
zigZag :: forall a. C a => a -> a -> a
zigZag a
k = a -> (a -> a) -> a -> a
forall a. C a => a -> (a -> a) -> a -> a
rescale a
k a -> a
forall a. C a => a -> a
Dist.zigZag
sine :: (Trans.C a) => a -> a -> a
sine :: forall a. C a => a -> a -> a
sine a
k = a -> (a -> a) -> a -> a
forall a. C a => a -> (a -> a) -> a -> a
rescale a
k a -> a
forall a. C a => a -> a
Dist.sine
quantize :: (RealField.C a) => a -> a -> a
quantize :: forall a. C a => a -> a -> a
quantize a
k = a -> (a -> a) -> a -> a
forall a. C a => a -> (a -> a) -> a -> a
rescale a
k a -> a
forall a. C a => a -> a
Dist.quantize
rescale :: (Field.C a) => a -> (a -> a) -> a -> a
rescale :: forall a. C a => a -> (a -> a) -> a -> a
rescale a
k a -> a
f a
x = a
k a -> a -> a
forall a. C a => a -> a -> a
* a -> a
f (a
xa -> a -> a
forall a. C a => a -> a -> a
/a
k)