content: {-# LANGUAGE DataKinds #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# LANGUAGE TypeFamilies, NoMonoLocalBinds #-}
  
  {-# LANGUAGE NoIncoherentInstances #-}
  {-# LANGUAGE NoMonomorphismRestriction #-}
  {-# LANGUAGE NoUndecidableInstances #-}
  
  module Vivid.UGens.Dynamics (
       compander
  ---   , companderD
     , limiter
     , normalizer
     ) where
  
  import Vivid.SC.SynthDef.Types (CalculationRate(..))
  import Vivid.SynthDef
  import Vivid.SynthDef.FromUA
  --- import Vivid.SynthDef.TypesafeArgs
  import Vivid.UGens.Args
  
  compander :: (Args '["in"] '["control","threshold","slopeBelow","slopeAbove","clampSecs","relaxSecs"] a) => a -> SDBody a Signal
  compander = makeUGen
     "Compander" AR
     (Vs::Vs '["in","control","threshold","slopeBelow","slopeAbove","clampSecs","relaxSecs"])
     (control_ (0::Float), thresh_ (0.5::Float), slopeBelow_ (1::Float), slopeAbove_ (1::Float), clampTime_ (0.01::Float), relaxTime_ (0.1::Float))
  
  
  --- companderD ::
  --- companderD =
  
  -- | Note this can only run at "AR"
  -- 
  --   \"secs\" is the lookahead time -- if you're coming from SC you can use 'Vivid.UGens.Args.dur_' for consistency
  limiter :: (Args '["in"] '["level", "secs"] a) => a -> SDBody a Signal
  limiter = makeUGen
     "Limiter" AR
     (Vs::Vs '["in","level","secs"])
     (level_ (1::Float), secs_ (0.01::Float))
  
  -- | Note this can only run at "AR"
  -- 
  --   \"secs\" is the lookahead time -- if you're coming from SC you can use 'Vivid.UGens.Args.dur_'
  normalizer :: (Args '["in"] '["level", "secs"] a) => a -> SDBody a Signal
  normalizer = makeUGen
     "Normalizer" AR
     (Vs::Vs '["in","level","secs"])
     (level_ (1::Float), secs_ (0.01::Float))
  