csound-expression-0.0: src/CsoundExpr/Opcodes/Sigmod/Sample.hs
-- | Sample Level Operators
module CsoundExpr.Opcodes.Sigmod.Sample
(denorm,
diffA,
diffK,
downsamp,
fold,
integA,
integK,
interp,
ntrpolA,
ntrpolI,
ntrpolK,
sampholdA,
sampholdK,
upsamp,
vaget,
vaset)
where
import CsoundExpr.Base.Types
import CsoundExpr.Base.MultiOut
import CsoundExpr.Base.SideEffect
import CsoundExpr.Base.UserDefined
-- | * opcode : denorm
--
--
-- * syntax :
--
-- > denorm a1[, a2[, a3[,... ]]]
--
--
-- * description :
--
-- Mixes low level (~1e-20 for floats, and ~1e-56 for doubles)
-- noise to a list of a-rate signals. Can be used before IIR filters
-- and reverbs to avoid denormalized numbers which may otherwise
-- result in significantly increased CPU usage.
--
--
-- * url : <http://www.csounds.com/manual/html/denorm.html>
denorm :: [Arate] -> SignalOut
denorm a0N = outOpcode "denorm" args
where args = map to a0N
-- | * opcode : diff
--
--
-- * syntax :
--
-- > ares diff asig [, iskip]
-- > kres diff ksig [, iskip]
--
--
-- * description :
--
-- Modify a signal by differentiation.
--
--
-- * url : <http://www.csounds.com/manual/html/diff.html>
diffA :: [Irate] -> Arate -> Arate
diffA i0init a1sig = opcode "diff" args
where args = [to a1sig] ++ map to i0init
-- | * opcode : diff
--
--
-- * syntax :
--
-- > ares diff asig [, iskip]
-- > kres diff ksig [, iskip]
--
--
-- * description :
--
-- Modify a signal by differentiation.
--
--
-- * url : <http://www.csounds.com/manual/html/diff.html>
diffK :: (K k0) => [Irate] -> k0 -> Krate
diffK i0init k1sig = opcode "diff" args
where args = [to k1sig] ++ map to i0init
-- | * opcode : downsamp
--
--
-- * syntax :
--
-- > kres downsamp asig [, iwlen]
--
--
-- * description :
--
-- Modify a signal by down-sampling.
--
--
-- * url : <http://www.csounds.com/manual/html/downsamp.html>
downsamp :: [Irate] -> Arate -> Krate
downsamp i0init a1sig = opcode "downsamp" args
where args = [to a1sig] ++ map to i0init
-- | * opcode : fold
--
--
-- * syntax :
--
-- > ares fold asig, kincr
--
--
-- * description :
--
-- Adds artificial foldover to an audio signal.
--
--
-- * url : <http://www.csounds.com/manual/html/fold.html>
fold :: (K k0) => Arate -> k0 -> Arate
fold a0sig k1incr = opcode "fold" args
where args = [to a0sig, to k1incr]
-- | * opcode : integ
--
--
-- * syntax :
--
-- > ares integ asig [, iskip]
-- > kres integ ksig [, iskip]
--
--
-- * description :
--
-- Modify a signal by integration.
--
--
-- * url : <http://www.csounds.com/manual/html/integ.html>
integA :: [Irate] -> Arate -> Arate
integA i0init a1sig = opcode "integ" args
where args = [to a1sig] ++ map to i0init
-- | * opcode : integ
--
--
-- * syntax :
--
-- > ares integ asig [, iskip]
-- > kres integ ksig [, iskip]
--
--
-- * description :
--
-- Modify a signal by integration.
--
--
-- * url : <http://www.csounds.com/manual/html/integ.html>
integK :: (K k0) => [Irate] -> k0 -> Krate
integK i0init k1sig = opcode "integ" args
where args = [to k1sig] ++ map to i0init
-- | * opcode : interp
--
--
-- * syntax :
--
-- > ares interp ksig [, iskip] [, imode]
--
--
-- * description :
--
-- Converts a control signal to an audio signal using linear
-- interpolation.
--
--
-- * url : <http://www.csounds.com/manual/html/interp.html>
interp :: (K k0) => [Irate] -> k0 -> Arate
interp i0init k1sig = opcode "interp" args
where args = [to k1sig] ++ map to i0init
-- | * opcode : ntrpol
--
--
-- * syntax :
--
-- > ares ntrpol asig1, asig2, kpoint [, imin] [, imax]
-- > ires ntrpol isig1, isig2, ipoint [, imin] [, imax]
-- > kres ntrpol ksig1, ksig2, kpoint [, imin] [, imax]
--
--
-- * description :
--
-- Calculates the weighted mean value (i.e. linear interpolation)
-- of two input signals
--
--
-- * url : <http://www.csounds.com/manual/html/ntrpol.html>
ntrpolA :: (K k0) => [Irate] -> Arate -> Arate -> k0 -> Arate
ntrpolA i0init a1sig1 a2sig2 k3point = opcode "ntrpol" args
where args = [to a1sig1, to a2sig2, to k3point] ++ map to i0init
-- | * opcode : ntrpol
--
--
-- * syntax :
--
-- > ares ntrpol asig1, asig2, kpoint [, imin] [, imax]
-- > ires ntrpol isig1, isig2, ipoint [, imin] [, imax]
-- > kres ntrpol ksig1, ksig2, kpoint [, imin] [, imax]
--
--
-- * description :
--
-- Calculates the weighted mean value (i.e. linear interpolation)
-- of two input signals
--
--
-- * url : <http://www.csounds.com/manual/html/ntrpol.html>
ntrpolI :: [Irate] -> Irate -> Irate -> Irate -> Irate
ntrpolI i0init i1sig1 i2sig2 i3point = opcode "ntrpol" args
where args = [to i1sig1, to i2sig2, to i3point] ++ map to i0init
-- | * opcode : ntrpol
--
--
-- * syntax :
--
-- > ares ntrpol asig1, asig2, kpoint [, imin] [, imax]
-- > ires ntrpol isig1, isig2, ipoint [, imin] [, imax]
-- > kres ntrpol ksig1, ksig2, kpoint [, imin] [, imax]
--
--
-- * description :
--
-- Calculates the weighted mean value (i.e. linear interpolation)
-- of two input signals
--
--
-- * url : <http://www.csounds.com/manual/html/ntrpol.html>
ntrpolK :: (K k0, K k1, K k2) => [Irate] -> k0 -> k1 -> k2 -> Krate
ntrpolK i0init k1sig1 k2sig2 k3point = opcode "ntrpol" args
where args = [to k1sig1, to k2sig2, to k3point] ++ map to i0init
-- | * opcode : samphold
--
--
-- * syntax :
--
-- > ares samphold asig, agate [, ival] [, ivstor]
-- > kres samphold ksig, kgate [, ival] [, ivstor]
--
--
-- * description :
--
-- Performs a sample-and-hold operation on its input.
--
--
-- * url : <http://www.csounds.com/manual/html/samphold.html>
sampholdA :: [Irate] -> Arate -> Arate -> Arate
sampholdA i0init a1sig a2gate = opcode "samphold" args
where args = [to a1sig, to a2gate] ++ map to i0init
-- | * opcode : samphold
--
--
-- * syntax :
--
-- > ares samphold asig, agate [, ival] [, ivstor]
-- > kres samphold ksig, kgate [, ival] [, ivstor]
--
--
-- * description :
--
-- Performs a sample-and-hold operation on its input.
--
--
-- * url : <http://www.csounds.com/manual/html/samphold.html>
sampholdK :: (K k0, K k1) => [Irate] -> k0 -> k1 -> Krate
sampholdK i0init k1sig k2gate = opcode "samphold" args
where args = [to k1sig, to k2gate] ++ map to i0init
-- | * opcode : upsamp
--
--
-- * syntax :
--
-- > ares upsamp ksig
--
--
-- * description :
--
-- Modify a signal by up-sampling.
--
--
-- * url : <http://www.csounds.com/manual/html/upsamp.html>
upsamp :: (K k0) => k0 -> Arate
upsamp k0sig = opcode "upsamp" args
where args = [to k0sig]
-- | * opcode : vaget
--
--
-- * syntax :
--
-- > kval vaget kndx, avar
--
--
-- * description :
--
-- Access values of the current buffer of an a-rate variable by
-- indexing. Useful for doing sample-by-sample manipulation at
-- k-rate without using setksmps 1.
--
--
-- * url : <http://www.csounds.com/manual/html/vaget.html>
vaget :: (K k0) => k0 -> Arate -> Krate
vaget k0ndx a1var = opcode "vaget" args
where args = [to k0ndx, to a1var]
-- | * opcode : vaset
--
--
-- * syntax :
--
-- > vaset kval, kndx, avar
--
--
-- * description :
--
-- Write values into the current buffer of an a-rate variable at
-- the given index. Useful for doing sample-by-sample manipulation
-- at k-rate without using setksmps 1.
--
--
-- * url : <http://www.csounds.com/manual/html/vaset.html>
vaset :: (K k0, K k1) => k0 -> k1 -> Arate -> SignalOut
vaset k0val k1ndx a2var = outOpcode "vaset" args
where args = [to k0val, to k1ndx, to a2var]