-- | VST for Csound
module CsoundExpr.Opcodes.Plugin.Vst4cs
    (vstinit,
     vstmidiout,
     vstnote,
     vstinfo,
     vstbankload,
     vstprogset,
     vstedit)
where



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



-- | * opcode : vstinit
--  
--  
-- * syntax : 
--  
--  >   instance vstinit ilibrarypath [,iverbose]
--  
--  
-- * description : 
--  
--  vstinit is used to load a VST plugin into memory for use with
-- the other vst4cs opcodes. Both VST effects and instruments
-- (synthesizers) can be used.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstinit.html>
 
vstinit :: [Irate] -> Irate -> Irate
vstinit i0init i1librarypath = opcode "vstinit" args
  where args = [to i1librarypath] ++ map to i0init


-- | * opcode : vstmidiout
--  
--  
-- * syntax : 
--  
--  >   vstmidiout instance, kstatus, kchan, kdata1, kdata2
--  
--  
-- * description : 
--  
--  vstmidiout is used for sending MIDI information to a VST plugin.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstmidiout.html>
 
vstmidiout ::
             (K k0, K k1, K k2, K k3) =>
             Irate -> k0 -> k1 -> k2 -> k3 -> SignalOut
vstmidiout i0nstance k1status k2chan k3data1 k4data2
  = outOpcode "vstmidiout" args
  where args
          = [to i0nstance, to k1status, to k2chan, to k3data1, to k4data2]


-- | * opcode : vstnote
--  
--  
-- * syntax : 
--  
--  >   vstnote instance, kchan, knote, kveloc, kdur
--  
--  
-- * description : 
--  
--  vstnote sends a MIDI note with definite duration to a VST
-- plugin.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstnote.html>
 
vstnote ::
          (K k0, K k1, K k2, K k3) =>
          Irate -> k0 -> k1 -> k2 -> k3 -> SignalOut
vstnote i0nstance k1chan k2note k3veloc k4dur
  = outOpcode "vstnote" args
  where args
          = [to i0nstance, to k1chan, to k2note, to k3veloc, to k4dur]


-- | * opcode : vstinfo
--  
--  
-- * syntax : 
--  
--  >   vstinfo instance
--  
--  
-- * description : 
--  
--  vstinfo displays the parameters and the programs of a VST
-- plugin.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstinfo.html>
 
vstinfo :: Irate -> SignalOut
vstinfo i0nstance = outOpcode "vstinfo" args
  where args = [to i0nstance]


-- | * opcode : vstbankload
--  
--  
-- * syntax : 
--  
--  >   vstbankload instance, ipath
--  
--  
-- * description : 
--  
--  vstbankload is used for loading parameter banks to a VST plugin.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstbankload.html>
 
vstbankload :: Irate -> Irate -> SignalOut
vstbankload i0nstance i1path = outOpcode "vstbankload" args
  where args = [to i0nstance, to i1path]


-- | * opcode : vstprogset
--  
--  
-- * syntax : 
--  
--  >   vstprogset instance, kprogram
--  
--  
-- * description : 
--  
--  vstprogset sets one of the programs in an .fxb bank.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstprogset.html>
 
vstprogset :: (K k0) => Irate -> k0 -> SignalOut
vstprogset i0nstance k1program = outOpcode "vstprogset" args
  where args = [to i0nstance, to k1program]


-- | * opcode : vstedit
--  
--  
-- * syntax : 
--  
--  >   vstedit instance
--  
--  
-- * description : 
--  
--  vstedit opens the custom GUI editor widow for a VST plugin. Note
-- that not all VST plugins have custom GUI editors. It may be
-- necessary to use the --displays command-line option to ensure
-- that Csound handles events from the editor window and displays it
-- properly.
--  
--  
-- * url : <http://www.csounds.com/manual/html/vstedit.html>
 
vstedit :: Irate -> SignalOut
vstedit i0nstance = outOpcode "vstedit" args
  where args = [to i0nstance]