module Csound.Typed.Plugins.TapeEcho(
tapeRead
, tapeWrite
, tapeEcho
) where
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(tapeEchoPlugin)
tapeRead :: Sig -> Sig -> Sig -> SE Sig
tapeRead ain kdel kRandomSpread = fmap (Sig . return) $ SE $ (depT =<<) $ lift $ do
addUdoPlugin E.tapeEchoPlugin
f <$> toGE ain <*> toGE kdel <*> toGE kRandomSpread
where f ain kdel krand = opcs "tapeRead" [(Ar, [Ar, Kr, Kr])] [ain, kdel, krand]
tapeWrite :: Sig -> Sig -> Sig -> SE ()
tapeWrite ain aout kFeedback = SE $ (depT_ =<<) $ lift $ do
f <$> toGE ain <*> toGE aout <*> toGE kFeedback
where f ain aout kfb = opcs "tapeWrite" [(Xr, [Ar, Ar, Kr])] [ain, aout, kfb]
tapeEcho :: D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
tapeEcho iSize kDelay kEchoGain kFbGain kTone kRandomSpread aIn = fromGE $ do
addUdoPlugin E.tapeEchoPlugin
f <$> toGE aIn <*> toGE kDelay <*> toGE kEchoGain <*> toGE kFbGain <*> toGE kTone <*> toGE kRandomSpread <*> toGE iSize
where f aIn kDelay kEchoGain kFbGain kTone kRandomSpread iSize = opcs "TapeEchoN" [(Ar, [Ar, Kr, Kr, Kr, Kr, Kr, Ir])] [aIn, kDelay, kEchoGain, kFbGain, kTone, kRandomSpread, iSize]