-- | Duration Control Statements
module CsoundExpr.Opcodes.Control.Durctl
    (ihold,
     turnoff,
     turnoff2,
     turnon)
where



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



-- | * opcode : ihold
--  
--  
-- * syntax : 
--  
--  >   ihold
--  
--  
-- * description : 
--  
--  Causes a finite-duration note to become a held note
--  
--  
-- * url : <http://www.csounds.com/manual/html/ihold.html>
 
ihold :: SignalOut
ihold = outOpcode "ihold" args
  where args = []


-- | * opcode : turnoff
--  
--  
-- * syntax : 
--  
--  >   turnoff
--  
--  
-- * description : 
--  
--  Enables an instrument to turn itself off.
--  
--  
-- * url : <http://www.csounds.com/manual/html/turnoff.html>
 
turnoff :: SignalOut
turnoff = outOpcode "turnoff" args
  where args = []


-- | * opcode : turnoff2
--  
--  
-- * syntax : 
--  
--  >   turnoff2 kinsno, kmode, krelease
--  
--  
-- * description : 
--  
--  Turn off instance(s) of other instruments at performance time.
--  
--  
-- * url : <http://www.csounds.com/manual/html/turnoff2.html>
 
turnoff2 :: (K k0, K k1, K k2) => k0 -> k1 -> k2 -> SignalOut
turnoff2 k0insno k1mode k2release = outOpcode "turnoff2" args
  where args = [to k0insno, to k1mode, to k2release]


-- | * opcode : turnon
--  
--  
-- * syntax : 
--  
--  >   turnon insnum [, itime]
--  
--  
-- * description : 
--  
--  Activate an instrument for an indefinite time.
--  
--  
-- * url : <http://www.csounds.com/manual/html/turnon.html>
 
turnon :: [Irate] -> Irate -> SignalOut
turnon i0init i1nsnum = outOpcode "turnon" args
  where args = [to i1nsnum] ++ map to i0init