-- | Table Reading with Dynamic Selection
module CsoundExpr.Opcodes.Table.Select
    (tableiktA,
     tableiktK,
     tablektA,
     tablektK,
     tablexkt)
where



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



-- | * opcode : tableikt
--  
--  
-- * syntax : 
--  
--  >   ares tableikt xndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  >   kres tableikt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  
--  
-- * description : 
--  
--  k-rate control over table numbers.
--  
--  
-- * url : <http://www.csounds.com/manual/html/tableikt.html>
 
tableiktA :: (X x0, K k0) => [Irate] -> x0 -> k0 -> Arate
tableiktA i0init x1ndx k2fn = opcode "tableikt" args
  where args = [to x1ndx, to k2fn] ++ map to i0init


-- | * opcode : tableikt
--  
--  
-- * syntax : 
--  
--  >   ares tableikt xndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  >   kres tableikt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  
--  
-- * description : 
--  
--  k-rate control over table numbers.
--  
--  
-- * url : <http://www.csounds.com/manual/html/tableikt.html>
 
tableiktK :: (K k0, K k1) => [Irate] -> k0 -> k1 -> Krate
tableiktK i0init k1ndx k2fn = opcode "tableikt" args
  where args = [to k1ndx, to k2fn] ++ map to i0init


-- | * opcode : tablekt
--  
--  
-- * syntax : 
--  
--  >   ares tablekt xndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  >   kres tablekt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  
--  
-- * description : 
--  
--  k-rate control over table numbers.
--  
--  
-- * url : <http://www.csounds.com/manual/html/tablekt.html>
 
tablektA :: (X x0, K k0) => [Irate] -> x0 -> k0 -> Arate
tablektA i0init x1ndx k2fn = opcode "tablekt" args
  where args = [to x1ndx, to k2fn] ++ map to i0init


-- | * opcode : tablekt
--  
--  
-- * syntax : 
--  
--  >   ares tablekt xndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  >   kres tablekt kndx, kfn [, ixmode] [, ixoff] [, iwrap]
--  
--  
-- * description : 
--  
--  k-rate control over table numbers.
--  
--  
-- * url : <http://www.csounds.com/manual/html/tablekt.html>
 
tablektK :: (K k0, K k1) => [Irate] -> k0 -> k1 -> Krate
tablektK i0init k1ndx k2fn = opcode "tablekt" args
  where args = [to k1ndx, to k2fn] ++ map to i0init


-- | * opcode : tablexkt
--  
--  
-- * syntax : 
--  
--  >   ares tablexkt xndx, kfn, kwarp, iwsize [, ixmode] [, ixoff] [, iwrap]
--  
--  
-- * description : 
--  
--  Reads function tables with linear, cubic, or sinc interpolation.
--  
--  
-- * url : <http://www.csounds.com/manual/html/tablexkt.html>
 
tablexkt ::
           (X x0, K k0, K k1) => [Irate] -> x0 -> k0 -> k1 -> Irate -> Arate
tablexkt i0init x1ndx k2fn k3warp i4wsize = opcode "tablexkt" args
  where args
          = [to x1ndx, to k2fn, to k3warp, to i4wsize] ++ map to i0init