module Csound.Typed.Plugins.ZeroDelayConvolution(
ZConvSpec(..), zconv, zconv'
) where
import Data.Boolean
import Data.Default
import Control.Monad.Trans.Class
import Control.Applicative
import Csound.Dynamic
import Csound.Typed.Types
import Csound.Typed.GlobalState
import qualified Csound.Typed.GlobalState.Elements as E(zeroDelayConvolutionPlugin)
data ZConvSpec = ZConvSpec
{ zconvPartSize :: D
, zconvRatio :: D
, zconvNp :: D
}
instance Default ZConvSpec where
def = ZConvSpec 64 4 6
zconv :: Tab -> Sig -> Sig
zconv = zconv' def
zconv' :: ZConvSpec -> Tab -> Sig -> Sig
zconv' (ZConvSpec ipart irat inp) ifn ain = fromGE $ do
addUdoPlugin E.zeroDelayConvolutionPlugin
f <$> toGE ain <*> toGE ipart <*> toGE irat <*> toGE inp <*> toGE ifn
where f ain ipart irat inp ifn = opcs "ZConv" [(Ar, [Ar, Ir, Ir, Ir, Ir])] [ain, ipart, irat, inp, ifn]