module Csound.Typed.Opcode.TableControl (
ftfree, ftgen, ftgentmp, sndload) where
import Control.Applicative
import Control.Monad.Trans.Class
import Csound.Dynamic
import Csound.Typed
ftfree :: Tab -> D -> SE ()
ftfree b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2
where f a1 a2 = opcs "ftfree" [(Xr,[Ir,Ir])] [a1,a2]
ftgen :: Tab -> D -> D -> D -> D -> SE D
ftgen b1 b2 b3 b4 b5 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5
where f a1 a2 a3 a4 a5 = opcs "ftgen" [(Ir,(repeat Ir))] [a1,a2,a3,a4,a5]
ftgentmp :: D -> D -> D -> D -> D -> [D] -> SE Tab
ftgentmp b1 b2 b3 b4 b5 b6 = fmap ( Tab . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> mapM unD b6
where f a1 a2 a3 a4 a5 a6 = opcs "ftgentmp" [(Ir,(repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)
sndload :: Str -> SE ()
sndload b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1
where f a1 = opcs "sndload" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1]