synthesizer-llvm-1.1.0.1: src/Synthesizer/LLVM/Generator/Extra.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE Rank2Types #-}
module Synthesizer.LLVM.Generator.Extra where
import qualified Synthesizer.LLVM.Causal.Process as Causal
import qualified Synthesizer.LLVM.Generator.Signal as Sig
import Synthesizer.Causal.Class (($*))
import qualified LLVM.DSL.Expression as Expr
import LLVM.DSL.Expression (Exp)
import qualified LLVM.Extra.Multi.Value.Marshal as Marshal
import qualified LLVM.Extra.Multi.Value as MultiValue
import Data.Word (Word)
import NumericPrelude.Numeric
ramp,
parabolaFadeIn, parabolaFadeOut,
parabolaFadeInMap, parabolaFadeOutMap ::
(Marshal.C a, MultiValue.Field a, MultiValue.IntegerConstant a,
MultiValue.NativeFloating a ar) =>
Exp Word -> Sig.MV a
ramp dur =
Causal.take dur $* Sig.rampInf (Expr.fromIntegral dur)
parabolaFadeIn dur =
Causal.take dur $* Sig.parabolaFadeInInf (Expr.fromIntegral dur)
parabolaFadeOut dur =
Causal.take dur $* Sig.parabolaFadeOutInf (Expr.fromIntegral dur)
parabolaFadeInMap dur = Causal.map (\t -> t*(2-t)) $* ramp dur
parabolaFadeOutMap dur = Causal.map (\t -> 1-t*t) $* ramp dur