-- | Linear Predictive Coding (LPC) Resynthesis
module CsoundExpr.Opcodes.Spectral.Lpcresyn
    (lpfreson,
     lpinterp,
     lpread,
     lpreson,
     lpslot)
where



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



-- | * opcode : lpfreson
--  
--  
-- * syntax : 
--  
--  >   ares lpfreson asig, kfrqratio
--  
--  
-- * description : 
--  
--  Resynthesises a signal from the data passed internally by a
-- previous lpread, applying formant shifting.
--  
--  
-- * url : <http://www.csounds.com/manual/html/lpfreson.html>
 
lpfreson :: (K k0) => Arate -> k0 -> Arate
lpfreson a0sig k1frqratio = opcode "lpfreson" args
  where args = [to a0sig, to k1frqratio]


-- | * opcode : lpinterp
--  
--  
-- * syntax : 
--  
--  >   lpinterp islot1, islot2, kmix
--  
--  
-- * description : 
--  
--  Computes a new set of poles from the interpolation between two
-- analysis.
--  
--  
-- * url : <http://www.csounds.com/manual/html/lpinterp.html>
 
lpinterp :: (K k0) => Irate -> Irate -> k0 -> SignalOut
lpinterp i0slot1 i1slot2 k2mix = outOpcode "lpinterp" args
  where args = [to i0slot1, to i1slot2, to k2mix]


-- | * opcode : lpread
--  
--  
-- * syntax : 
--  
--  >   krmsr, krmso, kerr, kcps lpread ktimpnt, ifilcod [, inpoles] [, ifrmrate]
--  
--  
-- * description : 
--  
--  Reads a control file of time-ordered information frames.
--  
--  
-- * url : <http://www.csounds.com/manual/html/lpread.html>
 
lpread :: (K k0) => [Irate] -> k0 -> String -> MultiOut
lpread i0init k1timpnt s2file = opcode "lpread" args
  where args = [to k1timpnt, to s2file] ++ map to i0init


-- | * opcode : lpreson
--  
--  
-- * syntax : 
--  
--  >   ares lpreson asig
--  
--  
-- * description : 
--  
--  Resynthesises a signal from the data passed internally by a
-- previous lpread.
--  
--  
-- * url : <http://www.csounds.com/manual/html/lpreson.html>
 
lpreson :: Arate -> Arate
lpreson a0sig = opcode "lpreson" args
  where args = [to a0sig]


-- | * opcode : lpslot
--  
--  
-- * syntax : 
--  
--  >   lpslot islot
--  
--  
-- * description : 
--  
--  Selects the slot to be use by further lp opcodes.
--  
--  
-- * url : <http://www.csounds.com/manual/html/lpslot.html>
 
lpslot :: Irate -> SignalOut
lpslot i0slot = outOpcode "lpslot" args
  where args = [to i0slot]