module Csound.Typed.Plugins.Adsr140(  
	adsr140 
) where

import Data.Boolean
import Control.Monad.Trans.Class
import Control.Applicative

import Csound.Dynamic

import Csound.Typed.Types.Prim
import Csound.Typed.GlobalState
import qualified Csound.Typed.GlobalState.Elements as E(adsr140Plugin)


-------------------------------------------------------------------------------

-- | Gated, Re-triggerable ADSR modeled after the Doepfer A-140 
-- opcode adsr140, a, aakkkk
--
-- inputs: agate, aretrig, kattack, kdecay, ksustain, krelease 
adsr140 :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
adsr140 agate aretrig kattack kdecay ksustain krelease = fromGE $ do
    addUdoPlugin E.adsr140Plugin
    f <$> toGE agate <*> toGE aretrig <*> toGE kattack <*> toGE kdecay <*> toGE ksustain <*> toGE krelease
    where f agate aretrig kattack kdecay ksustain krelease = opcs "adsr140" [(Ar, [Ar, Ar, Kr, Kr, Kr, Kr])] [agate, aretrig, kattack, kdecay, ksustain, krelease]