synthesizer-0.2: src/Synthesizer/Causal/Displacement.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Synthesizer.Causal.Displacement where
import qualified Synthesizer.Causal.Process as Causal
import qualified Algebra.Additive as Additive
import qualified Prelude as P
import PreludeBase
import NumericPrelude
{- * Mixing -}
{-|
Mix two signals.
Unfortunately we have to use 'zipWith' semantic here,
that is the result is as long as the shorter of both inputs.
-}
{-# INLINE mix #-}
mix :: (Additive.C v) => Causal.T (v,v) v
mix = Causal.map (uncurry (+))
{-|
Add a number to all of the signal values.
This is useful for adjusting the center of a modulation.
-}
{-# INLINE raise #-}
raise :: (Additive.C v) => v -> Causal.T v v
raise x = Causal.map (x+)
{- * Distortion -}
{-|
In "Synthesizer.Basic.Distortion" you find a collection
of appropriate distortion functions.
-}
{-# INLINE distort #-}
distort :: (c -> a -> a) -> Causal.T (c,a) a
distort f = Causal.map (uncurry f)