synthesizer-llvm-1.2: 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.Nice.Value.Marshal as Marshal
import qualified LLVM.Extra.Nice.Value as NiceValue
import Data.Word (Word)
import NumericPrelude.Numeric
ramp,
parabolaFadeIn, parabolaFadeOut,
parabolaFadeInMap, parabolaFadeOutMap ::
(Marshal.C a, NiceValue.Field a, NiceValue.IntegerConstant a,
NiceValue.NativeFloating a ar) =>
Exp Word -> Sig.Nice 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