-- | DSSI and LADSPA for Csound
module CsoundExpr.Opcodes.Plugin.Dssi4cs
    (dssiinit,
     dssiactivate,
     dssilist,
     dssiaudio,
     dssictls)
where



import CsoundExpr.Base.Types
import CsoundExpr.Base.MultiOut
import CsoundExpr.Base.SideEffect
import CsoundExpr.Base.UserDefined



-- | * opcode : dssiinit
--  
--  
-- * syntax : 
--  
--  >   ihandle dssiinit ilibraryname, iplugindex [, iverbose]
--  
--  
-- * description : 
--  
--  dssiinit is used to load a DSSI or LADSPA plugin into memory for
-- use with the other dssi4cs opcodes. Both LADSPA effects and DSSI
-- instruments can be used.
--  
--  
-- * url : <http://www.csounds.com/manual/html/dssiinit.html>
 
dssiinit :: [Irate] -> Irate -> Irate -> Irate
dssiinit i0init i1libraryname i2plugindex = opcode "dssiinit" args
  where args = [to i1libraryname, to i2plugindex] ++ map to i0init


-- | * opcode : dssiactivate
--  
--  
-- * syntax : 
--  
--  >   dssiactivate ihandle, ktoggle
--  
--  
-- * description : 
--  
--  dssiactivate is used to activate or deactivate a DSSI or LADSPA
-- plugin. It calles the plugin's activate() and deactivate()
-- functions if they are provided.
--  
--  
-- * url : <http://www.csounds.com/manual/html/dssiactivate.html>
 
dssiactivate :: (K k0) => Irate -> k0 -> SignalOut
dssiactivate i0handle k1toggle = outOpcode "dssiactivate" args
  where args = [to i0handle, to k1toggle]


-- | * opcode : dssilist
--  
--  
-- * syntax : 
--  
--  >   dssilist
--  
--  
-- * description : 
--  
--  dssilist checks the variables DSSI_PATH and LADSPA_PATH and
-- lists all plugins available in all plugin libraries there.
--  
--  
-- * url : <http://www.csounds.com/manual/html/dssilist.html>
 
dssilist :: SignalOut
dssilist = outOpcode "dssilist" args
  where args = []


-- | * opcode : dssiaudio
--  
--  
-- * syntax : 
--  
--  >   aout1 [, aout2, aout3, aout4] dssiaudio ihandle, ain1 [,ain2, ain3, ain4]
--  
--  
-- * description : 
--  
--  dssiaudio generates audio by processing an input signal through
-- a LADSPA plugin.
--  
--  
-- * url : <http://www.csounds.com/manual/html/dssiaudio.html>
 
dssiaudio :: [Arate] -> Irate -> Arate -> MultiOut
dssiaudio a0init i1handle a2in1 = opcode "dssiaudio" args
  where args = [to i1handle, to a2in1] ++ map to a0init


-- | * opcode : dssictls
--  
--  
-- * syntax : 
--  
--  >   dssictls ihandle, iport, kvalue, ktrigger
--  
--  
-- * description : 
--  
--  dssictls sends control values to a plugin's control port
--  
--  
-- * url : <http://www.csounds.com/manual/html/dssictls.html>
 
dssictls :: (K k0, K k1) => Irate -> Irate -> k0 -> k1 -> SignalOut
dssictls i0handle i1port k2value k3trigger
  = outOpcode "dssictls" args
  where args = [to i0handle, to i1port, to k2value, to k3trigger]