packages feed

csound-expression-opcodes 0.0.5.3 → 0.0.5.4

raw patch · 28 files changed

+14552/−10906 lines, 28 filesdep ~basedep ~csound-expression-dynamicdep ~csound-expression-typedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: base, csound-expression-dynamic, csound-expression-typed

API changes (from Hackage documentation)

- Csound.Typed.Opcode.OSC: oscListen :: D -> D -> D -> [Sig] -> SE Sig
- Csound.Typed.Opcode.PluginHosting: vstaudio :: D -> (Sig, Sig)
- Csound.Typed.Opcode.PluginHosting: vstaudiog :: D -> (Sig, Sig)
- Csound.Typed.Opcode.PluginHosting: vstbankload :: D -> D -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstedit :: D -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstinfo :: D -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstinit :: D -> SE D
- Csound.Typed.Opcode.PluginHosting: vstmidiout :: D -> Sig -> Sig -> Sig -> Sig -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstnote :: D -> Sig -> Sig -> Sig -> Sig -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstparamget :: D -> Sig -> Sig
- Csound.Typed.Opcode.PluginHosting: vstparamset :: D -> Sig -> Sig -> SE ()
- Csound.Typed.Opcode.PluginHosting: vstprogset :: D -> Sig -> SE ()
- Csound.Typed.Opcode.SignalGenerators: tabw :: Sig -> Sig -> Tab -> SE ()
- Csound.Typed.Opcode.SignalModifiers: mode :: Sig -> Sig -> Sig -> Sig
- Csound.Typed.Opcode.SpectralProcessing: pvslock :: Spec -> Sig -> Spec
+ Csound.Typed.Opcode.Deprecated: tableiw :: D -> D -> Tab -> SE ()
+ Csound.Typed.Opcode.InstrumentControl: cntCreate :: D
+ Csound.Typed.Opcode.InstrumentControl: cntCycles :: D -> Sig
+ Csound.Typed.Opcode.InstrumentControl: cntDelete :: D -> Sig
+ Csound.Typed.Opcode.InstrumentControl: cntDelete_i :: D -> D
+ Csound.Typed.Opcode.InstrumentControl: cntRead :: D -> Sig
+ Csound.Typed.Opcode.InstrumentControl: cntReset :: D -> SE ()
+ Csound.Typed.Opcode.InstrumentControl: cntState :: D -> (Sig, Sig, Sig)
+ Csound.Typed.Opcode.InstrumentControl: count :: D -> Sig
+ Csound.Typed.Opcode.InstrumentControl: count_i :: D -> D
+ Csound.Typed.Opcode.InstrumentControl: elapsedcycles :: Sig
+ Csound.Typed.Opcode.InstrumentControl: elapsedtime :: Sig
+ Csound.Typed.Opcode.InstrumentControl: eventcycles :: Sig
+ Csound.Typed.Opcode.InstrumentControl: eventtime :: Sig
+ Csound.Typed.Opcode.InstrumentControl: metro2 :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.InstrumentControl: metrobpm :: Sig -> Sig
+ Csound.Typed.Opcode.InstrumentControl: schedulek :: Sig -> Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.InstrumentControl: sequ :: D -> Sig
+ Csound.Typed.Opcode.InstrumentControl: turnoff2_i :: D -> D -> D -> SE ()
+ Csound.Typed.Opcode.InstrumentControl: turnoff3 :: Sig -> SE ()
+ Csound.Typed.Opcode.MathematicalOperations: cbrt :: D -> Sig
+ Csound.Typed.Opcode.MathematicalOperations: fmax :: D -> Sig
+ Csound.Typed.Opcode.MathematicalOperations: fmin :: D -> Sig
+ Csound.Typed.Opcode.MathematicalOperations: fmod :: D -> Sig
+ Csound.Typed.Opcode.MathematicalOperations: hypot :: D -> Sig
+ Csound.Typed.Opcode.MathematicalOperations: limit1 :: D -> Sig
+ Csound.Typed.Opcode.Miscellaneous: framebuffer :: Sig -> D -> Sig
+ Csound.Typed.Opcode.Miscellaneous: nchnls_hw :: (D, D)
+ Csound.Typed.Opcode.Miscellaneous: olabuffer :: Sig -> D -> Sig
+ Csound.Typed.Opcode.OSC: oscBundle :: Sig -> D -> D -> Str -> SE ()
+ Csound.Typed.Opcode.OSC: oscCount :: Sig
+ Csound.Typed.Opcode.OSC: oscInitM :: Str -> D -> D
+ Csound.Typed.Opcode.PitchConverters: ntof :: Str -> D
+ Csound.Typed.Opcode.RealtimeMIDI: ampmidicurve :: D -> D -> D -> Sig
+ Csound.Typed.Opcode.RealtimeMIDI: ctrlpreset :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.RealtimeMIDI: ctrlprint :: Sig -> SE ()
+ Csound.Typed.Opcode.RealtimeMIDI: ctrlprintpresets :: SE ()
+ Csound.Typed.Opcode.RealtimeMIDI: ctrlsave :: D -> D -> Sig
+ Csound.Typed.Opcode.RealtimeMIDI: ctrlselect :: Sig -> SE ()
+ Csound.Typed.Opcode.RealtimeMIDI: lastcycle :: Sig
+ Csound.Typed.Opcode.RealtimeMIDI: midiarp :: Sig -> (Sig, Sig)
+ Csound.Typed.Opcode.SerialIO: arduinoRead :: D -> D -> Sig
+ Csound.Typed.Opcode.SerialIO: arduinoReadF :: D -> D -> D -> D -> Sig
+ Csound.Typed.Opcode.SerialIO: arduinoStart :: Str -> D
+ Csound.Typed.Opcode.SerialIO: arduinoStop :: D -> SE ()
+ Csound.Typed.Opcode.SignalGenerators: bpfcos :: Sig -> Sig -> Sig -> [Sig] -> (Sig, Sig)
+ Csound.Typed.Opcode.SignalGenerators: ephasor :: Sig -> Sig -> (Sig, Sig)
+ Csound.Typed.Opcode.SignalGenerators: fluidInfo :: D -> Str
+ Csound.Typed.Opcode.SignalGenerators: gtadsr :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalGenerators: lfsr :: D -> D -> SE Sig
+ Csound.Typed.Opcode.SignalGenerators: lincos :: Sig -> Sig -> Sig -> D
+ Csound.Typed.Opcode.SignalGenerators: loscil3phs :: forall a. Tuple a => Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: loscilphs :: forall a. Tuple a => Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: rndseed :: D -> SE ()
+ Csound.Typed.Opcode.SignalGenerators: scale2 :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalGenerators: scanmap :: D -> Sig -> Sig -> (Sig, Sig)
+ Csound.Typed.Opcode.SignalGenerators: scansmap :: Sig -> Sig -> D -> Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.SignalGenerators: scanu2 :: D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()
+ Csound.Typed.Opcode.SignalGenerators: sterrain :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalGenerators: trigexpseg :: Sig -> D -> D -> D -> Sig
+ Csound.Typed.Opcode.SignalGenerators: triglinseg :: Sig -> D -> D -> D -> Sig
+ Csound.Typed.Opcode.SignalGenerators: trigphasor :: Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalGenerators: wterrain2 :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalIO: chngeta :: Str -> Sig
+ Csound.Typed.Opcode.SignalIO: chngeti :: Str -> D
+ Csound.Typed.Opcode.SignalIO: chngetk :: Str -> Sig
+ Csound.Typed.Opcode.SignalIO: chngets :: Str -> Str
+ Csound.Typed.Opcode.SignalIO: chnseta :: Sig -> SE ()
+ Csound.Typed.Opcode.SignalIO: chnseti :: D -> SE ()
+ Csound.Typed.Opcode.SignalIO: chnsetk :: Sig -> SE ()
+ Csound.Typed.Opcode.SignalIO: chnsets :: Str -> SE ()
+ Csound.Typed.Opcode.SignalIO: outall :: Sig -> SE ()
+ Csound.Typed.Opcode.SignalIO: println :: Str -> SE ()
+ Csound.Typed.Opcode.SignalIO: printsk :: Str -> SE ()
+ Csound.Typed.Opcode.SignalIO: websocket :: forall a. Tuple a => D -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: balance2 :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: bformdec2 :: D -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: bob :: Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: exciter :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: gtf :: Sig -> Sig -> D -> Sig
+ Csound.Typed.Opcode.SignalModifiers: lag :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: lagud :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: mvmfilter :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: skf :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: spf :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: svn :: Sig -> Sig -> Sig -> Sig -> (Sig, Sig, Sig, Sig)
+ Csound.Typed.Opcode.SignalModifiers: trighold :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalModifiers: vclpf :: Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: allpole :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: apoleparams :: Sig -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: lpcanal :: forall a. Tuple a => Sig -> Sig -> Sig -> D -> D -> a
+ Csound.Typed.Opcode.SpectralProcessing: lpcfilter :: Sig -> Sig -> Sig -> Sig -> D -> D -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: part2txt :: Str -> Spec -> SE ()
+ Csound.Typed.Opcode.SpectralProcessing: pvs2array :: Sig -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: pvsbandwidth :: Spec -> Sig
+ Csound.Typed.Opcode.SpectralProcessing: pvsfromarray :: Sig -> Spec
+ Csound.Typed.Opcode.SpectralProcessing: pvslpc :: Sig -> D -> D -> D -> Spec
+ Csound.Typed.Opcode.SpectralProcessing: resonbnk :: Sig -> Sig -> Sig
+ Csound.Typed.Opcode.Strings: strstrip :: Str -> Str
+ Csound.Typed.Opcode.TableControl: ftaudio :: Tab -> Str -> D -> Sig
+ Csound.Typed.Opcode.TableControl: ftload :: Str -> D -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftloadk :: Str -> Sig -> D -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftprint :: Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftsamplebank :: Str -> D -> D -> D -> D -> Sig
+ Csound.Typed.Opcode.TableControl: ftsave :: Str -> D -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftsavek :: Str -> Sig -> D -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftset :: Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.TableControl: ftslice :: Tab -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ftslicei :: Tab -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: ptablew :: Sig -> Sig -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: tablecopy :: Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.TableControl: tablefilter :: Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.TableControl: tablefilteri :: D -> D -> D -> D -> D
+ Csound.Typed.Opcode.TableControl: tablegpw :: Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: tableicopy :: D -> D -> SE ()
+ Csound.Typed.Opcode.TableControl: tableigpw :: Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: tableimix :: D -> D -> D -> D -> D -> D -> D -> D -> D -> SE ()
+ Csound.Typed.Opcode.TableControl: tablemix :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.TableControl: tablera :: Tab -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.TableControl: tablew :: Sig -> Sig -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: tablewa :: Tab -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.TableControl: tablewkt :: Sig -> Sig -> Tab -> SE ()
+ Csound.Typed.Opcode.TableControl: tabmorph :: Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig
+ Csound.Typed.Opcode.TableControl: tabmorpha :: Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig
+ Csound.Typed.Opcode.TableControl: tabmorphak :: Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig
+ Csound.Typed.Opcode.TableControl: tabmorphi :: Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig
+ Csound.Typed.Opcode.TableControl: tabplay :: Sig -> Sig -> Tab -> Sig -> SE ()
+ Csound.Typed.Opcode.TableControl: tabrec :: Sig -> Sig -> Sig -> Tab -> Sig -> SE ()
- Csound.Typed.Opcode.FLTK: flMouse :: Tuple a => SE a
+ Csound.Typed.Opcode.FLTK: flMouse :: forall a. Tuple a => SE a
- Csound.Typed.Opcode.InstrumentControl: cpumeter :: Tuple a => D -> a
+ Csound.Typed.Opcode.InstrumentControl: cpumeter :: forall a. Tuple a => D -> a
- Csound.Typed.Opcode.InstrumentControl: date :: Tuple a => a
+ Csound.Typed.Opcode.InstrumentControl: date :: forall a. Tuple a => a
- Csound.Typed.Opcode.InstrumentControl: pop :: Tuple a => a
+ Csound.Typed.Opcode.InstrumentControl: pop :: forall a. Tuple a => a
- Csound.Typed.Opcode.InstrumentControl: sensekey :: Tuple a => a
+ Csound.Typed.Opcode.InstrumentControl: sensekey :: forall a. Tuple a => a
- Csound.Typed.Opcode.InstrumentControl: subinstr :: Tuple a => D -> [D] -> a
+ Csound.Typed.Opcode.InstrumentControl: subinstr :: forall a. Tuple a => D -> [D] -> a
- Csound.Typed.Opcode.Network: strecv :: Str -> D -> Sig
+ Csound.Typed.Opcode.Network: strecv :: forall a. Tuple a => Str -> D -> a
- Csound.Typed.Opcode.OSC: oscRaw :: Tuple a => D -> a
+ Csound.Typed.Opcode.OSC: oscRaw :: forall a. Tuple a => D -> a
- Csound.Typed.Opcode.PluginHosting: dssiaudio :: Tuple a => D -> [Sig] -> a
+ Csound.Typed.Opcode.PluginHosting: dssiaudio :: forall a. Tuple a => D -> [Sig] -> a
- Csound.Typed.Opcode.SignalGenerators: bpf :: Sig -> Sig -> Sig -> [Sig] -> Sig
+ Csound.Typed.Opcode.SignalGenerators: bpf :: Sig -> Sig -> Sig -> [Sig] -> (Sig, Sig)
- Csound.Typed.Opcode.SignalGenerators: flooper :: Tuple a => Sig -> Sig -> D -> D -> D -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: flooper :: forall a. Tuple a => Sig -> Sig -> D -> D -> D -> Tab -> a
- Csound.Typed.Opcode.SignalGenerators: flooper2 :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: flooper2 :: forall a. Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> a
- Csound.Typed.Opcode.SignalGenerators: linlin :: Sig -> Sig -> Sig -> Sig -> Sig -> Sig
+ Csound.Typed.Opcode.SignalGenerators: linlin :: Sig -> Sig -> Sig -> Sig
- Csound.Typed.Opcode.SignalGenerators: loscil :: Tuple a => Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: loscil :: forall a. Tuple a => Sig -> Sig -> Tab -> a
- Csound.Typed.Opcode.SignalGenerators: loscil3 :: Tuple a => Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: loscil3 :: forall a. Tuple a => Sig -> Sig -> Tab -> a
- Csound.Typed.Opcode.SignalGenerators: loscilx :: Tuple a => Sig -> Sig -> Tab -> a
+ Csound.Typed.Opcode.SignalGenerators: loscilx :: forall a. Tuple a => Sig -> Sig -> Tab -> a
- Csound.Typed.Opcode.SignalGenerators: partikkel :: Tuple a => Sig -> Sig -> D -> Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> D -> D -> Sig -> D -> Sig -> D -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> a
+ Csound.Typed.Opcode.SignalGenerators: partikkel :: forall a. Tuple a => Sig -> Sig -> D -> Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> D -> D -> Sig -> D -> Sig -> D -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> a
- Csound.Typed.Opcode.SignalGenerators: partikkelsync :: Tuple a => D -> a
+ Csound.Typed.Opcode.SignalGenerators: partikkelsync :: forall a. Tuple a => D -> a
- Csound.Typed.Opcode.SignalGenerators: sndwarp :: Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a
+ Csound.Typed.Opcode.SignalGenerators: sndwarp :: forall a. Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a
- Csound.Typed.Opcode.SignalGenerators: sndwarpst :: Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a
+ Csound.Typed.Opcode.SignalGenerators: sndwarpst :: forall a. Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a
- Csound.Typed.Opcode.SignalGenerators: squinewave :: Tuple a => Sig -> Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalGenerators: squinewave :: forall a. Tuple a => Sig -> Sig -> Sig -> Sig -> a
- Csound.Typed.Opcode.SignalIO: chnparams :: Tuple a => Str -> a
+ Csound.Typed.Opcode.SignalIO: chnparams :: forall a. Tuple a => Str -> a
- Csound.Typed.Opcode.SignalIO: diskin :: Tuple a => Str -> a
+ Csound.Typed.Opcode.SignalIO: diskin :: forall a. Tuple a => Str -> a
- Csound.Typed.Opcode.SignalIO: diskin2 :: Tuple a => Str -> a
+ Csound.Typed.Opcode.SignalIO: diskin2 :: forall a. Tuple a => Str -> a
- Csound.Typed.Opcode.SignalIO: filevalid :: Str -> D
+ Csound.Typed.Opcode.SignalIO: filevalid :: Str -> Sig
- Csound.Typed.Opcode.SignalIO: hdf5read :: Tuple a => Str -> D -> a
+ Csound.Typed.Opcode.SignalIO: hdf5read :: forall a. Tuple a => Str -> D -> a
- Csound.Typed.Opcode.SignalIO: in32 :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: in32 :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalIO: inch :: Tuple a => [Sig] -> a
+ Csound.Typed.Opcode.SignalIO: inch :: forall a. Tuple a => [Sig] -> a
- Csound.Typed.Opcode.SignalIO: inh :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: inh :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalIO: ino :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: ino :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalIO: inx :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: inx :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalIO: monitor :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: monitor :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalIO: soundin :: Tuple a => Str -> a
+ Csound.Typed.Opcode.SignalIO: soundin :: forall a. Tuple a => Str -> a
- Csound.Typed.Opcode.SignalIO: xin :: Tuple a => a
+ Csound.Typed.Opcode.SignalIO: xin :: forall a. Tuple a => a
- Csound.Typed.Opcode.SignalModifiers: bformdec :: Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: bformdec :: forall a. Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: bformdec1 :: Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: bformdec1 :: forall a. Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: bformenc :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: bformenc :: forall a. Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: bformenc1 :: Tuple a => Sig -> Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: bformenc1 :: forall a. Tuple a => Sig -> Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: convolve :: Tuple a => Sig -> Str -> a
+ Csound.Typed.Opcode.SignalModifiers: convolve :: forall a. Tuple a => Sig -> Str -> a
- Csound.Typed.Opcode.SignalModifiers: ftconv :: Tuple a => Sig -> D -> D -> a
+ Csound.Typed.Opcode.SignalModifiers: ftconv :: forall a. Tuple a => Sig -> D -> D -> a
- Csound.Typed.Opcode.SignalModifiers: hrtfearly :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> a
+ Csound.Typed.Opcode.SignalModifiers: hrtfearly :: forall a. Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> a
- Csound.Typed.Opcode.SignalModifiers: pconvolve :: Tuple a => Sig -> Str -> a
+ Csound.Typed.Opcode.SignalModifiers: pconvolve :: forall a. Tuple a => Sig -> Str -> a
- Csound.Typed.Opcode.SignalModifiers: platerev :: Tuple a => D -> D -> Sig -> D -> D -> D -> D -> [Sig] -> a
+ Csound.Typed.Opcode.SignalModifiers: platerev :: forall a. Tuple a => D -> D -> Sig -> D -> D -> D -> D -> [Sig] -> a
- Csound.Typed.Opcode.SignalModifiers: vbap :: Tuple a => Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap :: forall a. Tuple a => Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: vbap16 :: Tuple a => Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap16 :: forall a. Tuple a => Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: vbap16move :: Tuple a => Sig -> D -> D -> D -> [D] -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap16move :: forall a. Tuple a => Sig -> D -> D -> D -> [D] -> a
- Csound.Typed.Opcode.SignalModifiers: vbap4move :: Tuple a => Sig -> D -> D -> D -> [D] -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap4move :: forall a. Tuple a => Sig -> D -> D -> D -> [D] -> a
- Csound.Typed.Opcode.SignalModifiers: vbap8 :: Tuple a => Sig -> Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap8 :: forall a. Tuple a => Sig -> Sig -> a
- Csound.Typed.Opcode.SignalModifiers: vbap8move :: Tuple a => Sig -> D -> D -> D -> [D] -> a
+ Csound.Typed.Opcode.SignalModifiers: vbap8move :: forall a. Tuple a => Sig -> D -> D -> D -> [D] -> a
- Csound.Typed.Opcode.SignalModifiers: vbapg :: Tuple a => Sig -> a
+ Csound.Typed.Opcode.SignalModifiers: vbapg :: forall a. Tuple a => Sig -> a
- Csound.Typed.Opcode.SignalModifiers: vbapgmove :: Tuple a => D -> D -> D -> D -> a
+ Csound.Typed.Opcode.SignalModifiers: vbapgmove :: forall a. Tuple a => D -> D -> D -> D -> a
- Csound.Typed.Opcode.SignalModifiers: vbapmove :: Tuple a => Sig -> D -> D -> D -> [D] -> a
+ Csound.Typed.Opcode.SignalModifiers: vbapmove :: forall a. Tuple a => Sig -> D -> D -> D -> [D] -> a
- Csound.Typed.Opcode.SpectralProcessing: filescal :: Tuple a => Sig -> Sig -> Sig -> Str -> Sig -> a
+ Csound.Typed.Opcode.SpectralProcessing: filescal :: forall a. Tuple a => Sig -> Sig -> Sig -> Str -> Sig -> a
- Csound.Typed.Opcode.SpectralProcessing: pvstrace :: Spec -> Sig -> Spec
+ Csound.Typed.Opcode.SpectralProcessing: pvstrace :: forall a. Tuple a => Spec -> Sig -> a
- Csound.Typed.Opcode.ZakPatchSystem: zacl :: Sig -> Sig -> SE ()
+ Csound.Typed.Opcode.ZakPatchSystem: zacl :: Sig -> SE ()

Files

csound-expression-opcodes.cabal view
@@ -1,5 +1,5 @@ Name:          csound-expression-opcodes-Version:       0.0.5.3+Version:       0.0.5.4 Cabal-Version: 1.12 License:       BSD3 License-file:  LICENSE@@ -16,12 +16,18 @@ Library   Ghc-Options:    -Wall   Build-Depends:-        base >= 4, base < 5, transformers, csound-expression-typed >= 0.2.5, csound-expression-dynamic >= 0.3.9.1+    base >= 4.10, base < 5,+    transformers,+    csound-expression-typed >= 0.2.9,+    csound-expression-dynamic >= 0.4.0.0   Hs-Source-Dirs:      src/   Default-language: Haskell2010-  default-extensions:-    OverloadedStrings+  Default-Extensions:+    OverloadedStrings,+    RankNTypes,+    ScopedTypeVariables   Exposed-Modules:+     Csound.Typed.Opcode     Csound.Typed.Opcode.SignalGenerators     Csound.Typed.Opcode.SignalIO@@ -47,4 +53,5 @@     Csound.Typed.Opcode.MixerOpcodes     Csound.Typed.Opcode.AbletonLinkOpcodes     Csound.Typed.Opcode.ImageProcessingOpcodes+    Csound.Typed.Opcode.Deprecated     Csound.Typed.Opcode.Miscellaneous
src/Csound/Typed/Opcode.hs view
@@ -22,6 +22,7 @@     module Csound.Typed.Opcode.MixerOpcodes,     module Csound.Typed.Opcode.AbletonLinkOpcodes,     module Csound.Typed.Opcode.ImageProcessingOpcodes,+    module Csound.Typed.Opcode.Deprecated,     module Csound.Typed.Opcode.Miscellaneous) where  import Csound.Typed.Opcode.SignalGenerators@@ -48,4 +49,5 @@ import Csound.Typed.Opcode.MixerOpcodes import Csound.Typed.Opcode.AbletonLinkOpcodes import Csound.Typed.Opcode.ImageProcessingOpcodes+import Csound.Typed.Opcode.Deprecated import Csound.Typed.Opcode.Miscellaneous
src/Csound/Typed/Opcode/AbletonLinkOpcodes.hs view
@@ -5,6 +5,7 @@     link_beat_force, link_beat_get, link_beat_request, link_create, ableton_link_enable, link_is_enabled, link_metro, link_peers, link_tempo_get, link_tempo_set) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -17,10 +18,12 @@ -- -- >  link_beat_force   i_peer, k_beat [, k_at_time_seconds  [, k_quantum ]]  ----- csound doc: <http://csound.com/docs/manual/link_beat_force.html>+-- csound doc: <https://csound.com/docs/manual/link_beat_force.html> link_beat_force ::  D -> Sig -> SE ()-link_beat_force b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "link_beat_force" [(Xr,[Ir,Kr,Kr,Kr])] [a1,a2]+link_beat_force b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "link_beat_force" [(Xr,[Ir,Kr,Kr,Kr])] [a1,a2]  -- |  -- Returns the beat, phase with respect to the local quantum, and current time for the session.@@ -29,20 +32,24 @@ -- -- > k_beat_number, k_phase, k_current_time_seconds  link_beat_get  i_peer [, k_quantum] ----- csound doc: <http://csound.com/docs/manual/link_beat_get.html>+-- csound doc: <https://csound.com/docs/manual/link_beat_get.html> link_beat_get ::  D -> (Sig,Sig,Sig)-link_beat_get b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "link_beat_get" ([Kr,Kr,Kr],[Ir,Kr]) [a1]+link_beat_get b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "link_beat_get" ([Kr,Kr,Kr],[Ir,Kr]) [a1]  -- |  -- Requests the global network Ableton Link session to adopt a specific beat number and time. -- -- >  link_beat_request   i_peer, k_beat [, k_at_time_seconds  [, k_quantum ]]  ----- csound doc: <http://csound.com/docs/manual/link_beat_request.html>+-- csound doc: <https://csound.com/docs/manual/link_beat_request.html> link_beat_request ::  D -> Sig -> SE ()-link_beat_request b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "link_beat_request" [(Xr,[Ir,Kr,Kr,Kr])] [a1,a2]+link_beat_request b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "link_beat_request" [(Xr,[Ir,Kr,Kr,Kr])] [a1,a2]  -- |  -- Creates a peer in an Ableton Link network session.@@ -51,10 +58,12 @@ -- -- > i_peer  link_create  [i_bpm] ----- csound doc: <http://csound.com/docs/manual/link_create.html>+-- csound doc: <https://csound.com/docs/manual/link_create.html> link_create ::   D-link_create  = D $ return $ f -    where f  = opcs "link_create" [(Ir,[Ir])] []+link_create  =+  D $ return $ f +  where+    f  = opcs "link_create" [(Ir,[Ir])] []  -- |  -- Enable or disable synchronization with the Ableton Link session.@@ -63,10 +72,12 @@ -- -- >   ableton_link_enable  i_peer [, k_enable] ----- csound doc: <http://csound.com/docs/manual/link_enable.html>+-- csound doc: <https://csound.com/docs/manual/link_enable.html> ableton_link_enable ::  D -> SE ()-ableton_link_enable b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "ableton_link_enable" [(Xr,[Ir,Kr])] [a1]+ableton_link_enable b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "ableton_link_enable" [(Xr,[Ir,Kr])] [a1]  -- |  -- Returns whether or not this peer is synchronized with the global network Ableton Link session.@@ -75,10 +86,12 @@ -- -- > k_is_enabled  link_is_enabled  i_peer ----- csound doc: <http://csound.com/docs/manual/link_is_enabled.html>+-- csound doc: <https://csound.com/docs/manual/link_is_enabled.html> link_is_enabled ::  D -> Sig-link_is_enabled b1 = Sig $ f <$> unD b1-    where f a1 = opcs "link_is_enabled" [(Kr,[Ir])] [a1]+link_is_enabled b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "link_is_enabled" [(Kr,[Ir])] [a1]  -- |  -- Returns a trigger that is 1 on the beat and 0 otherwise along with beat, phase, and time for this session of Ableton Link.@@ -87,10 +100,12 @@ -- -- > k_trigger, k_beat, k_phase, k_current_time_seconds  link_metro  i_peer [, k_quantum] ----- csound doc: <http://csound.com/docs/manual/link_metro.html>+-- csound doc: <https://csound.com/docs/manual/link_metro.html> link_metro ::  D -> (Sig,Sig,Sig,Sig)-link_metro b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "link_metro" ([Kr,Kr,Kr,Kr],[Ir,Kr]) [a1]+link_metro b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "link_metro" ([Kr,Kr,Kr,Kr],[Ir,Kr]) [a1]  -- |  -- Returns the number of peers in the session.@@ -99,20 +114,24 @@ -- -- > k_count  link_peers  i_peer ----- csound doc: <http://csound.com/docs/manual/link_peers.html>+-- csound doc: <https://csound.com/docs/manual/link_peers.html> link_peers ::  D -> Sig-link_peers b1 = Sig $ f <$> unD b1-    where f a1 = opcs "link_peers" [(Kr,[Ir])] [a1]+link_peers b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "link_peers" [(Kr,[Ir])] [a1]  -- |  -- Returns the current tempo of the global network Ableton Link session. -- -- > k_bpm  link_tempo_get  i_peer ----- csound doc: <http://csound.com/docs/manual/link_tempo_get.html>+-- csound doc: <https://csound.com/docs/manual/link_tempo_get.html> link_tempo_get ::  D -> Sig-link_tempo_get b1 = Sig $ f <$> unD b1-    where f a1 = opcs "link_tempo_get" [(Kr,[Ir])] [a1]+link_tempo_get b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "link_tempo_get" [(Kr,[Ir])] [a1]  -- |  -- Sets the tempo.@@ -121,7 +140,9 @@ -- -- >  link_tempo_set  i_peer, k_bpm [, k_at_time_seconds] ----- csound doc: <http://csound.com/docs/manual/link_tempo_set.html>+-- csound doc: <https://csound.com/docs/manual/link_tempo_set.html> link_tempo_set ::  D -> Sig -> SE ()-link_tempo_set b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "link_tempo_set" [(Xr,[Ir,Kr,Kr])] [a1,a2]+link_tempo_set b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "link_tempo_set" [(Xr,[Ir,Kr,Kr])] [a1,a2]
+ src/Csound/Typed/Opcode/Deprecated.hs view
@@ -0,0 +1,24 @@+module Csound.Typed.Opcode.Deprecated (+    +    +    +    tableiw) where++import Control.Monad.Trans.Class+import Control.Monad+import Csound.Dynamic+import Csound.Typed++-- ++-- | ++--+-- >  tableiw  isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode]+--+-- csound doc: <https://csound.com/docs/manual/tableiw.html>+tableiw ::  D -> D -> Tab -> SE ()+tableiw b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tableiw" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]
src/Csound/Typed/Opcode/FLTK.hs view
@@ -13,7 +13,9 @@     -- * Appearance.     flColor, flColor2, flHide, flLabel, flSetAlign, flSetBox, flSetColor, flSetColor2, flSetFont, flSetPosition, flSetSize, flSetText, flSetTextColor, flSetTextSize, flSetTextType, flShow) where +import Data.Proxy import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -24,20 +26,24 @@ -- -- >  FLgroup  "label", iwidth, iheight, ix, iy [, iborder] [, image] ----- csound doc: <http://csound.com/docs/manual/FLgroup.html>+-- csound doc: <https://csound.com/docs/manual/FLgroup.html> flGroup ::  Str -> D -> D -> D -> D -> SE ()-flGroup b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "FLgroup" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+flGroup b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "FLgroup" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Marks the end of a group of FLTK child widgets. -- -- >  FLgroupEnd  ----- csound doc: <http://csound.com/docs/manual/FLgroupEnd.html>+-- csound doc: <https://csound.com/docs/manual/FLgroupEnd.html> flGroupEnd ::   SE ()-flGroupEnd  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLgroupEnd" [(Xr,[])] []+flGroupEnd  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLgroupEnd" [(Xr,[])] []  -- |  -- Provides the functionality of compressing and aligning FLTK widgets.@@ -46,46 +52,48 @@ -- -- >  FLpack  iwidth, iheight, ix, iy, itype, ispace, iborder ----- csound doc: <http://csound.com/docs/manual/FLpack.html>+-- csound doc: <https://csound.com/docs/manual/FLpack.html> flPack ::  D -> D -> D -> D -> D -> D -> D -> SE ()-flPack b1 b2 b3 b4 b5 b6 b7 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "FLpack" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                               ,a2-                                                                               ,a3-                                                                               ,a4-                                                                               ,a5-                                                                               ,a6-                                                                               ,a7]+flPack b1 b2 b3 b4 b5 b6 b7 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcsDep_ "FLpack" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]  -- |  -- Marks the end of a group of compressed or aligned FLTK widgets. -- -- >  FLpackEnd  ----- csound doc: <http://csound.com/docs/manual/FLpackEnd.html>+-- csound doc: <https://csound.com/docs/manual/FLpackEnd.html> flPackEnd ::   SE ()-flPackEnd  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLpackEnd" [(Xr,[])] []+flPackEnd  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLpackEnd" [(Xr,[])] []  -- |  -- Creates a window that contains FLTK widgets. -- -- >  FLpanel  "label", iwidth, iheight [, ix] [, iy] [, iborder] [, ikbdcapture] [, iclose] ----- csound doc: <http://csound.com/docs/manual/FLpanel.html>+-- csound doc: <https://csound.com/docs/manual/FLpanel.html> flPanel ::  Str -> D -> D -> SE ()-flPanel b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLpanel" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+flPanel b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLpanel" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Marks the end of a group of FLTK widgets contained inside of a window (panel). -- -- >  FLpanelEnd  ----- csound doc: <http://csound.com/docs/manual/FLpanelEnd.html>+-- csound doc: <https://csound.com/docs/manual/FLpanelEnd.html> flPanelEnd ::   SE ()-flPanelEnd  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLpanelEnd" [(Xr,[])] []+flPanelEnd  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLpanelEnd" [(Xr,[])] []  -- |  -- A FLTK opcode that adds scroll bars to an area.@@ -94,20 +102,24 @@ -- -- >  FLscroll  iwidth, iheight [, ix] [, iy] ----- csound doc: <http://csound.com/docs/manual/FLscroll.html>+-- csound doc: <https://csound.com/docs/manual/FLscroll.html> flScroll ::  D -> D -> SE ()-flScroll b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLscroll" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2]+flScroll b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLscroll" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- A FLTK opcode that marks the end of an area with scrollbars. -- -- >  FLscrollEnd  ----- csound doc: <http://csound.com/docs/manual/FLscrollEnd.html>+-- csound doc: <https://csound.com/docs/manual/FLscrollEnd.html> flScrollEnd ::   SE ()-flScrollEnd  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLscrollEnd" [(Xr,[])] []+flScrollEnd  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLscrollEnd" [(Xr,[])] []  -- |  -- Creates a tabbed FLTK interface.@@ -116,20 +128,24 @@ -- -- >  FLtabs  iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLtabs.html>+-- csound doc: <https://csound.com/docs/manual/FLtabs.html> flTabs ::  D -> D -> D -> D -> SE ()-flTabs b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLtabs" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flTabs b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLtabs" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Marks the end of a tabbed FLTK interface. -- -- >  FLtabsEnd  ----- csound doc: <http://csound.com/docs/manual/FLtabsEnd.html>+-- csound doc: <https://csound.com/docs/manual/FLtabsEnd.html> flTabsEnd ::   SE ()-flTabsEnd  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLtabsEnd" [(Xr,[])] []+flTabsEnd  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLtabsEnd" [(Xr,[])] []  -- Valuators. @@ -141,11 +157,13 @@ -- > kout, ihandle  FLcount  "label", imin, imax, istep1, istep2, itype, \ -- >           iwidth, iheight, ix, iy, iopcode [, kp1] [, kp2] [, kp3] [...] [, kpN] ----- csound doc: <http://csound.com/docs/manual/FLcount.html>+-- csound doc: <https://csound.com/docs/manual/FLcount.html> flCount ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flCount b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcs "FLcount" ([Kr,Ir]-                                                                 ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]+flCount b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9 <*> (lift . unD) b10 <*> (lift . unD) b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcsDep 2 "FLcount" ([Kr,Ir]+                                                                ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]  -- |  -- A FLTK opcode that acts like a joystick.@@ -155,11 +173,13 @@ -- > koutx, kouty, ihandlex, ihandley  FLjoy  "label", iminx, imaxx, iminy, \ -- >           imaxy, iexpx, iexpy, idispx, idispy, iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLjoy.html>+-- csound doc: <https://csound.com/docs/manual/FLjoy.html> flJoy ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,Sig,D,D)-flJoy b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unD b12 <*> unD b13-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = mopcs "FLjoy" ([Kr,Kr,Ir,Ir]-                                                                       ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13]+flJoy b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9 <*> (lift . unD) b10 <*> (lift . unD) b11 <*> (lift . unD) b12 <*> (lift . unD) b13+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = mopcsDep 4 "FLjoy" ([Kr,Kr,Ir,Ir]+                                                                      ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13]  -- |  -- A FLTK widget opcode that creates a knob.@@ -167,11 +187,20 @@ -- > kout, ihandle  FLknob  "label", imin, imax, iexp, itype, idisp, iwidth, \ -- >           ix, iy [, icursorsize] ----- csound doc: <http://csound.com/docs/manual/FLknob.html>+-- csound doc: <https://csound.com/docs/manual/FLknob.html> flKnob ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flKnob b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLknob" ([Kr,Ir]-                                                        ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9]+flKnob b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcsDep 2 "FLknob" ([Kr,Ir],[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                                 ,a2+                                                                                                 ,a3+                                                                                                 ,a4+                                                                                                 ,a5+                                                                                                 ,a6+                                                                                                 ,a7+                                                                                                 ,a8+                                                                                                 ,a9]  -- |  -- A FLTK widget that creates a transversal knob.@@ -181,11 +210,13 @@ -- > kout, ihandle  FLroller  "label", imin, imax, istep, iexp, itype, idisp, \ -- >           iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLroller.html>+-- csound doc: <https://csound.com/docs/manual/FLroller.html> flRoller ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flRoller b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unD b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcs "FLroller" ([Kr,Ir]-                                                                  ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]+flRoller b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9 <*> (lift . unD) b10 <*> (lift . unD) b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = mopcsDep 2 "FLroller" ([Kr,Ir]+                                                                 ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]  -- |  -- Puts a slider into the corresponding FLTK container.@@ -195,11 +226,13 @@ -- > kout, ihandle  FLslider  "label", imin, imax, iexp, itype, idisp, iwidth, \ -- >           iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLslider.html>+-- csound doc: <https://csound.com/docs/manual/FLslider.html> flSlider ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flSlider b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "FLslider" ([Kr,Ir]-                                                              ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]+flSlider b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9 <*> (lift . unD) b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcsDep 2 "FLslider" ([Kr,Ir]+                                                             ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]  -- |  -- A FLTK widget opcode that creates a textbox.@@ -209,18 +242,20 @@ -- > kout, ihandle  FLtext  "label", imin, imax, istep, itype, iwidth, \ -- >           iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLtext.html>+-- csound doc: <https://csound.com/docs/manual/FLtext.html> flText ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flText b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLtext" ([Kr,Ir],[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                               ,a2-                                                                                               ,a3-                                                                                               ,a4-                                                                                               ,a5-                                                                                               ,a6-                                                                                               ,a7-                                                                                               ,a8-                                                                                               ,a9]+flText b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcsDep 2 "FLtext" ([Kr,Ir],[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                              ,a2+                                                                                              ,a3+                                                                                              ,a4+                                                                                              ,a5+                                                                                              ,a6+                                                                                              ,a7+                                                                                              ,a8+                                                                                              ,a9]  -- Other. @@ -230,11 +265,13 @@ -- > ihandle  FLbox  "label", itype, ifont, isize, iwidth, iheight, ix, iy [, image] -- > ihandle  FLbox  istr, itype, ifont, isize, iwidth, iheight, ix, iy [, image] ----- csound doc: <http://csound.com/docs/manual/FLbox.html>+-- csound doc: <https://csound.com/docs/manual/FLbox.html> flBox ::  Str -> D -> D -> D -> D -> D -> D -> D -> SE D-flBox b1 b2 b3 b4 b5 b6 b7 b8 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "FLbox" [(Ir,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])-                                                   ,(Ir,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8]+flBox b1 b2 b3 b4 b5 b6 b7 b8 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcsDep "FLbox" [(Ir,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])+                                                ,(Ir,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8]  -- |  -- A FLTK widget opcode that creates a bank of buttons.@@ -242,11 +279,13 @@ -- > kout, ihandle  FLbutBank  itype, inumx, inumy, iwidth, iheight, ix, iy, \ -- >           iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN] ----- csound doc: <http://csound.com/docs/manual/FLbutBank.html>+-- csound doc: <https://csound.com/docs/manual/FLbutBank.html> flButBank ::  D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flButBank b1 b2 b3 b4 b5 b6 b7 b8 = dirtyTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "FLbutBank" ([Kr,Ir]-                                                        ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8]+flButBank b1 b2 b3 b4 b5 b6 b7 b8 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcsDep 2 "FLbutBank" ([Kr,Ir]+                                                       ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8]  -- |  -- A FLTK widget opcode that creates a button.@@ -254,11 +293,13 @@ -- > kout, ihandle  FLbutton  "label", ion, ioff, itype, iwidth, iheight, ix, \ -- >           iy, iopcode [, kp1] [, kp2] [, kp3] [, kp4] [, kp5] [....] [, kpN] ----- csound doc: <http://csound.com/docs/manual/FLbutton.html>+-- csound doc: <https://csound.com/docs/manual/FLbutton.html> flButton ::  Str -> D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,D)-flButton b1 b2 b3 b4 b5 b6 b7 b8 b9 = dirtyTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "FLbutton" ([Kr,Ir]-                                                          ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9]+flButton b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcsDep 2 "FLbutton" ([Kr,Ir]+                                                         ,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir] ++ (repeat Kr)) [a1,a2,a3,a4,a5,a6,a7,a8,a9]  -- |  -- A FLTK widget opcode that creates a button that will close the panel@@ -266,10 +307,12 @@ -- -- > ihandle  FLcloseButton  "label", iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLcloseButton.html>+-- csound doc: <https://csound.com/docs/manual/FLcloseButton.html> flCloseButton ::  Str -> D -> D -> D -> D -> SE D-flCloseButton b1 b2 b3 b4 b5 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "FLcloseButton" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+flCloseButton b1 b2 b3 b4 b5 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep "FLcloseButton" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- A FLTK widget opcode that creates a button that executes a command.@@ -280,10 +323,12 @@ -- -- > ihandle  FLexecButton  "command", iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLexecButton.html>+-- csound doc: <https://csound.com/docs/manual/FLexecButton.html> flExecButton ::  Str -> D -> D -> D -> D -> SE D-flExecButton b1 b2 b3 b4 b5 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "FLexecButton" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+flExecButton b1 b2 b3 b4 b5 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep "FLexecButton" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Retrieves a previously stored FLTK snapshot.@@ -292,10 +337,12 @@ -- -- > inumsnap  FLgetsnap  index [, igroup] ----- csound doc: <http://csound.com/docs/manual/FLgetsnap.html>+-- csound doc: <https://csound.com/docs/manual/FLgetsnap.html> flGetsnap ::  D -> SE D-flGetsnap b1 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "FLgetsnap" [(Ir,[Ir,Ir])] [a1]+flGetsnap b1 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep "FLgetsnap" [(Ir,[Ir,Ir])] [a1]  -- |  -- Displays a box with a grid useful for visualizing two-dimensional Hyper Vectorial Synthesis.@@ -304,10 +351,12 @@ -- -- > ihandle  FLhvsBox  inumlinesX, inumlinesY, iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLhvsBox.html>+-- csound doc: <https://csound.com/docs/manual/FLhvsBox.html> flHvsBox ::  D -> D -> D -> D -> D -> D -> SE D-flHvsBox b1 b2 b3 b4 b5 b6 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "FLhvsBox" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]+flHvsBox b1 b2 b3 b4 b5 b6 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep "FLhvsBox" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]  -- |  -- Sets the cursor position of a previously-declared FLhvsBox widget.@@ -316,10 +365,12 @@ -- -- >  FLhvsBoxSetValue  kx, ky, ihandle ----- csound doc: <http://csound.com/docs/manual/FLhvsBoxSetValue.html>+-- csound doc: <https://csound.com/docs/manual/FLhvsBoxSetValue.html> flHvsBoxSetValue ::  Sig -> Sig -> D -> SE ()-flHvsBoxSetValue b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLhvsBoxSetValue" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]+flHvsBoxSetValue b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLhvsBoxSetValue" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]  -- |  -- Reports keys pressed (on alphanumeric keyboard) when an FLTK panel has focus.@@ -328,10 +379,12 @@ -- -- > kascii  FLkeyIn  [ifn] ----- csound doc: <http://csound.com/docs/manual/FLkeyIn.html>+-- csound doc: <https://csound.com/docs/manual/FLkeyIn.html> flKeyIn ::   SE Sig-flKeyIn  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "FLkeyIn" [(Kr,[Ir])] []+flKeyIn  =+  fmap ( Sig . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "FLkeyIn" [(Kr,[Ir])] []  -- |  -- Loads all snapshots into the memory bank of the current orchestra.@@ -340,10 +393,12 @@ -- -- >  FLloadsnap  "filename" [, igroup] ----- csound doc: <http://csound.com/docs/manual/FLloadsnap.html>+-- csound doc: <https://csound.com/docs/manual/FLloadsnap.html> flLoadsnap ::  Str -> SE ()-flLoadsnap b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "FLloadsnap" [(Xr,[Sr,Ir])] [a1]+flLoadsnap b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "FLloadsnap" [(Xr,[Sr,Ir])] [a1]  -- |  -- Returns the mouse position and the state of the three mouse buttons.@@ -352,10 +407,12 @@ -- -- > kx, ky, kb1, kb2, kb3  FLmouse  [imode] ----- csound doc: <http://csound.com/docs/manual/FLmouse.html>-flMouse :: Tuple a =>  SE a-flMouse  = dirtyTuple $ return $ f -    where f  = mopcs "FLmouse" ([Kr,Kr,Kr,Kr,Kr],[Ir]) []+-- csound doc: <https://csound.com/docs/manual/FLmouse.html>+flMouse :: forall a . Tuple a =>  SE a+flMouse  =+  fmap (toTuple . pure) $ SE $ join $ return $ f +  where+    f  = mopcsDep (tupleArity (Proxy :: Proxy a)) "FLmouse" ([Kr,Kr,Kr,Kr,Kr],[Ir]) []  -- |  -- A FLTK opcode that prints a k-rate value at specified intervals.@@ -364,10 +421,12 @@ -- -- >  FLprintk  itime, kval, idisp ----- csound doc: <http://csound.com/docs/manual/FLprintk.html>+-- csound doc: <https://csound.com/docs/manual/FLprintk.html> flPrintk ::  D -> Sig -> D -> SE ()-flPrintk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLprintk" [(Xr,[Ir,Kr,Ir])] [a1,a2,a3]+flPrintk b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLprintk" [(Xr,[Ir,Kr,Ir])] [a1,a2,a3]  -- |  -- A FLTK opcode that prints a new value every time a control-rate variable changes.@@ -376,20 +435,24 @@ -- -- >  FLprintk2  kval, idisp ----- csound doc: <http://csound.com/docs/manual/FLprintk2.html>+-- csound doc: <https://csound.com/docs/manual/FLprintk2.html> flPrintk2 ::  Sig -> D -> SE ()-flPrintk2 b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "FLprintk2" [(Xr,[Kr,Ir])] [a1,a2]+flPrintk2 b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLprintk2" [(Xr,[Kr,Ir])] [a1,a2]  -- |  -- Starts the FLTK widget thread. -- -- >  FLrun  ----- csound doc: <http://csound.com/docs/manual/FLrun.html>+-- csound doc: <https://csound.com/docs/manual/FLrun.html> flRun ::   SE ()-flRun  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLrun" [(Xr,[])] []+flRun  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLrun" [(Xr,[])] []  -- |  -- Saves all snapshots currently created into a file.@@ -398,10 +461,12 @@ -- -- >  FLsavesnap  "filename" [, igroup] ----- csound doc: <http://csound.com/docs/manual/FLsavesnap.html>+-- csound doc: <https://csound.com/docs/manual/FLsavesnap.html> flSavesnap ::  Str -> SE ()-flSavesnap b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "FLsavesnap" [(Xr,[Sr,Ir])] [a1]+flSavesnap b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "FLsavesnap" [(Xr,[Sr,Ir])] [a1]  -- |  -- Stores the current status of all FLTK valuators into a snapshot location.@@ -410,10 +475,12 @@ -- -- > inumsnap, inumval  FLsetsnap  index [, ifn, igroup] ----- csound doc: <http://csound.com/docs/manual/FLsetsnap.html>+-- csound doc: <https://csound.com/docs/manual/FLsetsnap.html> flSetsnap ::  D -> SE (D,D)-flSetsnap b1 = dirtyTuple $ f <$> unD b1-    where f a1 = mopcs "FLsetsnap" ([Ir,Ir],[Ir,Ir,Ir]) [a1]+flSetsnap b1 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = mopcsDep 2 "FLsetsnap" ([Ir,Ir],[Ir,Ir,Ir]) [a1]  -- |  -- Determines the snapshot group for FL valuators.@@ -422,10 +489,12 @@ -- -- >  FLsetSnapGroup  igroup ----- csound doc: <http://csound.com/docs/manual/FLsetSnapGroup.html>+-- csound doc: <https://csound.com/docs/manual/FLsetSnapGroup.html> flSetSnapGroup ::  D -> SE ()-flSetSnapGroup b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "FLsetSnapGroup" [(Xr,[Ir])] [a1]+flSetSnapGroup b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "FLsetSnapGroup" [(Xr,[Ir])] [a1]  -- |  -- Sets the value of a FLTK valuator at control-rate.@@ -434,10 +503,12 @@ -- -- >  FLsetVal  ktrig, kvalue, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetVal.html>+-- csound doc: <https://csound.com/docs/manual/FLsetVal.html> flSetVal ::  Sig -> Sig -> D -> SE ()-flSetVal b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLsetVal" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]+flSetVal b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLsetVal" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]  -- |  -- Sets the value of a FLTK valuator to a number provided by the user.@@ -446,10 +517,12 @@ -- -- >  FLsetVal_i  ivalue, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetVal_i.html>+-- csound doc: <https://csound.com/docs/manual/FLsetVal_i.html> flSetVal_i ::  D -> D -> SE ()-flSetVal_i b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetVal_i" [(Xr,[Ir,Ir])] [a1,a2]+flSetVal_i b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetVal_i" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- A FLTK widget containing a bank of horizontal sliders.@@ -459,10 +532,12 @@ -- >  FLslidBnk  "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ -- >           [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable] ----- csound doc: <http://csound.com/docs/manual/FLslidBnk.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnk.html> flSlidBnk ::  Str -> D -> SE ()-flSlidBnk b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "FLslidBnk" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]+flSlidBnk b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLslidBnk" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- A FLTK widget containing a bank of horizontal sliders.@@ -472,10 +547,12 @@ -- >  FLslidBnk2  "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index]  -- >  FLslidBnk2  istring, inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index]  ----- csound doc: <http://csound.com/docs/manual/FLslidBnk2.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnk2.html> flSlidBnk2 ::  Str -> D -> D -> D -> SE ()-flSlidBnk2 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLslidBnk2" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flSlidBnk2 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLslidBnk2" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- modify the values of a slider bank.@@ -484,10 +561,12 @@ -- -- >  FLslidBnk2Set  ihandle, ifn [, istartIndex, istartSlid, inumSlid] ----- csound doc: <http://csound.com/docs/manual/FLslidBnk2Set.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnk2Set.html> flSlidBnk2Set ::  D -> Tab -> SE ()-flSlidBnk2Set b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2-    where f a1 a2 = opcs "FLslidBnk2Set" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]+flSlidBnk2Set b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2+  where+    f a1 a2 = opcsDep_ "FLslidBnk2Set" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- modify the values of a slider bank.@@ -496,10 +575,12 @@ -- -- >  FLslidBnk2Setk   ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid] ----- csound doc: <http://csound.com/docs/manual/FLslidBnk2Setk.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnk2Setk.html> flSlidBnk2Setk ::  Sig -> D -> Tab -> SE ()-flSlidBnk2Setk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "FLslidBnk2Setk" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+flSlidBnk2Setk b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "FLslidBnk2Setk" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- gets the handle of last slider bank created.@@ -508,10 +589,12 @@ -- -- > ihandle  FLslidBnkGetHandle  ----- csound doc: <http://csound.com/docs/manual/FLslidBnkGetHandle.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnkGetHandle.html> flSlidBnkGetHandle ::   SE D-flSlidBnkGetHandle  = fmap ( D . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "FLslidBnkGetHandle" [(Ir,[])] []+flSlidBnkGetHandle  =+  fmap ( D . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "FLslidBnkGetHandle" [(Ir,[])] []  -- |  -- modify the values of a slider bank.@@ -520,10 +603,12 @@ -- -- >  FLslidBnkSet  ihandle, ifn [, istartIndex, istartSlid, inumSlid] ----- csound doc: <http://csound.com/docs/manual/FLslidBnkSet.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnkSet.html> flSlidBnkSet ::  D -> Tab -> SE ()-flSlidBnkSet b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2-    where f a1 a2 = opcs "FLslidBnkSet" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]+flSlidBnkSet b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2+  where+    f a1 a2 = opcsDep_ "FLslidBnkSet" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- modify the values of a slider bank.@@ -532,20 +617,24 @@ -- -- >  FLslidBnkSetk   ktrig, ihandle, ifn [, istartIndex, istartSlid, inumSlid] ----- csound doc: <http://csound.com/docs/manual/FLslidBnkSetk.html>+-- csound doc: <https://csound.com/docs/manual/FLslidBnkSetk.html> flSlidBnkSetk ::  Sig -> D -> Tab -> SE ()-flSlidBnkSetk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "FLslidBnkSetk" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+flSlidBnkSetk b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "FLslidBnkSetk" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Same as the FLrun opcode. -- -- >  FLupdate  ----- csound doc: <http://csound.com/docs/manual/FLupdate.html>+-- csound doc: <https://csound.com/docs/manual/FLupdate.html> flUpdate ::   SE ()-flUpdate  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "FLupdate" [(Xr,[])] []+flUpdate  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "FLupdate" [(Xr,[])] []  -- |  -- Shows the current value of a FLTK valuator.@@ -554,10 +643,12 @@ -- -- > ihandle  FLvalue  "label", iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLvalue.html>+-- csound doc: <https://csound.com/docs/manual/FLvalue.html> flValue ::  Str -> D -> D -> D -> D -> SE D-flValue b1 b2 b3 b4 b5 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "FLvalue" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+flValue b1 b2 b3 b4 b5 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep "FLvalue" [(Ir,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- An FLTK widget opcode that creates a virtual keyboard widget.@@ -570,10 +661,12 @@ -- -- >  FLvkeybd  "keyboard.map", iwidth, iheight, ix, iy ----- csound doc: <http://csound.com/docs/manual/FLvkeybd.html>+-- csound doc: <https://csound.com/docs/manual/FLvkeybd.html> flVkeybd ::  Str -> D -> D -> D -> D -> SE ()-flVkeybd b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "FLvkeybd" [(Xr,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+flVkeybd b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "FLvkeybd" [(Xr,[Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- A FLTK widget containing a bank of vertical sliders.@@ -583,10 +676,12 @@ -- >  FLvslidBnk  "names", inumsliders [, ioutable] [, iwidth] [, iheight] [, ix] \ -- >           [, iy] [, itypetable] [, iexptable] [, istart_index] [, iminmaxtable] ----- csound doc: <http://csound.com/docs/manual/FLvslidBnk.html>+-- csound doc: <https://csound.com/docs/manual/FLvslidBnk.html> flVslidBnk ::  Str -> D -> SE ()-flVslidBnk b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "FLvslidBnk" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]+flVslidBnk b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLvslidBnk" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- A FLTK widget containing a bank of vertical sliders.@@ -595,10 +690,12 @@ -- -- >  FLvslidBnk2  "names", inumsliders, ioutable, iconfigtable [,iwidth, iheight, ix, iy, istart_index] ----- csound doc: <http://csound.com/docs/manual/FLvslidBnk2.html>+-- csound doc: <https://csound.com/docs/manual/FLvslidBnk2.html> flVslidBnk2 ::  Str -> D -> D -> D -> SE ()-flVslidBnk2 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLvslidBnk2" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flVslidBnk2 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLvslidBnk2" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Senses the mouse cursor position in a user-defined area inside an FLpanel.@@ -608,11 +705,13 @@ -- > koutx, kouty, kinside   FLxyin  ioutx_min, ioutx_max, iouty_min, iouty_max, \ -- >           iwindx_min, iwindx_max, iwindy_min, iwindy_max [, iexpx, iexpy, ioutx, iouty] ----- csound doc: <http://csound.com/docs/manual/FLxyin.html>+-- csound doc: <https://csound.com/docs/manual/FLxyin.html> flXyin ::  D -> D -> D -> D -> D -> D -> D -> D -> SE (Sig,Sig,Sig)-flXyin b1 b2 b3 b4 b5 b6 b7 b8 = dirtyTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "FLxyin" ([Kr,Kr,Kr]-                                                     ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]+flXyin b1 b2 b3 b4 b5 b6 b7 b8 =+  fmap (toTuple . pure) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcsDep 3 "FLxyin" ([Kr,Kr,Kr]+                                                    ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]  -- |  -- Allows one-dimensional HVS (Hyper-Vectorial Synthesis).@@ -622,10 +721,12 @@ -- >  vphaseseg  kphase, ioutab, ielems, itab1,idist1,itab2 \ -- >           [,idist2,itab3, ... ,idistN-1,itabN] ----- csound doc: <http://csound.com/docs/manual/vphaseseg.html>+-- csound doc: <https://csound.com/docs/manual/vphaseseg.html> vphaseseg ::  Sig -> D -> D -> [D] -> SE ()-vphaseseg b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> mapM unD b4-    where f a1 a2 a3 a4 = opcs "vphaseseg" [(Xr,[Kr] ++ (repeat Ir))] ([a1,a2,a3] ++ a4)+vphaseseg b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vphaseseg" [(Xr,[Kr] ++ (repeat Ir))] ([a1,a2,a3] ++ a4)  -- Appearance. @@ -636,10 +737,12 @@ -- -- >  FLcolor  ired, igreen, iblue [, ired2, igreen2, iblue2] ----- csound doc: <http://csound.com/docs/manual/FLcolor.html>+-- csound doc: <https://csound.com/docs/manual/FLcolor.html> flColor ::  D -> D -> D -> SE ()-flColor b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLcolor" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+flColor b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLcolor" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- A FLTK opcode that sets the secondary (selection) color.@@ -648,10 +751,12 @@ -- -- >  FLcolor2  ired, igreen, iblue ----- csound doc: <http://csound.com/docs/manual/FLcolor2.html>+-- csound doc: <https://csound.com/docs/manual/FLcolor2.html> flColor2 ::  D -> D -> D -> SE ()-flColor2 b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLcolor2" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+flColor2 b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLcolor2" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Hides the target FLTK widget.@@ -660,10 +765,12 @@ -- -- >  FLhide  ihandle ----- csound doc: <http://csound.com/docs/manual/FLhide.html>+-- csound doc: <https://csound.com/docs/manual/FLhide.html> flHide ::  D -> SE ()-flHide b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "FLhide" [(Xr,[Ir])] [a1]+flHide b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "FLhide" [(Xr,[Ir])] [a1]  -- |  -- A FLTK opcode that modifies the appearance of a text label.@@ -672,10 +779,12 @@ -- -- >  FLlabel  isize, ifont, ialign, ired, igreen, iblue ----- csound doc: <http://csound.com/docs/manual/FLlabel.html>+-- csound doc: <https://csound.com/docs/manual/FLlabel.html> flLabel ::  D -> D -> D -> D -> D -> D -> SE ()-flLabel b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "FLlabel" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]+flLabel b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "FLlabel" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]  -- |  -- Sets the text alignment of a label of a FLTK widget.@@ -684,10 +793,12 @@ -- -- >  FLsetAlign  ialign, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetAlign.html>+-- csound doc: <https://csound.com/docs/manual/FLsetAlign.html> flSetAlign ::  D -> D -> SE ()-flSetAlign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetAlign" [(Xr,[Ir,Ir])] [a1,a2]+flSetAlign b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetAlign" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Sets the appearance of a box surrounding a FLTK widget.@@ -696,10 +807,12 @@ -- -- >  FLsetBox  itype, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetBox.html>+-- csound doc: <https://csound.com/docs/manual/FLsetBox.html> flSetBox ::  D -> D -> SE ()-flSetBox b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetBox" [(Xr,[Ir,Ir])] [a1,a2]+flSetBox b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetBox" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Sets the primary color of a FLTK widget.@@ -708,10 +821,12 @@ -- -- >  FLsetColor  ired, igreen, iblue, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetColor.html>+-- csound doc: <https://csound.com/docs/manual/FLsetColor.html> flSetColor ::  D -> D -> D -> D -> SE ()-flSetColor b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLsetColor" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flSetColor b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLsetColor" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sets the secondary (or selection) color of a FLTK widget.@@ -720,10 +835,12 @@ -- -- >  FLsetColor2  ired, igreen, iblue, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetColor2.html>+-- csound doc: <https://csound.com/docs/manual/FLsetColor2.html> flSetColor2 ::  D -> D -> D -> D -> SE ()-flSetColor2 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLsetColor2" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flSetColor2 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLsetColor2" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sets the font type of a FLTK widget.@@ -732,10 +849,12 @@ -- -- >  FLsetFont  ifont, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetFont.html>+-- csound doc: <https://csound.com/docs/manual/FLsetFont.html> flSetFont ::  D -> D -> SE ()-flSetFont b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetFont" [(Xr,[Ir,Ir])] [a1,a2]+flSetFont b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetFont" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Sets the position of a FLTK widget.@@ -744,10 +863,12 @@ -- -- >  FLsetPosition  ix, iy, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetPosition.html>+-- csound doc: <https://csound.com/docs/manual/FLsetPosition.html> flSetPosition ::  D -> D -> D -> SE ()-flSetPosition b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLsetPosition" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+flSetPosition b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLsetPosition" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Resizes a FLTK widget.@@ -756,10 +877,12 @@ -- -- >  FLsetSize  iwidth, iheight, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetSize.html>+-- csound doc: <https://csound.com/docs/manual/FLsetSize.html> flSetSize ::  D -> D -> D -> SE ()-flSetSize b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "FLsetSize" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+flSetSize b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "FLsetSize" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Sets the label of a FLTK widget.@@ -769,10 +892,12 @@ -- >  FLsetText  "itext", ihandle -- >  FLsetText  istr, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetText.html>+-- csound doc: <https://csound.com/docs/manual/FLsetText.html> flSetText ::  Str -> D -> SE ()-flSetText b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "FLsetText" [(Xr,[Sr,Ir])] [a1,a2]+flSetText b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetText" [(Xr,[Sr,Ir])] [a1,a2]  -- |  -- Sets the color of the text label of a FLTK widget.@@ -781,10 +906,12 @@ -- -- >  FLsetTextColor  ired, iblue, igreen, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetTextColor.html>+-- csound doc: <https://csound.com/docs/manual/FLsetTextColor.html> flSetTextColor ::  D -> D -> D -> D -> SE ()-flSetTextColor b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "FLsetTextColor" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+flSetTextColor b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "FLsetTextColor" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sets the size of the text label of a FLTK widget.@@ -793,10 +920,12 @@ -- -- >  FLsetTextSize  isize, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetTextSize.html>+-- csound doc: <https://csound.com/docs/manual/FLsetTextSize.html> flSetTextSize ::  D -> D -> SE ()-flSetTextSize b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetTextSize" [(Xr,[Ir,Ir])] [a1,a2]+flSetTextSize b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetTextSize" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Sets some font attributes of the text label of a FLTK widget.@@ -805,10 +934,12 @@ -- -- >  FLsetTextType  itype, ihandle ----- csound doc: <http://csound.com/docs/manual/FLsetTextType.html>+-- csound doc: <https://csound.com/docs/manual/FLsetTextType.html> flSetTextType ::  D -> D -> SE ()-flSetTextType b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "FLsetTextType" [(Xr,[Ir,Ir])] [a1,a2]+flSetTextType b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "FLsetTextType" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Restores the visibility of a previously hidden FLTK widget.@@ -817,7 +948,9 @@ -- -- >  FLshow  ihandle ----- csound doc: <http://csound.com/docs/manual/FLshow.html>+-- csound doc: <https://csound.com/docs/manual/FLshow.html> flShow ::  D -> SE ()-flShow b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "FLshow" [(Xr,[Ir])] [a1]+flShow b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "FLshow" [(Xr,[Ir])] [a1]
src/Csound/Typed/Opcode/FaustOpcodes.hs view
@@ -5,6 +5,7 @@     faustctl) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -17,7 +18,9 @@ -- -- >  faustctl  idsp,Scontrol,kval  ----- csound doc: <http://csound.com/docs/manual/faustctl.html>+-- csound doc: <https://csound.com/docs/manual/faustctl.html> faustctl ::  D -> Str -> Sig -> SE ()-faustctl b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unStr b2 <*> unSig b3-    where f a1 a2 a3 = opcs "faustctl" [(Xr,[Ir,Sr,Kr])] [a1,a2,a3]+faustctl b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unStr) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "faustctl" [(Xr,[Ir,Sr,Kr])] [a1,a2,a3]
src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs view
@@ -5,6 +5,7 @@     imagecreate, imagefree, imagegetpixel, imageload, imagesave, imagesetpixel, imagesize) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -17,20 +18,24 @@ -- -- > iimagenum  imagecreate  iwidth, iheight ----- csound doc: <http://csound.com/docs/manual/imagecreate.html>+-- csound doc: <https://csound.com/docs/manual/imagecreate.html> imagecreate ::  D -> D -> SE D-imagecreate b1 b2 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "imagecreate" [(Ir,[Ir,Ir])] [a1,a2]+imagecreate b1 b2 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "imagecreate" [(Ir,[Ir,Ir])] [a1,a2]  -- |  -- Frees memory allocated for a previously loaded or created image. -- -- >  imagefree  iimagenum ----- csound doc: <http://csound.com/docs/manual/imagefree.html>+-- csound doc: <https://csound.com/docs/manual/imagefree.html> imagefree ::  D -> SE ()-imagefree b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "imagefree" [(Xr,[Ir])] [a1]+imagefree b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "imagefree" [(Xr,[Ir])] [a1]  -- |  -- Return the RGB pixel values of a previously opened or created image.@@ -40,10 +45,12 @@ -- > ared, agreen, ablue  imagegetpixel  iimagenum, ax, ay -- > kred, kgreen, kblue  imagegetpixel  iimagenum, kx, ky ----- csound doc: <http://csound.com/docs/manual/imagegetpixel.html>+-- csound doc: <https://csound.com/docs/manual/imagegetpixel.html> imagegetpixel ::  D -> Sig -> Sig -> (Sig,Sig,Sig)-imagegetpixel b1 b2 b3 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "imagegetpixel" ([Kr,Kr,Kr],[Ir,Kr,Kr]) [a1,a2,a3]+imagegetpixel b1 b2 b3 =+  pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "imagegetpixel" ([Kr,Kr,Kr],[Ir,Kr,Kr]) [a1,a2,a3]  -- |  -- Load an image.@@ -52,10 +59,12 @@ -- -- > iimagenum  imageload  filename ----- csound doc: <http://csound.com/docs/manual/imageload.html>+-- csound doc: <https://csound.com/docs/manual/imageload.html> imageload ::  Spec -> SE D-imageload b1 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unSpec b1-    where f a1 = opcs "imageload" [(Ir,[Fr])] [a1]+imageload b1 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unSpec) b1+  where+    f a1 = opcsDep "imageload" [(Ir,[Fr])] [a1]  -- |  -- Save a previously created image.@@ -64,10 +73,12 @@ -- -- >  imagesave  iimagenum, filename ----- csound doc: <http://csound.com/docs/manual/imagesave.html>+-- csound doc: <https://csound.com/docs/manual/imagesave.html> imagesave ::  D -> Spec -> SE ()-imagesave b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSpec b2-    where f a1 a2 = opcs "imagesave" [(Xr,[Ir,Fr])] [a1,a2]+imagesave b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSpec) b2+  where+    f a1 a2 = opcsDep_ "imagesave" [(Xr,[Ir,Fr])] [a1,a2]  -- |  -- Set the RGB value of a pixel inside a previously opened or created image.@@ -77,10 +88,12 @@ -- >  imagesetpixel  iimagenum, ax, ay, ared, agreen, ablue -- >  imagesetpixel  iimagenum, kx, ky, kred, kgreen, kblue ----- csound doc: <http://csound.com/docs/manual/imagesetpixel.html>+-- csound doc: <https://csound.com/docs/manual/imagesetpixel.html> imagesetpixel ::  D -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-imagesetpixel b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "imagesetpixel" [(Xr,[Ir,Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5,a6]+imagesetpixel b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "imagesetpixel" [(Xr,[Ir,Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5,a6]  -- |  -- Return the width and height of a previously opened or created image.@@ -89,7 +102,9 @@ -- -- > iwidth, iheight  imagesize  iimagenum ----- csound doc: <http://csound.com/docs/manual/imagesize.html>+-- csound doc: <https://csound.com/docs/manual/imagesize.html> imagesize ::  D -> (D,D)-imagesize b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "imagesize" ([Ir,Ir],[Ir]) [a1]+imagesize b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "imagesize" ([Ir,Ir],[Ir]) [a1]
src/Csound/Typed/Opcode/InstrumentControl.hs view
@@ -8,16 +8,16 @@     compilecsd, compileorc, compilestr, evalstr,          -- * Duration Control.-    ihold, turnoff, turnon,+    ihold, turnoff, turnoff2_i, turnoff3, turnon,          -- * Invocation.-    event, event_i, mute, nstance, readscore, remove, schedkwhen, schedkwhennamed, schedule, schedwhen, scoreline, scoreline_i,+    event, event_i, mute, nstance, readscore, remove, schedkwhen, schedkwhennamed, schedule, schedulek, schedwhen, scoreline, scoreline_i,          -- * Realtime Performance Control.     active, cpumeter, cpuprc, exitnow, jacktransport, maxalloc, prealloc,          -- * Sensing and Control.-    button, changed, changed2, checkbox, control, follow, follow2, getcfg, joystick, metro, midifilestatus, miditempo, p5gconnect, p5gdata, pcount, peak, pindex, pitch, pitchamdf, plltrack, ptrack, readscratch, rewindscore, rms, sensekey, seqtime, seqtime2, setctrl, setscorepos, splitrig, tempest, tempo, tempoval, timedseq, trigger, trigseq, vactrol, wiiconnect, wiidata, wiirange, wiisend, writescratch, xyin,+    button, changed, changed2, checkbox, cntDelete, cntDelete_i, cntCreate, cntCycles, cntRead, cntReset, cntState, control, count, count_i, follow, follow2, getcfg, joystick, metro, metro2, metrobpm, midifilestatus, miditempo, p5gconnect, p5gdata, pcount, peak, pindex, pitch, pitchamdf, plltrack, ptrack, readscratch, rewindscore, rms, sensekey, seqtime, seqtime2, sequ, setctrl, setscorepos, splitrig, tempest, tempo, tempoval, timedseq, trigger, trigseq, vactrol, wiiconnect, wiidata, wiirange, wiisend, writescratch, xyin,          -- * Stacks.     pop, pop_f, push, push_f, stack,@@ -26,9 +26,10 @@     subinstr, subinstrinit,          -- * Time Reading.-    date, dates, readclock, rtclock, timeinstk, timeinsts, timek, times) where+    date, dates, elapsedcycles, elapsedtime, eventcycles, eventtime, readclock, rtclock, timeinstk, timeinsts, timek, times) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -39,20 +40,24 @@ -- -- >  clockoff  inum ----- csound doc: <http://csound.com/docs/manual/clockoff.html>+-- csound doc: <https://csound.com/docs/manual/clockoff.html> clockoff ::  D -> SE ()-clockoff b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "clockoff" [(Xr,[Ir])] [a1]+clockoff b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "clockoff" [(Xr,[Ir])] [a1]  -- |  -- Starts one of a number of internal clocks. -- -- >  clockon  inum ----- csound doc: <http://csound.com/docs/manual/clockon.html>+-- csound doc: <https://csound.com/docs/manual/clockon.html> clockon ::  D -> SE ()-clockon b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "clockon" [(Xr,[Ir])] [a1]+clockon b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "clockon" [(Xr,[Ir])] [a1]  -- Compilation. @@ -63,10 +68,12 @@ -- -- > ires  compilecsd  Sfilename ----- csound doc: <http://csound.com/docs/manual/compilecsd.html>+-- csound doc: <https://csound.com/docs/manual/compilecsd.html> compilecsd ::  Str -> D-compilecsd b1 = D $ f <$> unStr b1-    where f a1 = opcs "compilecsd" [(Ir,[Sr])] [a1]+compilecsd b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "compilecsd" [(Ir,[Sr])] [a1]  -- |  -- compiles a new orchestra from an ASCII file@@ -77,10 +84,12 @@ -- -- > ires  compileorc  Sfilename ----- csound doc: <http://csound.com/docs/manual/compileorc.html>+-- csound doc: <https://csound.com/docs/manual/compileorc.html> compileorc ::  Str -> D-compileorc b1 = D $ f <$> unStr b1-    where f a1 = opcs "compileorc" [(Ir,[Sr])] [a1]+compileorc b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "compileorc" [(Ir,[Sr])] [a1]  -- |  -- compiles a new orchestra passed in as an ASCII string@@ -92,10 +101,12 @@ -- -- > ires  compilestr  Sorch ----- csound doc: <http://csound.com/docs/manual/compilestr.html>+-- csound doc: <https://csound.com/docs/manual/compilestr.html> compilestr ::  Str -> D-compilestr b1 = D $ f <$> unStr b1-    where f a1 = opcs "compilestr" [(Ir,[Sr])] [a1]+compilestr b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "compilestr" [(Ir,[Sr])] [a1]  -- |  -- Evalstrs evaluates a string containing Csound code, returning a value.@@ -106,10 +117,12 @@ -- > ires  evalstr  Scode  -- > kres  evalstr  Scode, ktrig  ----- csound doc: <http://csound.com/docs/manual/evalstr.html>+-- csound doc: <https://csound.com/docs/manual/evalstr.html> evalstr ::  Str -> Sig-evalstr b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "evalstr" [(Ir,[Sr]),(Kr,[Sr,Kr])] [a1]+evalstr b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "evalstr" [(Ir,[Sr]),(Kr,[Sr,Kr])] [a1]  -- Duration Control. @@ -120,10 +133,12 @@ -- -- >  ihold  ----- csound doc: <http://csound.com/docs/manual/ihold.html>+-- csound doc: <https://csound.com/docs/manual/ihold.html> ihold ::   SE ()-ihold  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "ihold" [(Xr,[])] []+ihold  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "ihold" [(Xr,[])] []  -- |  -- Enables an instrument to turn itself off or to turn an instance of another instrument off.@@ -132,20 +147,50 @@ -- >  turnoff  inst -- >  turnoff  knst ----- csound doc: <http://csound.com/docs/manual/turnoff.html>+-- csound doc: <https://csound.com/docs/manual/turnoff.html> turnoff ::   SE ()-turnoff  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "turnoff" [(Xr,[])] []+turnoff  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "turnoff" [(Xr,[])] []  -- | ++--+-- >  turnoff2_i  insno, imode, irelease+-- >         +--+-- csound doc: <https://csound.com/docs/manual/turnoff2.html>+turnoff2_i ::  D -> D -> D -> SE ()+turnoff2_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "turnoff2_i" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- >  turnoff3  kinsno+-- >         +--+-- csound doc: <https://csound.com/docs/manual/turnoff3.html>+turnoff3 ::  Sig -> SE ()+turnoff3 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "turnoff3" [(Xr,[Kr])] [a1]++-- |  -- Activate an instrument for an indefinite time. -- -- >  turnon  insnum [, itime] ----- csound doc: <http://csound.com/docs/manual/turnon.html>+-- csound doc: <https://csound.com/docs/manual/turnon.html> turnon ::  D -> SE ()-turnon b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "turnon" [(Xr,[Ir,Ir])] [a1]+turnon b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "turnon" [(Xr,[Ir,Ir])] [a1]  -- Invocation. @@ -155,10 +200,12 @@ -- >  event  "scorechar", kinsnum, kdelay, kdur, [, kp4] [, kp5] [, ...] -- >  event  "scorechar", "insname", kdelay, kdur, [, kp4] [, kp5] [, ...] ----- csound doc: <http://csound.com/docs/manual/event.html>+-- csound doc: <https://csound.com/docs/manual/event.html> event ::  Str -> Sig -> Sig -> Sig -> [Sig] -> SE ()-event b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> mapM unSig b5-    where f a1 a2 a3 a4 a5 = opcs "event" [(Xr,[Sr] ++ (repeat Kr))] ([a1,a2,a3,a4] ++ a5)+event b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> mapM (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "event" [(Xr,[Sr] ++ (repeat Kr))] ([a1,a2,a3,a4] ++ a5)  -- |  -- Generates a score event from an instrument.@@ -166,10 +213,12 @@ -- >  event_i  "scorechar", iinsnum, idelay, idur, [, ip4] [, ip5] [, ...] -- >  event_i  "scorechar", "insname", idelay, idur, [, ip4] [, ip5] [, ...] ----- csound doc: <http://csound.com/docs/manual/event_i.html>+-- csound doc: <https://csound.com/docs/manual/event_i.html> event_i ::  Str -> D -> D -> D -> [D] -> SE ()-event_i b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = opcs "event_i" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2,a3,a4] ++ a5)+event_i b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> mapM (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "event_i" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2,a3,a4] ++ a5)  -- |  -- Mutes/unmutes new instances of a given instrument.@@ -177,10 +226,12 @@ -- >  mute  insnum [, iswitch] -- >  mute  "insname" [, iswitch] ----- csound doc: <http://csound.com/docs/manual/mute.html>+-- csound doc: <https://csound.com/docs/manual/mute.html> mute ::  D -> SE ()-mute b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "mute" [(Xr,[Ir,Ir])] [a1]+mute b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "mute" [(Xr,[Ir,Ir])] [a1]  -- |  -- Schedules a new instrument instance, storing the instance handle in a variable.@@ -192,10 +243,12 @@ -- > iHandle  nstance  insnum, iwhen, idur [, ip4] [, ip5] [...] -- > iHandle  nstance  "insname", iwhen, idur [, ip4] [, ip5] [...] ----- csound doc: <http://csound.com/docs/manual/nstance.html>+-- csound doc: <https://csound.com/docs/manual/nstance.html> nstance ::  D -> D -> D -> D-nstance b1 b2 b3 = D $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "nstance" [(Ir,(repeat Ir)),(Ir,[Sr] ++ (repeat Ir))] [a1,a2,a3]+nstance b1 b2 b3 =+  D $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "nstance" [(Ir,(repeat Ir)),(Ir,[Sr] ++ (repeat Ir))] [a1,a2,a3]  -- |  -- Read, preprocess and schedule a score from an input string.@@ -207,10 +260,12 @@ -- -- >  readscore  Sin  ----- csound doc: <http://csound.com/docs/manual/readscore.html>+-- csound doc: <https://csound.com/docs/manual/readscore.html> readscore ::  Str -> SE ()-readscore b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "readscore" [(Xr,[Sr])] [a1]+readscore b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "readscore" [(Xr,[Sr])] [a1]  -- |  -- Removes the definition of an instrument.@@ -219,10 +274,12 @@ -- -- >  remove  insnum ----- csound doc: <http://csound.com/docs/manual/remove.html>+-- csound doc: <https://csound.com/docs/manual/remove.html> remove ::  D -> SE ()-remove b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "remove" [(Xr,[Ir])] [a1]+remove b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "remove" [(Xr,[Ir])] [a1]  -- |  -- Adds a new score event generated by a k-rate trigger.@@ -232,15 +289,17 @@ -- >  schedkwhen  ktrigger, kmintim, kmaxnum, "insname", kwhen, kdur \ -- >           [, ip4] [, ip5] [...] ----- csound doc: <http://csound.com/docs/manual/schedkwhen.html>+-- csound doc: <https://csound.com/docs/manual/schedkwhen.html> schedkwhen ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-schedkwhen b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "schedkwhen" [(Xr,[Kr,Kr,Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1-                                                                                            ,a2-                                                                                            ,a3-                                                                                            ,a4-                                                                                            ,a5-                                                                                            ,a6]+schedkwhen b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "schedkwhen" [(Xr,[Kr,Kr,Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1+                                                                                          ,a2+                                                                                          ,a3+                                                                                          ,a4+                                                                                          ,a5+                                                                                          ,a6]  -- |  -- Similar to schedkwhen but uses a named instrument at init-time.@@ -248,37 +307,59 @@ -- >  schedkwhennamed  ktrigger, kmintim, kmaxnum, "name", kwhen, kdur \ -- >           [, ip4] [, ip5] [...] ----- csound doc: <http://csound.com/docs/manual/schedkwhennamed.html>+-- csound doc: <https://csound.com/docs/manual/schedkwhennamed.html> schedkwhennamed ::  Sig -> Sig -> Sig -> Str -> Sig -> Sig -> SE ()-schedkwhennamed b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "schedkwhennamed" [(Xr,[Kr,Kr,Kr,Sr,Kr,Kr] ++ (repeat Ir))] [a1-                                                                                                 ,a2-                                                                                                 ,a3-                                                                                                 ,a4-                                                                                                 ,a5-                                                                                                 ,a6]+schedkwhennamed b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unStr) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "schedkwhennamed" [(Xr,[Kr,Kr,Kr,Sr,Kr,Kr] ++ (repeat Ir))] [a1+                                                                                               ,a2+                                                                                               ,a3+                                                                                               ,a4+                                                                                               ,a5+                                                                                               ,a6]  -- |  -- Adds a new score event. -- -- >  schedule  insnum, iwhen, idur [, ip4] [, ip5] [...]--- >  schedule  "insname", iwhen, idur [, ip4] [, ip5] [...]+-- >  schedule  "insname", iwhen,+-- >         idur [, ip4] [, ip5] [...]+-- >  schedule  iPar[] ----- csound doc: <http://csound.com/docs/manual/schedule.html>+-- csound doc: <https://csound.com/docs/manual/schedule.html> schedule ::  D -> D -> D -> SE ()-schedule b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "schedule" [(Xr,(repeat Ir))] [a1,a2,a3]+schedule b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "schedule" [(Xr,(repeat Ir))] [a1,a2,a3]  -- | ++--+-- >  schedulek  knsnum, kwhen, kdur [, kp4] [, kp5] [...]+-- >  schedulek  "insname", kwhen,+-- >         kdur [, kp4] [, kp5] [...]+--+-- csound doc: <https://csound.com/docs/manual/schedulek.html>+schedulek ::  Sig -> Sig -> Sig -> SE ()+schedulek b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "schedulek" [(Xr,(repeat Kr))] [a1,a2,a3]++-- |  -- Adds a new score event. -- -- >  schedwhen  ktrigger, kinsnum, kwhen, kdur [, ip4] [, ip5] [...] -- >  schedwhen  ktrigger, "insname", kwhen, kdur [, ip4] [, ip5] [...] ----- csound doc: <http://csound.com/docs/manual/schedwhen.html>+-- csound doc: <https://csound.com/docs/manual/schedwhen.html> schedwhen ::  Sig -> Sig -> Sig -> Sig -> SE ()-schedwhen b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "schedwhen" [(Xr,[Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4]+schedwhen b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "schedwhen" [(Xr,[Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4]  -- |  -- Issues one or more score line events from an instrument.@@ -289,10 +370,12 @@ -- -- >  scoreline  Sin, ktrig ----- csound doc: <http://csound.com/docs/manual/scoreline.html>+-- csound doc: <https://csound.com/docs/manual/scoreline.html> scoreline ::  Str -> Sig -> SE ()-scoreline b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "scoreline" [(Xr,[Sr,Kr])] [a1,a2]+scoreline b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "scoreline" [(Xr,[Sr,Kr])] [a1,a2]  -- |  -- Issues one or more score line events from an instrument at i-time.@@ -301,10 +384,12 @@ -- -- >  scoreline_i  Sin ----- csound doc: <http://csound.com/docs/manual/scoreline_i.html>+-- csound doc: <https://csound.com/docs/manual/scoreline_i.html> scoreline_i ::  Str -> SE ()-scoreline_i b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "scoreline_i" [(Xr,[Sr])] [a1]+scoreline_i b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "scoreline_i" [(Xr,[Sr])] [a1]  -- Realtime Performance Control. @@ -318,10 +403,12 @@ -- > ir  active  Sinsname [,iopt [,inorel]] -- > kres  active  kinsnum [,iopt [,inorel]] ----- csound doc: <http://csound.com/docs/manual/active.html>+-- csound doc: <https://csound.com/docs/manual/active.html> active ::  D -> Sig-active b1 = Sig $ f <$> unD b1-    where f a1 = opcs "active" [(Ir,[Ir,Ir,Ir]),(Ir,[Sr,Ir,Ir]),(Kr,[Kr,Ir,Ir])] [a1]+active b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "active" [(Ir,[Ir,Ir,Ir]),(Ir,[Sr,Ir,Ir]),(Kr,[Kr,Ir,Ir])] [a1]  -- |  -- Reports the usage of cpu either total or per core.@@ -331,10 +418,12 @@ -- -- > ktot[,kcpu1, kcpu2,...] cpumeter  ifreq ----- csound doc: <http://csound.com/docs/manual/cpumeter.html>-cpumeter :: Tuple a => D -> a-cpumeter b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "cpumeter" ((repeat Kr),[Ir]) [a1]+-- csound doc: <https://csound.com/docs/manual/cpumeter.html>+cpumeter :: forall a . Tuple a => D -> a+cpumeter b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "cpumeter" ((repeat Kr),[Ir]) [a1]  -- |  -- Control allocation of cpu resources on a per-instrument basis, to optimize realtime output.@@ -342,10 +431,12 @@ -- >  cpuprc  insnum, ipercent -- >  cpuprc  Sinsname, ipercent ----- csound doc: <http://csound.com/docs/manual/cpuprc.html>+-- csound doc: <https://csound.com/docs/manual/cpuprc.html> cpuprc ::  D -> D -> SE ()-cpuprc b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "cpuprc" [(Xr,[Ir,Ir])] [a1,a2]+cpuprc b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "cpuprc" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Exit Csound as fast as possible, with no cleaning up.@@ -355,20 +446,24 @@ -- -- >  exitnow  [ivalue] ----- csound doc: <http://csound.com/docs/manual/exitnow.html>+-- csound doc: <https://csound.com/docs/manual/exitnow.html> exitnow ::   SE ()-exitnow  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "exitnow" [(Xr,[Ir])] []+exitnow  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "exitnow" [(Xr,[Ir])] []  -- |  -- Start/stop jack_transport and can optionally relocate the playback head. -- -- >  jacktransport  icommand [, ilocation] ----- csound doc: <http://csound.com/docs/manual/jacktransport.html>+-- csound doc: <https://csound.com/docs/manual/jacktransport.html> jacktransport ::  D -> SE ()-jacktransport b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "jacktransport" [(Xr,[Ir,Ir])] [a1]+jacktransport b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "jacktransport" [(Xr,[Ir,Ir])] [a1]  -- |  -- Limits the number of allocations of an instrument.@@ -376,10 +471,12 @@ -- >  maxalloc  insnum, icount -- >  maxalloc  Sinsname, icount ----- csound doc: <http://csound.com/docs/manual/maxalloc.html>+-- csound doc: <https://csound.com/docs/manual/maxalloc.html> maxalloc ::  D -> D -> SE ()-maxalloc b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "maxalloc" [(Xr,[Ir,Ir])] [a1,a2]+maxalloc b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "maxalloc" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Creates space for instruments but does not run them.@@ -387,10 +484,12 @@ -- >  prealloc  insnum, icount -- >  prealloc  "insname", icount ----- csound doc: <http://csound.com/docs/manual/prealloc.html>+-- csound doc: <https://csound.com/docs/manual/prealloc.html> prealloc ::  D -> D -> SE ()-prealloc b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "prealloc" [(Xr,[Ir,Ir])] [a1,a2]+prealloc b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "prealloc" [(Xr,[Ir,Ir])] [a1,a2]  -- Sensing and Control. @@ -401,10 +500,12 @@ -- -- > kres  button  knum ----- csound doc: <http://csound.com/docs/manual/button.html>+-- csound doc: <https://csound.com/docs/manual/button.html> button ::  Sig -> Sig-button b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "button" [(Kr,[Kr])] [a1]+button b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "button" [(Kr,[Kr])] [a1]  -- |  -- k-rate signal change detector.@@ -413,10 +514,12 @@ -- -- > ktrig  changed  kvar1 [, kvar2,..., kvarN] ----- csound doc: <http://csound.com/docs/manual/changed.html>+-- csound doc: <https://csound.com/docs/manual/changed.html> changed ::  [Sig] -> Sig-changed b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "changed" [(Kr,(repeat Kr))] a1+changed b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "changed" [(Kr,(repeat Kr))] a1  -- |  -- k-rate signal change detector.@@ -428,10 +531,12 @@ -- > ktrig  changed2  karr[] -- > ktrig  changed2  aarr[] ----- csound doc: <http://csound.com/docs/manual/changed2.html>+-- csound doc: <https://csound.com/docs/manual/changed2.html> changed2 ::  Sig -> Sig-changed2 b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "changed2" [(Kr,(repeat Kr)),(Kr,[Kr]),(Kr,[Ar])] [a1]+changed2 b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "changed2" [(Kr,(repeat Kr)),(Kr,[Kr]),(Kr,[Ar])] [a1]  -- |  -- Sense on-screen controls.@@ -440,32 +545,146 @@ -- -- > kres  checkbox  knum ----- csound doc: <http://csound.com/docs/manual/checkbox.html>+-- csound doc: <https://csound.com/docs/manual/checkbox.html> checkbox ::  Sig -> Sig-checkbox b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "checkbox" [(Kr,[Kr])] [a1]+checkbox b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "checkbox" [(Kr,[Kr])] [a1]  -- | ++--+-- > kval  cntDelete  icnt+--+-- csound doc: <https://csound.com/docs/manual/cntDelete.html>+cntDelete ::  D -> Sig+cntDelete b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "cntDelete" [(Kr,[Ir])] [a1]++-- | ++--+-- > ival  cntDelete_i  icnt+--+-- csound doc: <https://csound.com/docs/manual/cntDelete_i.html>+cntDelete_i ::  D -> D+cntDelete_i b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "cntDelete_i" [(Ir,[Ir])] [a1]++-- | ++--+-- > icnt  cntCreate  [imax, imin, inc]+--+-- csound doc: <https://csound.com/docs/manual/cntCreate.html>+cntCreate ::   D+cntCreate  =+  D $ return $ f +  where+    f  = opcs "cntCreate" [(Ir,[Ir,Ir,Ir])] []++-- | ++--+-- > kval  cntCycles  icnt+--+-- csound doc: <https://csound.com/docs/manual/cntCycles.html>+cntCycles ::  D -> Sig+cntCycles b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "cntCycles" [(Kr,[Ir])] [a1]++-- | ++--+-- > kval  cntRead icnt+--+-- csound doc: <https://csound.com/docs/manual/cntRead.html>+cntRead ::  D -> Sig+cntRead b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "cntRead" [(Kr,[Ir])] [a1]++-- | ++--+-- >  cntReset icnt+--+-- csound doc: <https://csound.com/docs/manual/cntReset.html>+cntReset ::  D -> SE ()+cntReset b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "cntReset" [(Xr,[Ir])] [a1]++-- | ++--+-- > kmax, kmin, kinc  cntState icnt+--+-- csound doc: <https://csound.com/docs/manual/cntState.html>+cntState ::  D -> (Sig,Sig,Sig)+cntState b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "cntState" ([Kr,Kr,Kr],[Ir]) [a1]++-- |  -- Configurable slider controls for realtime user input. -- -- Configurable slider controls for realtime user input. Requires Winsound or TCL/TK. control reads a slider's value. -- -- > kres  control  knum ----- csound doc: <http://csound.com/docs/manual/control.html>+-- csound doc: <https://csound.com/docs/manual/control.html> control ::  Sig -> Sig-control b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "control" [(Kr,[Kr])] [a1]+control b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "control" [(Kr,[Kr])] [a1]  -- | ++--+-- > kval  count  icnt+--+-- csound doc: <https://csound.com/docs/manual/count.html>+count ::  D -> Sig+count b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "count" [(Kr,[Ir])] [a1]++-- | ++--+-- > ival  count_i  icnt+--+-- csound doc: <https://csound.com/docs/manual/count_i.html>+count_i ::  D -> D+count_i b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "count_i" [(Ir,[Ir])] [a1]++-- |  -- Envelope follower unit generator. -- -- > ares  follow  asig, idt ----- csound doc: <http://csound.com/docs/manual/follow.html>+-- csound doc: <https://csound.com/docs/manual/follow.html> follow ::  Sig -> D -> Sig-follow b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "follow" [(Ar,[Ar,Ir])] [a1,a2]+follow b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "follow" [(Ar,[Ar,Ir])] [a1,a2]  -- |  -- Another controllable envelope extractor.@@ -474,10 +693,12 @@ -- -- > ares  follow2  asig, katt, krel ----- csound doc: <http://csound.com/docs/manual/follow2.html>+-- csound doc: <https://csound.com/docs/manual/follow2.html> follow2 ::  Sig -> Sig -> Sig -> Sig-follow2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "follow2" [(Ar,[Ar,Kr,Kr])] [a1,a2,a3]+follow2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "follow2" [(Ar,[Ar,Kr,Kr])] [a1,a2,a3]  -- |  -- Return Csound settings.@@ -486,10 +707,12 @@ -- -- > Svalue  getcfg  iopt ----- csound doc: <http://csound.com/docs/manual/getcfg.html>+-- csound doc: <https://csound.com/docs/manual/getcfg.html> getcfg ::  D -> Str-getcfg b1 = Str $ f <$> unD b1-    where f a1 = opcs "getcfg" [(Sr,[Ir])] [a1]+getcfg b1 =+  Str $ f <$> unD b1+  where+    f a1 = opcs "getcfg" [(Sr,[Ir])] [a1]  -- |  -- Reads data from a joystick controller.@@ -498,10 +721,12 @@ -- -- > kres  joystick  kdevice ktab ----- csound doc: <http://csound.com/docs/manual/joystick.html>+-- csound doc: <https://csound.com/docs/manual/joystick.html> joystick ::  Sig -> Tab -> Sig-joystick b1 b2 = Sig $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "joystick" [(Kr,[Kr,Kr])] [a1,a2]+joystick b1 b2 =+  Sig $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "joystick" [(Kr,[Kr,Kr])] [a1,a2]  -- |  -- Trigger Metronome@@ -510,12 +735,38 @@ -- -- > ktrig   metro   kfreq [, initphase] ----- csound doc: <http://csound.com/docs/manual/metro.html>+-- csound doc: <https://csound.com/docs/manual/metro.html> metro ::  Sig -> Sig-metro b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "metro" [(Kr,[Kr,Ir])] [a1]+metro b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "metro" [(Kr,[Kr,Ir])] [a1]  -- | ++--+-- > ktrig   metro2   kfreq, kswing [, iamp, initphase]+--+-- csound doc: <https://csound.com/docs/manual/metro2.html>+metro2 ::  Sig -> Sig -> Sig+metro2 b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "metro2" [(Kr,[Kr,Kr,Ir,Ir])] [a1,a2]++-- | ++--+-- > ktrig   metrobpm   kfreq [, initphase] [, kgate]+--+-- csound doc: <https://csound.com/docs/manual/metrobpm.html>+metrobpm ::  Sig -> Sig+metrobpm b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "metrobpm" [(Kr,[Kr,Ir,Kr])] [a1]++-- |  -- Returns the playback status of MIDI file input. -- -- Returns the current playback status at k-rate, of the input MIDI file, 1 if file is playing, 0 if the end-of-the file@@ -523,20 +774,24 @@ -- -- > ksig   midifilestatus  ----- csound doc: <http://csound.com/docs/manual/midifilestatus.html>+-- csound doc: <https://csound.com/docs/manual/midifilestatus.html> midifilestatus ::   Sig-midifilestatus  = Sig $ return $ f -    where f  = opcs "midifilestatus" [(Kr,[])] []+midifilestatus  =+  Sig $ return $ f +  where+    f  = opcs "midifilestatus" [(Kr,[])] []  -- |  -- Returns the current tempo at k-rate, of either the MIDI file (if available) or the score -- -- > ksig   miditempo  ----- csound doc: <http://csound.com/docs/manual/miditempo.html>+-- csound doc: <https://csound.com/docs/manual/miditempo.html> miditempo ::   Sig-miditempo  = Sig $ return $ f -    where f  = opcs "miditempo" [(Kr,[])] []+miditempo  =+  Sig $ return $ f +  where+    f  = opcs "miditempo" [(Kr,[])] []  -- |  -- Reads data from a P5 Glove controller.@@ -545,10 +800,12 @@ -- -- >  p5gconnect  ----- csound doc: <http://csound.com/docs/manual/p5gconnect.html>+-- csound doc: <https://csound.com/docs/manual/p5gconnect.html> p5gconnect ::   SE ()-p5gconnect  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "p5gconnect" [(Xr,[])] []+p5gconnect  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "p5gconnect" [(Xr,[])] []  -- |  -- Reads data fields from an external P5 Glove.@@ -557,10 +814,12 @@ -- -- > kres  p5gdata  kcontrol ----- csound doc: <http://csound.com/docs/manual/p5gdata.html>+-- csound doc: <https://csound.com/docs/manual/p5gdata.html> p5gdata ::  Sig -> Sig-p5gdata b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "p5gdata" [(Kr,[Kr])] [a1]+p5gdata b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "p5gdata" [(Kr,[Kr])] [a1]  -- |  -- Returns the number of pfields belonging to a note event.@@ -569,10 +828,12 @@ -- -- > icount  pcount  ----- csound doc: <http://csound.com/docs/manual/pcount.html>+-- csound doc: <https://csound.com/docs/manual/pcount.html> pcount ::   D-pcount  = D $ return $ f -    where f  = opcs "pcount" [(Ir,[])] []+pcount  =+  D $ return $ f +  where+    f  = opcs "pcount" [(Ir,[])] []  -- |  -- Maintains the output equal to the highest absolute value received.@@ -582,10 +843,12 @@ -- > kres  peak  asig -- > kres  peak  ksig ----- csound doc: <http://csound.com/docs/manual/peak.html>+-- csound doc: <https://csound.com/docs/manual/peak.html> peak ::  Sig -> Sig-peak b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "peak" [(Kr,[Ar]),(Kr,[Kr])] [a1]+peak b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "peak" [(Kr,[Ar]),(Kr,[Kr])] [a1]  -- |  -- Returns the value of a specified pfield.@@ -594,10 +857,12 @@ -- -- > ivalue  pindex  ipfieldIndex ----- csound doc: <http://csound.com/docs/manual/pindex.html>+-- csound doc: <https://csound.com/docs/manual/pindex.html> pindex ::  D -> D-pindex b1 = D $ f <$> unD b1-    where f a1 = opcs "pindex" [(Ir,[Ir])] [a1]+pindex b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "pindex" [(Ir,[Ir])] [a1]  -- |  -- Tracks the pitch of a signal.@@ -607,14 +872,16 @@ -- > koct, kamp  pitch  asig, iupdte, ilo, ihi, idbthresh [, ifrqs] [, iconf] \ -- >           [, istrt] [, iocts] [, iq] [, inptls] [, irolloff] [, iskip] ----- csound doc: <http://csound.com/docs/manual/pitch.html>+-- csound doc: <https://csound.com/docs/manual/pitch.html> pitch ::  Sig -> D -> D -> D -> D -> (Sig,Sig)-pitch b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "pitch" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                              ,a2-                                                                                              ,a3-                                                                                              ,a4-                                                                                              ,a5]+pitch b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "pitch" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                        ,a2+                                                                                        ,a3+                                                                                        ,a4+                                                                                        ,a5]  -- |  -- Follows the pitch of a signal based on the AMDF method.@@ -624,10 +891,12 @@ -- > kcps, krms  pitchamdf  asig, imincps, imaxcps [, icps] [, imedi] \ -- >           [, idowns] [, iexcps] [, irmsmedi] ----- csound doc: <http://csound.com/docs/manual/pitchamdf.html>+-- csound doc: <https://csound.com/docs/manual/pitchamdf.html> pitchamdf ::  Sig -> D -> D -> (Sig,Sig)-pitchamdf b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "pitchamdf" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]+pitchamdf b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "pitchamdf" ([Kr,Kr],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]  -- |  -- Tracks the pitch of a signal.@@ -636,10 +905,12 @@ -- -- > acps, alock  plltrack  asig, kd [, kloopf, kloopq, klf, khf, kthresh] ----- csound doc: <http://csound.com/docs/manual/plltrack.html>+-- csound doc: <https://csound.com/docs/manual/plltrack.html> plltrack ::  Sig -> Sig -> (Sig,Sig)-plltrack b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "plltrack" ([Ar,Ar],[Ar,Kr,Kr,Kr,Kr,Kr,Kr]) [a1,a2]+plltrack b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "plltrack" ([Ar,Ar],[Ar,Kr,Kr,Kr,Kr,Kr,Kr]) [a1,a2]  -- |  -- Tracks the pitch of a signal.@@ -648,10 +919,12 @@ -- -- > kcps, kamp  ptrack  asig, ihopsize[,ipeaks] ----- csound doc: <http://csound.com/docs/manual/ptrack.html>+-- csound doc: <https://csound.com/docs/manual/ptrack.html> ptrack ::  Sig -> D -> (Sig,Sig)-ptrack b1 b2 = pureTuple $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = mopcs "ptrack" ([Kr,Kr],[Ar,Ir,Ir]) [a1,a2]+ptrack b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = mopcs "ptrack" ([Kr,Kr],[Ar,Ir,Ir]) [a1,a2]  -- |  -- returns a value stored in the instance of an instrument.@@ -661,10 +934,12 @@ -- -- > ival  readscratch [index] ----- csound doc: <http://csound.com/docs/manual/readscratch.html>+-- csound doc: <https://csound.com/docs/manual/readscratch.html> readscratch ::   D-readscratch  = D $ return $ f -    where f  = opcs "readscratch" [(Ir,[Ir])] []+readscratch  =+  D $ return $ f +  where+    f  = opcs "readscratch" [(Ir,[Ir])] []  -- |  -- Rewinds the playback position of the current score performance.@@ -673,10 +948,12 @@ -- -- >   rewindscore  ----- csound doc: <http://csound.com/docs/manual/rewindscore.html>+-- csound doc: <https://csound.com/docs/manual/rewindscore.html> rewindscore ::   SE ()-rewindscore  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "rewindscore" [(Xr,[])] []+rewindscore  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "rewindscore" [(Xr,[])] []  -- |  -- Determines the root-mean-square amplitude of an audio signal.@@ -685,10 +962,12 @@ -- -- > kres  rms  asig [, ihp] [, iskip] ----- csound doc: <http://csound.com/docs/manual/rms.html>+-- csound doc: <https://csound.com/docs/manual/rms.html> rms ::  Sig -> Sig-rms b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "rms" [(Kr,[Ar,Ir,Ir])] [a1]+rms b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "rms" [(Kr,[Ar,Ir,Ir])] [a1]  -- |  -- Returns the ASCII code of a key that has been pressed.@@ -697,52 +976,78 @@ -- -- > kres[, kkeydown]  sensekey  ----- csound doc: <http://csound.com/docs/manual/sensekey.html>-sensekey :: Tuple a =>  a-sensekey  = pureTuple $ return $ f -    where f  = mopcs "sensekey" ([Kr,Kr],[]) []+-- csound doc: <https://csound.com/docs/manual/sensekey.html>+sensekey :: forall a . Tuple a =>  a+sensekey  =+  pureTuple $ return $ f +  where+    f  = mopcs "sensekey" ([Kr,Kr],[]) []  -- |  -- Generates a trigger signal according to the values stored in a table. -- -- > ktrig_out  seqtime  ktime_unit, kstart, kloop, kinitndx, kfn_times ----- csound doc: <http://csound.com/docs/manual/seqtime.html>+-- csound doc: <https://csound.com/docs/manual/seqtime.html> seqtime ::  Sig -> Sig -> Sig -> Sig -> Tab -> Sig-seqtime b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "seqtime" [(Kr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]+seqtime b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5+  where+    f a1 a2 a3 a4 a5 = opcs "seqtime" [(Kr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]  -- |  -- Generates a trigger signal according to the values stored in a table. -- -- > ktrig_out  seqtime2  ktrig_in, ktime_unit, kstart, kloop, kinitndx, kfn_times ----- csound doc: <http://csound.com/docs/manual/seqtime2.html>+-- csound doc: <https://csound.com/docs/manual/seqtime2.html> seqtime2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-seqtime2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "seqtime2" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]+seqtime2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "seqtime2" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]  -- | ++--+-- > kres   sequ   irhythm[], iinstr[], idata[], kbpm, klen [, kmode] [, kstep] [, kreset] [, kverbose]+-- >         +-- > kres   sequ   irhythm[], iinstr[],+-- >         idata[][], kbpm, klen [, kmode] [, kstep] [, kreset] [, kverbose]+-- >         +--+-- csound doc: <https://csound.com/docs/manual/sequ.html>+sequ ::  D -> Sig+sequ b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "sequ" [(Kr,[Ir,Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr]),(Kr,[Ir,Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr])] [a1]++-- |  -- Configurable slider controls for realtime user input. -- -- Configurable slider controls for realtime user input. Requires Winsound or TCL/TK. setctrl sets a slider to a specific value, or sets a minimum or maximum range. -- -- >  setctrl  inum, ival, itype ----- csound doc: <http://csound.com/docs/manual/setctrl.html>+-- csound doc: <https://csound.com/docs/manual/setctrl.html> setctrl ::  D -> D -> D -> SE ()-setctrl b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "setctrl" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+setctrl b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "setctrl" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Sets the playback position of the current score performance to a given position. -- -- >   setscorepos  ipos ----- csound doc: <http://csound.com/docs/manual/setscorepos.html>+-- csound doc: <https://csound.com/docs/manual/setscorepos.html> setscorepos ::  D -> SE ()-setscorepos b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "setscorepos" [(Xr,[Ir])] [a1]+setscorepos b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "setscorepos" [(Xr,[Ir])] [a1]  -- |  -- Split a trigger signal@@ -751,13 +1056,12 @@ -- -- >  splitrig  ktrig, kndx, imaxtics, ifn, kout1 [,kout2,...,koutN] ----- csound doc: <http://csound.com/docs/manual/splitrig.html>+-- csound doc: <https://csound.com/docs/manual/splitrig.html> splitrig ::  Sig -> Sig -> D -> Tab -> [Sig] -> SE ()-splitrig b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> mapM unSig b5-    where f a1 a2 a3 a4 a5 = opcs "splitrig" [(Xr,[Kr,Kr,Ir,Ir] ++ (repeat Kr))] ([a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4] ++ a5)+splitrig b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unTab) b4 <*> mapM (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "splitrig" [(Xr,[Kr,Kr,Ir,Ir] ++ (repeat Kr))] ([a1,a2,a3,a4] ++ a5)  -- |  -- Estimate the tempo of beat patterns in a control signal.@@ -765,31 +1069,37 @@ -- > ktemp  tempest  kin, iprd, imindur, imemdur, ihp, ithresh, ihtim, ixfdbak, \ -- >           istartempo, ifn [, idisprd] [, itweek] ----- csound doc: <http://csound.com/docs/manual/tempest.html>+-- csound doc: <https://csound.com/docs/manual/tempest.html> tempest ::  Sig -> D -> D -> D -> D -> D -> D -> D -> D -> Tab -> Sig-tempest b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unTab b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcs "tempest" [(Kr-                                                             ,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]+tempest b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unTab b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcs "tempest" [(Kr+                                                       ,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]  -- |  -- Apply tempo control to an uninterpreted score. -- -- >  tempo  ktempo, istartempo ----- csound doc: <http://csound.com/docs/manual/tempo.html>+-- csound doc: <https://csound.com/docs/manual/tempo.html> tempo ::  Sig -> D -> SE ()-tempo b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "tempo" [(Xr,[Kr,Ir])] [a1,a2]+tempo b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "tempo" [(Xr,[Kr,Ir])] [a1,a2]  -- |  -- Reads the current value of the tempo. -- -- > kres  tempoval  ----- csound doc: <http://csound.com/docs/manual/tempoval.html>+-- csound doc: <https://csound.com/docs/manual/tempoval.html> tempoval ::   Sig-tempoval  = Sig $ return $ f -    where f  = opcs "tempoval" [(Kr,[])] []+tempoval  =+  Sig $ return $ f +  where+    f  = opcs "tempoval" [(Kr,[])] []  -- |  -- Time Variant Sequencer@@ -799,30 +1109,36 @@ -- -- > ktrig   timedseq   ktimpnt, ifn, kp1 [,kp2, kp3, ...,kpN] ----- csound doc: <http://csound.com/docs/manual/timedseq.html>+-- csound doc: <https://csound.com/docs/manual/timedseq.html> timedseq ::  Sig -> Tab -> [Sig] -> Sig-timedseq b1 b2 b3 = Sig $ f <$> unSig b1 <*> unTab b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "timedseq" [(Kr,[Kr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)+timedseq b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unTab b2 <*> mapM unSig b3+  where+    f a1 a2 a3 = opcs "timedseq" [(Kr,[Kr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)  -- |  -- Informs when a krate signal crosses a threshold. -- -- > kout  trigger  ksig, kthreshold, kmode ----- csound doc: <http://csound.com/docs/manual/trigger.html>+-- csound doc: <https://csound.com/docs/manual/trigger.html> trigger ::  Sig -> Sig -> Sig -> Sig-trigger b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "trigger" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]+trigger b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "trigger" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Accepts a trigger signal as input and outputs a group of values. -- -- >  trigseq  ktrig_in, kstart, kloop, kinitndx, kfn_values, kout1 [, kout2] [...] ----- csound doc: <http://csound.com/docs/manual/trigseq.html>+-- csound doc: <https://csound.com/docs/manual/trigseq.html> trigseq ::  Sig -> Sig -> Sig -> Sig -> Tab -> [Sig] -> SE ()-trigseq b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5 <*> mapM unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "trigseq" [(Xr,(repeat Kr))] ([a1,a2,a3,a4,a5] ++ a6)+trigseq b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unTab) b5 <*> mapM (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "trigseq" [(Xr,(repeat Kr))] ([a1,a2,a3,a4,a5] ++ a6)  -- |  -- Envelope follower unit generator.@@ -832,10 +1148,12 @@ -- -- > ares  vactrol  asig [iup, idown] ----- csound doc: <http://csound.com/docs/manual/vactrol.html>+-- csound doc: <https://csound.com/docs/manual/vactrol.html> vactrol ::  Sig -> Sig-vactrol b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "vactrol" [(Ar,[Ar,Ir,Ir])] [a1]+vactrol b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "vactrol" [(Ar,[Ar,Ir,Ir])] [a1]  -- |  -- Reads data from a number of external Nintendo Wiimote controllers.@@ -844,10 +1162,12 @@ -- -- > ires  wiiconnect  [itimeout, imaxnum] ----- csound doc: <http://csound.com/docs/manual/wiiconnect.html>+-- csound doc: <https://csound.com/docs/manual/wiiconnect.html> wiiconnect ::   D-wiiconnect  = D $ return $ f -    where f  = opcs "wiiconnect" [(Ir,[Ir,Ir])] []+wiiconnect  =+  D $ return $ f +  where+    f  = opcs "wiiconnect" [(Ir,[Ir,Ir])] []  -- |  -- Reads data fields from a number of external Nintendo Wiimote controllers.@@ -856,30 +1176,36 @@ -- -- > kres  wiidata  kcontrol[, knum] ----- csound doc: <http://csound.com/docs/manual/wiidata.html>+-- csound doc: <https://csound.com/docs/manual/wiidata.html> wiidata ::  Sig -> Sig-wiidata b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "wiidata" [(Kr,[Kr,Kr])] [a1]+wiidata b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "wiidata" [(Kr,[Kr,Kr])] [a1]  -- |  -- Sets scaling and range limits for certain Wiimote fields. -- -- >   wiirange  icontrol, iminimum, imaximum[, inum] ----- csound doc: <http://csound.com/docs/manual/wiirange.html>+-- csound doc: <https://csound.com/docs/manual/wiirange.html> wiirange ::  D -> D -> D -> SE ()-wiirange b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "wiirange" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]+wiirange b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "wiirange" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Sends data to one of a number of external Nintendo Wiimote controllers. -- -- > kres  wiisend  kcontrol, kvalue[, knum] ----- csound doc: <http://csound.com/docs/manual/wiisend.html>+-- csound doc: <https://csound.com/docs/manual/wiisend.html> wiisend ::  Sig -> Sig -> Sig-wiisend b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "wiisend" [(Kr,[Kr,Kr,Kr])] [a1,a2]+wiisend b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "wiisend" [(Kr,[Kr,Kr,Kr])] [a1,a2]  -- |  -- writes a value into the scratchpad of the instance of an instrument.@@ -889,10 +1215,12 @@ -- -- >  writescratch ival[, index] ----- csound doc: <http://csound.com/docs/manual/writescratch.html>+-- csound doc: <https://csound.com/docs/manual/writescratch.html> writescratch ::  D -> SE ()-writescratch b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "writescratch" [(Xr,[Ir,Ir])] [a1]+writescratch b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "writescratch" [(Xr,[Ir,Ir])] [a1]  -- |  -- Sense the cursor position in an output window@@ -901,10 +1229,12 @@ -- -- > kx, ky  xyin  iprd, ixmin, ixmax, iymin, iymax [, ixinit] [, iyinit] ----- csound doc: <http://csound.com/docs/manual/xyin.html>+-- csound doc: <https://csound.com/docs/manual/xyin.html> xyin ::  D -> D -> D -> D -> D -> (Sig,Sig)-xyin b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "xyin" ([Kr,Kr],[Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]+xyin b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "xyin" ([Kr,Kr],[Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]  -- Stacks. @@ -916,10 +1246,12 @@ -- > xval1, [xval2, ... , xval31]  pop  -- > ival1, [ival2, ... , ival31]  pop  ----- csound doc: <http://csound.com/docs/manual/pop.html>-pop :: Tuple a =>  a-pop  = pureTuple $ return $ f -    where f  = mopcs "pop" ((repeat Ir),[]) []+-- csound doc: <https://csound.com/docs/manual/pop.html>+pop :: forall a . Tuple a =>  a+pop  =+  pureTuple $ return $ f +  where+    f  = mopcs "pop" ((repeat Ir),[]) []  -- |  -- Pops an f-sig frame from the global stack.  Deprecated.@@ -928,10 +1260,12 @@ -- -- > fsig  pop_f  ----- csound doc: <http://csound.com/docs/manual/pop_f.html>+-- csound doc: <https://csound.com/docs/manual/pop_f.html> pop_f ::   Spec-pop_f  = Spec $ return $ f -    where f  = opcs "pop_f" [(Fr,[])] []+pop_f  =+  Spec $ return $ f +  where+    f  = opcs "pop_f" [(Fr,[])] []  -- |  -- Pushes a value into the global stack.  Deprecated.@@ -941,10 +1275,12 @@ -- >  push   xval1, [xval2, ... , xval31] -- >  push   ival1, [ival2, ... , ival31] ----- csound doc: <http://csound.com/docs/manual/push.html>+-- csound doc: <https://csound.com/docs/manual/push.html> push ::  [Sig] -> SE ()-push b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unSig b1-    where f a1 = opcs "push" [(Xr,(repeat Xr))] a1+push b1 =+  SE $ join $ f <$> mapM (lift . unSig) b1+  where+    f a1 = opcsDep_ "push" [(Xr,(repeat Xr))] a1  -- |  -- Pushes an f-sig frame into the global stack.  Deprecated.@@ -953,10 +1289,12 @@ -- -- >  push_f   fsig ----- csound doc: <http://csound.com/docs/manual/push_f.html>+-- csound doc: <https://csound.com/docs/manual/push_f.html> push_f ::  Spec -> SE ()-push_f b1 = SE $ (depT_ =<<) $ lift $ f <$> unSpec b1-    where f a1 = opcs "push_f" [(Xr,[Fr])] [a1]+push_f b1 =+  SE $ join $ f <$> (lift . unSpec) b1+  where+    f a1 = opcsDep_ "push_f" [(Xr,[Fr])] [a1]  -- |  -- Initializes the stack.  Deprecated.@@ -965,10 +1303,12 @@ -- -- >  stack   iStackSize ----- csound doc: <http://csound.com/docs/manual/stack.html>+-- csound doc: <https://csound.com/docs/manual/stack.html> stack ::  D -> SE ()-stack b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "stack" [(Xr,[Ir])] [a1]+stack b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "stack" [(Xr,[Ir])] [a1]  -- Subinstrument Control. @@ -980,10 +1320,12 @@ -- > a1, [...] [, a8]  subinstr  instrnum [, p4] [, p5] [...] -- > a1, [...] [, a8]  subinstr  "insname" [, p4] [, p5] [...] ----- csound doc: <http://csound.com/docs/manual/subinstr.html>-subinstr :: Tuple a => D -> [D] -> a-subinstr b1 b2 = pureTuple $ f <$> unD b1 <*> mapM unD b2-    where f a1 a2 = mopcs "subinstr" ((repeat Ar),[Sr] ++ (repeat Ir)) ([a1] ++ a2)+-- csound doc: <https://csound.com/docs/manual/subinstr.html>+subinstr :: forall a . Tuple a => D -> [D] -> a+subinstr b1 b2 =+  pureTuple $ f <$> unD b1 <*> mapM unD b2+  where+    f a1 a2 = mopcs "subinstr" ((repeat Ar),[Sr] ++ (repeat Ir)) ([a1] ++ a2)  -- |  -- Creates and runs a numbered instrument instance at init-time.@@ -993,10 +1335,12 @@ -- >  subinstrinit  instrnum [, p4] [, p5] [...] -- >  subinstrinit  "insname" [, p4] [, p5] [...] ----- csound doc: <http://csound.com/docs/manual/subinstrinit.html>+-- csound doc: <https://csound.com/docs/manual/subinstrinit.html> subinstrinit ::  D -> [D] -> SE ()-subinstrinit b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> mapM unD b2-    where f a1 a2 = opcs "subinstrinit" [(Xr,(repeat Ir))] ([a1] ++ a2)+subinstrinit b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> mapM (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "subinstrinit" [(Xr,(repeat Ir))] ([a1] ++ a2)  -- Time Reading. @@ -1012,30 +1356,86 @@ -- > ir[, inano]  date  -- > kr[, knano]  date  ----- csound doc: <http://csound.com/docs/manual/date.html>-date :: Tuple a =>  a-date  = pureTuple $ return $ f -    where f  = mopcs "date" ([Kr,Kr],[]) []+-- csound doc: <https://csound.com/docs/manual/date.html>+date :: forall a . Tuple a =>  a+date  =+  pureTuple $ return $ f +  where+    f  = mopcs "date" ([Kr,Kr],[]) []  -- |  -- Returns as a string the date and time specified. -- -- > Sir  dates  [ itime] ----- csound doc: <http://csound.com/docs/manual/dates.html>+-- csound doc: <https://csound.com/docs/manual/dates.html> dates ::   Str-dates  = Str $ return $ f -    where f  = opcs "dates" [(Sr,[Ir])] []+dates  =+  Str $ return $ f +  where+    f  = opcs "dates" [(Sr,[Ir])] []  -- | ++--+-- > ires  elapsedcycles +-- > kres  elapsedcycles +--+-- csound doc: <https://csound.com/docs/manual/elapsedcycles.html>+elapsedcycles ::   Sig+elapsedcycles  =+  Sig $ return $ f +  where+    f  = opcs "elapsedcycles" [(Ir,[]),(Kr,[])] []++-- | ++--+-- > ires  elapsedtime +-- > kres  elapsedtime +--+-- csound doc: <https://csound.com/docs/manual/elapsedtime.html>+elapsedtime ::   Sig+elapsedtime  =+  Sig $ return $ f +  where+    f  = opcs "elapsedtime" [(Ir,[]),(Kr,[])] []++-- | ++--+-- > kres  eventcycles +--+-- csound doc: <https://csound.com/docs/manual/eventcycles.html>+eventcycles ::   Sig+eventcycles  =+  Sig $ return $ f +  where+    f  = opcs "eventcycles" [(Kr,[])] []++-- | ++--+-- > kres  eventtime +--+-- csound doc: <https://csound.com/docs/manual/eventtime.html>+eventtime ::   Sig+eventtime  =+  Sig $ return $ f +  where+    f  = opcs "eventtime" [(Kr,[])] []++-- |  -- Reads the value of an internal clock. -- -- > ir  readclock  inum ----- csound doc: <http://csound.com/docs/manual/readclock.html>+-- csound doc: <https://csound.com/docs/manual/readclock.html> readclock ::  D -> D-readclock b1 = D $ f <$> unD b1-    where f a1 = opcs "readclock" [(Ir,[Ir])] [a1]+readclock b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "readclock" [(Ir,[Ir])] [a1]  -- |  -- Read the real time clock from the operating system.@@ -1045,10 +1445,12 @@ -- > ires  rtclock  -- > kres  rtclock  ----- csound doc: <http://csound.com/docs/manual/rtclock.html>+-- csound doc: <https://csound.com/docs/manual/rtclock.html> rtclock ::   Sig-rtclock  = Sig $ return $ f -    where f  = opcs "rtclock" [(Ir,[]),(Kr,[])] []+rtclock  =+  Sig $ return $ f +  where+    f  = opcs "rtclock" [(Ir,[]),(Kr,[])] []  -- |  -- Read absolute time in k-rate cycles.@@ -1059,10 +1461,12 @@ -- -- > kres  timeinstk  ----- csound doc: <http://csound.com/docs/manual/timeinstk.html>+-- csound doc: <https://csound.com/docs/manual/timeinstk.html> timeinstk ::   Sig-timeinstk  = Sig $ return $ f -    where f  = opcs "timeinstk" [(Kr,[])] []+timeinstk  =+  Sig $ return $ f +  where+    f  = opcs "timeinstk" [(Kr,[])] []  -- |  -- Read absolute time in seconds.@@ -1071,10 +1475,12 @@ -- -- > kres  timeinsts  ----- csound doc: <http://csound.com/docs/manual/timeinsts.html>+-- csound doc: <https://csound.com/docs/manual/timeinsts.html> timeinsts ::   Sig-timeinsts  = Sig $ return $ f -    where f  = opcs "timeinsts" [(Kr,[])] []+timeinsts  =+  Sig $ return $ f +  where+    f  = opcs "timeinsts" [(Kr,[])] []  -- |  -- Read absolute time in k-rate cycles.@@ -1084,10 +1490,12 @@ -- > ires  timek  -- > kres  timek  ----- csound doc: <http://csound.com/docs/manual/timek.html>+-- csound doc: <https://csound.com/docs/manual/timek.html> timek ::   SE Sig-timek  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "timek" [(Ir,[]),(Kr,[])] []+timek  =+  fmap ( Sig . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "timek" [(Ir,[]),(Kr,[])] []  -- |  -- Read absolute time in seconds.@@ -1097,7 +1505,9 @@ -- > ires  times  -- > kres  times  ----- csound doc: <http://csound.com/docs/manual/times.html>+-- csound doc: <https://csound.com/docs/manual/times.html> times ::   SE Sig-times  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "times" [(Ir,[]),(Kr,[])] []+times  =+  fmap ( Sig . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "times" [(Ir,[]),(Kr,[])] []
src/Csound/Typed/Opcode/JackoOpcodes.hs view
@@ -5,6 +5,7 @@     jackoAudioIn, jackoAudioInConnect, jackoAudioOut, jackoAudioOutConnect, jackoInit, jackoMidiInConnect, jackoMidiOut, jackoMidiOutConnect, jackoNoteOut, jackoOn, jackoTransport) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -20,10 +21,12 @@ -- -- > asignal  JackoAudioIn ScsoundPortName ----- csound doc: <http://csound.com/docs/manual/JackoAudioIn.html>+-- csound doc: <https://csound.com/docs/manual/JackoAudioIn.html> jackoAudioIn ::  Str -> SE Sig-jackoAudioIn b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "JackoAudioIn" [(Ar,[Sr])] [a1]+jackoAudioIn b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep "JackoAudioIn" [(Ar,[Sr])] [a1]  -- |  -- Creates an audio connection from a Jack port to Csound.@@ -34,10 +37,12 @@ -- -- >  JackoAudioInConnect SexternalPortName, ScsoundPortName ----- csound doc: <http://csound.com/docs/manual/JackoAudioInConnect.html>+-- csound doc: <https://csound.com/docs/manual/JackoAudioInConnect.html> jackoAudioInConnect ::  Str -> Str -> SE ()-jackoAudioInConnect b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "JackoAudioInConnect" [(Xr,[Sr,Sr])] [a1,a2]+jackoAudioInConnect b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "JackoAudioInConnect" [(Xr,[Sr,Sr])] [a1,a2]  -- |  -- Sends an audio signal to a Jack port.@@ -48,10 +53,12 @@ -- -- >  JackoAudioOut  ScsoundPortName, asignal ----- csound doc: <http://csound.com/docs/manual/JackoAudioOut.html>+-- csound doc: <https://csound.com/docs/manual/JackoAudioOut.html> jackoAudioOut ::  Str -> Sig -> SE ()-jackoAudioOut b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "JackoAudioOut" [(Xr,[Sr,Ar])] [a1,a2]+jackoAudioOut b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "JackoAudioOut" [(Xr,[Sr,Ar])] [a1,a2]  -- |  -- Creates an audio connection from Csound to a Jack port.@@ -62,10 +69,12 @@ -- -- >  JackoAudioOutConnect ScsoundPortName, SexternalPortName ----- csound doc: <http://csound.com/docs/manual/JackoAudioOutConnect.html>+-- csound doc: <https://csound.com/docs/manual/JackoAudioOutConnect.html> jackoAudioOutConnect ::  Str -> Str -> SE ()-jackoAudioOutConnect b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "JackoAudioOutConnect" [(Xr,[Sr,Sr])] [a1,a2]+jackoAudioOutConnect b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "JackoAudioOutConnect" [(Xr,[Sr,Sr])] [a1,a2]  -- |  -- Initializes Csound as a Jack client.@@ -74,10 +83,12 @@ -- -- >  JackoInit ServerName, SclientName ----- csound doc: <http://csound.com/docs/manual/JackoInit.html>+-- csound doc: <https://csound.com/docs/manual/JackoInit.html> jackoInit ::  Str -> Str -> SE ()-jackoInit b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "JackoInit" [(Xr,[Sr,Sr])] [a1,a2]+jackoInit b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "JackoInit" [(Xr,[Sr,Sr])] [a1,a2]  -- |  -- Creates a MIDI  connection from a Jack port to Csound.@@ -87,10 +98,12 @@ -- -- >  JackoMidiInConnect SexternalPortName, ScsoundPortName ----- csound doc: <http://csound.com/docs/manual/JackoMidiInConnect.html>+-- csound doc: <https://csound.com/docs/manual/JackoMidiInConnect.html> jackoMidiInConnect ::  Str -> Str -> SE ()-jackoMidiInConnect b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "JackoMidiInConnect" [(Xr,[Sr,Sr])] [a1,a2]+jackoMidiInConnect b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "JackoMidiInConnect" [(Xr,[Sr,Sr])] [a1,a2]  -- |  -- Sends a MIDI channel message to a Jack port.@@ -101,10 +114,12 @@ -- -- >  JackoMidiOut  ScsoundPortName, kstatus, kchannel, kdata1[, kdata2] ----- csound doc: <http://csound.com/docs/manual/JackoMidiOut.html>+-- csound doc: <https://csound.com/docs/manual/JackoMidiOut.html> jackoMidiOut ::  Str -> Sig -> Sig -> Sig -> SE ()-jackoMidiOut b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "JackoMidiOut" [(Xr,[Sr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+jackoMidiOut b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "JackoMidiOut" [(Xr,[Sr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Creates a MIDI connection from Csound to a Jack port.@@ -115,10 +130,12 @@ -- -- >  JackoMidiOutConnect ScsoundPortName, SexternalPortName ----- csound doc: <http://csound.com/docs/manual/JackoMidiOutConnect.html>+-- csound doc: <https://csound.com/docs/manual/JackoMidiOutConnect.html> jackoMidiOutConnect ::  Str -> Str -> SE ()-jackoMidiOutConnect b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "JackoMidiOutConnect" [(Xr,[Sr,Sr])] [a1,a2]+jackoMidiOutConnect b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "JackoMidiOutConnect" [(Xr,[Sr,Sr])] [a1,a2]  -- |  -- Sends a MIDI channel message to a Jack port.@@ -129,10 +146,12 @@ -- -- >  JackoNoteOut  ScsoundPortName, kstatus, kchannel, kdata1[, kdata2] ----- csound doc: <http://csound.com/docs/manual/JackoNoteOut.html>+-- csound doc: <https://csound.com/docs/manual/JackoNoteOut.html> jackoNoteOut ::  Str -> Sig -> Sig -> Sig -> SE ()-jackoNoteOut b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "JackoNoteOut" [(Xr,[Sr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+jackoNoteOut b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "JackoNoteOut" [(Xr,[Sr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Enables or disables all Jack ports.@@ -143,10 +162,12 @@ -- -- >  JackoOn [iactive]  ----- csound doc: <http://csound.com/docs/manual/JackoOn.html>+-- csound doc: <https://csound.com/docs/manual/JackoOn.html> jackoOn ::   SE ()-jackoOn  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "JackoOn" [(Xr,[Ir])] []+jackoOn  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "JackoOn" [(Xr,[Ir])] []  -- |  -- Control the Jack transport.@@ -157,7 +178,9 @@ -- -- >  JackoTransport  kcommand, [kposition] ----- csound doc: <http://csound.com/docs/manual/JackoTransport.html>+-- csound doc: <https://csound.com/docs/manual/JackoTransport.html> jackoTransport ::  Sig -> SE ()-jackoTransport b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "JackoTransport" [(Xr,[Kr,Kr])] [a1]+jackoTransport b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "JackoTransport" [(Xr,[Kr,Kr])] [a1]
src/Csound/Typed/Opcode/MathematicalOperations.hs view
@@ -1,6 +1,9 @@ module Csound.Typed.Opcode.MathematicalOperations (          +    -- * Arrays.+    cbrt, fmax, fmin, fmod, hypot, limit1,+         -- * Comparators and Accumulators.     clear, vincr,     @@ -14,9 +17,96 @@     divz, mac, maca, polynomial, pow, product', sum', taninv2) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed +-- Arrays.++-- | ++--+-- > ires[]  cbrt  iarg+-- > kres[]  cbrt  karg+--+-- csound doc: <https://csound.com/docs/manual/cbrt.html>+cbrt ::  D -> Sig+cbrt b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "cbrt" [(Ir,[Ir]),(Kr,[Kr])] [a1]++-- | ++--+-- > ires[]  fmax  iarg1[], iarg2[] +-- > kres[]  fmax  karg1[], karg2[]+-- > ires[]  fmax  iarg1[], iarg2 +-- > kres[]  fmax  karg[], karg2 +--+-- csound doc: <https://csound.com/docs/manual/fmax.html>+fmax ::  D -> Sig+fmax b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "fmax" [(Ir,[Ir,Ir]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1]++-- | ++--+-- > ires[]  fmin  iarg1[], iarg2[] +-- > kres[]  fmin  karg1[], karg2[]+-- > ires[]  fmin  iarg1[], iarg2 +-- > kres[]  fmin  karg[], karg2 +--+-- csound doc: <https://csound.com/docs/manual/fmin.html>+fmin ::  D -> Sig+fmin b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "fmin" [(Ir,[Ir,Ir]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1]++-- | ++--+-- > ires[]  fmod  iarg1[], iarg2[] +-- > kres[]  fmod  karg1[], karg2[]+-- > ires[]  fmod  iarg1[], iarg2 +-- > kres[]  fmod  karg[], karg2 +--+-- csound doc: <https://csound.com/docs/manual/fmod.html>+fmod ::  D -> Sig+fmod b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "fmod" [(Ir,[Ir,Ir]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1]++-- | ++--+-- > ires[]  hypot  iarg1[], iarg2[] +-- > kres[]  hypot  karg1[], karg2[]+--+-- csound doc: <https://csound.com/docs/manual/hypot.html>+hypot ::  D -> Sig+hypot b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "hypot" [(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1]++-- | ++--+-- > ires[]  limit1  iarg+-- > kres[]  limit1  karg+--+-- csound doc: <https://csound.com/docs/manual/limit1.html>+limit1 ::  D -> Sig+limit1 b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "limit1" [(Ir,[Ir]),(Kr,[Kr])] [a1]+ -- Comparators and Accumulators.  -- | @@ -25,11 +115,14 @@ -- clear zeroes a list of audio signals. -- -- >  clear  avar1 [, avar2] [, avar3] [...]+-- >  clear  avar[] ----- csound doc: <http://csound.com/docs/manual/clear.html>+-- csound doc: <https://csound.com/docs/manual/clear.html> clear ::  [Sig] -> SE ()-clear b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unSig b1-    where f a1 = opcs "clear" [(Xr,(repeat Ar))] a1+clear b1 =+  SE $ join $ f <$> mapM (lift . unSig) b1+  where+    f a1 = opcsDep_ "clear" [(Xr,(repeat Ar))] a1  -- |  -- Accumulates audio signals.@@ -38,10 +131,12 @@ -- -- >  vincr  accum, aincr ----- csound doc: <http://csound.com/docs/manual/vincr.html>+-- csound doc: <https://csound.com/docs/manual/vincr.html> vincr ::  Sig -> Sig -> SE ()-vincr b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "vincr" [(Xr,[Ar,Ar])] [a1,a2]+vincr b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "vincr" [(Xr,[Ar,Ar])] [a1,a2]  -- Amplitude Functions. @@ -52,10 +147,12 @@ -- -- >  ampdb (x)  (no rate restriction) ----- csound doc: <http://csound.com/docs/manual/ampdb.html>+-- csound doc: <https://csound.com/docs/manual/ampdb.html> ampdb :: SigOrD a => a -> a-ampdb b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "ampdb" a1+ampdb b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "ampdb" a1  -- |  -- Returns the amplitude equivalent (in 16-bit signed integer scale) of the full scale decibel (dB FS) value x.@@ -64,20 +161,24 @@ -- -- >  ampdbfs (x)  (no rate restriction) ----- csound doc: <http://csound.com/docs/manual/ampdbfs.html>+-- csound doc: <https://csound.com/docs/manual/ampdbfs.html> ampdbfs :: SigOrD a => a -> a-ampdbfs b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "ampdbfs" a1+ampdbfs b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "ampdbfs" a1  -- |  -- Returns the decibel equivalent of the raw amplitude x. -- -- >  dbamp (x)  (init-rate or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/dbamp.html>+-- csound doc: <https://csound.com/docs/manual/dbamp.html> dbamp :: SigOrD a => a -> a-dbamp b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "dbamp" a1+dbamp b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "dbamp" a1  -- |  -- Returns the decibel equivalent of the raw amplitude x, relative to full scale amplitude.@@ -86,10 +187,12 @@ -- -- >  dbfsamp (x)  (init-rate or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/dbfsamp.html>+-- csound doc: <https://csound.com/docs/manual/dbfsamp.html> dbfsamp :: SigOrD a => a -> a-dbfsamp b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "dbfsamp" a1+dbfsamp b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "dbfsamp" a1  -- Random Functions. @@ -98,20 +201,24 @@ -- -- >  birnd (x) (init- or control-rate only) ----- csound doc: <http://csound.com/docs/manual/birnd.html>+-- csound doc: <https://csound.com/docs/manual/birnd.html> birnd :: SigOrD a => a -> SE a-birnd b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opr1k "birnd" a1+birnd b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opr1kDep "birnd" a1  -- |  -- Returns a random number in a unipolar range at the rate given by the input argument. -- -- >  rnd (x) (init- or control-rate only) ----- csound doc: <http://csound.com/docs/manual/rnd.html>+-- csound doc: <https://csound.com/docs/manual/rnd.html> rnd :: SigOrD a => a -> SE a-rnd b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opr1k "rnd" a1+rnd b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opr1kDep "rnd" a1  -- Opcode Equivalents of Functions. @@ -123,30 +230,36 @@ -- > kres  divz  ka, kb, ksubst -- > ... divz (ka, kb, ksubst)... (no rate restriction) ----- csound doc: <http://csound.com/docs/manual/divz.html>+-- csound doc: <https://csound.com/docs/manual/divz.html> divz :: SigOrD a => a -> a -> a-divz b1 b2 = fromGE $ f <$> toGE b1 <*> toGE b2-    where f a1 a2 = opcs "divz" [(Ar,[Xr,Xr]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir])] [a1,a2]+divz b1 b2 =+  fromGE $ f <$> toGE b1 <*> toGE b2+  where+    f a1 a2 = opcs "divz" [(Ar,[Xr,Xr]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir])] [a1,a2]  -- |  -- Multiplies and accumulates a- and k-rate signals. -- -- > ares  mac  ksig1, asig1 [, ksig2] [, asig2] [, ksig3] [, asig3] [...] ----- csound doc: <http://csound.com/docs/manual/mac.html>+-- csound doc: <https://csound.com/docs/manual/mac.html> mac ::  [Sig] -> Sig-mac b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "mac" [(Ar,[Kr,Ar,Kr,Ar,Kr] ++ (repeat Ar))] a1+mac b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "mac" [(Ar,[Kr,Ar,Kr,Ar,Kr] ++ (repeat Ar))] a1  -- |  -- Multiply and accumulate a-rate signals only. -- -- > ares  maca  asig1 , asig2 [, asig3] [, asig4] [, asig5] [...] ----- csound doc: <http://csound.com/docs/manual/maca.html>+-- csound doc: <https://csound.com/docs/manual/maca.html> maca ::  [Sig] -> Sig-maca b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "maca" [(Ar,(repeat Ar))] a1+maca b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "maca" [(Ar,(repeat Ar))] a1  -- |  -- Efficiently evaluates a polynomial of arbitrary order.@@ -155,10 +268,12 @@ -- -- > aout  polynomial  ain, k0 [, k1 [, k2 [...]]] ----- csound doc: <http://csound.com/docs/manual/polynomial.html>+-- csound doc: <https://csound.com/docs/manual/polynomial.html> polynomial ::  Sig -> [Sig] -> Sig-polynomial b1 b2 = Sig $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "polynomial" [(Ar,[Ar] ++ (repeat Kr))] ([a1] ++ a2)+polynomial b1 b2 =+  Sig $ f <$> unSig b1 <*> mapM unSig b2+  where+    f a1 a2 = opcs "polynomial" [(Ar,[Ar] ++ (repeat Kr))] ([a1] ++ a2)  -- |  -- Computes one argument to the power of another argument.@@ -167,33 +282,36 @@ -- -- > ares  pow  aarg, kpow [, inorm] -- > ires  pow  iarg, ipow [, inorm]--- > kres  pow  karg, kpow [,--- >         inorm]+-- > kres  pow  karg, kpow [, inorm] -- > ires[]  pow  iarg[], ipow[]  -- > kres[]  pow  karg[], kpow[] -- > ires[]  pow  iarg[], ipow  -- > kres[]  pow  karg[], kpow  ----- csound doc: <http://csound.com/docs/manual/pow.html>+-- csound doc: <https://csound.com/docs/manual/pow.html> pow ::  Sig -> Sig -> Sig-pow b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "pow" [(Ar,[Ar,Kr,Ir])-                               ,(Ir,[Ir,Ir,Ir])-                               ,(Kr,[Kr,Kr,Ir])-                               ,(Ir,[Ir,Ir])-                               ,(Kr,[Kr,Kr])-                               ,(Ir,[Ir,Ir])-                               ,(Kr,[Kr,Kr])] [a1,a2]+pow b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "pow" [(Ar,[Ar,Kr,Ir])+                         ,(Ir,[Ir,Ir,Ir])+                         ,(Kr,[Kr,Kr,Ir])+                         ,(Ir,[Ir,Ir])+                         ,(Kr,[Kr,Kr])+                         ,(Ir,[Ir,Ir])+                         ,(Kr,[Kr,Kr])] [a1,a2]  -- |  -- Multiplies any number of a-rate signals. -- -- > ares  product  asig1, asig2 [, asig3] [...] ----- csound doc: <http://csound.com/docs/manual/product.html>+-- csound doc: <https://csound.com/docs/manual/product.html> product' ::  [Sig] -> Sig-product' b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "product" [(Ar,(repeat Ar))] a1+product' b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "product" [(Ar,(repeat Ar))] a1  -- |  -- Sums any number of a-rate signals, or array elements.@@ -202,10 +320,12 @@ -- > kres  sum  karr -- > ires  sum  iarr ----- csound doc: <http://csound.com/docs/manual/sum.html>+-- csound doc: <https://csound.com/docs/manual/sum.html> sum' ::  [Sig] -> Sig-sum' b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "sum" [(Ar,(repeat Ar)),(Kr,[Kr]),(Ir,[Ir])] a1+sum' b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "sum" [(Ar,(repeat Ar)),(Kr,[Kr]),(Ir,[Ir])] a1  -- |  -- Returns an arctangent.@@ -217,7 +337,9 @@ -- > kres  taninv2  ky, kx -- > ... taninv2 (ky, kx)... (no rate restriction) ----- csound doc: <http://csound.com/docs/manual/taninv2.html>+-- csound doc: <https://csound.com/docs/manual/taninv2.html> taninv2 :: SigOrD a => a -> a -> a-taninv2 b1 b2 = fromGE $ f <$> toGE b1 <*> toGE b2-    where f a1 a2 = opcs "taninv2" [(Ar,[Ar,Ar]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir])] [a1,a2]+taninv2 b1 b2 =+  fromGE $ f <$> toGE b1 <*> toGE b2+  where+    f a1 a2 = opcs "taninv2" [(Ar,[Ar,Ar]),(Kr,[Kr,Kr]),(Ir,[Ir,Ir])] [a1,a2]
src/Csound/Typed/Opcode/Miscellaneous.hs view
@@ -2,9 +2,10 @@               -    directory, fareylen, fareyleni, modmatrix, pwd, select, system_i, system, tableshuffle, tableshufflei) where+    directory, fareylen, fareyleni, framebuffer, modmatrix, nchnls_hw, olabuffer, pwd, select, system_i, system, tableshuffle, tableshufflei) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -17,10 +18,12 @@ -- -- > SFiles[]  directory  SDirectory[, SExtention] ----- csound doc: <http://csound.com/docs/manual/directory.html>+-- csound doc: <https://csound.com/docs/manual/directory.html> directory ::  Str -> Str-directory b1 = Str $ f <$> unStr b1-    where f a1 = opcs "directory" [(Sr,[Sr,Sr])] [a1]+directory b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "directory" [(Sr,[Sr,Sr])] [a1]  -- |  -- returns the length of a Farey Sequence.@@ -32,10 +35,12 @@ -- -- > kfl  fareylen  kfn ----- csound doc: <http://csound.com/docs/manual/fareylen.html>+-- csound doc: <https://csound.com/docs/manual/fareylen.html> fareylen ::  Tab -> Sig-fareylen b1 = Sig $ f <$> unTab b1-    where f a1 = opcs "fareylen" [(Kr,[Kr])] [a1]+fareylen b1 =+  Sig $ f <$> unTab b1+  where+    f a1 = opcs "fareylen" [(Kr,[Kr])] [a1]  -- |  -- returns the length of a Farey Sequence.@@ -47,12 +52,27 @@ -- -- > ifl  fareyleni  ifn ----- csound doc: <http://csound.com/docs/manual/fareyleni.html>+-- csound doc: <https://csound.com/docs/manual/fareyleni.html> fareyleni ::  Tab -> D-fareyleni b1 = D $ f <$> unTab b1-    where f a1 = opcs "fareyleni" [(Ir,[Ir])] [a1]+fareyleni b1 =+  D $ f <$> unTab b1+  where+    f a1 = opcs "fareyleni" [(Ir,[Ir])] [a1]  -- | ++--+-- > kout[]  framebuffer  ain, isize+-- > aout  framebuffer  kin, isize+--+-- csound doc: <https://csound.com/docs/manual/framebuffer.html>+framebuffer ::  Sig -> D -> Sig+framebuffer b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "framebuffer" [(Kr,[Ar,Ir]),(Ar,[Kr,Ir])] [a1,a2]++-- |  -- Modulation matrix opcode with optimizations for sparse matrices. -- -- The opcode can be used to let a large number of k-rate modulator@@ -65,18 +85,44 @@ -- >  modmatrix  iresfn, isrcmodfn, isrcparmfn, imodscale, inum_mod, \\ -- >     inum_parm, kupdate ----- csound doc: <http://csound.com/docs/manual/modmatrix.html>+-- csound doc: <https://csound.com/docs/manual/modmatrix.html> modmatrix ::  Tab -> Tab -> Tab -> D -> D -> D -> Sig -> SE ()-modmatrix b1 b2 b3 b4 b5 b6 b7 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unTab b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "modmatrix" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Kr])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6-                                                                                  ,a7]+modmatrix b1 b2 b3 b4 b5 b6 b7 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unTab) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unSig) b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcsDep_ "modmatrix" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Kr])] [a1+                                                                                ,a2+                                                                                ,a3+                                                                                ,a4+                                                                                ,a5+                                                                                ,a6+                                                                                ,a7]  -- | ++--+-- > idacc,iadcc  nchnls_hw +--+-- csound doc: <https://csound.com/docs/manual/nchnls_hw.html>+nchnls_hw ::   (D,D)+nchnls_hw  =+  pureTuple $ return $ f +  where+    f  = mopcs "nchnls_hw" ([Ir,Ir],[]) []++-- | ++--+-- > aout  olabuffer  kin, ioverlap+--+-- csound doc: <https://csound.com/docs/manual/olabuffer.html>+olabuffer ::  Sig -> D -> Sig+olabuffer b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "olabuffer" [(Ar,[Kr,Ir])] [a1,a2]++-- |  -- Asks the underlying operating system for the current directory --       name as a string. --@@ -86,10 +132,12 @@ -- -- > Sres  pwd  ----- csound doc: <http://csound.com/docs/manual/pwd.html>+-- csound doc: <https://csound.com/docs/manual/pwd.html> pwd ::   Str-pwd  = Str $ return $ f -    where f  = opcs "pwd" [(Sr,[])] []+pwd  =+  Str $ return $ f +  where+    f  = opcs "pwd" [(Sr,[])] []  -- |  -- Select sample value based on audio-rate comparisons.@@ -99,10 +147,12 @@ -- -- > aout  select  a1, a2, aless, aequal, amore ----- csound doc: <http://csound.com/docs/manual/select.html>+-- csound doc: <https://csound.com/docs/manual/select.html> select ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-select b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "select" [(Ar,[Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5]+select b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "select" [(Ar,[Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5]  -- |  -- Call an external program via the system call@@ -116,10 +166,12 @@ -- -- > ires  system_i  itrig, Scmd, [inowait] ----- csound doc: <http://csound.com/docs/manual/system.html>+-- csound doc: <https://csound.com/docs/manual/system.html> system_i ::  D -> Str -> D-system_i b1 b2 = D $ f <$> unD b1 <*> unStr b2-    where f a1 a2 = opcs "system_i" [(Ir,[Ir,Sr,Ir])] [a1,a2]+system_i b1 b2 =+  D $ f <$> unD b1 <*> unStr b2+  where+    f a1 a2 = opcs "system_i" [(Ir,[Ir,Sr,Ir])] [a1,a2]  -- |  -- Call an external program via the system call@@ -133,10 +185,12 @@ -- -- > kres  system  ktrig, Scmd, [knowait] ----- csound doc: <http://csound.com/docs/manual/system.html>+-- csound doc: <https://csound.com/docs/manual/system.html> system ::  Sig -> Str -> Sig-system b1 b2 = Sig $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = opcs "system" [(Kr,[Kr,Sr,Kr])] [a1,a2]+system b1 b2 =+  Sig $ f <$> unSig b1 <*> unStr b2+  where+    f a1 a2 = opcs "system" [(Kr,[Kr,Sr,Kr])] [a1,a2]  -- |  -- shuffles the content of a function table so that each element of the source@@ -151,10 +205,12 @@ -- -- >  tableshuffle  ktablenum ----- csound doc: <http://csound.com/docs/manual/tableshuffle.html>+-- csound doc: <https://csound.com/docs/manual/tableshuffle.html> tableshuffle ::  Sig -> SE ()-tableshuffle b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "tableshuffle" [(Xr,[Kr])] [a1]+tableshuffle b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "tableshuffle" [(Xr,[Kr])] [a1]  -- |  -- shuffles the content of a function table so that each element of the source@@ -169,7 +225,9 @@ -- -- >  tableshufflei  itablenum ----- csound doc: <http://csound.com/docs/manual/tableshuffle.html>+-- csound doc: <https://csound.com/docs/manual/tableshuffle.html> tableshufflei ::  D -> SE ()-tableshufflei b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "tableshufflei" [(Xr,[Ir])] [a1]+tableshufflei b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "tableshufflei" [(Xr,[Ir])] [a1]
src/Csound/Typed/Opcode/MixerOpcodes.hs view
@@ -5,6 +5,7 @@     mixerClear, mixerGetLevel, mixerReceive, mixerSend, mixerSetLevel, mixerSetLevel_i) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -15,10 +16,12 @@ -- -- >  MixerClear  ----- csound doc: <http://csound.com/docs/manual/MixerClear.html>+-- csound doc: <https://csound.com/docs/manual/MixerClear.html> mixerClear ::   SE ()-mixerClear  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "MixerClear" [(Xr,[])] []+mixerClear  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "MixerClear" [(Xr,[])] []  -- |  -- Gets the level of a send to a buss.@@ -28,10 +31,12 @@ -- -- > kgain  MixerGetLevel  isend, ibuss ----- csound doc: <http://csound.com/docs/manual/MixerGetLevel.html>+-- csound doc: <https://csound.com/docs/manual/MixerGetLevel.html> mixerGetLevel ::  D -> D -> SE Sig-mixerGetLevel b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "MixerGetLevel" [(Kr,[Ir,Ir])] [a1,a2]+mixerGetLevel b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "MixerGetLevel" [(Kr,[Ir,Ir])] [a1,a2]  -- |  -- Receives an arate signal from a channel of a buss.@@ -40,20 +45,24 @@ -- -- > asignal  MixerReceive  ibuss, ichannel ----- csound doc: <http://csound.com/docs/manual/MixerReceive.html>+-- csound doc: <https://csound.com/docs/manual/MixerReceive.html> mixerReceive ::  D -> D -> SE Sig-mixerReceive b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "MixerReceive" [(Ar,[Ir,Ir])] [a1,a2]+mixerReceive b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "MixerReceive" [(Ar,[Ir,Ir])] [a1,a2]  -- |  -- Mixes an arate signal into a channel of a buss. -- -- >  MixerSend  asignal, isend, ibuss, ichannel ----- csound doc: <http://csound.com/docs/manual/MixerSend.html>+-- csound doc: <https://csound.com/docs/manual/MixerSend.html> mixerSend ::  Sig -> D -> D -> D -> SE ()-mixerSend b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "MixerSend" [(Xr,[Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]+mixerSend b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "MixerSend" [(Xr,[Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sets the level of a send to a buss.@@ -63,10 +72,12 @@ -- -- >  MixerSetLevel  isend, ibuss, kgain ----- csound doc: <http://csound.com/docs/manual/MixerSetLevel.html>+-- csound doc: <https://csound.com/docs/manual/MixerSetLevel.html> mixerSetLevel ::  D -> D -> Sig -> SE ()-mixerSetLevel b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unSig b3-    where f a1 a2 a3 = opcs "MixerSetLevel" [(Xr,[Ir,Ir,Kr])] [a1,a2,a3]+mixerSetLevel b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "MixerSetLevel" [(Xr,[Ir,Ir,Kr])] [a1,a2,a3]  -- |  -- Sets the level of a send to a buss.@@ -77,7 +88,9 @@ -- -- >  MixerSetLevel_i  isend, ibuss, igain ----- csound doc: <http://csound.com/docs/manual/MixerSetLevel_i.html>+-- csound doc: <https://csound.com/docs/manual/MixerSetLevel_i.html> mixerSetLevel_i ::  D -> D -> D -> SE ()-mixerSetLevel_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "MixerSetLevel_i" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+mixerSetLevel_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "MixerSetLevel_i" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]
src/Csound/Typed/Opcode/Network.hs view
@@ -5,6 +5,7 @@     remoteport, sockrecv, sockrecvs, strecv, socksend, socksends, stsend) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -19,10 +20,12 @@ -- -- >  remoteport  iportnum ----- csound doc: <http://csound.com/docs/manual/remoteport.html>+-- csound doc: <https://csound.com/docs/manual/remoteport.html> remoteport ::  D -> SE ()-remoteport b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "remoteport" [(Xr,[Ir])] [a1]+remoteport b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "remoteport" [(Xr,[Ir])] [a1]  -- |  -- Receives data from other processes using the low-level UDP or TCP protocols@@ -36,10 +39,12 @@ -- > asig  sockrecv  iport, ilength -- > ksig  sockrecv  iport, ilength ----- csound doc: <http://csound.com/docs/manual/sockrecv.html>+-- csound doc: <https://csound.com/docs/manual/sockrecv.html> sockrecv ::  D -> D -> Sig-sockrecv b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "sockrecv" [(Ar,[Ir,Ir]),(Kr,[Ir,Ir])] [a1,a2]+sockrecv b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "sockrecv" [(Ar,[Ir,Ir]),(Kr,[Ir,Ir])] [a1,a2]  -- |  -- Receives data from other processes using the low-level UDP or TCP protocols@@ -52,10 +57,12 @@ -- -- > asigl, asigr  sockrecvs  iport, ilength ----- csound doc: <http://csound.com/docs/manual/sockrecv.html>+-- csound doc: <https://csound.com/docs/manual/sockrecv.html> sockrecvs ::  D -> D -> (Sig,Sig)-sockrecvs b1 b2 = pureTuple $ f <$> unD b1 <*> unD b2-    where f a1 a2 = mopcs "sockrecvs" ([Ar,Ar],[Ir,Ir]) [a1,a2]+sockrecvs b1 b2 =+  pureTuple $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = mopcs "sockrecvs" ([Ar,Ar],[Ir,Ir]) [a1,a2]  -- |  -- Receives data from other processes using the low-level UDP or TCP protocols@@ -66,12 +73,14 @@ --       routing. The sockrecvs opcode receives a stereo signal --       interleaved. ----- > asig  strecv  Sipaddr, iport+-- > asig[,kstate]  strecv  Sipaddr, iport ----- csound doc: <http://csound.com/docs/manual/sockrecv.html>-strecv ::  Str -> D -> Sig-strecv b1 b2 = Sig $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "strecv" [(Ar,[Sr,Ir])] [a1,a2]+-- csound doc: <https://csound.com/docs/manual/sockrecv.html>+strecv :: forall a . Tuple a => Str -> D -> a+strecv b1 b2 =+  pureTuple $ f <$> unStr b1 <*> unD b2+  where+    f a1 a2 = mopcs "strecv" ([Ar,Kr],[Sr,Ir]) [a1,a2]  -- |  -- Sends data to other processes using the low-level UDP or TCP protocols@@ -84,10 +93,12 @@ -- >  socksend  asig, Sipaddr, iport, ilength -- >  socksend  ksig, Sipaddr, iport, ilength ----- csound doc: <http://csound.com/docs/manual/socksend.html>+-- csound doc: <https://csound.com/docs/manual/socksend.html> socksend ::  Sig -> Str -> D -> D -> SE ()-socksend b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "socksend" [(Xr,[Ar,Sr,Ir,Ir])] [a1,a2,a3,a4]+socksend b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "socksend" [(Xr,[Ar,Sr,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sends data to other processes using the low-level UDP or TCP protocols@@ -100,10 +111,12 @@ -- >  socksends  asigl, asigr, Sipaddr, iport, -- >         ilength ----- csound doc: <http://csound.com/docs/manual/socksend.html>+-- csound doc: <https://csound.com/docs/manual/socksend.html> socksends ::  Sig -> Sig -> Str -> D -> D -> SE ()-socksends b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "socksends" [(Xr,[Ar,Ar,Sr,Ir,Ir])] [a1,a2,a3,a4,a5]+socksends b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unStr) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "socksends" [(Xr,[Ar,Ar,Sr,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Sends data to other processes using the low-level UDP or TCP protocols@@ -115,7 +128,9 @@ -- -- >  stsend  asig, Sipaddr, iport ----- csound doc: <http://csound.com/docs/manual/socksend.html>+-- csound doc: <https://csound.com/docs/manual/socksend.html> stsend ::  Sig -> Str -> D -> SE ()-stsend b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2 <*> unD b3-    where f a1 a2 a3 = opcs "stsend" [(Xr,[Ar,Sr,Ir])] [a1,a2,a3]+stsend b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "stsend" [(Xr,[Ar,Sr,Ir])] [a1,a2,a3]
src/Csound/Typed/Opcode/OSC.hs view
@@ -2,38 +2,65 @@               -    oscInit, oscListen, oscRaw, oscSend) where+    oscBundle, oscCount, oscInit, oscInitM, oscRaw, oscSend) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed  --   -- | ++--+-- >  OSCbundle  kwhen, ihost, iport,+-- >         Sdest[], Stype[],kArgs[][][,isize]+--+-- csound doc: <https://csound.com/docs/manual/OSCbundle.html>+oscBundle ::  Sig -> D -> D -> Str -> SE ()+oscBundle b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unStr) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "OSCbundle" [(Xr,[Kr,Ir,Ir,Sr,Sr,Kr,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > kans  OSCcount +--+-- csound doc: <https://csound.com/docs/manual/OSCcount.html>+oscCount ::   Sig+oscCount  =+  Sig $ return $ f +  where+    f  = opcs "OSCcount" [(Kr,[])] []++-- |  -- Start a listening process for OSC messages to a particular port. -- -- Starts a listening process, which can be used by OSClisten. -- -- > ihandle  OSCinit  iport ----- csound doc: <http://csound.com/docs/manual/OSCinit.html>+-- csound doc: <https://csound.com/docs/manual/OSCinit.html> oscInit ::  D -> SE D-oscInit b1 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "OSCinit" [(Ir,[Ir])] [a1]+oscInit b1 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep "OSCinit" [(Ir,[Ir])] [a1]  -- | --- Listen for OSC messages to a particular path.------ On each k-cycle looks to see if an OSC message has been send to---       a given path of a given type.+ ----- > kans  OSClisten  ihandle, idest, itype [, xdata1, xdata2, ...]+-- > ihandle  OSCinitM  Sgroup, iport ----- csound doc: <http://csound.com/docs/manual/OSClisten.html>-oscListen ::  D -> D -> D -> [Sig] -> SE Sig-oscListen b1 b2 b3 b4 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "OSClisten" [(Kr,[Ir,Ir,Ir] ++ (repeat Xr))] ([a1,a2,a3] ++ a4)+-- csound doc: <https://csound.com/docs/manual/OSCinitM.html>+oscInitM ::  Str -> D -> D+oscInitM b1 b2 =+  D $ f <$> unStr b1 <*> unD b2+  where+    f a1 a2 = opcs "OSCinitM" [(Ir,[Sr,Ir])] [a1,a2]  -- |  -- Listen for all OSC messages at a given port.@@ -45,10 +72,12 @@ -- -- > Smess[],klen  OSCraw  iport ----- csound doc: <http://csound.com/docs/manual/OSCraw.html>-oscRaw :: Tuple a => D -> a-oscRaw b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "OSCraw" ([Sr,Kr],[Ir]) [a1]+-- csound doc: <https://csound.com/docs/manual/OSCraw.html>+oscRaw :: forall a . Tuple a => D -> a+oscRaw b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "OSCraw" ([Sr,Kr],[Ir]) [a1]  -- |  -- Sends data to other processes using the OSC protocol@@ -57,11 +86,13 @@ -- -- >  OSCsend  kwhen, ihost, iport, idestination[, itype , xdata1, xdata2, ...] ----- csound doc: <http://csound.com/docs/manual/OSCsend.html>+-- csound doc: <https://csound.com/docs/manual/OSCsend.html> oscSend ::  Sig -> D -> D -> D -> D -> [Sig] -> SE ()-oscSend b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> mapM unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "OSCsend" [(Xr,[Kr,Ir,Ir,Ir,Ir] ++ (repeat Xr))] ([a1-                                                                                       ,a2-                                                                                       ,a3-                                                                                       ,a4-                                                                                       ,a5] ++ a6)+oscSend b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> mapM (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "OSCsend" [(Xr,[Kr,Ir,Ir,Ir,Ir] ++ (repeat Xr))] ([a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5] ++ a6)
src/Csound/Typed/Opcode/PitchConverters.hs view
@@ -2,7 +2,7 @@               -- * Functions.-    cent, cpsmidinn, cpsoct, cpspch, ftom, mtof, mton, ntom, octave, octcps, octmidinn, octpch, pchmidinn, pchoct, pchtom, semitone,+    cent, cpsmidinn, cpsoct, cpspch, ftom, mtof, mton, ntof, ntom, octave, octcps, octmidinn, octpch, pchmidinn, pchoct, pchtom, semitone,          -- * Tuning Opcodes.     cps2pch, cpstun, cpstuni, cpsxpch) where@@ -17,40 +17,48 @@ -- -- >  cent (x)  ----- csound doc: <http://csound.com/docs/manual/cent.html>+-- csound doc: <https://csound.com/docs/manual/cent.html> cent :: SigOrD a => a -> a-cent b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "cent" a1+cent b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "cent" a1  -- |  -- Converts a Midi note number value to cycles-per-second. -- -- >  cpsmidinn  (MidiNoteNumber)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/cpsmidinn.html>+-- csound doc: <https://csound.com/docs/manual/cpsmidinn.html> cpsmidinn :: SigOrD a => a -> a-cpsmidinn b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "cpsmidinn" a1+cpsmidinn b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "cpsmidinn" a1  -- |  -- Converts an octave-point-decimal value to cycles-per-second. -- -- >  cpsoct  (oct)  (no rate restriction) ----- csound doc: <http://csound.com/docs/manual/cpsoct.html>+-- csound doc: <https://csound.com/docs/manual/cpsoct.html> cpsoct :: SigOrD a => a -> a-cpsoct b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "cpsoct" a1+cpsoct b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "cpsoct" a1  -- |  -- Converts a pitch-class value to cycles-per-second. -- -- >  cpspch  (pch)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/cpspch.html>+-- csound doc: <https://csound.com/docs/manual/cpspch.html> cpspch :: SigOrD a => a -> a-cpspch b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "cpspch" a1+cpspch b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "cpspch" a1  -- |  -- Convert frequency to midi@@ -58,13 +66,17 @@ -- Convert frequency to midi note number, taking global value -- 	  of A4 into account. ----- > imidi  ftom  ifreq--- > kmidi  ftom  kfreq+-- > imidi  ftom  ifreq [,irnd]+-- > kmidi  ftom  kfreq [,irnd]+-- > imidis[]  ftom  ifreqs[] [,irnd]+-- > kmidis[]  ftom  kfreqs[] [,irnd] ----- csound doc: <http://csound.com/docs/manual/ftom.html>+-- csound doc: <https://csound.com/docs/manual/ftom.html> ftom ::  D -> Sig-ftom b1 = Sig $ f <$> unD b1-    where f a1 = opcs "ftom" [(Ir,[Ir]),(Kr,[Kr])] [a1]+ftom b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "ftom" [(Ir,[Ir,Ir]),(Kr,[Kr,Ir]),(Ir,[Ir,Ir]),(Kr,[Kr,Ir])] [a1]  -- |  -- Convert a midi to frequency@@ -74,11 +86,15 @@ -- -- > ifreq  mtof  imidi -- > kfreq  mtof  kmidi+-- > ifreqs[]  mtof  imidis[]+-- > kfreqs[]  mtof  kmidis[] ----- csound doc: <http://csound.com/docs/manual/mtof.html>+-- csound doc: <https://csound.com/docs/manual/mtof.html> mtof ::  D -> Sig-mtof b1 = Sig $ f <$> unD b1-    where f a1 = opcs "mtof" [(Ir,[Ir]),(Kr,[Kr])] [a1]+mtof b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "mtof" [(Ir,[Ir]),(Kr,[Kr]),(Ir,[Ir]),(Kr,[Kr])] [a1]  -- |  -- Convert midi note number to string note name@@ -89,12 +105,27 @@ -- > Snote  mton  kmidi -- > Snote  mton  imidi ----- csound doc: <http://csound.com/docs/manual/mton.html>+-- csound doc: <https://csound.com/docs/manual/mton.html> mton ::  Sig -> Str-mton b1 = Str $ f <$> unSig b1-    where f a1 = opcs "mton" [(Sr,[Kr]),(Sr,[Ir])] [a1]+mton b1 =+  Str $ f <$> unSig b1+  where+    f a1 = opcs "mton" [(Sr,[Kr]),(Sr,[Ir])] [a1]  -- | ++--+-- > kfreq  ntof  Snote+-- > ifreq  ntof  Snote+--+-- csound doc: <https://csound.com/docs/manual/ntof.html>+ntof ::  Str -> D+ntof b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "ntof" [(Kr,[Sr]),(Ir,[Sr])] [a1]++-- |  -- Convert note name to midi note number -- -- Convert note name to midi note number. It allows note name to@@ -103,70 +134,84 @@ -- > kmidi  ntom  Snote -- > imidi  ntom  Snote ----- csound doc: <http://csound.com/docs/manual/ntom.html>+-- csound doc: <https://csound.com/docs/manual/ntom.html> ntom ::  Str -> D-ntom b1 = D $ f <$> unStr b1-    where f a1 = opcs "ntom" [(Kr,[Sr]),(Ir,[Sr])] [a1]+ntom b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "ntom" [(Kr,[Sr]),(Ir,[Sr])] [a1]  -- |  -- Calculates a factor to raise/lower a frequency by a given amount of octaves. -- -- >  octave (x) ----- csound doc: <http://csound.com/docs/manual/octave.html>+-- csound doc: <https://csound.com/docs/manual/octave.html> octave :: SigOrD a => a -> a-octave b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "octave" a1+octave b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "octave" a1  -- |  -- Converts a cycles-per-second value to octave-point-decimal. -- -- >  octcps  (cps)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/octcps.html>+-- csound doc: <https://csound.com/docs/manual/octcps.html> octcps :: SigOrD a => a -> a-octcps b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "octcps" a1+octcps b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "octcps" a1  -- |  -- Converts a Midi note number value to octave-point-decimal. -- -- >  octmidinn  (MidiNoteNumber)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/octmidinn.html>+-- csound doc: <https://csound.com/docs/manual/octmidinn.html> octmidinn :: SigOrD a => a -> a-octmidinn b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "octmidinn" a1+octmidinn b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "octmidinn" a1  -- |  -- Converts a pitch-class value to octave-point-decimal. -- -- >  octpch  (pch)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/octpch.html>+-- csound doc: <https://csound.com/docs/manual/octpch.html> octpch :: SigOrD a => a -> a-octpch b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "octpch" a1+octpch b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "octpch" a1  -- |  -- Converts a Midi note number value to octave point pitch-class units. -- -- >  pchmidinn  (MidiNoteNumber)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/pchmidinn.html>+-- csound doc: <https://csound.com/docs/manual/pchmidinn.html> pchmidinn :: SigOrD a => a -> a-pchmidinn b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "pchmidinn" a1+pchmidinn b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "pchmidinn" a1  -- |  -- Converts an octave-point-decimal value to pitch-class. -- -- >  pchoct  (oct)  (init- or control-rate args only) ----- csound doc: <http://csound.com/docs/manual/pchoct.html>+-- csound doc: <https://csound.com/docs/manual/pchoct.html> pchoct :: SigOrD a => a -> a-pchoct b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1k "pchoct" a1+pchoct b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1k "pchoct" a1  -- |  -- Convert pch to midi note number@@ -178,20 +223,24 @@ -- > imidi  pchtom  ipch -- > kmidi  pchtom  kpch ----- csound doc: <http://csound.com/docs/manual/pchtom.html>+-- csound doc: <https://csound.com/docs/manual/pchtom.html> pchtom ::  D -> Sig-pchtom b1 = Sig $ f <$> unD b1-    where f a1 = opcs "pchtom" [(Ir,[Ir]),(Kr,[Kr])] [a1]+pchtom b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "pchtom" [(Ir,[Ir]),(Kr,[Kr])] [a1]  -- |  -- Calculates a factor to raise/lower a frequency by a given amount of semitones. -- -- >  semitone (x) ----- csound doc: <http://csound.com/docs/manual/semitone.html>+-- csound doc: <https://csound.com/docs/manual/semitone.html> semitone :: SigOrD a => a -> a-semitone b1 = fromGE $ f <$> toGE b1-    where f a1 = opr1 "semitone" a1+semitone b1 =+  fromGE $ f <$> toGE b1+  where+    f a1 = opr1 "semitone" a1  -- Tuning Opcodes. @@ -200,30 +249,36 @@ -- -- > icps  cps2pch  ipch, iequal ----- csound doc: <http://csound.com/docs/manual/cps2pch.html>+-- csound doc: <https://csound.com/docs/manual/cps2pch.html> cps2pch ::  D -> D -> D-cps2pch b1 b2 = D $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "cps2pch" [(Ir,[Ir,Ir])] [a1,a2]+cps2pch b1 b2 =+  D $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "cps2pch" [(Ir,[Ir,Ir])] [a1,a2]  -- |  -- Returns micro-tuning values at k-rate. -- -- > kcps  cpstun  ktrig, kindex, kfn ----- csound doc: <http://csound.com/docs/manual/cpstun.html>+-- csound doc: <https://csound.com/docs/manual/cpstun.html> cpstun ::  Sig -> Sig -> Tab -> Sig-cpstun b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "cpstun" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]+cpstun b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "cpstun" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Returns micro-tuning values at init-rate. -- -- > icps  cpstuni  index, ifn ----- csound doc: <http://csound.com/docs/manual/cpstuni.html>+-- csound doc: <https://csound.com/docs/manual/cpstuni.html> cpstuni ::  D -> Tab -> D-cpstuni b1 b2 = D $ f <$> unD b1 <*> unTab b2-    where f a1 a2 = opcs "cpstuni" [(Ir,[Ir,Ir])] [a1,a2]+cpstuni b1 b2 =+  D $ f <$> unD b1 <*> unTab b2+  where+    f a1 a2 = opcs "cpstuni" [(Ir,[Ir,Ir])] [a1,a2]  -- |  -- Converts a pitch-class value into cycles-per-second (Hz) for equal divisions of any interval.@@ -232,7 +287,9 @@ -- -- > icps  cpsxpch  ipch, iequal, irepeat, ibase ----- csound doc: <http://csound.com/docs/manual/cpsxpch.html>+-- csound doc: <https://csound.com/docs/manual/cpsxpch.html> cpsxpch ::  D -> D -> D -> D -> D-cpsxpch b1 b2 b3 b4 = D $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "cpsxpch" [(Ir,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+cpsxpch b1 b2 b3 b4 =+  D $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "cpsxpch" [(Ir,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]
src/Csound/Typed/Opcode/PluginHosting.hs view
@@ -2,12 +2,10 @@               -- * DSSI and LADSPA.-    dssiactivate, dssiaudio, dssictls, dssiinit, dssilist,-    -    -- * VST.-    vstaudio, vstaudiog, vstbankload, vstedit, vstinfo, vstinit, vstmidiout, vstnote, vstparamset, vstparamget, vstprogset) where+    dssiactivate, dssiaudio, dssictls, dssiinit, dssilist) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -20,10 +18,12 @@ -- -- >  dssiactivate  ihandle, ktoggle  ----- csound doc: <http://csound.com/docs/manual/dssiactivate.html>+-- csound doc: <https://csound.com/docs/manual/dssiactivate.html> dssiactivate ::  D -> Sig -> SE ()-dssiactivate b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "dssiactivate" [(Xr,[Ir,Kr])] [a1,a2]+dssiactivate b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "dssiactivate" [(Xr,[Ir,Kr])] [a1,a2]  -- |  -- Processes audio using a LADSPA or DSSI plugin.@@ -32,10 +32,12 @@ -- -- > [aout1, aout2, ..., aout9]  dssiaudio  ihandle, [ain1, ain2, ..., ain9] ----- csound doc: <http://csound.com/docs/manual/dssiaudio.html>-dssiaudio :: Tuple a => D -> [Sig] -> a-dssiaudio b1 b2 = pureTuple $ f <$> unD b1 <*> mapM unSig b2-    where f a1 a2 = mopcs "dssiaudio" ((repeat Ar),[Ir] ++ (repeat Ar)) ([a1] ++ a2)+-- csound doc: <https://csound.com/docs/manual/dssiaudio.html>+dssiaudio :: forall a . Tuple a => D -> [Sig] -> a+dssiaudio b1 b2 =+  pureTuple $ f <$> unD b1 <*> mapM unSig b2+  where+    f a1 a2 = mopcs "dssiaudio" ((repeat Ar),[Ir] ++ (repeat Ar)) ([a1] ++ a2)  -- |  -- Send control information to a LADSPA or DSSI plugin.@@ -44,10 +46,12 @@ -- -- >  dssictls  ihandle, iport, kvalue, ktrigger  ----- csound doc: <http://csound.com/docs/manual/dssictls.html>+-- csound doc: <https://csound.com/docs/manual/dssictls.html> dssictls ::  D -> D -> Sig -> Sig -> SE ()-dssictls b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "dssictls" [(Xr,[Ir,Ir,Kr,Kr])] [a1,a2,a3,a4]+dssictls b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "dssictls" [(Xr,[Ir,Ir,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Loads a DSSI or LADSPA plugin.@@ -57,10 +61,12 @@ -- -- > ihandle  dssiinit  ilibraryname, iplugindex [, iverbose]  ----- csound doc: <http://csound.com/docs/manual/dssiinit.html>+-- csound doc: <https://csound.com/docs/manual/dssiinit.html> dssiinit ::  D -> D -> SE D-dssiinit b1 b2 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "dssiinit" [(Ir,[Ir,Ir,Ir])] [a1,a2]+dssiinit b1 b2 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "dssiinit" [(Ir,[Ir,Ir,Ir])] [a1,a2]  -- |  -- Lists all available DSSI and LADSPA plugins.@@ -69,152 +75,9 @@ -- -- >  dssilist  ----- csound doc: <http://csound.com/docs/manual/dssilist.html>+-- csound doc: <https://csound.com/docs/manual/dssilist.html> dssilist ::   SE ()-dssilist  = SE $ (depT_ =<<) $ lift $ return $ f -    where f  = opcs "dssilist" [(Xr,[])] []---- VST.---- | --- VST audio output.------ vstaudio and vstaudiog---       are used for sending and receiving audio from a VST plugin.------ > aout1,aout2  vstaudio  instance, [ain1, ain2]------ csound doc: <http://csound.com/docs/manual/vstaudio.html>-vstaudio ::  D -> (Sig,Sig)-vstaudio b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "vstaudio" ([Ar,Ar],[Ir,Ar,Ar]) [a1]---- | --- VST audio output.------ vstaudio and vstaudiog---       are used for sending and receiving audio from a VST plugin.------ > aout1,aout2  vstaudiog  instance, [ain1, ain2]------ csound doc: <http://csound.com/docs/manual/vstaudio.html>-vstaudiog ::  D -> (Sig,Sig)-vstaudiog b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "vstaudiog" ([Ar,Ar],[Ir,Ar,Ar]) [a1]---- | --- Loads parameter banks to a VST plugin.------ vstbankload is used for loading parameter---       banks to a VST plugin.------ >  vstbankload  instance, ipath------ csound doc: <http://csound.com/docs/manual/vstbankload.html>-vstbankload ::  D -> D -> SE ()-vstbankload b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "vstbankload" [(Xr,[Ir,Ir])] [a1,a2]---- | --- Opens the GUI editor window for a VST plugin.------ vstedit opens the custom GUI editor window 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.------ >  vstedit  instance------ csound doc: <http://csound.com/docs/manual/vstedit.html>-vstedit ::  D -> SE ()-vstedit b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "vstedit" [(Xr,[Ir])] [a1]---- | --- Displays the parameters and the programs of a VST plugin.------ vstinfo displays the parameters and the programs of a---       VST plugin.------ >  vstinfo  instance------ csound doc: <http://csound.com/docs/manual/vstinfo.html>-vstinfo ::  D -> SE ()-vstinfo b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "vstinfo" [(Xr,[Ir])] [a1]---- | --- Load a VST plugin into memory for use with the other vst4cs opcodes.------ 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.------ > instance  vstinit  ilibrarypath [,iverbose]------ csound doc: <http://csound.com/docs/manual/vstinit.html>-vstinit ::  D -> SE D-vstinit b1 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "vstinit" [(Ir,[Ir,Ir])] [a1]---- | --- Sends MIDI information to a VST plugin.------ vstmidiout is used for sending MIDI information to a VST plugin.------ >  vstmidiout  instance, kstatus, kchan, kdata1, kdata2------ csound doc: <http://csound.com/docs/manual/vstmidiout.html>-vstmidiout ::  D -> Sig -> Sig -> Sig -> Sig -> SE ()-vstmidiout b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "vstmidiout" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Sends a MIDI note with definite duration to a VST plugin.------ vstnote sends a MIDI note with definite duration to a VST plugin.------ >  vstnote  instance, kchan, knote, kveloc, kdur--- >         ------ csound doc: <http://csound.com/docs/manual/vstnote.html>-vstnote ::  D -> Sig -> Sig -> Sig -> Sig -> SE ()-vstnote b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "vstnote" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Used for parameter comunication to and from a VST plugin.------ vstparamset and vstparamget are used for parameter comunication to and from a VST plugin.------ >  vstparamset instance, kparam, kvalue------ csound doc: <http://csound.com/docs/manual/vstparamset.html>-vstparamset ::  D -> Sig -> Sig -> SE ()-vstparamset b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vstparamset" [(Xr,[Ir,Kr,Kr])] [a1,a2,a3]---- | --- Used for parameter comunication to and from a VST plugin.------ vstparamset and vstparamget are used for parameter comunication to and from a VST plugin.------ > kvalue  vstparamget instance, kparam------ csound doc: <http://csound.com/docs/manual/vstparamset.html>-vstparamget ::  D -> Sig -> Sig-vstparamget b1 b2 = Sig $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "vstparamget" [(Kr,[Ir,Kr])] [a1,a2]---- | --- Loads parameter banks to a VST plugin.------ vstprogset sets one of the programs in an---       .fxb bank.------ >  vstprogset  instance, kprogram------ csound doc: <http://csound.com/docs/manual/vstprogset.html>-vstprogset ::  D -> Sig -> SE ()-vstprogset b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "vstprogset" [(Xr,[Ir,Kr])] [a1,a2]+dssilist  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "dssilist" [(Xr,[])] []
src/Csound/Typed/Opcode/RealtimeMIDI.hs view
@@ -2,22 +2,22 @@               -- * Input.-    aftouch, chanctrl, ctrl14, ctrl21, ctrl7, ctrlinit, initc14, initc21, initc7, massign, midic14, midic21, midic7, midictrl, notnum, pchbend, pgmassign, polyaft, veloc,+    aftouch, chanctrl, ctrl14, ctrl21, ctrl7, ctrlinit, ctrlpreset, ctrlprint, ctrlprintpresets, ctrlsave, ctrlselect, initc14, initc21, initc7, massign, midic14, midic21, midic7, midictrl, notnum, pchbend, pgmassign, polyaft, veloc,          -- * Output.     nrpn, outiat, outic, outic14, outipat, outipb, outipc, outkat, outkc, outkc14, outkpat, outkpb, outkpc,          -- * Converters.-    ampmidi, ampmidid, cpsmidi, cpsmidib, cpstmid, octmidi, octmidib, pchmidi, pchmidib,+    ampmidi, ampmidicurve, ampmidid, cpsmidi, cpsmidib, cpstmid, octmidi, octmidib, pchmidi, pchmidib,          -- * Generic I/O.     midiin, midiout, midiout_i,          -- * Event Extenders.-    release, xtratim,+    lastcycle, release, xtratim,          -- * Note Output.-    midion, midion2, moscil, noteoff, noteon, noteondur, noteondur2,+    midiarp, midion, midion2, moscil, noteoff, noteon, noteondur, noteondur2,          -- * MIDI/Score Interoperability.     midichannelaftertouch, midichn, midicontrolchange, mididefault, midinoteoff, midinoteoncps, midinoteonkey, midinoteonoct, midinoteonpch, midipitchbend, midipolyaftertouch, midiprogramchange,@@ -26,6 +26,7 @@     mclock, mrtmsg) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -36,10 +37,12 @@ -- -- > kaft  aftouch  [imin] [, imax] ----- csound doc: <http://csound.com/docs/manual/aftouch.html>+-- csound doc: <https://csound.com/docs/manual/aftouch.html> aftouch ::   Sig-aftouch  = Sig $ return $ f -    where f  = opcs "aftouch" [(Kr,[Ir,Ir])] []+aftouch  =+  Sig $ return $ f +  where+    f  = opcs "aftouch" [(Kr,[Ir,Ir])] []  -- |  -- Get the current value of a MIDI channel controller.@@ -49,10 +52,12 @@ -- > ival  chanctrl  ichnl, ictlno [, ilow] [, ihigh] -- > kval  chanctrl  ichnl, ictlno [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/chanctrl.html>+-- csound doc: <https://csound.com/docs/manual/chanctrl.html> chanctrl ::  D -> D -> Sig-chanctrl b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "chanctrl" [(Ir,[Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir])] [a1,a2]+chanctrl b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "chanctrl" [(Ir,[Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir])] [a1,a2]  -- |  -- Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.@@ -60,14 +65,16 @@ -- > idest  ctrl14  ichan, ictlno1, ictlno2, imin, imax [, ifn] -- > kdest  ctrl14  ichan, ictlno1, ictlno2, kmin, kmax [, ifn] ----- csound doc: <http://csound.com/docs/manual/ctrl14.html>+-- csound doc: <https://csound.com/docs/manual/ctrl14.html> ctrl14 ::  D -> D -> D -> D -> D -> Sig-ctrl14 b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "ctrl14" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Kr,Kr,Ir])] [a1-                                                                                               ,a2-                                                                                               ,a3-                                                                                               ,a4-                                                                                               ,a5]+ctrl14 b1 b2 b3 b4 b5 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "ctrl14" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Kr,Kr,Ir])] [a1+                                                                                         ,a2+                                                                                         ,a3+                                                                                         ,a4+                                                                                         ,a5]  -- |  -- Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.@@ -75,11 +82,13 @@ -- > idest  ctrl21  ichan, ictlno1, ictlno2, ictlno3, imin, imax [, ifn] -- > kdest  ctrl21  ichan, ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn] ----- csound doc: <http://csound.com/docs/manual/ctrl21.html>+-- csound doc: <https://csound.com/docs/manual/ctrl21.html> ctrl21 ::  D -> D -> D -> D -> D -> D -> Sig-ctrl21 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "ctrl21" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir,Ir])-                                              ,(Kr,[Ir,Ir,Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]+ctrl21 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "ctrl21" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir,Ir])+                                        ,(Kr,[Ir,Ir,Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]  -- |  -- Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.@@ -88,12 +97,14 @@ -- > kdest  ctrl7  ichan, ictlno, kmin, kmax [, ifn] -- > adest  ctrl7  ichan, ictlno, kmin, kmax [, ifn] [, icutoff] ----- csound doc: <http://csound.com/docs/manual/ctrl7.html>+-- csound doc: <https://csound.com/docs/manual/ctrl7.html> ctrl7 ::  D -> D -> D -> D -> Sig-ctrl7 b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "ctrl7" [(Ir,[Ir,Ir,Ir,Ir,Ir])-                                       ,(Kr,[Ir,Ir,Kr,Kr,Ir])-                                       ,(Ar,[Ir,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]+ctrl7 b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "ctrl7" [(Ir,[Ir,Ir,Ir,Ir,Ir])+                                 ,(Kr,[Ir,Ir,Kr,Kr,Ir])+                                 ,(Ar,[Ir,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sets the initial values for a set of MIDI controllers.@@ -101,30 +112,96 @@ -- >  ctrlinit  ichnl, ictlno1, ival1 [, ictlno2] [, ival2] [, ictlno3] \ -- >           [, ival3] [,...ival32] ----- csound doc: <http://csound.com/docs/manual/ctrlinit.html>+-- csound doc: <https://csound.com/docs/manual/ctrlinit.html> ctrlinit ::  [D] -> SE ()-ctrlinit b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unD b1-    where f a1 = opcs "ctrlinit" [(Xr,(repeat Ir))] a1+ctrlinit b1 =+  SE $ join $ f <$> mapM (lift . unD) b1+  where+    f a1 = opcsDep_ "ctrlinit" [(Xr,(repeat Ir))] a1  -- | ++--+-- > kpreset  ctrlpreset  ktag, kchnl, kctlno1, [kctlno2] [, kctlno3] ...+--+-- csound doc: <https://csound.com/docs/manual/ctrlpreset.html>+ctrlpreset ::  Sig -> Sig -> Sig -> Sig+ctrlpreset b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "ctrlpreset" [(Kr,(repeat Kr))] [a1,a2,a3]++-- | ++--+-- >   ctrlprint  kcont[][, Sfile]+--+-- csound doc: <https://csound.com/docs/manual/ctrlprint.html>+ctrlprint ::  Sig -> SE ()+ctrlprint b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "ctrlprint" [(Xr,[Kr,Sr])] [a1]++-- | ++--+-- >   ctrlprintpresets  [Sfilenam]+--+-- csound doc: <https://csound.com/docs/manual/ctrlprintpresets.html>+ctrlprintpresets ::   SE ()+ctrlprintpresets  =+  SE $ join $ return $ f +  where+    f  = opcsDep_ "ctrlprintpresets" [(Xr,[Sr])] []++-- | ++--+-- > kconnt[]  ctrlsave  ichnl, ictlno1, [ictlno2] [, ictlno3] ...+--+-- csound doc: <https://csound.com/docs/manual/ctrlsave.html>+ctrlsave ::  D -> D -> Sig+ctrlsave b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "ctrlsave" [(Kr,(repeat Ir))] [a1,a2]++-- | ++--+-- >   ctrlselect  kpre+--+-- csound doc: <https://csound.com/docs/manual/ctrlselect.html>+ctrlselect ::  Sig -> SE ()+ctrlselect b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "ctrlselect" [(Xr,[Kr])] [a1]++-- |  -- Initializes the controllers used to create a 14-bit MIDI value. -- -- >  initc14  ichan, ictlno1, ictlno2, ivalue ----- csound doc: <http://csound.com/docs/manual/initc14.html>+-- csound doc: <https://csound.com/docs/manual/initc14.html> initc14 ::  D -> D -> D -> D -> SE ()-initc14 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "initc14" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+initc14 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "initc14" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Initializes the controllers used to create a 21-bit MIDI value. -- -- >  initc21  ichan, ictlno1, ictlno2, ictlno3, ivalue ----- csound doc: <http://csound.com/docs/manual/initc21.html>+-- csound doc: <https://csound.com/docs/manual/initc21.html> initc21 ::  D -> D -> D -> D -> D -> SE ()-initc21 b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "initc21" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+initc21 b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "initc21" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Initializes the controller used to create a 7-bit MIDI value.@@ -133,10 +210,12 @@ -- -- >  initc7  ichan, ictlno, ivalue ----- csound doc: <http://csound.com/docs/manual/initc7.html>+-- csound doc: <https://csound.com/docs/manual/initc7.html> initc7 ::  D -> D -> D -> SE ()-initc7 b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "initc7" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+initc7 b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "initc7" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Assigns a MIDI channel number to a Csound instrument.@@ -144,10 +223,12 @@ -- >  massign  ichnl, insnum[, ireset] -- >  massign  ichnl, "insname"[, ireset] ----- csound doc: <http://csound.com/docs/manual/massign.html>+-- csound doc: <https://csound.com/docs/manual/massign.html> massign ::  D -> D -> SE ()-massign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "massign" [(Xr,[Ir,Ir,Ir])] [a1,a2]+massign b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "massign" [(Xr,[Ir,Ir,Ir])] [a1,a2]  -- |  -- Allows a floating-point 14-bit MIDI signal scaled with a minimum and a maximum range.@@ -155,10 +236,12 @@ -- > idest  midic14  ictlno1, ictlno2, imin, imax [, ifn] -- > kdest  midic14  ictlno1, ictlno2, kmin, kmax [, ifn] ----- csound doc: <http://csound.com/docs/manual/midic14.html>+-- csound doc: <https://csound.com/docs/manual/midic14.html> midic14 ::  D -> D -> D -> D -> Sig-midic14 b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "midic14" [(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]+midic14 b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "midic14" [(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]  -- |  -- Allows a floating-point 21-bit MIDI signal scaled with a minimum and a maximum range.@@ -166,14 +249,16 @@ -- > idest  midic21  ictlno1, ictlno2, ictlno3, imin, imax [, ifn] -- > kdest  midic21  ictlno1, ictlno2, ictlno3, kmin, kmax [, ifn] ----- csound doc: <http://csound.com/docs/manual/midic21.html>+-- csound doc: <https://csound.com/docs/manual/midic21.html> midic21 ::  D -> D -> D -> D -> D -> Sig-midic21 b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "midic21" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Kr,Kr,Ir])] [a1-                                                                                                ,a2-                                                                                                ,a3-                                                                                                ,a4-                                                                                                ,a5]+midic21 b1 b2 b3 b4 b5 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "midic21" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Kr,Kr,Ir])] [a1+                                                                                          ,a2+                                                                                          ,a3+                                                                                          ,a4+                                                                                          ,a5]  -- |  -- Allows a floating-point 7-bit MIDI signal scaled with a minimum and a maximum range.@@ -181,10 +266,12 @@ -- > idest  midic7  ictlno, imin, imax [, ifn] -- > kdest  midic7  ictlno, kmin, kmax [, ifn] ----- csound doc: <http://csound.com/docs/manual/midic7.html>+-- csound doc: <https://csound.com/docs/manual/midic7.html> midic7 ::  D -> D -> D -> Sig-midic7 b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "midic7" [(Ir,[Ir,Ir,Ir,Ir]),(Kr,[Ir,Kr,Kr,Ir])] [a1,a2,a3]+midic7 b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "midic7" [(Ir,[Ir,Ir,Ir,Ir]),(Kr,[Ir,Kr,Kr,Ir])] [a1,a2,a3]  -- |  -- Get the current value (0-127) of a specified MIDI controller.@@ -192,20 +279,24 @@ -- > ival  midictrl  inum [, imin] [, imax] -- > kval  midictrl  inum [, imin] [, imax] ----- csound doc: <http://csound.com/docs/manual/midictrl.html>+-- csound doc: <https://csound.com/docs/manual/midictrl.html> midictrl ::  D -> Sig-midictrl b1 = Sig $ f <$> unD b1-    where f a1 = opcs "midictrl" [(Ir,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1]+midictrl b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "midictrl" [(Ir,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1]  -- |  -- Get a note number from a MIDI event. -- -- > ival  notnum  ----- csound doc: <http://csound.com/docs/manual/notnum.html>+-- csound doc: <https://csound.com/docs/manual/notnum.html> notnum ::  Msg -> D-notnum _  = D $ return $ f -    where f  = opcs "notnum" [(Ir,[])] []+notnum _  =+  D $ return $ f +  where+    f  = opcs "notnum" [(Ir,[])] []  -- |  -- Get the current pitch-bend value for this channel.@@ -213,10 +304,12 @@ -- > ibend  pchbend  [imin] [, imax] -- > kbend  pchbend  [imin] [, imax] ----- csound doc: <http://csound.com/docs/manual/pchbend.html>+-- csound doc: <https://csound.com/docs/manual/pchbend.html> pchbend ::  Msg -> Sig-pchbend _  = Sig $ return $ f -    where f  = opcs "pchbend" [(Ir,[Ir,Ir]),(Kr,[Ir,Ir])] []+pchbend _  =+  Sig $ return $ f +  where+    f  = opcs "pchbend" [(Ir,[Ir,Ir]),(Kr,[Ir,Ir])] []  -- |  -- Assigns an instrument number to a specified MIDI program.@@ -226,10 +319,12 @@ -- >  pgmassign  ipgm, inst[, ichn] -- >  pgmassign  ipgm, "insname"[, ichn] ----- csound doc: <http://csound.com/docs/manual/pgmassign.html>+-- csound doc: <https://csound.com/docs/manual/pgmassign.html> pgmassign ::  D -> D -> SE ()-pgmassign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "pgmassign" [(Xr,[Ir,Ir,Ir])] [a1,a2]+pgmassign b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "pgmassign" [(Xr,[Ir,Ir,Ir])] [a1,a2]  -- |  -- Returns the polyphonic after-touch pressure of the selected note number.@@ -239,20 +334,24 @@ -- > ires  polyaft  inote [, ilow] [, ihigh] -- > kres  polyaft  inote [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/polyaft.html>+-- csound doc: <https://csound.com/docs/manual/polyaft.html> polyaft ::  D -> Sig-polyaft b1 = Sig $ f <$> unD b1-    where f a1 = opcs "polyaft" [(Ir,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1]+polyaft b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "polyaft" [(Ir,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1]  -- |  -- Get the velocity from a MIDI event. -- -- > ival  veloc  [ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/veloc.html>+-- csound doc: <https://csound.com/docs/manual/veloc.html> veloc ::  Msg -> D-veloc _  = D $ return $ f -    where f  = opcs "veloc" [(Ir,[Ir,Ir])] []+veloc _  =+  D $ return $ f +  where+    f  = opcs "veloc" [(Ir,[Ir,Ir])] []  -- Output. @@ -263,130 +362,156 @@ -- -- >  nrpn  kchan, kparmnum, kparmvalue ----- csound doc: <http://csound.com/docs/manual/nrpn.html>+-- csound doc: <https://csound.com/docs/manual/nrpn.html> nrpn ::  Sig -> Sig -> Sig -> SE ()-nrpn b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "nrpn" [(Xr,[Kr,Kr,Kr])] [a1,a2,a3]+nrpn b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "nrpn" [(Xr,[Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Sends MIDI aftertouch messages at i-rate. -- -- >  outiat  ichn, ivalue, imin, imax ----- csound doc: <http://csound.com/docs/manual/outiat.html>+-- csound doc: <https://csound.com/docs/manual/outiat.html> outiat ::  D -> D -> D -> D -> SE ()-outiat b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "outiat" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+outiat b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outiat" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sends MIDI controller output at i-rate. -- -- >  outic  ichn, inum, ivalue, imin, imax ----- csound doc: <http://csound.com/docs/manual/outic.html>+-- csound doc: <https://csound.com/docs/manual/outic.html> outic ::  D -> D -> D -> D -> D -> SE ()-outic b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "outic" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+outic b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "outic" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Sends 14-bit MIDI controller output at i-rate. -- -- >  outic14  ichn, imsb, ilsb, ivalue, imin, imax ----- csound doc: <http://csound.com/docs/manual/outic14.html>+-- csound doc: <https://csound.com/docs/manual/outic14.html> outic14 ::  D -> D -> D -> D -> D -> D -> SE ()-outic14 b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "outic14" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]+outic14 b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "outic14" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]  -- |  -- Sends polyphonic MIDI aftertouch messages at i-rate. -- -- >  outipat  ichn, inotenum, ivalue, imin, imax ----- csound doc: <http://csound.com/docs/manual/outipat.html>+-- csound doc: <https://csound.com/docs/manual/outipat.html> outipat ::  D -> D -> D -> D -> D -> SE ()-outipat b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "outipat" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+outipat b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "outipat" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Sends MIDI pitch-bend messages at i-rate. -- -- >  outipb  ichn, ivalue, imin, imax ----- csound doc: <http://csound.com/docs/manual/outipb.html>+-- csound doc: <https://csound.com/docs/manual/outipb.html> outipb ::  D -> D -> D -> D -> SE ()-outipb b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "outipb" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+outipb b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outipb" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sends MIDI program change messages at i-rate -- -- >  outipc  ichn, iprog, imin, imax ----- csound doc: <http://csound.com/docs/manual/outipc.html>+-- csound doc: <https://csound.com/docs/manual/outipc.html> outipc ::  D -> D -> D -> D -> SE ()-outipc b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "outipc" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+outipc b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outipc" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sends MIDI aftertouch messages at k-rate. -- -- >  outkat  kchn, kvalue, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkat.html>+-- csound doc: <https://csound.com/docs/manual/outkat.html> outkat ::  Sig -> Sig -> Sig -> Sig -> SE ()-outkat b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "outkat" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+outkat b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outkat" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Sends MIDI controller messages at k-rate. -- -- >  outkc  kchn, knum, kvalue, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkc.html>+-- csound doc: <https://csound.com/docs/manual/outkc.html> outkc ::  Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outkc b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "outkc" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]+outkc b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "outkc" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]  -- |  -- Sends 14-bit MIDI controller output at k-rate. -- -- >  outkc14  kchn, kmsb, klsb, kvalue, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkc14.html>+-- csound doc: <https://csound.com/docs/manual/outkc14.html> outkc14 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outkc14 b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "outkc14" [(Xr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]+outkc14 b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "outkc14" [(Xr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]  -- |  -- Sends polyphonic MIDI aftertouch messages at k-rate. -- -- >  outkpat  kchn, knotenum, kvalue, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkpat.html>+-- csound doc: <https://csound.com/docs/manual/outkpat.html> outkpat ::  Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outkpat b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "outkpat" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]+outkpat b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "outkpat" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]  -- |  -- Sends MIDI pitch-bend messages at k-rate. -- -- >  outkpb  kchn, kvalue, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkpb.html>+-- csound doc: <https://csound.com/docs/manual/outkpb.html> outkpb ::  Sig -> Sig -> Sig -> Sig -> SE ()-outkpb b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "outkpb" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+outkpb b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outkpb" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Sends MIDI program change messages at k-rate. -- -- >  outkpc  kchn, kprog, kmin, kmax ----- csound doc: <http://csound.com/docs/manual/outkpc.html>+-- csound doc: <https://csound.com/docs/manual/outkpc.html> outkpc ::  Sig -> Sig -> Sig -> Sig -> SE ()-outkpc b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "outkpc" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+outkpc b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outkpc" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- Converters. @@ -395,31 +520,50 @@ -- -- > iamp  ampmidi  iscal [, ifn] ----- csound doc: <http://csound.com/docs/manual/ampmidi.html>+-- csound doc: <https://csound.com/docs/manual/ampmidi.html> ampmidi ::  Msg -> D -> D-ampmidi _ b1 = D $ f <$> unD b1-    where f a1 = opcs "ampmidi" [(Ir,[Ir,Ir])] [a1]+ampmidi _ b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "ampmidi" [(Ir,[Ir,Ir])] [a1]  -- | ++--+-- > igain  ampmidicurve  ivelocity, idynamicrange, iexponent+-- > kgain  ampmidicurve  kvelocity, kdynamicrange, kexponent+--+-- csound doc: <https://csound.com/docs/manual/ampmidicurve.html>+ampmidicurve ::  D -> D -> D -> Sig+ampmidicurve b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "ampmidicurve" [(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- |  -- Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels. -- -- > iamplitude  ampmidid  ivelocity, idecibels -- > kamplitude  ampmidid  kvelocity, idecibels ----- csound doc: <http://csound.com/docs/manual/ampmidid.html>+-- csound doc: <https://csound.com/docs/manual/ampmidid.html> ampmidid ::  D -> D -> Sig-ampmidid b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "ampmidid" [(Ir,[Ir,Ir]),(Kr,[Kr,Ir])] [a1,a2]+ampmidid b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "ampmidid" [(Ir,[Ir,Ir]),(Kr,[Kr,Ir])] [a1,a2]  -- |  -- Get the note number of the current MIDI event, expressed in cycles-per-second. -- -- > icps  cpsmidi  ----- csound doc: <http://csound.com/docs/manual/cpsmidi.html>+-- csound doc: <https://csound.com/docs/manual/cpsmidi.html> cpsmidi ::  Msg -> D-cpsmidi _  = D $ return $ f -    where f  = opcs "cpsmidi" [(Ir,[])] []+cpsmidi _  =+  D $ return $ f +  where+    f  = opcs "cpsmidi" [(Ir,[])] []  -- |  -- Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in cycles-per-second.@@ -427,10 +571,12 @@ -- > icps  cpsmidib  [irange] -- > kcps  cpsmidib  [irange] ----- csound doc: <http://csound.com/docs/manual/cpsmidib.html>+-- csound doc: <https://csound.com/docs/manual/cpsmidib.html> cpsmidib ::  Msg -> Sig-cpsmidib _  = Sig $ return $ f -    where f  = opcs "cpsmidib" [(Ir,[Ir]),(Kr,[Ir])] []+cpsmidib _  =+  Sig $ return $ f +  where+    f  = opcs "cpsmidib" [(Ir,[Ir]),(Kr,[Ir])] []  -- |  -- Get a MIDI note number (allows customized micro-tuning scales).@@ -439,20 +585,24 @@ -- -- > icps  cpstmid  ifn ----- csound doc: <http://csound.com/docs/manual/cpstmid.html>+-- csound doc: <https://csound.com/docs/manual/cpstmid.html> cpstmid ::  Msg -> Tab -> D-cpstmid _ b1 = D $ f <$> unTab b1-    where f a1 = opcs "cpstmid" [(Ir,[Ir])] [a1]+cpstmid _ b1 =+  D $ f <$> unTab b1+  where+    f a1 = opcs "cpstmid" [(Ir,[Ir])] [a1]  -- |  -- Get the note number, in octave-point-decimal units, of the current MIDI event. -- -- > ioct  octmidi  ----- csound doc: <http://csound.com/docs/manual/octmidi.html>+-- csound doc: <https://csound.com/docs/manual/octmidi.html> octmidi ::  Msg -> D-octmidi _  = D $ return $ f -    where f  = opcs "octmidi" [(Ir,[])] []+octmidi _  =+  D $ return $ f +  where+    f  = opcs "octmidi" [(Ir,[])] []  -- |  -- Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in octave-point-decimal.@@ -460,20 +610,24 @@ -- > ioct  octmidib  [irange] -- > koct  octmidib  [irange] ----- csound doc: <http://csound.com/docs/manual/octmidib.html>+-- csound doc: <https://csound.com/docs/manual/octmidib.html> octmidib ::  Msg -> Sig-octmidib _  = Sig $ return $ f -    where f  = opcs "octmidib" [(Ir,[Ir]),(Kr,[Ir])] []+octmidib _  =+  Sig $ return $ f +  where+    f  = opcs "octmidib" [(Ir,[Ir]),(Kr,[Ir])] []  -- |  -- Get the note number of the current MIDI event, expressed in pitch-class units. -- -- > ipch  pchmidi  ----- csound doc: <http://csound.com/docs/manual/pchmidi.html>+-- csound doc: <https://csound.com/docs/manual/pchmidi.html> pchmidi ::  Msg -> D-pchmidi _  = D $ return $ f -    where f  = opcs "pchmidi" [(Ir,[])] []+pchmidi _  =+  D $ return $ f +  where+    f  = opcs "pchmidi" [(Ir,[])] []  -- |  -- Get the note number of the current MIDI event and modify it by the current pitch-bend value, express it in pitch-class units.@@ -481,10 +635,12 @@ -- > ipch  pchmidib  [irange] -- > kpch  pchmidib  [irange] ----- csound doc: <http://csound.com/docs/manual/pchmidib.html>+-- csound doc: <https://csound.com/docs/manual/pchmidib.html> pchmidib ::  Msg -> Sig-pchmidib _  = Sig $ return $ f -    where f  = opcs "pchmidib" [(Ir,[Ir]),(Kr,[Ir])] []+pchmidib _  =+  Sig $ return $ f +  where+    f  = opcs "pchmidib" [(Ir,[Ir]),(Kr,[Ir])] []  -- Generic I/O. @@ -495,44 +651,64 @@ -- -- > kstatus, kchan, kdata1, kdata2  midiin  ----- csound doc: <http://csound.com/docs/manual/midiin.html>+-- csound doc: <https://csound.com/docs/manual/midiin.html> midiin ::   (Sig,Sig,Sig,Sig)-midiin  = pureTuple $ return $ f -    where f  = mopcs "midiin" ([Kr,Kr,Kr,Kr],[]) []+midiin  =+  pureTuple $ return $ f +  where+    f  = mopcs "midiin" ([Kr,Kr,Kr,Kr],[]) []  -- |  -- Sends a generic MIDI message to the MIDI OUT port. -- -- >  midiout  kstatus, kchan, kdata1, kdata2 ----- csound doc: <http://csound.com/docs/manual/midiout.html>+-- csound doc: <https://csound.com/docs/manual/midiout.html> midiout ::  Sig -> Sig -> Sig -> Sig -> SE ()-midiout b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "midiout" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+midiout b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "midiout" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Sends a generic MIDI message to the MIDI OUT port. -- -- >  midiout_i  istatus, ichan, idata1, idata2 ----- csound doc: <http://csound.com/docs/manual/midiout_i.html>+-- csound doc: <https://csound.com/docs/manual/midiout_i.html> midiout_i ::  D -> D -> D -> D -> SE ()-midiout_i b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "midiout_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+midiout_i b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "midiout_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- Event Extenders.  -- | ++--+-- > kflag  lastcycle +--+-- csound doc: <https://csound.com/docs/manual/lastcycle.html>+lastcycle ::   Sig+lastcycle  =+  Sig $ return $ f +  where+    f  = opcs "lastcycle" [(Kr,[])] []++-- |  -- Indicates whether a note is in its “release” stage. -- -- Provides a way of knowing when a note off message for the current note is received. Only a noteoff message with the same MIDI note number as the one which triggered the note will be reported by release. -- -- > kflag  release  ----- csound doc: <http://csound.com/docs/manual/release.html>+-- csound doc: <https://csound.com/docs/manual/release.html> release ::   Sig-release  = Sig $ return $ f -    where f  = opcs "release" [(Kr,[])] []+release  =+  Sig $ return $ f +  where+    f  = opcs "release" [(Kr,[])] []  -- |  -- Extend the duration of real-time generated events.@@ -541,22 +717,38 @@ -- -- >  xtratim  iextradur ----- csound doc: <http://csound.com/docs/manual/xtratim.html>+-- csound doc: <https://csound.com/docs/manual/xtratim.html> xtratim ::  D -> SE ()-xtratim b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "xtratim" [(Xr,[Ir])] [a1]+xtratim b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "xtratim" [(Xr,[Ir])] [a1]  -- Note Output.  -- | ++--+-- > kMidiNoteNum, kTrigger  midiarp  kRate[, kMode]+--+-- csound doc: <https://csound.com/docs/manual/midiarp.html>+midiarp ::  Sig -> (Sig,Sig)+midiarp b1 =+  pureTuple $ f <$> unSig b1+  where+    f a1 = mopcs "midiarp" ([Kr,Kr],[Kr,Kr]) [a1]++-- |  -- Generates MIDI note messages at k-rate. -- -- >  midion  kchn, knum, kvel ----- csound doc: <http://csound.com/docs/manual/midion.html>+-- csound doc: <https://csound.com/docs/manual/midion.html> midion ::  Sig -> Sig -> Sig -> SE ()-midion b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "midion" [(Xr,[Kr,Kr,Kr])] [a1,a2,a3]+midion b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "midion" [(Xr,[Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Sends noteon and noteoff messages to the MIDI OUT port.@@ -565,60 +757,72 @@ -- -- >  midion2  kchn, knum, kvel, ktrig ----- csound doc: <http://csound.com/docs/manual/midion2.html>+-- csound doc: <https://csound.com/docs/manual/midion2.html> midion2 ::  Sig -> Sig -> Sig -> Sig -> SE ()-midion2 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "midion2" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]+midion2 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "midion2" [(Xr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]  -- |  -- Sends a stream of the MIDI notes. -- -- >  moscil  kchn, knum, kvel, kdur, kpause ----- csound doc: <http://csound.com/docs/manual/moscil.html>+-- csound doc: <https://csound.com/docs/manual/moscil.html> moscil ::  Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-moscil b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "moscil" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]+moscil b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "moscil" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]  -- |  -- Send a noteoff message to the MIDI OUT port. -- -- >  noteoff  ichn, inum, ivel ----- csound doc: <http://csound.com/docs/manual/noteoff.html>+-- csound doc: <https://csound.com/docs/manual/noteoff.html> noteoff ::  D -> D -> D -> SE ()-noteoff b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "noteoff" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+noteoff b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "noteoff" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Send a noteon message to the MIDI OUT port. -- -- >  noteon  ichn, inum, ivel ----- csound doc: <http://csound.com/docs/manual/noteon.html>+-- csound doc: <https://csound.com/docs/manual/noteon.html> noteon ::  D -> D -> D -> SE ()-noteon b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "noteon" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]+noteon b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "noteon" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity. -- -- >  noteondur  ichn, inum, ivel, idur ----- csound doc: <http://csound.com/docs/manual/noteondur.html>+-- csound doc: <https://csound.com/docs/manual/noteondur.html> noteondur ::  D -> D -> D -> D -> SE ()-noteondur b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "noteondur" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+noteondur b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "noteondur" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Sends a noteon and a noteoff MIDI message both with the same channel, number and velocity. -- -- >  noteondur2  ichn, inum, ivel, idur ----- csound doc: <http://csound.com/docs/manual/noteondur2.html>+-- csound doc: <https://csound.com/docs/manual/noteondur2.html> noteondur2 ::  D -> D -> D -> D -> SE ()-noteondur2 b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "noteondur2" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+noteondur2 b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "noteondur2" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- MIDI/Score Interoperability. @@ -629,10 +833,12 @@ -- -- >  midichannelaftertouch  xchannelaftertouch [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/midichannelaftertouch.html>+-- csound doc: <https://csound.com/docs/manual/midichannelaftertouch.html> midichannelaftertouch ::  Sig -> SE ()-midichannelaftertouch b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "midichannelaftertouch" [(Xr,[Xr,Ir,Ir])] [a1]+midichannelaftertouch b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "midichannelaftertouch" [(Xr,[Xr,Ir,Ir])] [a1]  -- |  -- Returns the MIDI channel number from which the note was activated.@@ -641,10 +847,12 @@ -- -- > ichn  midichn  ----- csound doc: <http://csound.com/docs/manual/midichn.html>+-- csound doc: <https://csound.com/docs/manual/midichn.html> midichn ::   D-midichn  = D $ return $ f -    where f  = opcs "midichn" [(Ir,[])] []+midichn  =+  D $ return $ f +  where+    f  = opcs "midichn" [(Ir,[])] []  -- |  -- Gets a MIDI control change value.@@ -653,10 +861,12 @@ -- -- >  midicontrolchange  xcontroller, xcontrollervalue [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/midicontrolchange.html>+-- csound doc: <https://csound.com/docs/manual/midicontrolchange.html> midicontrolchange ::  Sig -> Sig -> SE ()-midicontrolchange b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midicontrolchange" [(Xr,[Xr,Xr,Ir,Ir])] [a1,a2]+midicontrolchange b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midicontrolchange" [(Xr,[Xr,Xr,Ir,Ir])] [a1,a2]  -- |  -- Changes values, depending on MIDI activation.@@ -665,10 +875,12 @@ -- -- >  mididefault  xdefault, xvalue ----- csound doc: <http://csound.com/docs/manual/mididefault.html>+-- csound doc: <https://csound.com/docs/manual/mididefault.html> mididefault ::  Sig -> Sig -> SE ()-mididefault b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "mididefault" [(Xr,[Xr,Xr])] [a1,a2]+mididefault b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "mididefault" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI noteoff value.@@ -677,10 +889,12 @@ -- -- >  midinoteoff  xkey, xvelocity ----- csound doc: <http://csound.com/docs/manual/midinoteoff.html>+-- csound doc: <https://csound.com/docs/manual/midinoteoff.html> midinoteoff ::  Sig -> Sig -> SE ()-midinoteoff b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midinoteoff" [(Xr,[Xr,Xr])] [a1,a2]+midinoteoff b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midinoteoff" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI note number as a cycles-per-second frequency.@@ -689,10 +903,12 @@ -- -- >  midinoteoncps  xcps, xvelocity ----- csound doc: <http://csound.com/docs/manual/midinoteoncps.html>+-- csound doc: <https://csound.com/docs/manual/midinoteoncps.html> midinoteoncps ::  Sig -> Sig -> SE ()-midinoteoncps b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midinoteoncps" [(Xr,[Xr,Xr])] [a1,a2]+midinoteoncps b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midinoteoncps" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI note number value.@@ -701,10 +917,12 @@ -- -- >  midinoteonkey  xkey, xvelocity ----- csound doc: <http://csound.com/docs/manual/midinoteonkey.html>+-- csound doc: <https://csound.com/docs/manual/midinoteonkey.html> midinoteonkey ::  Sig -> Sig -> SE ()-midinoteonkey b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midinoteonkey" [(Xr,[Xr,Xr])] [a1,a2]+midinoteonkey b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midinoteonkey" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI note number value as octave-point-decimal value.@@ -713,10 +931,12 @@ -- -- >  midinoteonoct  xoct, xvelocity ----- csound doc: <http://csound.com/docs/manual/midinoteonoct.html>+-- csound doc: <https://csound.com/docs/manual/midinoteonoct.html> midinoteonoct ::  Sig -> Sig -> SE ()-midinoteonoct b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midinoteonoct" [(Xr,[Xr,Xr])] [a1,a2]+midinoteonoct b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midinoteonoct" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI note number as a pitch-class value.@@ -725,10 +945,12 @@ -- -- >  midinoteonpch  xpch, xvelocity ----- csound doc: <http://csound.com/docs/manual/midinoteonpch.html>+-- csound doc: <https://csound.com/docs/manual/midinoteonpch.html> midinoteonpch ::  Sig -> Sig -> SE ()-midinoteonpch b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midinoteonpch" [(Xr,[Xr,Xr])] [a1,a2]+midinoteonpch b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midinoteonpch" [(Xr,[Xr,Xr])] [a1,a2]  -- |  -- Gets a MIDI pitchbend value.@@ -737,22 +959,26 @@ -- -- >  midipitchbend  xpitchbend [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/midipitchbend.html>+-- csound doc: <https://csound.com/docs/manual/midipitchbend.html> midipitchbend ::  Sig -> SE ()-midipitchbend b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "midipitchbend" [(Xr,[Xr,Ir,Ir])] [a1]+midipitchbend b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "midipitchbend" [(Xr,[Xr,Ir,Ir])] [a1]  -- |  -- Gets a MIDI polyphonic aftertouch value. -- -- midipolyaftertouch is designed to simplify writing instruments that can be used interchangeably for either score or MIDI input, and to make it easier to adapt instruments originally written for score input to work with MIDI input. ----- >  midipolyaftertouch  xpolyaftertouch, xcontrollervalue [, ilow] [, ihigh]+-- >  midipolyaftertouch  xpolyaftertouch, xkey [, ilow] [, ihigh] ----- csound doc: <http://csound.com/docs/manual/midipolyaftertouch.html>+-- csound doc: <https://csound.com/docs/manual/midipolyaftertouch.html> midipolyaftertouch ::  Sig -> Sig -> SE ()-midipolyaftertouch b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "midipolyaftertouch" [(Xr,[Xr,Xr,Ir,Ir])] [a1,a2]+midipolyaftertouch b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "midipolyaftertouch" [(Xr,[Xr,Xr,Ir,Ir])] [a1,a2]  -- |  -- Gets a MIDI program change value.@@ -761,10 +987,12 @@ -- -- >  midiprogramchange  xprogram ----- csound doc: <http://csound.com/docs/manual/midiprogramchange.html>+-- csound doc: <https://csound.com/docs/manual/midiprogramchange.html> midiprogramchange ::  Sig -> SE ()-midiprogramchange b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "midiprogramchange" [(Xr,[Xr])] [a1]+midiprogramchange b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "midiprogramchange" [(Xr,[Xr])] [a1]  -- System Realtime. @@ -773,17 +1001,21 @@ -- -- >  mclock  ifreq ----- csound doc: <http://csound.com/docs/manual/mclock.html>+-- csound doc: <https://csound.com/docs/manual/mclock.html> mclock ::  D -> SE ()-mclock b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "mclock" [(Xr,[Ir])] [a1]+mclock b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "mclock" [(Xr,[Ir])] [a1]  -- |  -- Send system real-time messages to the MIDI OUT port. -- -- >  mrtmsg  imsgtype ----- csound doc: <http://csound.com/docs/manual/mrtmsg.html>+-- csound doc: <https://csound.com/docs/manual/mrtmsg.html> mrtmsg ::  D -> SE ()-mrtmsg b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "mrtmsg" [(Xr,[Ir])] [a1]+mrtmsg b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "mrtmsg" [(Xr,[Ir])] [a1]
src/Csound/Typed/Opcode/RemoteOpcodes.hs view
@@ -5,6 +5,7 @@     insglobal, insremot, midglobal, midremot) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -31,10 +32,12 @@ -- -- >  insglobal  isource, instrnum [,instrnum...]  ----- csound doc: <http://csound.com/docs/manual/insglobal.html>+-- csound doc: <https://csound.com/docs/manual/insglobal.html> insglobal ::  D -> D -> SE ()-insglobal b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "insglobal" [(Xr,(repeat Ir))] [a1,a2]+insglobal b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "insglobal" [(Xr,(repeat Ir))] [a1,a2]  -- |  -- An opcode which can be used to implement a remote@@ -55,10 +58,12 @@ -- -- >  insremot  idestination, isource, instrnum [,instrnum...]  ----- csound doc: <http://csound.com/docs/manual/insremot.html>+-- csound doc: <https://csound.com/docs/manual/insremot.html> insremot ::  D -> D -> D -> SE ()-insremot b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "insremot" [(Xr,(repeat Ir))] [a1,a2,a3]+insremot b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "insremot" [(Xr,(repeat Ir))] [a1,a2,a3]  -- |  -- An opcode which can be used to implement a remote midi orchestra. This opcode will broadcast the midi events to all the machines involved in the remote concert.@@ -67,10 +72,12 @@ -- -- >  midglobal  isource, instrnum [,instrnum...]  ----- csound doc: <http://csound.com/docs/manual/midglobal.html>+-- csound doc: <https://csound.com/docs/manual/midglobal.html> midglobal ::  D -> D -> SE ()-midglobal b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "midglobal" [(Xr,(repeat Ir))] [a1,a2]+midglobal b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "midglobal" [(Xr,(repeat Ir))] [a1,a2]  -- |  -- An opcode which can be used to implement a remote midi orchestra. This opcode will send midi events from a source machine to one destination.@@ -79,7 +86,9 @@ -- -- >  midremot  idestination, isource, instrnum [,instrnum...]  ----- csound doc: <http://csound.com/docs/manual/midremot.html>+-- csound doc: <https://csound.com/docs/manual/midremot.html> midremot ::  D -> D -> D -> SE ()-midremot b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "midremot" [(Xr,(repeat Ir))] [a1,a2,a3]+midremot b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "midremot" [(Xr,(repeat Ir))] [a1,a2,a3]
src/Csound/Typed/Opcode/SerialIO.hs view
@@ -2,25 +2,77 @@               -    serialBegin, serialEnd, serialFlush, serialPrint, serialRead, serialWrite, serialWrite_i) where+    arduinoRead, arduinoReadF, arduinoStart, arduinoStop, serialBegin, serialEnd, serialFlush, serialPrint, serialRead, serialWrite, serialWrite_i) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed  --   -- | ++--+-- > kval  arduinoRead  iPort, iStream[, iSmooth]+--+-- csound doc: <https://csound.com/docs/manual/arduinoRead.html>+arduinoRead ::  D -> D -> Sig+arduinoRead b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "arduinoRead" [(Kr,[Ir,Ir,Ir])] [a1,a2]++-- | ++--+-- > kval  arduinoReadF  iPort, iStream1,+-- >           iStream2, iStream3+--+-- csound doc: <https://csound.com/docs/manual/arduinoReadF.html>+arduinoReadF ::  D -> D -> D -> D -> Sig+arduinoReadF b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "arduinoReadF" [(Kr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > iPort  arduinoStart  SPortName [, ibaudRate]+--+-- csound doc: <https://csound.com/docs/manual/arduinoStart.html>+arduinoStart ::  Str -> D+arduinoStart b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "arduinoStart" [(Ir,[Sr,Ir])] [a1]++-- | ++--+-- >   arduinoStop  iPort+--+-- csound doc: <https://csound.com/docs/manual/arduinoStop.html>+arduinoStop ::  D -> SE ()+arduinoStop b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "arduinoStop" [(Xr,[Ir])] [a1]++-- |  -- Open a serial port. -- -- Open a serial port for arduino. -- -- > iPort  serialBegin  SPortName [, ibaudRate] ----- csound doc: <http://csound.com/docs/manual/serialBegin.html>+-- csound doc: <https://csound.com/docs/manual/serialBegin.html> serialBegin ::  Str -> SE D-serialBegin b1 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "serialBegin" [(Ir,[Sr,Ir])] [a1]+serialBegin b1 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep "serialBegin" [(Ir,[Sr,Ir])] [a1]  -- |  -- Close a serial port.@@ -29,10 +81,12 @@ -- -- >   serialEnd  iPort ----- csound doc: <http://csound.com/docs/manual/serialEnd.html>+-- csound doc: <https://csound.com/docs/manual/serialEnd.html> serialEnd ::  D -> SE ()-serialEnd b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "serialEnd" [(Xr,[Ir])] [a1]+serialEnd b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "serialEnd" [(Xr,[Ir])] [a1]  -- |  -- Flush data from a serial port.@@ -46,10 +100,12 @@ -- -- >   serialFlush  iPort ----- csound doc: <http://csound.com/docs/manual/serialFlush.html>+-- csound doc: <https://csound.com/docs/manual/serialFlush.html> serialFlush ::  D -> SE ()-serialFlush b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "serialFlush" [(Xr,[Ir])] [a1]+serialFlush b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "serialFlush" [(Xr,[Ir])] [a1]  -- |  -- Print data from a serial port.@@ -63,10 +119,12 @@ -- -- >   serialPrint  iPort ----- csound doc: <http://csound.com/docs/manual/serialPrint.html>+-- csound doc: <https://csound.com/docs/manual/serialPrint.html> serialPrint ::  D -> SE ()-serialPrint b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "serialPrint" [(Xr,[Ir])] [a1]+serialPrint b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "serialPrint" [(Xr,[Ir])] [a1]  -- |  -- Read data from a serial port.@@ -75,10 +133,12 @@ -- -- > kByte  serialRead  iPort ----- csound doc: <http://csound.com/docs/manual/serialRead.html>+-- csound doc: <https://csound.com/docs/manual/serialRead.html> serialRead ::  D -> Sig-serialRead b1 = Sig $ f <$> unD b1-    where f a1 = opcs "serialRead" [(Kr,[Ir])] [a1]+serialRead b1 =+  Sig $ f <$> unD b1+  where+    f a1 = opcs "serialRead" [(Kr,[Ir])] [a1]  -- |  -- Write data to a serial port.@@ -89,10 +149,12 @@ -- >   serialWrite  iPort, kByte -- >   serialWrite  iPort, SBytes ----- csound doc: <http://csound.com/docs/manual/serialWrite.html>+-- csound doc: <https://csound.com/docs/manual/serialWrite.html> serialWrite ::  D -> D -> SE ()-serialWrite b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "serialWrite" [(Xr,[Ir,Ir])] [a1,a2]+serialWrite b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "serialWrite" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Write data to a serial port.@@ -102,7 +164,9 @@ -- >   serialWrite_i  iPort, iByte -- >   serialWrite_i  iPort, SBytes ----- csound doc: <http://csound.com/docs/manual/serialWrite_i.html>+-- csound doc: <https://csound.com/docs/manual/serialWrite_i.html> serialWrite_i ::  D -> D -> SE ()-serialWrite_i b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "serialWrite_i" [(Xr,[Ir,Ir])] [a1,a2]+serialWrite_i b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "serialWrite_i" [(Xr,[Ir,Ir])] [a1,a2]
src/Csound/Typed/Opcode/SignalFlowGraphOpcodes.hs view
@@ -5,6 +5,7 @@     ftgenonce, inleta, inletf, inletk, inletkid, inletv, outleta, outletf, outletk, outletkid, outletv) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -18,107 +19,129 @@ -- -- > ifno  ftgenonce  ip1, ip2dummy, isize, igen, iarga, iargb, ... ----- csound doc: <http://csound.com/docs/manual/ftgenonce.html>+-- csound doc: <https://csound.com/docs/manual/ftgenonce.html> ftgenonce ::  D -> D -> D -> D -> D -> [D] -> SE Tab-ftgenonce b1 b2 b3 b4 b5 b6 = fmap ( Tab . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> mapM unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "ftgenonce" [(Ir,(repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)+ftgenonce b1 b2 b3 b4 b5 b6 =+  fmap ( Tab . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> mapM (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep "ftgenonce" [(Ir,(repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)  -- |  -- Receives an arate signal into an instrument through a named port. -- -- > asignal  inleta Sname ----- csound doc: <http://csound.com/docs/manual/inleta.html>+-- csound doc: <https://csound.com/docs/manual/inleta.html> inleta ::  Str -> Sig-inleta b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "inleta" [(Ar,[Sr])] [a1]+inleta b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "inleta" [(Ar,[Sr])] [a1]  -- |  -- Receives an frate signal (fsig) into an instrument from a named port. -- -- > fsignal  inletf Sname ----- csound doc: <http://csound.com/docs/manual/inletf.html>+-- csound doc: <https://csound.com/docs/manual/inletf.html> inletf ::  Str -> Spec-inletf b1 = Spec $ f <$> unStr b1-    where f a1 = opcs "inletf" [(Fr,[Sr])] [a1]+inletf b1 =+  Spec $ f <$> unStr b1+  where+    f a1 = opcs "inletf" [(Fr,[Sr])] [a1]  -- |  -- Receives a krate signal into an instrument from a named port. -- -- > ksignal  inletk Sname ----- csound doc: <http://csound.com/docs/manual/inletk.html>+-- csound doc: <https://csound.com/docs/manual/inletk.html> inletk ::  Str -> Sig-inletk b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "inletk" [(Kr,[Sr])] [a1]+inletk b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "inletk" [(Kr,[Sr])] [a1]  -- |  -- Receives a krate signal into an instrument from a named port. -- -- > ksignal  inletkid Sname, SinstanceID ----- csound doc: <http://csound.com/docs/manual/inletkid.html>+-- csound doc: <https://csound.com/docs/manual/inletkid.html> inletkid ::  Str -> Str -> Sig-inletkid b1 b2 = Sig $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "inletkid" [(Kr,[Sr,Sr])] [a1,a2]+inletkid b1 b2 =+  Sig $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "inletkid" [(Kr,[Sr,Sr])] [a1,a2]  -- |  -- Receives an arate array signal into an instrument through a named port. -- -- > array  inletv Sname ----- csound doc: <http://csound.com/docs/manual/inletv.html>+-- csound doc: <https://csound.com/docs/manual/inletv.html> inletv ::  Str -> Sig-inletv b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "inletv" [(Ar,[Sr])] [a1]+inletv b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "inletv" [(Ar,[Sr])] [a1]  -- |  -- Sends an arate signal out from an instrument to a named port. -- -- >  outleta Sname, asignal ----- csound doc: <http://csound.com/docs/manual/outleta.html>+-- csound doc: <https://csound.com/docs/manual/outleta.html> outleta ::  Str -> Sig -> SE ()-outleta b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "outleta" [(Xr,[Sr,Ar])] [a1,a2]+outleta b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outleta" [(Xr,[Sr,Ar])] [a1,a2]  -- |  -- Sends a frate signal (fsig) out from an instrument to a named port. -- -- >  outletf Sname, fsignal ----- csound doc: <http://csound.com/docs/manual/outletf.html>+-- csound doc: <https://csound.com/docs/manual/outletf.html> outletf ::  Str -> Spec -> SE ()-outletf b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSpec b2-    where f a1 a2 = opcs "outletf" [(Xr,[Sr,Fr])] [a1,a2]+outletf b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSpec) b2+  where+    f a1 a2 = opcsDep_ "outletf" [(Xr,[Sr,Fr])] [a1,a2]  -- |  -- Sends a krate signal out from an instrument to a named port. -- -- >  outletk Sname, ksignal ----- csound doc: <http://csound.com/docs/manual/outletk.html>+-- csound doc: <https://csound.com/docs/manual/outletk.html> outletk ::  Str -> Sig -> SE ()-outletk b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "outletk" [(Xr,[Sr,Kr])] [a1,a2]+outletk b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outletk" [(Xr,[Sr,Kr])] [a1,a2]  -- |  -- Sends a krate signal out from an instrument to a named port. -- -- >  outletkid Sname, SinstanceID, ksignal ----- csound doc: <http://csound.com/docs/manual/outletkid.html>+-- csound doc: <https://csound.com/docs/manual/outletkid.html> outletkid ::  Str -> Str -> Sig -> SE ()-outletkid b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2 <*> unSig b3-    where f a1 a2 a3 = opcs "outletkid" [(Xr,[Sr,Sr,Kr])] [a1,a2,a3]+outletkid b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "outletkid" [(Xr,[Sr,Sr,Kr])] [a1,a2,a3]  -- |  -- Sends an arate array signal out from an instrument to a named port. -- -- >  outletv Sname, array ----- csound doc: <http://csound.com/docs/manual/outletv.html>+-- csound doc: <https://csound.com/docs/manual/outletv.html> outletv ::  Str -> Sig -> SE ()-outletv b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "outletv" [(Xr,[Sr,Ar])] [a1,a2]+outletv b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outletv" [(Xr,[Sr,Ar])] [a1,a2]
src/Csound/Typed/Opcode/SignalGenerators.hs view
@@ -20,3916 +20,4700 @@     hvs1, hvs2, hvs3,          -- * Linear and Exponential Generators.-    bpf, cosseg, cossegb, cossegr, expcurve, expon, expseg, expsega, expsegb, expsegba, expsegr, gainslider, line, linlin, linseg, linsegb, linsegr, logcurve, loopseg, loopsegp, looptseg, loopxseg, lpshold, lpsholdp, scale, transeg, transegb, transegr, xyscale,-    -    -- * Envelope Generators.-    adsr, envlpx, envlpxr, linen, linenr, madsr, mxadsr, xadsr,-    -    -- * Models and Emulations.-    bamboo, barmodel, cabasa, chuap, crunch, dripwater, gendy, gendyc, gendyx, gogobel, guiro, lorenz, mandel, mandol, marimba, moog, planet, prepiano, sandpaper, sekere, shaker, sleighbells, stix, tambourine, vibes, voice,-    -    -- * Phasors.-    phasor, phasorbnk, sc_phasor, syncphasor,-    -    -- * Random (Noise) Generators.-    betarand, bexprnd, cauchy, cauchyi, cuserrnd, duserrnd, dust, dust2, exprand, exprandi, fractalnoise, gauss, gaussi, gausstrig, getseed, jitter, jitter2, jspline, linrand, noise, pcauchy, pinker, pinkish, poisson, rand, randh, randi, random, randomh, randomi, rnd31, rspline, seed, trandom, trirand, unirand, urandom, urd, weibull,-    -    -- * Sample Playback.-    bbcutm, bbcuts, flooper, flooper2, fluidAllOut, fluidCCi, fluidCCk, fluidControl, fluidEngine, fluidLoad, fluidNote, fluidOut, fluidProgramSelect, fluidSetInterpMethod, loscil, loscil3, loscilx, lphasor, lposcil, lposcil3, lposcila, lposcilsa, lposcilsa2, sfilist, sfinstr, sfinstr3, sfinstr3m, sfinstrm, sfload, sflooper, sfpassign, sfplay, sfplay3, sfplay3m, sfplaym, sfplist, sfpreset, sndloop, waveset,-    -    -- * Scanned Synthesis.-    scanhammer, scans, scantable, scanu, xscanmap, xscans, xscansmap, xscanu,-    -    -- * STK Opcodes.-    stkBandedWG, stkBeeThree, stkBlowBotl, stkBlowHole, stkBowed, stkBrass, stkClarinet, stkDrummer, stkFMVoices, stkFlute, stkHevyMetl, stkMandolin, stkModalBar, stkMoog, stkPercFlut, stkPlucked, stkResonate, stkRhodey, stkSaxofony, stkShakers, stkSimple, stkSitar, stkStifKarp, stkTubeBell, stkVoicForm, stkWhistle, stkWurley,-    -    -- * Table Access.-    oscil1, oscil1i, ptable, ptable3, ptablei, tab_i, tab, tabw_i, tabw, table, table3, tablei,-    -    -- * Wave Terrain Synthesis.-    wterrain,-    -    -- * Waveguide Physical Modeling.-    pluck, repluck, streson, wgbow, wgbowedbar, wgbrass, wgclar, wgflute, wgpluck, wgpluck2) where--import Control.Monad.Trans.Class-import Csound.Dynamic-import Csound.Typed---- Additive Synthesis/Resynthesis.---- | --- Output is an additive set of individually controlled sinusoids, using an oscillator bank.------ > ares  adsyn  kamod, kfmod, ksmod, ifilcod------ csound doc: <http://csound.com/docs/manual/adsyn.html>-adsyn ::  Sig -> Sig -> Sig -> Str -> Sig-adsyn b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4-    where f a1 a2 a3 a4 = opcs "adsyn" [(Ar,[Kr,Kr,Kr,Sr])] [a1,a2,a3,a4]---- | --- Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic.------ > ares  adsynt  kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]------ csound doc: <http://csound.com/docs/manual/adsynt.html>-adsynt ::  Sig -> Sig -> Tab -> Tab -> Tab -> D -> Sig-adsynt b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "adsynt" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Performs additive synthesis with an arbitrary number of partials -not necessarily harmonic- with interpolation.------ Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic. (see adsynt for detailed manual)------ > ar  adsynt2  kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]------ csound doc: <http://csound.com/docs/manual/adsynt2.html>-adsynt2 ::  Sig -> Sig -> Tab -> Tab -> Tab -> D -> Sig-adsynt2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "adsynt2" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- An oscillator which takes tonality and brightness as arguments.------ An oscillator which takes tonality and brightness as arguments, relative to a base frequency.------ > ares  hsboscil  kamp, ktone, kbrite, ibasfreq, iwfn, ioctfn \--- >                    [, ioctcnt] [, iphs]------ csound doc: <http://csound.com/docs/manual/hsboscil.html>-hsboscil ::  Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig-hsboscil b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unTab b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "hsboscil" [(Ar,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- Basic Oscillators.---- | --- A low frequency oscillator of various shapes.------ > kres  lfo  kamp, kcps [, itype]--- > ares  lfo  kamp, kcps [, itype]------ csound doc: <http://csound.com/docs/manual/lfo.html>-lfo ::  Sig -> Sig -> Sig-lfo b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "lfo" [(Kr,[Kr,Kr,Ir]),(Ar,[Kr,Kr,Ir])] [a1,a2]---- | --- Mixes the output of any number of oscillators.------ This unit generator mixes the output of any number of oscillators. The frequency, phase, and amplitude of each oscillator can be modulated by two LFOs (all oscillators have a separate set of LFOs, with different phase and frequency); additionally, the output of each oscillator can be filtered through an optional parametric equalizer (also controlled by the LFOs).  This opcode is most useful for rendering ensemble (strings, choir, etc.) instruments.------ > ares  oscbnk   kcps, kamd, kfmd, kpmd, iovrlap, iseed, kl1minf, kl1maxf, \--- >           kl2minf, kl2maxf, ilfomode, keqminf, keqmaxf, keqminl, keqmaxl, \--- >           keqminq, keqmaxq, ieqmode, kfn [, il1fn] [, il2fn] [, ieqffn]   \--- >           [, ieqlfn] [, ieqqfn] [, itabl] [, ioutfn]------ csound doc: <http://csound.com/docs/manual/oscbnk.html>-oscbnk ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Sig-oscbnk b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unD b11 <*> unSig b12 <*> unSig b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unSig b17 <*> unD b18 <*> unTab b19-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 = opcs "oscbnk" [(Ar-                                                                                                ,[Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                                                                                                                   ,a2-                                                                                                                                                                                   ,a3-                                                                                                                                                                                   ,a4-                                                                                                                                                                                   ,a5-                                                                                                                                                                                   ,a6-                                                                                                                                                                                   ,a7-                                                                                                                                                                                   ,a8-                                                                                                                                                                                   ,a9-                                                                                                                                                                                   ,a10-                                                                                                                                                                                   ,a11-                                                                                                                                                                                   ,a12-                                                                                                                                                                                   ,a13-                                                                                                                                                                                   ,a14-                                                                                                                                                                                   ,a15-                                                                                                                                                                                   ,a16-                                                                                                                                                                                   ,a17-                                                                                                                                                                                   ,a18-                                                                                                                                                                                   ,a19]---- | --- A simple oscillator.------ oscil reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp.------ > ares  oscil  xamp, xcps [, ifn, iphs]--- > kres  oscil  kamp, kcps [, ifn, iphs]------ csound doc: <http://csound.com/docs/manual/oscil.html>-oscil ::  Sig -> Sig -> Tab -> Sig-oscil b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "oscil" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A simple oscillator with cubic interpolation.------ oscil3 reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Cubic interpolation is applied for table look up from internal phase values.------ > ares  oscil3  xamp, xcps [, ifn, iphs]--- > kres  oscil3  kamp, kcps [, ifn, iphs]------ csound doc: <http://csound.com/docs/manual/oscil3.html>-oscil3 ::  Sig -> Sig -> Tab -> Sig-oscil3 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "oscil3" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A simple oscillator with linear interpolation.------ oscili reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Linear interpolation is applied for table look up from internal phase values.------ > ares  oscili  xamp, xcps[, ifn, iphs]--- > kres  oscili  kamp, kcps[, ifn, iphs]------ csound doc: <http://csound.com/docs/manual/oscili.html>-oscili ::  Sig -> Sig -> Tab -> Sig-oscili b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "oscili" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A linearly interpolated oscillator that allows changing the table number at k-rate.------ oscilikt is very similar to oscili, but allows changing the table number at k-rate. It is slightly slower than oscili (especially with high control rate), although also more accurate as it uses a 31-bit phase accumulator, as opposed to the 24-bit one used by oscili.------ > ares  oscilikt  xamp, xcps, kfn [, iphs] [, istor]--- > kres  oscilikt  kamp, kcps, kfn [, iphs] [, istor]------ csound doc: <http://csound.com/docs/manual/oscilikt.html>-oscilikt ::  Sig -> Sig -> Tab -> Sig-oscilikt b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "oscilikt" [(Ar,[Xr,Xr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A linearly interpolated oscillator that allows allows phase modulation.------ osciliktp allows phase modulation (which is actually implemented as k-rate frequency modulation, by differentiating phase input). The disadvantage is that there is no amplitude control, and frequency can be varied only at the control-rate. This opcode can be faster or slower than oscilikt, depending on the control-rate.------ > ares  osciliktp  kcps, kfn, kphs [, istor]------ csound doc: <http://csound.com/docs/manual/osciliktp.html>-osciliktp ::  Sig -> Tab -> Sig -> Sig-osciliktp b1 b2 b3 = Sig $ f <$> unSig b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "osciliktp" [(Ar,[Kr,Kr,Kr,Ir])] [a1,a2,a3]---- | --- A linearly interpolated oscillator with sync status that allows changing the table number at k-rate.------ oscilikts is the same as oscilikt. Except it has a sync input that can be used to re-initialize the oscillator to a k-rate phase value. It is slower than oscilikt and osciliktp.------ > ares  oscilikts  xamp, xcps, kfn, async, kphs [, istor]------ csound doc: <http://csound.com/docs/manual/oscilikts.html>-oscilikts ::  Sig -> Sig -> Tab -> Sig -> Sig -> Sig-oscilikts b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "oscilikts" [(Ar,[Xr,Xr,Kr,Ar,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Accesses table values at a user-defined frequency.------ Accesses table values at a user-defined frequency. This opcode can also be written as oscilx.------ > ares  osciln  kamp, ifrq, ifn, itimes------ csound doc: <http://csound.com/docs/manual/osciln.html>-osciln ::  Sig -> D -> Tab -> D -> Sig-osciln b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unD b2 <*> unTab b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "osciln" [(Ar,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- A simple, fast sine oscillator------ Simple, fast sine oscillator, that uses only one multiply, and two add operations to generate one sample of output, and does not require a function table.------ > ares  oscils  iamp, icps, iphs [, iflg]------ csound doc: <http://csound.com/docs/manual/oscils.html>-oscils ::  D -> D -> D -> Sig-oscils b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "oscils" [(Ar,[Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- High precision oscillator.------ > ares  poscil  aamp, acps [, ifn, iphs]--- > ares  poscil  aamp, kcps [, ifn, iphs]--- > ares  poscil  kamp, acps [, ifn, iphs]--- > ares  poscil  kamp, kcps [, ifn, iphs]--- > ires  poscil  kamp, kcps [, ifn, iphs]--- > kres  poscil  kamp, kcps [, ifn, iphs]------ csound doc: <http://csound.com/docs/manual/poscil.html>-poscil ::  Sig -> Sig -> Tab -> Sig-poscil b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "poscil" [(Ar,[Ar,Ar,Ir,Ir])-                                     ,(Ar,[Ar,Kr,Ir,Ir])-                                     ,(Ar,[Kr,Ar,Ir,Ir])-                                     ,(Ar,[Kr,Kr,Ir,Ir])-                                     ,(Ir,[Kr,Kr,Ir,Ir])-                                     ,(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- High precision oscillator with cubic interpolation.------ > ares  poscil3  aamp, acps [, ifn, iphs]--- > ares  poscil3  aamp, kcps [, ifn, iphs]--- > ares  poscil3  kamp, acps [, ifn, iphs]--- > ares  poscil3  kamp, kcps [, ifn, iphs]--- > ires  poscil3  kamp, kcps [, ifn, iphs]--- > kres  poscil3  kamp, kcps [, ifn, iphs]------ csound doc: <http://csound.com/docs/manual/poscil3.html>-poscil3 ::  Sig -> Sig -> Tab -> Sig-poscil3 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "poscil3" [(Ar,[Ar,Ar,Ir,Ir])-                                      ,(Ar,[Ar,Kr,Ir,Ir])-                                      ,(Ar,[Kr,Ar,Ir,Ir])-                                      ,(Ar,[Kr,Kr,Ir,Ir])-                                      ,(Ir,[Kr,Kr,Ir,Ir])-                                      ,(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Easier-to-use user-controllable vibrato.------ > kout  vibr  kAverageAmp, kAverageFreq, ifn------ csound doc: <http://csound.com/docs/manual/vibr.html>-vibr ::  Sig -> Sig -> Tab -> Sig-vibr b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "vibr" [(Kr,[Kr,Kr,Ir])] [a1,a2,a3]---- | --- Generates a natural-sounding user-controllable vibrato.------ > kout  vibrato  kAverageAmp, kAverageFreq, kRandAmountAmp, kRandAmountFreq, kAmpMinRate, kAmpMaxRate, kcpsMinRate, kcpsMaxRate, ifn [, iphs------ csound doc: <http://csound.com/docs/manual/vibrato.html>-vibrato ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-vibrato b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unTab b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "vibrato" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1-                                                                                               ,a2-                                                                                               ,a3-                                                                                               ,a4-                                                                                               ,a5-                                                                                               ,a6-                                                                                               ,a7-                                                                                               ,a8-                                                                                               ,a9]---- Dynamic Spectrum Oscillators.---- | --- Output is a set of harmonically related sine partials.------ > ares  buzz  xamp, xcps, knh, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/buzz.html>-buzz ::  Sig -> Sig -> Sig -> Tab -> Sig-buzz b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4-    where f a1 a2 a3 a4 = opcs "buzz" [(Ar,[Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4]---- | --- Output is a set of harmonically related cosine partials.------ > ares  gbuzz  xamp, xcps, knh, klh, kmul, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/gbuzz.html>-gbuzz ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-gbuzz b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "gbuzz" [(Ar,[Xr,Xr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Generates a set of impulses.------ Generates a set of impulses of amplitude kamp separated by kintvl seconds (or samples if kintvl is negative).  The first impulse is generated after a delay of ioffset seconds.------ > ares  mpulse  kamp, kintvl [, ioffset]------ csound doc: <http://csound.com/docs/manual/mpulse.html>-mpulse ::  Sig -> Sig -> Sig-mpulse b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "mpulse" [(Ar,[Kr,Kr,Ir])] [a1,a2]---- | --- A mostly bandlimited shape-shifting square-pulse-saw-sinewave oscillator with hardsync.------ This oscillator generates a variable shape waveform that can morph freely between classical shapes sine, square, pulse and saw.--- The shape is controlled by two interacting values: clip (squareness) and "skew" (symmetry).--- All shapes use a minimum number of samples per transition (ie, the sharp end of a saw or a pulse uses minimum N samples), this makes output bandlimited.--- At higher frequency, the minimum sweep rate takes over, so over a certain pitch all shapes "degrade" to sinewave. The minimum sweep rate is i-time configurable.--- Hardsync (a very quick sweep to phase=0) is supported, and a sync signal is output once per cycle.------ > aout [, asyncout]  squinewave  acps, aClip, aSkew [, asyncin] [, iMinSweep] [, iphase]------ csound doc: <http://csound.com/docs/manual/squinewave.html>-squinewave :: Tuple a => Sig -> Sig -> Sig -> a-squinewave b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "squinewave" ([Ar,Ar],[Ar,Ar,Ar,Ar,Ir,Ir]) [a1,a2,a3]---- | --- Implementation of a band limited, analog modeled oscillator.------ Implementation of a band limited, analog modeled oscillator, based on integration of band limited impulses. vco can be used to simulate a variety of analog wave forms.------ > ares  vco  xamp, xcps, iwave, kpw [, ifn] [, imaxd] [, ileak] [, inyx] \--- >           [, iphs] [, iskip]------ csound doc: <http://csound.com/docs/manual/vco.html>-vco ::  Sig -> Sig -> D -> Sig -> Sig-vco b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "vco" [(Ar,[Xr,Xr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Implementation of a band-limited oscillator using pre-calculated tables.------ vco2 is similar to vco. But the implementation uses pre-calculated tables of band-limited waveforms (see also GEN30) rather than integrating impulses. This opcode can be faster than vco (especially if a low control-rate is used) and also allows better sound quality. Additionally, there are more waveforms and oscillator phase can be modulated at k-rate. The disadvantage is increased memory usage. For more details about vco2 tables, see also vco2init and vco2ft.------ > ares  vco2  kamp, kcps [, imode] [, kpw] [, kphs] [, inyx]------ csound doc: <http://csound.com/docs/manual/vco2.html>-vco2 ::  Sig -> Sig -> Sig-vco2 b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "vco2" [(Ar,[Kr,Kr,Ir,Kr,Kr,Ir])] [a1,a2]---- | --- Returns a table number at k-time for a given oscillator frequency and wavform.------ vco2ft returns the function table number to be used for generating the specified waveform at a given frequency. This function table number can be used by any Csound opcode that generates a signal by reading function tables (like oscilikt). The tables must be calculated by vco2init before vco2ft is called and shared as Csound ftables (ibasfn).------ > kfn  vco2ft  kcps, iwave [, inyx]------ csound doc: <http://csound.com/docs/manual/vco2ft.html>-vco2ft ::  Sig -> D -> Tab-vco2ft b1 b2 = Tab $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "vco2ft" [(Kr,[Kr,Ir,Ir])] [a1,a2]---- | --- Returns a table number at i-time for a given oscillator frequency and wavform.------ vco2ift is the same as vco2ft, but works at i-time. It is suitable for use with opcodes that expect an i-rate table number (for example, oscili).------ > ifn  vco2ift  icps, iwave [, inyx]------ csound doc: <http://csound.com/docs/manual/vco2ift.html>-vco2ift ::  D -> D -> Tab-vco2ift b1 b2 = Tab $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "vco2ift" [(Ir,[Ir,Ir,Ir])] [a1,a2]---- | --- Calculates tables for use by vco2 opcode.------ vco2init calculates tables for use by vco2 opcode. Optionally, it is also possible to access these tables as standard Csound function tables. In this case, vco2ft can be used to find the correct table number for a given oscillator frequency.------ > ifn  vco2init  iwave [, ibasfn] [, ipmul] [, iminsiz] [, imaxsiz] [, isrcft]------ csound doc: <http://csound.com/docs/manual/vco2init.html>-vco2init ::  D -> SE Tab-vco2init b1 = fmap ( Tab . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "vco2init" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1]---- FM Synthesis.---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crossfm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crossfm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crossfm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                          ,a2-                                                                                          ,a3-                                                                                          ,a4-                                                                                          ,a5-                                                                                          ,a6-                                                                                          ,a7]---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crossfmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crossfmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crossfmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4-                                                                                           ,a5-                                                                                           ,a6-                                                                                           ,a7]---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crosspm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crosspm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crosspm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                          ,a2-                                                                                          ,a3-                                                                                          ,a4-                                                                                          ,a5-                                                                                          ,a6-                                                                                          ,a7]---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crosspmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crosspmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crosspmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4-                                                                                           ,a5-                                                                                           ,a6-                                                                                           ,a7]---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crossfmpm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crossfmpm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crossfmpm b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                            ,a2-                                                                                            ,a3-                                                                                            ,a4-                                                                                            ,a5-                                                                                            ,a6-                                                                                            ,a7]---- | --- Two mutually frequency and/or phase modulated oscillators.------ Two oscillators, mutually frequency and/or phase modulated by each other.------ > a1, a2  crossfmpmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]------ csound doc: <http://csound.com/docs/manual/crossfm.html>-crossfmpmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)-crossfmpmi b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7]---- | --- Uses FM synthesis to create a Hammond B3 organ sound.------ Uses FM synthesis to create a Hammond B3 organ sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmb3  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, ifn3, \--- >           ifn4, ivfn]------ csound doc: <http://csound.com/docs/manual/fmb3.html>-fmb3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-fmb3 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "fmb3" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                      ,a2-                                                                                      ,a3-                                                                                      ,a4-                                                                                      ,a5-                                                                                      ,a6]---- | --- Uses FM synthesis to create a tublar bell sound.------ Uses FM synthesis to create a tublar bell sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmbell  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, ifn3, \--- >           ifn4, ivfn, isus]------ csound doc: <http://csound.com/docs/manual/fmbell.html>-fmbell ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-fmbell b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "fmbell" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4-                                                                                           ,a5-                                                                                           ,a6]---- | --- Uses FM synthesis to create a “Heavy Metal” sound.------ Uses FM synthesis to create a “Heavy Metal” sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmmetal  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \--- >           ifn4, ivfn------ csound doc: <http://csound.com/docs/manual/fmmetal.html>-fmmetal ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig-fmmetal b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmmetal" [(Ar-                                                                 ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]---- | --- Uses FM synthesis to create a percussive flute sound.------ Uses FM synthesis to create a percussive flute sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmpercfl  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, \--- >           ifn3, ifn4, ivfn]------ csound doc: <http://csound.com/docs/manual/fmpercfl.html>-fmpercfl ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-fmpercfl b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "fmpercfl" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                          ,a2-                                                                                          ,a3-                                                                                          ,a4-                                                                                          ,a5-                                                                                          ,a6]---- | --- Uses FM synthesis to create a Fender Rhodes electric piano sound.------ Uses FM synthesis to create a Fender Rhodes electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmrhode  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \--- >           ifn3, ifn4, ivfn------ csound doc: <http://csound.com/docs/manual/fmrhode.html>-fmrhode ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig-fmrhode b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmrhode" [(Ar-                                                                 ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]---- | --- FM Singing Voice Synthesis------ > ares  fmvoice  kamp, kfreq, kvowel, ktilt, kvibamt, kvibrate[, ifn1, \--- >           ifn2, ifn3, ifn4, ivibfn]------ csound doc: <http://csound.com/docs/manual/fmvoice.html>-fmvoice ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-fmvoice b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "fmvoice" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                         ,a2-                                                                                         ,a3-                                                                                         ,a4-                                                                                         ,a5-                                                                                         ,a6]---- | --- Uses FM synthesis to create a Wurlitzer electric piano sound.------ Uses FM synthesis to create a Wurlitzer electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.------ > ares  fmwurlie  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \--- >           ifn4, ivfn------ csound doc: <http://csound.com/docs/manual/fmwurlie.html>-fmwurlie ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig-fmwurlie b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmwurlie" [(Ar-                                                                  ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]---- | --- A basic frequency modulated oscillator.------ > ares  foscil  xamp, kcps, xcar, xmod, kndx, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/foscil.html>-foscil ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-foscil b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "foscil" [(Ar,[Xr,Kr,Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Basic frequency modulated oscillator with linear interpolation.------ > ares  foscili  xamp, kcps, xcar, xmod, kndx, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/foscili.html>-foscili ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-foscili b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "foscili" [(Ar,[Xr,Kr,Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- Granular Synthesis.---- | --- Synchronous granular synthesis, using a soundfile as source.------ diskgrain implements synchronous granular synthesis. The source sound for the grains is obtained by reading a soundfile containing the samples of the source waveform.------ > asig  diskgrain  Sfname, kamp, kfreq, kpitch, kgrsize, kprate, \--- >           ifun, iolaps [,imaxgrsize , ioffset]------ csound doc: <http://csound.com/docs/manual/diskgrain.html>-diskgrain ::  Str -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-diskgrain b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "diskgrain" [(Ar,[Sr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1-                                                                                              ,a2-                                                                                              ,a3-                                                                                              ,a4-                                                                                              ,a5-                                                                                              ,a6-                                                                                              ,a7-                                                                                              ,a8]---- | --- Produces sinusoid bursts useful for formant and granular synthesis.------ Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis.------ > ares  fof  xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \--- >           ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]------ csound doc: <http://csound.com/docs/manual/fof.html>-fof ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig-fof b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unTab b10 <*> unTab b11 <*> unD b12-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = opcs "fof" [(Ar-                                                                 ,[Xr,Xr,Xr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]---- | --- Produces sinusoid bursts including k-rate incremental indexing with each successive burst.------ Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis.------ > ares  fof2  xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \--- >           ifna, ifnb, itotdur, kphs, kgliss [, iskip]------ csound doc: <http://csound.com/docs/manual/fof2.html>-fof2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig -> Sig -> Sig-fof2 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unTab b10 <*> unTab b11 <*> unD b12 <*> unSig b13 <*> unSig b14-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 = opcs "fof2" [(Ar-                                                                          ,[Xr,Xr,Xr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14]---- | --- Audio output is a succession of grains derived from data in a stored function table------ Audio output is a succession of grains derived from data in a stored function table ifna. The local envelope of these grains and their timing is based on the model of fof synthesis and permits detailed control of the granular synthesis.------ > ares  fog  xamp, xdens, xtrans, aspd, koct, kband, kris, kdur, kdec, \--- >           iolaps, ifna, ifnb, itotdur [, iphs] [, itmode] [, iskip]------ csound doc: <http://csound.com/docs/manual/fog.html>-fog ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig-fog b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unD b10 <*> unTab b11 <*> unTab b12 <*> unD b13-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = opcs "fog" [(Ar-                                                                     ,[Xr,Xr,Xr,Ar,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13]---- | --- Generates granular synthesis textures.------ > ares  grain  xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, igfn, \--- >           iwfn, imgdur [, igrnd]------ csound doc: <http://csound.com/docs/manual/grain.html>-grain ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> D -> Sig-grain b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "grain" [(Ar,[Xr,Xr,Xr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7-                                                                                             ,a8-                                                                                             ,a9]---- | --- Easy-to-use granular synthesis texture generator.------ Generate granular synthesis textures. grain2 is simpler to use, but grain3 offers more control.------ > ares  grain2  kcps, kfmd, kgdur, iovrlp, kfn, iwfn [, irpow] \--- >           [, iseed] [, imode]------ csound doc: <http://csound.com/docs/manual/grain2.html>-grain2 ::  Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig-grain2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unTab b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = opcs "grain2" [(Ar,[Kr,Kr,Kr,Ir,Kr,Ir,Ir,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6]---- | --- Generate granular synthesis textures with more user control.------ Generate granular synthesis textures. grain2 is simpler to use but grain3 offers more control.------ > ares  grain3  kcps, kphs, kfmd, kpmd, kgdur, kdens, imaxovr, kfn, iwfn, \--- >           kfrpow, kprpow [, iseed] [, imode]------ csound doc: <http://csound.com/docs/manual/grain3.html>-grain3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig -> Sig -> Sig-grain3 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unTab b8 <*> unTab b9 <*> unSig b10 <*> unSig b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "grain3" [(Ar-                                                                ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]---- | --- A more complex granular synthesis texture generator.------ The granule unit generator is more complex than grain, but does add new possibilities.------ > ares  granule  xamp, ivoice, iratio, imode, ithd, ifn, ipshift, igskip, \--- >           igskip_os, ilength, kgap, igap_os, kgsize, igsize_os, iatt, idec \--- >           [, iseed] [, ipitch1] [, ipitch2] [, ipitch3] [, ipitch4] [, ifnenv]------ csound doc: <http://csound.com/docs/manual/granule.html>-granule ::  Sig -> D -> D -> D -> D -> Tab -> D -> D -> D -> D -> Sig -> D -> Sig -> D -> D -> D -> Sig-granule b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unTab b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unSig b11 <*> unD b12 <*> unSig b13 <*> unD b14 <*> unD b15 <*> unD b16-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 = opcs "granule" [(Ar-                                                                                     ,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                                                                                            ,a2-                                                                                                                                                            ,a3-                                                                                                                                                            ,a4-                                                                                                                                                            ,a5-                                                                                                                                                            ,a6-                                                                                                                                                            ,a7-                                                                                                                                                            ,a8-                                                                                                                                                            ,a9-                                                                                                                                                            ,a10-                                                                                                                                                            ,a11-                                                                                                                                                            ,a12-                                                                                                                                                            ,a13-                                                                                                                                                            ,a14-                                                                                                                                                            ,a15-                                                                                                                                                            ,a16]---- | --- Granular synthesizer with "per grain" control---       over many of its parameters.  Has a sync input to---       sychronize its internal grain scheduler clock to an external---       clock source.------ partikkel was conceived after reading Curtis Roads' book---       "Microsound", and the goal was to create an opcode that was---       capable of all time-domain varieties of granular synthesis---       described in this book. The idea being that most of the---       techniques only differ in parameter values, and by having a---       single opcode that can do all varieties of granular synthesis---       makes it possible to interpolate between techniques. Granular synthesis is sometimes dubbed particle---       synthesis, and it was thought apt to name the opcode partikkel---       to distinguish it from other granular opcodes.------ > a1 [, a2, a3, a4, a5, a6, a7, a8]  partikkel  agrainfreq, \--- >                   kdistribution, idisttab, async, kenv2amt, ienv2tab, ienv_attack, \--- >                   ienv_decay, ksustain_amount, ka_d_ratio, kduration, kamp, igainmasks, \--- >                   kwavfreq, ksweepshape, iwavfreqstarttab, iwavfreqendtab, awavfm, \--- >                   ifmamptab, kfmenv, icosine, ktraincps, knumpartials, kchroma, \--- >                   ichannelmasks, krandommask, kwaveform1, kwaveform2, kwaveform3, \--- >                   kwaveform4, iwaveamptab, asamplepos1, asamplepos2, asamplepos3, \--- >                   asamplepos4, kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains \--- >                   [, iopcode_id, ipanlaws]------ csound doc: <http://csound.com/docs/manual/partikkel.html>-partikkel :: Tuple a => Sig -> Sig -> D -> Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> D -> D -> Sig -> D -> Sig -> D -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> a-partikkel b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25 b26 b27 b28 b29 b30 b31 b32 b33 b34 b35 b36 b37 b38 b39 b40 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unSig b12 <*> unD b13 <*> unSig b14 <*> unSig b15 <*> unD b16 <*> unD b17 <*> unSig b18 <*> unD b19 <*> unSig b20 <*> unD b21 <*> unSig b22 <*> unSig b23 <*> unSig b24 <*> unD b25 <*> unSig b26 <*> unSig b27 <*> unSig b28 <*> unSig b29 <*> unSig b30 <*> unD b31 <*> unSig b32 <*> unSig b33 <*> unSig b34 <*> unSig b35 <*> unSig b36 <*> unSig b37 <*> unSig b38 <*> unSig b39 <*> unD b40-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 a32 a33 a34 a35 a36 a37 a38 a39 a40 = mopcs "partikkel" ([Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar]-                                                                                                                                                                                       ,[Ar-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Ar-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Kr-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ir-                                                                                                                                                                                        ,Ir]) [a1-                                                                                                                                                                                              ,a2-                                                                                                                                                                                              ,a3-                                                                                                                                                                                              ,a4-                                                                                                                                                                                              ,a5-                                                                                                                                                                                              ,a6-                                                                                                                                                                                              ,a7-                                                                                                                                                                                              ,a8-                                                                                                                                                                                              ,a9-                                                                                                                                                                                              ,a10-                                                                                                                                                                                              ,a11-                                                                                                                                                                                              ,a12-                                                                                                                                                                                              ,a13-                                                                                                                                                                                              ,a14-                                                                                                                                                                                              ,a15-                                                                                                                                                                                              ,a16-                                                                                                                                                                                              ,a17-                                                                                                                                                                                              ,a18-                                                                                                                                                                                              ,a19-                                                                                                                                                                                              ,a20-                                                                                                                                                                                              ,a21-                                                                                                                                                                                              ,a22-                                                                                                                                                                                              ,a23-                                                                                                                                                                                              ,a24-                                                                                                                                                                                              ,a25-                                                                                                                                                                                              ,a26-                                                                                                                                                                                              ,a27-                                                                                                                                                                                              ,a28-                                                                                                                                                                                              ,a29-                                                                                                                                                                                              ,a30-                                                                                                                                                                                              ,a31-                                                                                                                                                                                              ,a32-                                                                                                                                                                                              ,a33-                                                                                                                                                                                              ,a34-                                                                                                                                                                                              ,a35-                                                                                                                                                                                              ,a36-                                                                                                                                                                                              ,a37-                                                                                                                                                                                              ,a38-                                                                                                                                                                                              ,a39-                                                                                                                                                                                              ,a40]---- | --- Get mask index for a specific mask parameter of a running partikkel instance.------ partikkelget is an opcode for outputting partikkel mask index for a specific parameter. ---       Used together with partikkelset, it can be used to synchronize partikkel masking between several running instances of the  partikkel opcode. ---       It can also be used to control other processes based on the internal mask index, for example to create more complex masking patterns than is available with the regular grain masking system.------ > kindex  partikkelget  kparameterindex, iopcode_id------ csound doc: <http://csound.com/docs/manual/partikkelget.html>-partikkelget ::  Sig -> D -> Sig-partikkelget b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "partikkelget" [(Kr,[Kr,Ir])] [a1,a2]---- | --- Set mask index for a specific mask parameter of a running partikkel instance.------ partikkelset is an opcode for setting the partikkel mask index for a specific parameter. ---       Used together with partikkelget, it can be used to synchronize partikkel masking between several running instances of the  partikkel opcode. ---       It can also be used to set the internal mask index basaed on other processes, for example to create more complex masking patterns than is available with the regular grain masking system.------ >  partikkelset  kparameterindex, kmaskindex, iopcode_id------ csound doc: <http://csound.com/docs/manual/partikkelset.html>-partikkelset ::  Sig -> Sig -> D -> SE ()-partikkelset b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "partikkelset" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]---- | --- Outputs partikkel's grain---       scheduler clock pulse and phase to synchronize several instances of the partikkel---       opcode to the same clock source.------ partikkelsync is an opcode for outputting partikkel's grain scheduler clock pulse and phase. partikkelsync's output can be used to synchronize other instances of the partikkel opcode to the same clock.------ > async [,aphase]  partikkelsync  iopcode_id------ csound doc: <http://csound.com/docs/manual/partikkelsync.html>-partikkelsync :: Tuple a => D -> a-partikkelsync b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "partikkelsync" ([Ar,Ar],[Ir]) [a1]---- | --- Reads a mono sound sample from a table and applies time-stretching and/or pitch modification.------ sndwarp reads sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch!------ > ares [, ac]  sndwarp  xamp, xtimewarp, xresample, ifn1, ibeg, iwsize, \--- >           irandw, ioverlap, ifn2, itimemode------ csound doc: <http://csound.com/docs/manual/sndwarp.html>-sndwarp :: Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a-sndwarp b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unTab b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "sndwarp" ([Ar,Ar]-                                                             ,[Xr,Xr,Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- | --- Reads a stereo sound sample from a table and applies time-stretching and/or pitch modification.------ sndwarpst reads stereo sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch!------ > ar1, ar2 [,ac1] [, ac2]  sndwarpst  xamp, xtimewarp, xresample, ifn1, \--- >           ibeg, iwsize, irandw, ioverlap, ifn2, itimemode------ csound doc: <http://csound.com/docs/manual/sndwarpst.html>-sndwarpst :: Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a-sndwarpst b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unTab b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "sndwarpst" ([Ar,Ar,Ar,Ar]-                                                               ,[Xr,Xr,Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- | --- Synchronous granular synthesis.------ syncgrain implements synchronous granular synthesis. The source sound for the--- grains is obtained by reading a function table containing the samples of the source waveform. --- For sampled-sound sources, GEN01 is used.--- syncgrain will accept deferred allocation tables.------ > asig  syncgrain  kamp, kfreq, kpitch, kgrsize, kprate, ifun1, \--- >           ifun2, iolaps------ csound doc: <http://csound.com/docs/manual/syncgrain.html>-syncgrain ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig-syncgrain b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "syncgrain" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                        ,a2-                                                                                        ,a3-                                                                                        ,a4-                                                                                        ,a5-                                                                                        ,a6-                                                                                        ,a7-                                                                                        ,a8]---- | --- Synchronous granular synthesis.------ syncloop is a variation on syncgrain,--- which implements synchronous granular synthesis. --- syncloop adds loop start and end points and an optional start position. Loop start--- and end control grain start positions, so the actual grains can go beyond the loop--- points (if the loop points are not at the extremes of the table), enabling--- seamless crossfading. For more information on the granular synthesis process,--- check the syncgrain manual page.------ > asig  syncloop  kamp, kfreq, kpitch, kgrsize, kprate, klstart, \--- >           klend, ifun1, ifun2, iolaps[,istart, iskip]------ csound doc: <http://csound.com/docs/manual/syncloop.html>-syncloop ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig-syncloop b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unD b8 <*> unD b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcs "syncloop" [(Ar-                                                              ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- | --- Simple vocal simulation based on glottal pulses with formant characteristics.------ This opcode produces a simple vocal simulation based on glottal pulses with formant characteristics.--- Output is a series of sound events, where each event is composed of a burst of squared sine pulses followed by silence.--- The VOSIM (VOcal SIMulation) synthesis method was developed by Kaegi and Tempelaars in the 1970's.------ > ar  vosim  kamp, kFund, kForm, kDecay, kPulseCount, kPulseFactor, ifn [, iskip]------ csound doc: <http://csound.com/docs/manual/vosim.html>-vosim ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig-vosim b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "vosim" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1-                                                                                 ,a2-                                                                                 ,a3-                                                                                 ,a4-                                                                                 ,a5-                                                                                 ,a6-                                                                                 ,a7]---- Hyper Vectorial Synthesis.---- | --- Allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ hvs1 allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ >  hvs1  kx, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]------ csound doc: <http://csound.com/docs/manual/hvs1.html>-hvs1 ::  Sig -> D -> D -> D -> D -> D -> SE ()-hvs1 b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "hvs1" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ hvs2 allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ >  hvs2  kx, ky, inumParms, inumPointsX, inumPointsY, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]------ csound doc: <http://csound.com/docs/manual/hvs2.html>-hvs2 ::  Sig -> Sig -> D -> D -> D -> D -> D -> D -> SE ()-hvs2 b1 b2 b3 b4 b5 b6 b7 b8 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "hvs2" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                      ,a2-                                                                                      ,a3-                                                                                      ,a4-                                                                                      ,a5-                                                                                      ,a6-                                                                                      ,a7-                                                                                      ,a8]---- | --- Allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ hvs3 allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.------ >  hvs3  kx, ky, kz, inumParms, inumPointsX, inumPointsY, inumPointsZ, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]------ csound doc: <http://csound.com/docs/manual/hvs3.html>-hvs3 ::  Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> SE ()-hvs3 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcs "hvs3" [(Xr-                                                          ,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- Linear and Exponential Generators.---- | --- Break point function with linear interpolation------ Break-point function with linear interpolation. Useful when--- 	  defining a table with GEN27 and scaling the x value would be--- 	  overkill.------ > ky  bpf  kx, kx1, ky1, kx2, ..., kxn, kyn------ csound doc: <http://csound.com/docs/manual/bpf.html>-bpf ::  Sig -> Sig -> Sig -> [Sig] -> Sig-bpf b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "bpf" [(Kr,(repeat Kr))] ([a1,a2,a3] ++ a4)---- | --- Trace a series of line segments between specified points with---       cosine interpolation.------ > ares  cosseg  ia, idur1, ib [, idur2] [, ic] [...]--- > kres  cosseg  ia, idur1, ib [, idur2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/cosseg.html>-cosseg ::  [D] -> Sig-cosseg b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "cosseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- Trace a series of line segments between specified absolute points with---       cosine interpolation.------ > ares  cossegb  ia, itim1, ib [, itim2] [, ic] [...]--- > kres  cossegb  ia, itim1, ib [, itim2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/cossegb.html>-cossegb ::  [D] -> Sig-cossegb b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "cossegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- Trace a series of line segments between specified points with---       cosine interpolation, including a release segment.------ > ares  cossegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz--- > kres  cossegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz------ csound doc: <http://csound.com/docs/manual/cossegr.html>-cossegr ::  [D] -> D -> D -> Sig-cossegr b1 b2 b3 = Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = setRate Kr $ opcs "cossegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])---- | --- This opcode implements a formula for generating a normalised exponential curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.------ Generates an exponential curve in range 0 to 1 of arbitrary steepness.---       Steepness index equal to or lower than 1.0 will result in Not-a-Number---       errors and cause unstable behavior.------ > kout  expcurve  kindex, ksteepness------ csound doc: <http://csound.com/docs/manual/expcurve.html>-expcurve ::  Sig -> Sig -> Sig-expcurve b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "expcurve" [(Kr,[Kr,Kr])] [a1,a2]---- | --- Trace an exponential curve between specified points.------ > ares  expon  ia, idur, ib--- > kres  expon  ia, idur, ib------ csound doc: <http://csound.com/docs/manual/expon.html>-expon ::  D -> D -> D -> Sig-expon b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "expon" [(Ar,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1,a2,a3]---- | --- Trace a series of exponential segments between specified points.------ > ares  expseg  ia, idur1, ib [, idur2] [, ic] [...]--- > kres  expseg  ia, idur1, ib [, idur2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/expseg.html>-expseg ::  [D] -> Sig-expseg b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "expseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- An exponential segment generator operating at a-rate.------ An exponential segment generator operating at a-rate. This unit is almost identical to expseg, but more precise when defining segments with very short durations (i.e., in a percussive attack phase) at audio rate.------ > ares  expsega  ia, idur1, ib [, idur2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/expsega.html>-expsega ::  [D] -> Sig-expsega b1 = Sig $ f <$> mapM unD b1-    where f a1 = opcs "expsega" [(Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- Trace a series of exponential segments between specified---       absolute points.------ > ares  expsegb  ia, itim1, ib [, itim2] [, ic] [...]--- > kres  expsegb  ia, itim1, ib [, itim2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/expsegb.html>-expsegb ::  [D] -> Sig-expsegb b1 = Sig $ f <$> mapM unD b1-    where f a1 = opcs "expsegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- An exponential segment generator operating at a-rate with---       absolute times.------ An exponential segment generator operating at a-rate. This unit---       is almost identical to expsegb, but---       more precise when defining segments with very short durations---       (i.e., in a percussive attack phase) at audio rate.------ > ares  expsegba  ia, itim1, ib [, itim2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/expsegba.html>-expsegba ::  D -> D -> D -> Sig-expsegba b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "expsegba" [(Ar,(repeat Ir))] [a1,a2,a3]---- | --- Trace a series of exponential segments between specified points including a release segment.------ > ares  expsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz--- > kres  expsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz------ csound doc: <http://csound.com/docs/manual/expsegr.html>-expsegr ::  [D] -> D -> D -> Sig-expsegr b1 b2 b3 = Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = setRate Kr $ opcs "expsegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])---- | --- An implementation of a logarithmic gain curve which is similar to the gainslider~ object from Cycling 74 Max / MSP.------ This opcode is intended for use to multiply by an audio signal to give a console mixer like feel. There is no bounds in the---       source code so you can for example give higher than 127 values for extra amplitude but possibly clipped audio.------ > kout  gainslider  kindex------ csound doc: <http://csound.com/docs/manual/gainslider.html>-gainslider ::  Sig -> Sig-gainslider b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "gainslider" [(Kr,[Kr])] [a1]---- | --- Trace a straight line between specified points.------ > ares  line  ia, idur, ib--- > kres  line  ia, idur, ib------ csound doc: <http://csound.com/docs/manual/line.html>-line ::  D -> D -> D -> Sig-line b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "line" [(Ar,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1,a2,a3]---- | --- Linear to linear interpolation------ Maps a linear range of values to another linear range of values.------ > kout  linlin  kin, ksrclo, ksrchi, kdstlo, kdsthi------ csound doc: <http://csound.com/docs/manual/linlin.html>-linlin ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-linlin b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "linlin" [(Kr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Trace a series of line segments between specified points.------ > ares  linseg  ia, idur1, ib [, idur2] [, ic] [...]--- > kres  linseg  ia, idur1, ib [, idur2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/linseg.html>-linseg ::  [D] -> Sig-linseg b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "linseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- Trace a series of line segments between specified absolute points.------ > ares  linsegb  ia, itim1, ib [, itim2] [, ic] [...]--- > kres  linsegb  ia, itim1, ib [, itim2] [, ic] [...]------ csound doc: <http://csound.com/docs/manual/linsegb.html>-linsegb ::  [D] -> Sig-linsegb b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "linsegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])---- | --- Trace a series of line segments between specified points including a release segment.------ > ares  linsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz--- > kres  linsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz------ csound doc: <http://csound.com/docs/manual/linsegr.html>-linsegr ::  [D] -> D -> D -> Sig-linsegr b1 b2 b3 = Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = setRate Kr $ opcs "linsegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])---- | --- This opcode implements a formula for generating a normalised logarithmic curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.------ Generates a logarithmic curve in range 0 to 1 of arbitrary steepness.---       Steepness index equal to or lower than 1.0 will result in Not-a-Number---       errors and cause unstable behavior.------ > kout  logcurve  kindex, ksteepness------ csound doc: <http://csound.com/docs/manual/logcurve.html>-logcurve ::  Sig -> Sig -> Sig-logcurve b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "logcurve" [(Kr,[Kr,Kr])] [a1,a2]---- | --- Generate control signal consisting of linear segments delimited by two or more specified points.------ Generate control signal consisting of linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.------ > ksig  loopseg  kfreq, ktrig, iphase, kvalue0, ktime0 [, kvalue1] [, ktime1] \--- >     [, kvalue2] [, ktime2][...]------ csound doc: <http://csound.com/docs/manual/loopseg.html>-loopseg ::  Sig -> Sig -> D -> [Sig] -> Sig-loopseg b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "loopseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)---- | --- Control signals based on linear segments.------ Generate control signal consisiting of linear segments delimited---     by two or more specified points. The entire envelope can be looped---     at time-variant rate. Each segment coordinate can also be varied---     at k-rate.------ > ksig  loopsegp   kphase, kvalue0, kdur0, kvalue1 \--- >           [, kdur1, ... , kdurN-1, kvalueN]------ csound doc: <http://csound.com/docs/manual/loopsegp.html>-loopsegp ::  Sig -> [Sig] -> Sig-loopsegp b1 b2 = Sig $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "loopsegp" [(Kr,(repeat Kr))] ([a1] ++ a2)---- | --- Generate control signal consisting of exponential or linear segments delimited by two or more specified points.------ Generate control signal consisting of controllable exponential segments or linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.------ > ksig  looptseg  kfreq, ktrig, iphase, kvalue0, ktype0, ktime0, [, kvalue1] [,ktype1] [, ktime1] \--- >           [, kvalue2] [,ktype2] [, ktime2] [...] [, kvalueN] [,ktypeN] [, ktimeN]------ csound doc: <http://csound.com/docs/manual/looptseg.html>-looptseg ::  Sig -> Sig -> [Sig] -> Sig-looptseg b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "looptseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)---- | --- Generate control signal consisting of exponential segments delimited by two or more specified points.------ Generate control signal consisting of exponential segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.------ > ksig  loopxseg  kfreq, ktrig, iphase, ktime0, kvalue0 [, ktime1] [, kvalue1] \--- >           [, ktime2] [, kvalue2] [...]------ csound doc: <http://csound.com/docs/manual/loopxseg.html>-loopxseg ::  Sig -> Sig -> D -> [Sig] -> Sig-loopxseg b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "loopxseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)---- | --- Generate control signal consisting of held segments.------ Generate control signal consisting of held segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.------ > ksig  lpshold  kfreq, ktrig, iphase, ktime0, kvalue0  [, kvalue1] [, ktime1] [, kvalue2] [, ktime2] [...]------ csound doc: <http://csound.com/docs/manual/lpshold.html>-lpshold ::  Sig -> Sig -> D -> [Sig] -> Sig-lpshold b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "lpshold" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)---- | --- Control signals based on held segments.------ Generate control signal consisiting of held segments delimited---     by two or more specified points. The entire envelope can be looped---     at time-variant rate. Each segment coordinate can also be varied---     at k-rate.------ > ksig  lpsholdp   kphase, kvalue0, ktime0  [, kvalue1] [, ktime1] \--- >           [, kvalue2] [, ktime2] [...]------ csound doc: <http://csound.com/docs/manual/lpsholdp.html>-lpsholdp ::  Sig -> Sig -> [Sig] -> Sig-lpsholdp b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "lpsholdp" [(Kr,(repeat Kr))] ([a1,a2] ++ a3)---- | --- Arbitrary signal scaling.------ Scales incoming value to user-definable range. Similar to scale object found in popular dataflow languages.------ > kscl  scale  kinput, kmax, kmin------ csound doc: <http://csound.com/docs/manual/scale.html>-scale ::  Sig -> Sig -> Sig -> Sig-scale b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "scale" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Constructs a user-definable envelope.------ > ares  transeg  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...--- > kres  transeg  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...------ csound doc: <http://csound.com/docs/manual/transeg.html>-transeg ::  [D] -> Sig-transeg b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "transeg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1])---- | --- Constructs a user-definable envelope in absolute time.------ > ares  transegb  ia, itim, itype, ib [, itim2] [, itype] [, ic] ...--- > kres  transegb  ia, itim, itype, ib [, itim2] [, itype] [, ic] ...------ csound doc: <http://csound.com/docs/manual/transegb.html>-transegb ::  [D] -> Sig-transegb b1 = Sig $ f <$> mapM unD b1-    where f a1 = setRate Kr $ opcs "transegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1])---- | --- Constructs a user-definable envelope with extended release segment.------ Constructs a user-definable envelope. It is the same---       as transeg,---       with an extended release segment.------ > ares  transegr  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...--- > kres  transegr  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...------ csound doc: <http://csound.com/docs/manual/transegr.html>-transegr ::  [D] -> D -> D -> D -> Sig-transegr b1 b2 b3 b4 = Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = setRate Kr $ opcs "transegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1, a2, a3, a4])---- | --- 2D linear interpolation------ 2D linear interpolation between 4 points at (0,0), (1,0), (0,1),--- 	  (1,1)------ > kout  xyscale  kx, ky, k00, k10, k01, k11------ csound doc: <http://csound.com/docs/manual/xyscale.html>-xyscale ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-xyscale b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "xyscale" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]---- Envelope Generators.---- | --- Calculates the classical ADSR envelope using linear segments.------ > ares  adsr  iatt, idec, islev, irel [, idel]--- > kres  adsr  iatt, idec, islev, irel [, idel]------ csound doc: <http://csound.com/docs/manual/adsr.html>-adsr ::  D -> D -> D -> D -> Sig-adsr b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "adsr" [(Ar,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Applies an envelope consisting of 3 segments.------ envlpx -- apply an envelope consisting of 3 segments:------ > ares  envlpx  xamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod]--- > kres  envlpx  kamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod]------ csound doc: <http://csound.com/docs/manual/envlpx.html>-envlpx ::  Sig -> D -> D -> D -> Tab -> D -> D -> Sig-envlpx b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unTab b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "envlpx" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])-                                                 ,(Kr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]---- | --- The envlpx opcode with a final release segment.------ envlpxr is the same as envlpx except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.------ > ares  envlpxr  xamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind]--- > kres  envlpxr  kamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind]------ csound doc: <http://csound.com/docs/manual/envlpxr.html>-envlpxr ::  Sig -> D -> D -> Tab -> D -> D -> Sig-envlpxr b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unTab b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "envlpxr" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])-                                               ,(Kr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Applies a straight line rise and decay pattern to an input amp signal.------ linen -- apply a straight line rise and decay pattern to an input amp signal.------ > ares  linen  xamp, irise, idur, idec--- > kres  linen  kamp, irise, idur, idec------ csound doc: <http://csound.com/docs/manual/linen.html>-linen ::  Sig -> D -> D -> D -> Sig-linen b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "linen" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- The linen opcode extended with a final release segment.------ linenr -- same as linen except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.------ > ares  linenr  xamp, irise, idec, iatdec--- > kres  linenr  kamp, irise, idec, iatdec------ csound doc: <http://csound.com/docs/manual/linenr.html>-linenr ::  Sig -> D -> D -> D -> Sig-linenr b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "linenr" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Calculates the classical ADSR envelope using the linsegr mechanism.------ > ares  madsr  iatt, idec, islev, irel [, idel] [, ireltim]--- > kres  madsr  iatt, idec, islev, irel [, idel] [, ireltim]------ csound doc: <http://csound.com/docs/manual/madsr.html>-madsr ::  D -> D -> D -> D -> Sig-madsr b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "madsr" [(Ar,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4]---- | --- Calculates the classical ADSR envelope using the expsegr mechanism.------ > ares  mxadsr  iatt, idec, islev, irel [, idel] [, ireltim]--- > kres  mxadsr  iatt, idec, islev, irel [, idel] [, ireltim]------ csound doc: <http://csound.com/docs/manual/mxadsr.html>-mxadsr ::  D -> D -> D -> D -> Sig-mxadsr b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "mxadsr" [(Ar,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                            ,a2-                                                                                            ,a3-                                                                                            ,a4]---- | --- Calculates the classical ADSR envelope.------ Calculates the classical ADSR envelope------ > ares  xadsr  iatt, idec, islev, irel [, idel]--- > kres  xadsr  iatt, idec, islev, irel [, idel]------ csound doc: <http://csound.com/docs/manual/xadsr.html>-xadsr ::  D -> D -> D -> D -> Sig-xadsr b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "xadsr" [(Ar,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- Models and Emulations.---- | --- Semi-physical model of a bamboo sound.------ bamboo is a semi-physical model of a bamboo sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  bamboo  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \--- >           [, ifreq1] [, ifreq2]------ csound doc: <http://csound.com/docs/manual/bamboo.html>-bamboo ::  Sig -> D -> Sig-bamboo b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "bamboo" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Creates a tone similar to a struck metal bar.------ Audio output is a tone similar to a struck metal bar, using a---     physical model developed from solving the partial differential---     equation.  There are controls over the boundary conditions as---     well as the bar characteristics.------ > ares  barmodel  kbcL, kbcR, iK, ib, kscan, iT30, ipos, ivel, iwid------ csound doc: <http://csound.com/docs/manual/barmodel.html>-barmodel ::  Sig -> Sig -> D -> D -> Sig -> D -> D -> D -> D -> Sig-barmodel b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "barmodel" [(Ar,[Kr,Kr,Ir,Ir,Kr,Ir,Ir,Ir,Ir])] [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7-                                                                                             ,a8-                                                                                             ,a9]---- | --- Semi-physical model of a cabasa sound.------ cabasa is a semi-physical model of a cabasa sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  cabasa  iamp, idettack [, inum] [, idamp] [, imaxshake]------ csound doc: <http://csound.com/docs/manual/cabasa.html>-cabasa ::  D -> D -> Sig-cabasa b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "cabasa" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Simulates Chua's oscillator, an LRC oscillator with an active resistor, proved capable of bifurcation and chaotic attractors, with k-rate control of circuit elements.------ > aI3, aV2, aV1  chuap  kL, kR0, kC1, kG, kGa, kGb, kE, kC2, iI3, iV2, iV1, ktime_step------ csound doc: <http://csound.com/docs/manual/chuap.html>-chuap ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig -> (Sig-                                                                                        ,Sig-                                                                                        ,Sig)-chuap b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unSig b12-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = mopcs "chuap" ([Ar,Ar,Ar]-                                                                   ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Kr]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]---- | --- Semi-physical model of a crunch sound.------ crunch is a semi-physical model of a crunch sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  crunch  iamp, idettack [, inum] [, idamp] [, imaxshake]------ csound doc: <http://csound.com/docs/manual/crunch.html>-crunch ::  D -> D -> Sig-crunch b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "crunch" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Semi-physical model of a water drop.------ dripwater is a semi-physical model of a water drop. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  dripwater  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \--- >           [, ifreq1] [, ifreq2]------ csound doc: <http://csound.com/docs/manual/dripwater.html>-dripwater ::  Sig -> D -> Sig-dripwater b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "dripwater" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Dynamic stochastic approach to waveform synthesis conceived by Iannis Xenakis.------ Implementation of the Génération Dynamique Stochastique---       (GENDYN), a dynamic stochastic approach to waveform synthesis conceived---       by Iannis Xenakis.------ > ares  gendy  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                kampscl, kdurscl [, initcps] [, knum]--- > kres  gendy  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                kampscl, kdurscl [, initcps] [, knum]------ csound doc: <http://csound.com/docs/manual/gendy.html>-gendy ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-gendy b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "gendy" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])-                                                      ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9]---- | --- Dynamic stochastic approach to waveform synthesis using cubic interpolation.------ Implementation with cubic interpolation of the---       Génération Dynamique Stochastique (GENDYN),---       a dynamic stochastic approach to waveform synthesis conceived by---       Iannis Xenakis.------ > ares  gendyc  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                 kampscl, kdurscl [, initcps] [, knum]--- > kres  gendyc  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                 kampscl, kdurscl [, initcps] [, knum]------ csound doc: <http://csound.com/docs/manual/gendyc.html>-gendyc ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-gendyc b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "gendyc" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])-                                                       ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9]---- | --- Variation of the dynamic stochastic approach to waveform---       synthesis conceived by Iannis Xenakis.------ gendyx (gendy eXtended) is an implementation---       of the Génération Dynamique Stochastique---       (GENDYN), a dynamic stochastic approach to waveform synthesis---       conceived by Iannis Xenakis, using curves instead of segments.------ > ares  gendyx  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                 kampscl, kdurscl, kcurveup, kcurvedown [, initcps] [, knum]--- > kres  gendyx  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \--- >                 kampscl, kdurscl, kcurveup, kcurvedown [, initcps] [, knum]------ csound doc: <http://csound.com/docs/manual/gendyx.html>-gendyx ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-gendyx b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "gendyx" [(Ar-                                                                ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])-                                                               ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]---- | --- Audio output is a tone related to the striking of a cow bell or similar.------ Audio output is a tone related to the striking of a cow bell or similar. The method is a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  gogobel  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivfn------ csound doc: <http://csound.com/docs/manual/gogobel.html>-gogobel ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> Sig-gogobel b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "gogobel" [(Ar,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir])] [a1-                                                                                      ,a2-                                                                                      ,a3-                                                                                      ,a4-                                                                                      ,a5-                                                                                      ,a6-                                                                                      ,a7-                                                                                      ,a8]---- | --- Semi-physical model of a guiro sound.------ guiro is a semi-physical model of a guiro sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  guiro  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] [, ifreq1]------ csound doc: <http://csound.com/docs/manual/guiro.html>-guiro ::  Sig -> D -> Sig-guiro b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "guiro" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Implements the Lorenz system of equations.------ Implements the Lorenz system of equations.  The Lorenz system is a chaotic-dynamic system which was originally used to simulate the motion of a particle in convection currents and simplified weather systems. Small differences in initial conditions rapidly lead to diverging values. This is sometimes expressed as the butterfly effect. If a butterfly flaps its wings in Australia, it will have an effect on the weather in Alaska. This system is one of the milestones in the development of chaos theory. It is useful as a chaotic audio source or as a low frequency modulation source.------ > ax, ay, az  lorenz  ksv, krv, kbv, kh, ix, iy, iz, iskip [, iskipinit]------ csound doc: <http://csound.com/docs/manual/lorenz.html>-lorenz ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> (Sig,Sig,Sig)-lorenz b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "lorenz" ([Ar,Ar,Ar],[Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                               ,a2-                                                                                               ,a3-                                                                                               ,a4-                                                                                               ,a5-                                                                                               ,a6-                                                                                               ,a7-                                                                                               ,a8]---- | --- Mandelbrot set------ Returns the number of iterations corresponding to a given point of complex plane by applying the Mandelbrot set formula.------ > kiter, koutrig  mandel   ktrig, kx, ky, kmaxIter------ csound doc: <http://csound.com/docs/manual/mandel.html>-mandel ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)-mandel b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = mopcs "mandel" ([Kr,Kr],[Kr,Kr,Kr,Kr]) [a1,a2,a3,a4]---- | --- An emulation of a mandolin.------ > ares  mandol  kamp, kfreq, kpluck, kdetune, kgain, ksize \--- >         [, ifn] [, iminfreq]------ csound doc: <http://csound.com/docs/manual/mandol.html>-mandol ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-mandol b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "mandol" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Physical model related to the striking of a wooden block.------ Audio output is a tone related to the striking of a wooden block as found in a marimba. The method is a physical model developed from Perry Cook but re-coded for Csound.------ > ares  marimba  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec \--- >           [, idoubles] [, itriples]------ csound doc: <http://csound.com/docs/manual/marimba.html>-marimba ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> D -> Sig-marimba b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "marimba" [(Ar-                                                         ,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9]---- | --- An emulation of a mini-Moog synthesizer.------ > ares  moog  kamp, kfreq, kfiltq, kfiltrate, kvibf, kvamp, iafn, iwfn, ivfn------ csound doc: <http://csound.com/docs/manual/moog.html>-moog ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Sig-moog b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "moog" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                         ,a2-                                                                                         ,a3-                                                                                         ,a4-                                                                                         ,a5-                                                                                         ,a6-                                                                                         ,a7-                                                                                         ,a8-                                                                                         ,a9]---- | --- Simulates a planet orbiting in a binary star system.------ planet simulates a planet orbiting in a binary star system. The outputs are the x, y and z coordinates of the orbiting planet. It is possible for the planet to achieve escape velocity by a close encounter with a star. This makes this system somewhat unstable.------ > ax, ay, az  planet  kmass1, kmass2, ksep, ix, iy, iz, ivx, ivy, ivz, idelta \--- >           [, ifriction] [, iskip]------ csound doc: <http://csound.com/docs/manual/planet.html>-planet ::  Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig)-planet b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "planet" ([Ar,Ar,Ar]-                                                            ,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- | --- Creates a tone similar to a piano string prepared in a Cageian fashion.------ Audio output is a tone similar to a piano string, prepared with---     a number of rubbers and rattles. The method uses a---     physical model developed from solving the partial differential---     equation.------ > ares  prepiano  ifreq, iNS, iD, iK, \--- >         iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \--- >         isspread[, irattles, irubbers]--- > al,ar  prepiano  ifreq, iNS, iD, iK, \--- >         iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \--- >         isspread[, irattles, irubbers]------ csound doc: <http://csound.com/docs/manual/prepiano.html>-prepiano ::  D -> D -> D -> D -> D -> D -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig-                                                                                            ,Sig)-prepiano b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unD b12 <*> unD b13 <*> unD b14 <*> unD b15-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 = mopcs "prepiano" ([Ar,Ar]-                                                                                  ,[Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                                                                         ,a2-                                                                                                                                         ,a3-                                                                                                                                         ,a4-                                                                                                                                         ,a5-                                                                                                                                         ,a6-                                                                                                                                         ,a7-                                                                                                                                         ,a8-                                                                                                                                         ,a9-                                                                                                                                         ,a10-                                                                                                                                         ,a11-                                                                                                                                         ,a12-                                                                                                                                         ,a13-                                                                                                                                         ,a14-                                                                                                                                         ,a15]---- | --- Semi-physical model of a sandpaper sound.------ sandpaper is a semi-physical model of a sandpaper sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  sandpaper  iamp, idettack [, inum] [, idamp] [, imaxshake]------ csound doc: <http://csound.com/docs/manual/sandpaper.html>-sandpaper ::  D -> D -> Sig-sandpaper b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "sandpaper" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Semi-physical model of a sekere sound.------ sekere is a semi-physical model of a sekere sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  sekere  iamp, idettack [, inum] [, idamp] [, imaxshake]------ csound doc: <http://csound.com/docs/manual/sekere.html>-sekere ::  D -> D -> Sig-sekere b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "sekere" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Sounds like the shaking of a maraca or similar gourd instrument.------ Audio output is a tone related to the shaking of a maraca or similar gourd instrument. The method is a physically inspired model developed from Perry Cook, but re-coded for Csound.------ > ares  shaker  kamp, kfreq, kbeans, kdamp, ktimes [, idecay]------ csound doc: <http://csound.com/docs/manual/shaker.html>-shaker ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-shaker b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "shaker" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Semi-physical model of a sleighbell sound.------ sleighbells is a semi-physical model of a sleighbell sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  sleighbells  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \--- >           [, ifreq1] [, ifreq2]------ csound doc: <http://csound.com/docs/manual/sleighbells.html>-sleighbells ::  Sig -> D -> Sig-sleighbells b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "sleighbells" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Semi-physical model of a stick sound.------ stix is a semi-physical model of a stick sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  stix  iamp, idettack [, inum] [, idamp] [, imaxshake]------ csound doc: <http://csound.com/docs/manual/stix.html>-stix ::  D -> D -> Sig-stix b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "stix" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Semi-physical model of a tambourine sound.------ tambourine is a semi-physical model of a tambourine sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.------ > ares  tambourine  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \--- >           [, ifreq1] [, ifreq2]------ csound doc: <http://csound.com/docs/manual/tambourine.html>-tambourine ::  Sig -> D -> Sig-tambourine b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "tambourine" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Physical model related to the striking of a metal block.------ Audio output is a tone related to the striking of a metal block as found in a vibraphone. The method is a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  vibes  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec------ csound doc: <http://csound.com/docs/manual/vibes.html>-vibes ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> D -> Sig-vibes b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "vibes" [(Ar,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir,Ir])] [a1-                                                                                          ,a2-                                                                                          ,a3-                                                                                          ,a4-                                                                                          ,a5-                                                                                          ,a6-                                                                                          ,a7-                                                                                          ,a8-                                                                                          ,a9]---- | --- An emulation of a human voice.------ > ares  voice  kamp, kfreq, kphoneme, kform, kvibf, kvamp, ifn, ivfn------ csound doc: <http://csound.com/docs/manual/voice.html>-voice ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig-voice b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "voice" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1-                                                                                    ,a2-                                                                                    ,a3-                                                                                    ,a4-                                                                                    ,a5-                                                                                    ,a6-                                                                                    ,a7-                                                                                    ,a8]---- Phasors.---- | --- Produce a normalized moving phase value.------ > ares  phasor  xcps [, iphs]--- > kres  phasor  kcps [, iphs]------ csound doc: <http://csound.com/docs/manual/phasor.html>-phasor ::  Sig -> Sig-phasor b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "phasor" [(Ar,[Xr,Ir]),(Kr,[Kr,Ir])] [a1]---- | --- Produce an arbitrary number of normalized moving phase values.------ Produce an arbitrary number of normalized moving phase values, accessable by an index.------ > ares  phasorbnk  xcps, kndx, icnt [, iphs]--- > kres  phasorbnk  kcps, kndx, icnt [, iphs]------ csound doc: <http://csound.com/docs/manual/phasorbnk.html>-phasorbnk ::  Sig -> Sig -> D -> Sig-phasorbnk b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "phasorbnk" [(Ar,[Xr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A resettable linear ramp between two levels------ A resettable linear ramp between two levels. Port of--- 	  Supercollider's Phasor.------ > aindex  sc_phasor  xtrig, xrate, kstart, kend [, kresetPos] --- > kindex  sc_phasor  xtrig, xrate, kstart, kend [, kresetPos] ------ csound doc: <http://csound.com/docs/manual/sc_phasor.html>-sc_phasor ::  Sig -> Sig -> Sig -> Sig -> Sig-sc_phasor b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "sc_phasor" [(Ar,[Xr,Xr,Kr,Kr,Kr]),(Kr,[Xr,Xr,Kr,Kr,Kr])] [a1-                                                                                         ,a2-                                                                                         ,a3-                                                                                         ,a4]---- | --- Produces a normalized moving phase value with sync input and output.------ Produces a moving phase value between zero and one and an extra impulse output ("sync out") whenever its phase value crosses or is reset to zero. The phase can be reset at any time by an impulse on the "sync in" parameter.------ > aphase, asyncout  syncphasor  xcps, asyncin, [, iphs]------ csound doc: <http://csound.com/docs/manual/syncphasor.html>-syncphasor ::  Sig -> Sig -> (Sig,Sig)-syncphasor b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "syncphasor" ([Ar,Ar],[Xr,Ar,Ir]) [a1,a2]---- Random (Noise) Generators.---- | --- Beta distribution random number generator (positive values only).------ Beta distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  betarand  krange, kalpha, kbeta--- > ires  betarand  krange, kalpha, kbeta--- > kres  betarand  krange, kalpha, kbeta------ csound doc: <http://csound.com/docs/manual/betarand.html>-betarand :: SigOrD a => a -> a -> a -> SE a-betarand b1 b2 b3 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2 <*> toGE b3-    where f a1 a2 a3 = opcs "betarand" [(Ar,[Kr,Kr,Kr]),(Ir,[Kr,Kr,Kr]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Exponential distribution random number generator.------ Exponential distribution random number generator. This is an x-class noise generator.------ > ares  bexprnd  krange--- > ires  bexprnd  krange--- > kres  bexprnd  krange------ csound doc: <http://csound.com/docs/manual/bexprnd.html>-bexprnd :: SigOrD a => a -> SE a-bexprnd b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "bexprnd" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Cauchy distribution random number generator.------ Cauchy distribution random number generator. This is an x-class noise generator.------ > ares  cauchy  kalpha--- > ires  cauchy  kalpha--- > kres  cauchy  kalpha------ csound doc: <http://csound.com/docs/manual/cauchy.html>-cauchy :: SigOrD a => a -> SE a-cauchy b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "cauchy" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Cauchy distribution random number generator with---       interpolation.------ Cauchy distribution random number generator with controlled---       interpolation between values. This is an x-class noise---       generator.------ > ares  cauchyi  klambda, xamp, xcps--- > ires  cauchyi  klambda, xamp, xcps--- > kres  cauchyi  klambda, xamp, xcps------ csound doc: <http://csound.com/docs/manual/cauchyi.html>-cauchyi :: SigOrD a => a -> a -> a -> SE a-cauchyi b1 b2 b3 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2 <*> toGE b3-    where f a1 a2 a3 = opcs "cauchyi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]---- | --- Continuous USER-defined-distribution RaNDom generator.------ > aout  cuserrnd  kmin, kmax, ktableNum--- > iout  cuserrnd  imin, imax, itableNum--- > kout  cuserrnd  kmin, kmax, ktableNum------ csound doc: <http://csound.com/docs/manual/cuserrnd.html>-cuserrnd :: SigOrD a => a -> a -> a -> SE a-cuserrnd b1 b2 b3 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2 <*> toGE b3-    where f a1 a2 a3 = opcs "cuserrnd" [(Ar,[Kr,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Discrete USER-defined-distribution RaNDom generator.------ > aout  duserrnd  ktableNum--- > iout  duserrnd  itableNum--- > kout  duserrnd  ktableNum------ csound doc: <http://csound.com/docs/manual/duserrnd.html>-duserrnd :: SigOrD a => a -> SE a-duserrnd b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "duserrnd" [(Ar,[Kr]),(Ir,[Ir]),(Kr,[Kr])] [a1]---- | --- Random impulses.------ Generates random impulses from 0 to 1.------ > ares  dust  kamp, kdensity--- > kres  dust  kamp, kdensity------ csound doc: <http://csound.com/docs/manual/dust.html>-dust ::  Sig -> Sig -> SE Sig-dust b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "dust" [(Ar,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]---- | --- Random impulses.------ Generates random impulses from -1 to 1.------ > ares  dust2  kamp, kdensity--- > kres  dust2  kamp, kdensity------ csound doc: <http://csound.com/docs/manual/dust2.html>-dust2 ::  Sig -> Sig -> SE Sig-dust2 b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "dust2" [(Ar,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]---- | --- Exponential distribution random number generator (positive values only).------ Exponential distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  exprand  klambda--- > ires  exprand  klambda--- > kres  exprand  klambda------ csound doc: <http://csound.com/docs/manual/exprand.html>-exprand :: SigOrD a => a -> SE a-exprand b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "exprand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Exponential distribution random number generator with---       interpolation (positive values only).------ Exponential distribution random number generator with controlled---       interpolation between values (positive values only). This is an---       x-class noise generator.------ > ares  exprandi  klambda, xamp, xcps--- > ires  exprandi  klambda, xamp, xcps--- > kres  exprandi  klambda, xamp, xcps------ csound doc: <http://csound.com/docs/manual/exprandi.html>-exprandi :: SigOrD a => a -> a -> a -> SE a-exprandi b1 b2 b3 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2 <*> toGE b3-    where f a1 a2 a3 = opcs "exprandi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]---- | --- A fractal noise generator.------ A fractal noise generator implemented as a white noise filtered---       by a cascade of 15 first-order filters.------ > ares  fractalnoise  kamp, kbeta------ csound doc: <http://csound.com/docs/manual/fractalnoise.html>-fractalnoise ::  Sig -> Sig -> SE Sig-fractalnoise b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "fractalnoise" [(Ar,[Kr,Kr])] [a1,a2]---- | --- Gaussian distribution random number generator.------ Gaussian distribution random number generator. This is an x-class noise generator.------ > ares  gauss  krange--- > ires  gauss  krange--- > kres  gauss  krange------ csound doc: <http://csound.com/docs/manual/gauss.html>-gauss ::  Sig -> SE Sig-gauss b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "gauss" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Gaussian distribution random number generator with---       interpolation.------ Gaussian distribution random number generator with controlled---       interpolation between values. This is an---       x-class noise generator.------ > ares  gaussi  krange, xamp, xcps--- > ires  gaussi  krange, xamp, xcps--- > kres  gaussi  krange, xamp, xcps------ csound doc: <http://csound.com/docs/manual/gaussi.html>-gaussi :: SigOrD a => a -> a -> a -> SE a-gaussi b1 b2 b3 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2 <*> toGE b3-    where f a1 a2 a3 = opcs "gaussi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]---- | --- Random impulses around a certain frequency.------ Generates random impulses around a certain frequency.------ > ares  gausstrig  kamp, kcps, kdev [, imode] [, ifrst1]--- > kres  gausstrig  kamp, kcps, kdev [, imode] [, ifrst1]------ csound doc: <http://csound.com/docs/manual/gausstrig.html>-gausstrig ::  Sig -> Sig -> Sig -> SE Sig-gausstrig b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "gausstrig" [(Ar,[Kr,Kr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Reads the global seed value.------ Returns the global seed value used for all x-class---       noise generators.------ > ians getseed --- > kans getseed ------ csound doc: <http://csound.com/docs/manual/getseed.html>-getseed ::   SE Sig-getseed  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "getseed" [(Ir,[]),(Kr,[])] []---- | --- Generates a segmented line whose segments are randomly generated.------ > kout  jitter  kamp, kcpsMin, kcpsMax------ csound doc: <http://csound.com/docs/manual/jitter.html>-jitter ::  Sig -> Sig -> Sig -> SE Sig-jitter b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "jitter" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Generates a segmented line with user-controllable random segments.------ > kout  jitter2  ktotamp, kamp1, kcps1,--- >         kamp2, kcps2, kamp3, kcps3[ , iopt]------ csound doc: <http://csound.com/docs/manual/jitter2.html>-jitter2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE Sig-jitter2 b1 b2 b3 b4 b5 b6 b7 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "jitter2" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4-                                                                                   ,a5-                                                                                   ,a6-                                                                                   ,a7]---- | --- A jitter-spline generator.------ > ares  jspline  xamp, kcpsMin, kcpsMax--- > kres  jspline  kamp, kcpsMin, kcpsMax------ csound doc: <http://csound.com/docs/manual/jspline.html>-jspline ::  Sig -> Sig -> Sig -> SE Sig-jspline b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "jspline" [(Ar,[Xr,Kr,Kr]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Linear distribution random number generator (positive values only).------ Linear distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  linrand  krange--- > ires  linrand  krange--- > kres  linrand  krange------ csound doc: <http://csound.com/docs/manual/linrand.html>-linrand :: SigOrD a => a -> SE a-linrand b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "linrand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- A white noise generator with an IIR lowpass filter.------ > ares  noise  xamp, kbeta------ csound doc: <http://csound.com/docs/manual/noise.html>-noise ::  Sig -> Sig -> SE Sig-noise b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "noise" [(Ar,[Xr,Kr])] [a1,a2]---- | --- Cauchy distribution random number generator (positive values only).------ Cauchy distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  pcauchy  kalpha--- > ires  pcauchy  kalpha--- > kres  pcauchy  kalpha------ csound doc: <http://csound.com/docs/manual/pcauchy.html>-pcauchy :: SigOrD a => a -> SE a-pcauchy b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "pcauchy" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Generates pink noise.------ Generates pink noise (-3dB/oct response) by the New---       Shade of Pink algorithm of Stefan Stenzel.------ > ares  pinker ------ csound doc: <http://csound.com/docs/manual/pinker.html>-pinker ::   SE Sig-pinker  = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "pinker" [(Ar,[])] []---- | --- Generates approximate pink noise.------ Generates approximate pink noise (-3dB/oct response) by one of two different methods:------ > ares  pinkish  xin [, imethod] [, inumbands] [, iseed] [, iskip]------ csound doc: <http://csound.com/docs/manual/pinkish.html>-pinkish ::  Sig -> SE Sig-pinkish b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "pinkish" [(Ar,[Xr,Ir,Ir,Ir,Ir])] [a1]---- | --- Poisson distribution random number generator (positive values only).------ Poisson distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  poisson  klambda--- > ires  poisson  klambda--- > kres  poisson  klambda------ csound doc: <http://csound.com/docs/manual/poisson.html>-poisson :: SigOrD a => a -> SE a-poisson b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "poisson" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Generates a controlled random number series.------ Output is a controlled random number series between -amp and +amp------ > ares  rand  xamp [, iseed] [, isel] [, ioffset]--- > kres  rand  xamp [, iseed] [, isel] [, ioffset]------ csound doc: <http://csound.com/docs/manual/rand.html>-rand ::  Sig -> SE Sig-rand b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "rand" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Xr,Ir,Ir,Ir])] [a1]---- | --- Generates random numbers and holds them for a period of time.------ > ares  randh  xamp, xcps [, iseed] [, isize] [, ioffset]--- > kres  randh  kamp, kcps [, iseed] [, isize] [, ioffset]------ csound doc: <http://csound.com/docs/manual/randh.html>-randh ::  Sig -> Sig -> SE Sig-randh b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "randh" [(Ar,[Xr,Xr,Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]---- | --- Generates a controlled random number series with interpolation between each new number.------ > ares  randi  xamp, xcps [, iseed] [, isize] [, ioffset]--- > kres  randi  kamp, kcps [, iseed] [, isize] [, ioffset]------ csound doc: <http://csound.com/docs/manual/randi.html>-randi ::  Sig -> Sig -> SE Sig-randi b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "randi" [(Ar,[Xr,Xr,Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]---- | --- Generates a controlled pseudo-random number series between min and max values.------ Generates is a controlled pseudo-random number series between min and max values.------ > ares  random  kmin, kmax--- > ires  random  imin, imax--- > kres  random  kmin, kmax------ csound doc: <http://csound.com/docs/manual/random.html>-random :: SigOrD a => a -> a -> SE a-random b1 b2 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2-    where f a1 a2 = opcs "random" [(Ar,[Kr,Kr]),(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1,a2]---- | --- Generates random numbers with a user-defined limit and holds them for a period of time.------ > ares  randomh  kmin, kmax, xcps [,imode] [,ifirstval]--- > kres  randomh  kmin, kmax, kcps [,imode] [,ifirstval]------ csound doc: <http://csound.com/docs/manual/randomh.html>-randomh ::  Sig -> Sig -> Sig -> SE Sig-randomh b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "randomh" [(Ar,[Kr,Kr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Generates a user-controlled random number series with interpolation between each new number.------ > ares  randomi  kmin, kmax, xcps [,imode] [,ifirstval]--- > kres  randomi  kmin, kmax, kcps [,imode] [,ifirstval]------ csound doc: <http://csound.com/docs/manual/randomi.html>-randomi ::  Sig -> Sig -> Sig -> SE Sig-randomi b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "randomi" [(Ar,[Kr,Kr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- 31-bit bipolar random opcodes with controllable distribution.------ 31-bit bipolar random opcodes with controllable distribution. These units are portable, i.e. using the same seed value will generate the same random sequence on all systems. The distribution of generated random numbers can be varied at k-rate.------ > ax  rnd31  kscl, krpow [, iseed]--- > ix  rnd31  iscl, irpow [, iseed]--- > kx  rnd31  kscl, krpow [, iseed]------ csound doc: <http://csound.com/docs/manual/rnd31.html>-rnd31 :: SigOrD a => a -> a -> SE a-rnd31 b1 b2 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2-    where f a1 a2 = opcs "rnd31" [(Ar,[Kr,Kr,Ir]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir])] [a1,a2]---- | --- Generate random spline curves.------ > ares  rspline  xrangeMin, xrangeMax, kcpsMin, kcpsMax--- > kres  rspline  krangeMin, krangeMax, kcpsMin, kcpsMax------ csound doc: <http://csound.com/docs/manual/rspline.html>-rspline ::  Sig -> Sig -> Sig -> Sig -> SE Sig-rspline b1 b2 b3 b4 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "rspline" [(Ar,[Xr,Xr,Kr,Kr]),(Kr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Sets the global seed value.------ Sets the global seed value for all x-class noise generators, as well as other opcodes that use a random call, such as grain.------ >  seed  ival------ csound doc: <http://csound.com/docs/manual/seed.html>-seed ::  D -> SE ()-seed b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "seed" [(Xr,[Ir])] [a1]---- | --- Generates a controlled pseudo-random number series between min and max values according to a trigger.------ Generates a controlled pseudo-random number series between min and max values at k-rate whenever the trigger parameter is different to 0.------ > kout  trandom  ktrig, kmin, kmax------ csound doc: <http://csound.com/docs/manual/trandom.html>-trandom ::  Sig -> Sig -> Sig -> SE Sig-trandom b1 b2 b3 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "trandom" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Triangular distribution random number generator------ Triangular distribution random number generator. This is an x-class noise generator.------ > ares  trirand  krange--- > ires  trirand  krange--- > kres  trirand  krange------ csound doc: <http://csound.com/docs/manual/trirand.html>-trirand :: SigOrD a => a -> SE a-trirand b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "trirand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- Uniform distribution random number generator (positive values only).------ Uniform distribution random number generator (positive values only). This is an x-class noise generator.------ > ares  unirand  krange--- > ires  unirand  krange--- > kres  unirand  krange------ csound doc: <http://csound.com/docs/manual/unirand.html>-unirand :: SigOrD a => a -> SE a-unirand b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = opcs "unirand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]---- | --- truly random opcodes with controllable range.------ Truly random opcodes with controllable range. These---       units are for Unix-like systems only and use /dev/urandom to construct---       Csound random values------ > ax  urandom  [imin, imax]--- > ix  urandom  [imin, imax]--- > kx  urandom  [imin, imax]------ csound doc: <http://csound.com/docs/manual/urandom.html>-urandom :: SigOrD a =>  SE a-urandom  = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ return $ f -    where f  = opcs "urandom" [(Ar,[Ir,Ir]),(Ir,[Ir,Ir]),(Kr,[Ir,Ir])] []---- | --- A discrete user-defined-distribution random generator that can be used as a function.------ > aout =  urd (ktableNum)--- > iout =  urd (itableNum)--- > kout =  urd (ktableNum)------ csound doc: <http://csound.com/docs/manual/urd.html>-urd :: SigOrD a => a -> SE a-urd b1 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1-    where f a1 = oprBy "urd" [(Ar,[Kr]), (Kr,[Kr]), (Ir,[Ir])] [a1]---- | --- Weibull distribution random number generator (positive values only).------ Weibull distribution random number generator (positive values only). This is an x-class noise generator------ > ares  weibull  ksigma, ktau--- > ires  weibull  ksigma, ktau--- > kres  weibull  ksigma, ktau------ csound doc: <http://csound.com/docs/manual/weibull.html>-weibull :: SigOrD a => a -> a -> SE a-weibull b1 b2 = fmap ( fromGE . return) $ SE $ (depT =<<) $ lift $ f <$> toGE b1 <*> toGE b2-    where f a1 a2 = opcs "weibull" [(Ar,[Kr,Kr]),(Ir,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]---- Sample Playback.---- | --- Generates breakbeat-style cut-ups of a mono audio stream.------ The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations.  There are two versions, for mono (bbcutm) or stereo (bbcuts) sources.  Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio.------ > a1  bbcutm  asource, ibps, isubdiv, ibarlength, iphrasebars, inumrepeats \--- >           [, istutterspeed] [, istutterchance] [, ienvchoice ]------ csound doc: <http://csound.com/docs/manual/bbcutm.html>-bbcutm ::  Sig -> D -> D -> D -> D -> D -> Sig-bbcutm b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "bbcutm" [(Ar,[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6]---- | --- Generates breakbeat-style cut-ups of a stereo audio stream.------ The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations.  There are two versions, for mono (bbcutm) or stereo (bbcuts) sources.  Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio.------ > a1,a2  bbcuts  asource1, asource2, ibps, isubdiv, ibarlength, iphrasebars, \--- >           inumrepeats [, istutterspeed] [, istutterchance] [, ienvchoice]------ csound doc: <http://csound.com/docs/manual/bbcuts.html>-bbcuts ::  Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig)-bbcuts b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "bbcuts" ([Ar,Ar],[Ar,Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                            ,a2-                                                                                            ,a3-                                                                                            ,a4-                                                                                            ,a5-                                                                                            ,a6-                                                                                            ,a7]---- | --- Function-table-based crossfading looper.------ This opcode reads audio from a function table and plays it back in a loop with user-defined---    start time, duration and crossfade time. It also allows the pitch of the loop to be controlled,---    including reversed playback. It accepts non-power-of-two tables, such as deferred-allocation---    GEN01 tables, with one or two channels.------ > asig1[, asig2]  flooper  kamp, kpitch, istart, idur, ifad, ifn------ csound doc: <http://csound.com/docs/manual/flooper.html>-flooper :: Tuple a => Sig -> Sig -> D -> D -> D -> Tab -> a-flooper b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = mopcs "flooper" ([Ar,Ar],[Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6]---- | --- Function-table-based crossfading looper.------ This opcode implements a crossfading looper with variable loop parameters and three---   looping modes, optionally using a table for its crossfade shape. It accepts ---   non-power-of-two tables for its source sounds, such as deferred-allocation---    GEN01 tables, with one or two channels.------ > asig1[,asig2]  flooper2  kamp, kpitch, kloopstart, kloopend, kcrossfade, ifn \--- >           [, istart, imode, ifenv, iskip]------ csound doc: <http://csound.com/docs/manual/flooper2.html>-flooper2 :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> a-flooper2 b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6-    where f a1 a2 a3 a4 a5 a6 = mopcs "flooper2" ([Ar,Ar],[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4-                                                                                           ,a5-                                                                                           ,a6]---- | --- Collects all audio from all Fluidsynth engines in a performance------ > aleft, aright  fluidAllOut ------ csound doc: <http://csound.com/docs/manual/fluidAllOut.html>-fluidAllOut ::   (Sig,Sig)-fluidAllOut  = pureTuple $ return $ f -    where f  = mopcs "fluidAllOut" ([Ar,Ar],[]) []---- | --- Sends a MIDI controller data message to fluid.------ Sends a MIDI controller data (MIDI controller number and value to use)---     message to a fluid engine by number on the user specified MIDI channel number.------ >  fluidCCi  iEngineNumber, iChannelNumber, iControllerNumber, iValue------ csound doc: <http://csound.com/docs/manual/fluidCCi.html>-fluidCCi ::  D -> D -> D -> D -> SE ()-fluidCCi b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "fluidCCi" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Sends a MIDI controller data message to fluid.------ Sends a MIDI controller data (MIDI controller number and value to use)---     message to a fluid engine by number on the user specified MIDI channel number.------ >  fluidCCk  iEngineNumber, iChannelNumber, iControllerNumber, kValue------ csound doc: <http://csound.com/docs/manual/fluidCCk.html>-fluidCCk ::  D -> D -> D -> Sig -> SE ()-fluidCCk b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "fluidCCk" [(Xr,[Ir,Ir,Ir,Kr])] [a1,a2,a3,a4]---- | --- Sends MIDI note on, note off, and other messages to a SoundFont preset.------ The fluid opcodes provide a simple---     Csound opcode wrapper around Peter Hanappe's Fluidsynth SoundFont2---     synthesizer. This implementation accepts any MIDI note on, note---     off, controller, pitch bend, or program change message at---     k-rate. Maximum polyphony is 4096 simultaneously sounding---     voices. Any number of SoundFonts may be loaded and played---     simultaneously.------ >  fluidControl  ienginenum, kstatus, kchannel, kdata1, kdata2------ csound doc: <http://csound.com/docs/manual/fluidControl.html>-fluidControl ::  D -> Sig -> Sig -> Sig -> Sig -> SE ()-fluidControl b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "fluidControl" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Instantiates a fluidsynth engine.------ Instantiates a fluidsynth engine, and returns ienginenum to identify the---     engine. ienginenum is passed to other other opcodes for loading ---     and playing SoundFonts and gathering the generated sound.------ > ienginenum  fluidEngine  [iReverbEnabled] [, iChorusEnabled] [,iNumChannels] [, iPolyphony] ------ csound doc: <http://csound.com/docs/manual/fluidEngine.html>-fluidEngine ::   D-fluidEngine  = D $ return $ f -    where f  = opcs "fluidEngine" [(Ir,[Ir,Ir,Ir,Ir])] []---- | --- Loads a SoundFont into a fluidEngine, optionally listing SoundFont contents.------ Loads a SoundFont into an instance of a fluidEngine, optionally---     listing banks and presets for SoundFont.------ > isfnum  fluidLoad  soundfont, ienginenum[, ilistpresets]------ csound doc: <http://csound.com/docs/manual/fluidLoad.html>-fluidLoad ::  D -> D -> Tab-fluidLoad b1 b2 = Tab $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "fluidLoad" [(Ir,[Ir,Ir,Ir])] [a1,a2]---- | --- Plays a note on a channel in a fluidSynth engine.------ Plays a note at imidikey pitch and imidivel velocity---     on ichannelnum channel of number ienginenum fluidEngine.------ >  fluidNote  ienginenum, ichannelnum, imidikey, imidivel------ csound doc: <http://csound.com/docs/manual/fluidNote.html>-fluidNote ::  D -> D -> D -> D -> SE ()-fluidNote b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "fluidNote" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Outputs sound from a given fluidEngine------ Outputs the sound from a fluidEngine.------ > aleft, aright  fluidOut  ienginenum------ csound doc: <http://csound.com/docs/manual/fluidOut.html>-fluidOut ::  D -> (Sig,Sig)-fluidOut b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "fluidOut" ([Ar,Ar],[Ir]) [a1]---- | --- Assigns a preset from a SoundFont to a channel on a fluidEngine.------ >  fluidProgramSelect  ienginenum, ichannelnum, isfnum, ibanknum, ipresetnum------ csound doc: <http://csound.com/docs/manual/fluidProgramSelect.html>-fluidProgramSelect ::  D -> D -> Tab -> D -> D -> SE ()-fluidProgramSelect b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unTab b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "fluidProgramSelect" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Set interpolation method for channel in Fluid Engine------ Set interpolation method for channel in Fluid Engine.  Lower ---     order interpolation methods will render faster at lower fidelity while ---     higher order interpolation methods will render slower at higher fidelity.---     Default interpolation for a channel is 4th order interpolation.------ >  fluidSetInterpMethod  ienginenum, ichannelnum, iInterpMethod------ csound doc: <http://csound.com/docs/manual/fluidSetInterpMethod.html>-fluidSetInterpMethod ::  D -> D -> D -> SE ()-fluidSetInterpMethod b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "fluidSetInterpMethod" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]---- | --- Read sampled sound from a table.------ Read sampled sound (mono or stereo) from a table, with optional sustain and release looping.------ > ar1 [,ar2]  loscil  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \--- >           [, imod2] [, ibeg2] [, iend2]------ csound doc: <http://csound.com/docs/manual/loscil.html>-loscil :: Tuple a => Sig -> Sig -> Tab -> a-loscil b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = mopcs "loscil" ([Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]---- | --- Read sampled sound from a table using cubic interpolation.------ Read sampled sound (mono or stereo) from a table, with optional sustain and release looping, using cubic interpolation.------ > ar1 [,ar2]  loscil3  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \--- >           [, imod2] [, ibeg2] [, iend2]------ csound doc: <http://csound.com/docs/manual/loscil3.html>-loscil3 :: Tuple a => Sig -> Sig -> Tab -> a-loscil3 b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = mopcs "loscil3" ([Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]---- | --- Read multi-channel sampled sound from a table.------ Read sampled sound (up to 16 channels) from a table, with---       optional sustain and release looping.------ > ar1 [, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \--- >           ar15, ar16]  loscilx  xamp, kcps, ifn \--- >           [, iwsize, ibas, istrt, imod, ibeg, iend]------ csound doc: <http://csound.com/docs/manual/loscilx.html>-loscilx :: Tuple a => Sig -> Sig -> Tab -> a-loscilx b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = mopcs "loscilx" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]-                                       ,[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]---- | --- Generates a table index for sample playback------ This opcode can be used to generate table index for sample playback (e.g. tablexkt).------ > ares  lphasor  xtrns [, ilps] [, ilpe] [, imode] [, istrt] [, istor]------ csound doc: <http://csound.com/docs/manual/lphasor.html>-lphasor ::  Sig -> Sig-lphasor b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "lphasor" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir])] [a1]---- | --- Read sampled sound from a table with looping and high precision.------ Read sampled sound (mono or stereo) from a table, with looping, and high precision.------ > ares  lposcil  kamp, kfreqratio, kloop, kend, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/lposcil.html>-lposcil ::  Sig -> Sig -> Sig -> Sig -> Tab -> Sig-lposcil b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "lposcil" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Read sampled sound from a table with high precision and cubic interpolation.------ Read sampled sound (mono or stereo) from a table, with looping, and high precision. lposcil3 uses cubic interpolation.------ > ares  lposcil3  kamp, kfreqratio, kloop, kend, ifn [, iphs]------ csound doc: <http://csound.com/docs/manual/lposcil3.html>-lposcil3 ::  Sig -> Sig -> Sig -> Sig -> Tab -> Sig-lposcil3 b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "lposcil3" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Read sampled sound from a table with looping and high precision.------ lposcila reads sampled sound from a table with looping and high precision.------ > ar  lposcila  aamp, kfreqratio, kloop, kend, ift [,iphs] ------ csound doc: <http://csound.com/docs/manual/lposcila.html>-lposcila ::  Sig -> Sig -> Sig -> Sig -> D -> Sig-lposcila b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "lposcila" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Read stereo sampled sound from a table with looping and high precision.------ lposcilsa reads stereo sampled sound from a table with looping and high precision.------ > ar1, ar2  lposcilsa  aamp, kfreqratio, kloop, kend, ift [,iphs] ------ csound doc: <http://csound.com/docs/manual/lposcilsa.html>-lposcilsa ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)-lposcilsa b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "lposcilsa" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Read stereo sampled sound from a table with looping and high precision.------ lposcilsa2 reads stereo sampled sound from a table with looping and high precision.------ > ar1, ar2  lposcilsa2  aamp, kfreqratio, kloop, kend, ift [,iphs] ------ csound doc: <http://csound.com/docs/manual/lposcilsa2.html>-lposcilsa2 ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)-lposcilsa2 b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "lposcilsa2" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Prints a list of all instruments of a previously loaded SoundFont2 (SF2) file.------ Prints a list of all instruments of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ >  sfilist  ifilhandle------ csound doc: <http://csound.com/docs/manual/sfilist.html>-sfilist ::  Sf -> SE ()-sfilist b1 = SE $ (depT_ =<<) $ lift $ f <$> unSf b1-    where f a1 = opcs "sfilist" [(Xr,[Sr])] [a1]---- | --- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound.------ Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ar1, ar2  sfinstr  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \--- >           [, iflag] [, ioffset]------ csound doc: <http://csound.com/docs/manual/sfinstr.html>-sfinstr ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)-sfinstr b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6-    where f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1-                                                                                    ,a2-                                                                                    ,a3-                                                                                    ,a4-                                                                                    ,a5-                                                                                    ,a6]---- | --- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation.------ Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ar1, ar2  sfinstr3  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \--- >           [, iflag] [, ioffset]------ csound doc: <http://csound.com/docs/manual/sfinstr3.html>-sfinstr3 ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)-sfinstr3 b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6-    where f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1-                                                                                     ,a2-                                                                                     ,a3-                                                                                     ,a4-                                                                                     ,a5-                                                                                     ,a6]---- | --- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation.------ Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ares  sfinstr3m  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \--- >           [, iflag] [, ioffset]------ csound doc: <http://csound.com/docs/manual/sfinstr3m.html>-sfinstr3m ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig-sfinstr3m b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6-    where f a1 a2 a3 a4 a5 a6 = opcs "sfinstr3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6]---- | --- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound.------ Plays a SoundFont2 (SF2) sample instrument, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ares  sfinstrm  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \--- >           [, iflag] [, ioffset]------ csound doc: <http://csound.com/docs/manual/sfinstrm.html>-sfinstrm ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig-sfinstrm b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6-    where f a1 a2 a3 a4 a5 a6 = opcs "sfinstrm" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Loads an entire SoundFont2 (SF2) sample file into memory.------ Loads an entire SoundFont2 (SF2) sample file into memory. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ir  sfload  "filename"------ csound doc: <http://csound.com/docs/manual/sfload.html>-sfload ::  Str -> D-sfload b1 = D $ f <$> unStr b1-    where f a1 = opcs "sfload" [(Ir,[Sr])] [a1]---- | --- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, with user-defined---       time-varying crossfade looping.------ Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, similarly to sfplay. Unlike that opcode, though,--- 	  it ignores the looping points set in the SF2 file and substitutes them for a user-defined crossfade loop. It is--- 	  a cross between sfplay and---       flooper2.------ > ar1, ar2  sflooper  ivel, inotenum, kamp, kpitch, ipreindex, kloopstart, kloopend, kcrossfade \--- >           [, istart, imode, ifenv, iskip] ------ csound doc: <http://csound.com/docs/manual/sflooper.html>-sflooper ::  D -> D -> Sig -> Sig -> Sf -> Sig -> Sig -> Sig -> (Sig,Sig)-sflooper b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5 <*> unSig b6 <*> unSig b7 <*> unSig b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "sflooper" ([Ar,Ar]-                                                       ,[Ir,Ir,Kr,Kr,Ir,Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]---- | --- Assigns all presets of a SoundFont2 (SF2) sample file to a sequence of progressive index numbers.------ Assigns all presets of a previously loaded SoundFont2 (SF2)---       sample file to a sequence of progressive index numbers. These---       opcodes allow management the sample-structure of SF2 files. In---       order to understand the usage of these opcodes, the user must---       have some knowledge of the SF2 format, so a brief description of---       this format can be found in---       the SoundFont2 File Format---       Appendix.------ >  sfpassign  istartindex, ifilhandle[, imsgs]------ csound doc: <http://csound.com/docs/manual/sfpassign.html>-sfpassign ::  D -> Sf -> SE ()-sfpassign b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSf b2-    where f a1 a2 = opcs "sfpassign" [(Xr,[Ir,Sr,Ir])] [a1,a2]---- | --- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound.------ Plays a SoundFont2 (SF2) sample preset, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ar1, ar2  sfplay  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]------ csound doc: <http://csound.com/docs/manual/sfplay.html>-sfplay ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)-sfplay b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5-    where f a1 a2 a3 a4 a5 = mopcs "sfplay" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation.------ Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ar1, ar2  sfplay3  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]------ csound doc: <http://csound.com/docs/manual/sfplay3.html>-sfplay3 ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)-sfplay3 b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5-    where f a1 a2 a3 a4 a5 = mopcs "sfplay3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation.------ Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ares  sfplay3m  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]------ csound doc: <http://csound.com/docs/manual/sfplay3m.html>-sfplay3m ::  D -> D -> Sig -> Sig -> Sf -> Sig-sfplay3m b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5-    where f a1 a2 a3 a4 a5 = opcs "sfplay3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Plays a SoundFont2 (SF2) sample preset, generating a mono sound.------ Plays a SoundFont2 (SF2) sample preset, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ares  sfplaym  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]------ csound doc: <http://csound.com/docs/manual/sfplaym.html>-sfplaym ::  D -> D -> Sig -> Sig -> Sf -> Sig-sfplaym b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5-    where f a1 a2 a3 a4 a5 = opcs "sfplaym" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Prints a list of all presets of a SoundFont2 (SF2) sample file.------ Prints a list of all presets of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ >  sfplist  ifilhandle------ csound doc: <http://csound.com/docs/manual/sfplist.html>-sfplist ::  Sf -> SE ()-sfplist b1 = SE $ (depT_ =<<) $ lift $ f <$> unSf b1-    where f a1 = opcs "sfplist" [(Xr,[Sr])] [a1]---- | --- Assigns an existing preset of a SoundFont2 (SF2) sample file to an index number.------ Assigns an existing preset of a previously loaded SoundFont2 (SF2) sample file to an index number. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.------ > ir  sfpreset  iprog, ibank, ifilhandle, ipreindex------ csound doc: <http://csound.com/docs/manual/sfpreset.html>-sfpreset ::  D -> D -> Sf -> Sf -> D-sfpreset b1 b2 b3 b4 = D $ f <$> unD b1 <*> unD b2 <*> unSf b3 <*> unSf b4-    where f a1 a2 a3 a4 = opcs "sfpreset" [(Ir,[Ir,Ir,Sr,Ir])] [a1,a2,a3,a4]---- | --- A sound looper with pitch control.------ This opcode records input audio and plays it back in a loop with user-defined---    duration and crossfade time. It also allows the pitch of the loop to be controlled,---    including reversed playback.------ > asig, krec  sndloop  ain, kpitch, ktrig, idur, ifad------ csound doc: <http://csound.com/docs/manual/sndloop.html>-sndloop ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)-sndloop b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "sndloop" ([Ar,Kr],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- A simple time stretch by repeating cycles.------ > ares  waveset  ain, krep [, ilen]------ csound doc: <http://csound.com/docs/manual/waveset.html>-waveset ::  Sig -> Sig -> Sig-waveset b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "waveset" [(Ar,[Ar,Kr,Ir])] [a1,a2]---- Scanned Synthesis.---- | --- Copies from one table to another with a gain control.------ This is is a variant of tablecopy, copying from one table to another, starting at ipos, and with a gain control. The number of points copied is determined by the length of the source. Other points are not changed. This opcode can be used to “hit” a string in the scanned synthesis code.------ >  scanhammer  isrc, idst, ipos, imult------ csound doc: <http://csound.com/docs/manual/scanhammer.html>-scanhammer ::  D -> D -> D -> D -> SE ()-scanhammer b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "scanhammer" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Generate audio output using scanned synthesis.------ > ares  scans  kamp, kfreq, ifn, id [, iorder]------ csound doc: <http://csound.com/docs/manual/scans.html>-scans ::  Sig -> Sig -> Tab -> D -> Sig-scans b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "scans" [(Ar,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- A simpler scanned synthesis implementation.------ A simpler scanned synthesis implementation. This is an implementation of a circular string scanned using external tables. This opcode will allow direct modification and reading of values with the table opcodes.------ > aout  scantable  kamp, kpch, ipos, imass, istiff, idamp, ivel------ csound doc: <http://csound.com/docs/manual/scantable.html>-scantable ::  Sig -> Sig -> D -> D -> D -> D -> D -> Sig-scantable b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "scantable" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6-                                                                                  ,a7]---- | --- Compute the waveform and the wavetable for use in scanned synthesis.------ >  scanu  init, irate, ifnvel, ifnmass, ifnstif, ifncentr, ifndamp, kmass, \--- >           kstif, kcentr, kdamp, ileft, iright, kpos, kstrngth, ain, idisp, id------ csound doc: <http://csound.com/docs/manual/scanu.html>-scanu ::  D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()-scanu b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unTab b6 <*> unTab b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unD b12 <*> unD b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unD b17 <*> unD b18-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 = opcs "scanu" [(Xr-                                                                                           ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Ar,Ir,Ir])] [a1-                                                                                                                                                      ,a2-                                                                                                                                                      ,a3-                                                                                                                                                      ,a4-                                                                                                                                                      ,a5-                                                                                                                                                      ,a6-                                                                                                                                                      ,a7-                                                                                                                                                      ,a8-                                                                                                                                                      ,a9-                                                                                                                                                      ,a10-                                                                                                                                                      ,a11-                                                                                                                                                      ,a12-                                                                                                                                                      ,a13-                                                                                                                                                      ,a14-                                                                                                                                                      ,a15-                                                                                                                                                      ,a16-                                                                                                                                                      ,a17-                                                                                                                                                      ,a18]---- | --- Allows the position and velocity of a node in a scanned process to be read.------ > kpos, kvel  xscanmap  iscan, kamp, kvamp [, iwhich]------ csound doc: <http://csound.com/docs/manual/xscanmap.html>-xscanmap ::  D -> Sig -> Sig -> (Sig,Sig)-xscanmap b1 b2 b3 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "xscanmap" ([Kr,Kr],[Ir,Kr,Kr,Ir]) [a1,a2,a3]---- | --- Fast scanned synthesis waveform and the wavetable generator.------ Experimental version of scans.  Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility.  If liked, it will replace the older opcode as it is syntax compatible but extended.------ > ares  xscans  kamp, kfreq, ifntraj, id [, iorder]------ csound doc: <http://csound.com/docs/manual/xscans.html>-xscans ::  Sig -> Sig -> Tab -> D -> Sig-xscans b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "xscans" [(Ar,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Allows the position and velocity of a node in a scanned process to be read.------ >  xscansmap  kpos, kvel, iscan, kamp, kvamp [, iwhich]------ csound doc: <http://csound.com/docs/manual/xscansmap.html>-xscansmap ::  Sig -> Sig -> D -> Sig -> Sig -> SE ()-xscansmap b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "xscansmap" [(Xr,[Kr,Kr,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Compute the waveform and the wavetable for use in scanned synthesis.------ Experimental version of scanu. Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility.  If liked, it will replace the older opcode as it is syntax compatible but extended.------ >  xscanu  init, irate, ifnvel, ifnmass, ifnstif, ifncentr, ifndamp, kmass, \--- >           kstif, kcentr, kdamp, ileft, iright, kpos, kstrngth, ain, idisp, id------ csound doc: <http://csound.com/docs/manual/xscanu.html>-xscanu ::  D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()-xscanu b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unTab b6 <*> unTab b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unD b12 <*> unD b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unD b17 <*> unD b18-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 = opcs "xscanu" [(Xr-                                                                                            ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Ar,Ir,Ir])] [a1-                                                                                                                                                       ,a2-                                                                                                                                                       ,a3-                                                                                                                                                       ,a4-                                                                                                                                                       ,a5-                                                                                                                                                       ,a6-                                                                                                                                                       ,a7-                                                                                                                                                       ,a8-                                                                                                                                                       ,a9-                                                                                                                                                       ,a10-                                                                                                                                                       ,a11-                                                                                                                                                       ,a12-                                                                                                                                                       ,a13-                                                                                                                                                       ,a14-                                                                                                                                                       ,a15-                                                                                                                                                       ,a16-                                                                                                                                                       ,a17-                                                                                                                                                       ,a18]---- STK Opcodes.---- | --- STKBandedWG uses banded waveguide techniques to model a variety of sounds.------ This opcode uses banded waveguide techniques to model a variety of sounds, including bowed bars, glasses, and bowls.------ > asignal  STKBandedWG  ifrequency, iamplitude, [kpress, kv1[, kmot, kv2[, klfo, kv3[, klfodepth, kv4[, kvel, kv5[, kstrk, kv6[, kinstr, kv7]]]]]]]------ csound doc: <http://csound.com/docs/manual/STKBandedWG.html>-stkBandedWG ::  D -> D -> Sig-stkBandedWG b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBandedWG" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1-                                                                                                ,a2]---- | --- STK Hammond-oid organ-like FM synthesis instrument.------ > asignal  STKBeeThree  ifrequency, iamplitude, [kop4, kv1[, kop3, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKBeeThree.html>-stkBeeThree ::  D -> D -> Sig-stkBeeThree b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBeeThree" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKBlowBotl uses a helmholtz resonator (biquad filter) with a polynomial jet excitation.------ This opcode implements a helmholtz resonator (biquad filter) with a polynomial jet excitation (a la Cook).------ > asignal  STKBlowBotl  ifrequency, iamplitude, [knoise, kv1[, klfo, kv2[, klfodepth, kv3[, kvol, kv4]]]]------ csound doc: <http://csound.com/docs/manual/STKBlowBotl.html>-stkBlowBotl ::  D -> D -> Sig-stkBlowBotl b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBlowBotl" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STK clarinet physical model with one register hole and one tonehole.------ This opcode is based on the clarinet model, with the addition of a two-port register hole and a three-port dynamic tonehole implementation.------ > asignal  STKBlowHole  ifrequency, iamplitude, [kreed, kv1[, knoise, kv2[, khole, kv3[, kreg, kv4[, kbreath, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKBlowHole.html>-stkBlowHole ::  D -> D -> Sig-stkBlowHole b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBlowHole" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKBowed is a bowed string instrument.------ STKBowed is a bowed string instrument, using a waveguide model.------ > asignal  STKBowed  ifrequency, iamplitude, [kpress, kv1[, kpos, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKBowed.html>-stkBowed ::  D -> D -> Sig-stkBowed b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBowed" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKBrass is a simple brass instrument.------ STKBrass uses a simple brass instrument waveguide model, a la Cook.------ > asignal  STKBrass  ifrequency, iamplitude, [klip, kv1[, kslide, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKBrass.html>-stkBrass ::  D -> D -> Sig-stkBrass b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKBrass" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKClarinet uses a simple clarinet physical model.------ > asignal  STKClarinet  ifrequency, iamplitude, [kstiff, kv1[, knoise, kv2[, klfo, kv3[, klfodepth, kv4[, kbreath, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKClarinet.html>-stkClarinet ::  D -> D -> Sig-stkClarinet b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKClarinet" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKDrummer is a drum sampling synthesizer.------ STKDrummer is a drum sampling synthesizer using raw waves and one-pole filters,---       The drum rawwave files are sampled at 22050 Hz, but will be appropriately interpolated for other sample rates.------ > asignal  STKDrummer  ifrequency, iamplitude------ csound doc: <http://csound.com/docs/manual/STKDrummer.html>-stkDrummer ::  D -> D -> Sig-stkDrummer b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKDrummer" [(Ar,[Ir,Ir])] [a1,a2]---- | --- STKFMVoices is a singing FM synthesis instrument.------ STKFMVoices is a singing FM synthesis instrument. It has 3 carriers and a common modulator, also referred to as algorithm 6 of the TX81Z.------ > asignal  STKFMVoices  ifrequency, iamplitude, [kvowel, kv1[, kspec, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKFMVoices.html>-stkFMVoices ::  D -> D -> Sig-stkFMVoices b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKFMVoices" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKFlute uses a simple flute physical model.------ STKFlute uses a simple flute physical model. The jet model uses a polynomial, a la Cook.------ > asignal  STKFlute  ifrequency, iamplitude, [kjet, kv1[, knoise, kv2[, klfo, kv3[, klfodepth, kv4[, kbreath, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKFlute.html>-stkFlute ::  D -> D -> Sig-stkFlute b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKFlute" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKHevyMetl produces metal sounds.------ STKHevyMetl produces metal sounds, using FM synthesis.---       It uses 3 cascade operators with feedback modulation, also referred to as algorithm 3 of the TX81Z.------ > asignal  STKHevyMetl  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKHevyMetl.html>-stkHevyMetl ::  D -> D -> Sig-stkHevyMetl b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKHevyMetl" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKMandolin produces mamdolin-like sounds.------ STKMandolin produces mamdolin-like sounds, using "commuted synthesis" techniques to model a mandolin instrument.------ > asignal  STKMandolin  ifrequency, iamplitude, [kbody, kv1[, kpos, kv2[, ksus, kv3[, kdetune, kv4[, kmic, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKMandolin.html>-stkMandolin ::  D -> D -> Sig-stkMandolin b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKMandolin" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKModalBar is a resonant bar instrument.------ This opcode is a resonant bar instrument.It has a number of different struck bar instruments.------ > asignal  STKModalBar  ifrequency, iamplitude, [khard, kv1[, kpos, kv2[, klfo, kv3[, klfodepth, kv4[, kmix, kv5[, kvol, kv6[, kinstr, kv7]]]]]]]------ csound doc: <http://csound.com/docs/manual/STKModalBar.html>-stkModalBar ::  D -> D -> Sig-stkModalBar b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKModalBar" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1-                                                                                                ,a2]---- | --- STKMoog produces moog-like swept filter sounds.------ STKMoog produces moog-like swept filter sounds, using one attack wave, one looped wave, and an ADSR envelope and adds two sweepable formant filters.------ > asignal  STKMoog  ifrequency, iamplitude, [kq, kv1[, krate, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKMoog.html>-stkMoog ::  D -> D -> Sig-stkMoog b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKMoog" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKPercFlut is a percussive flute FM synthesis instrument.------ STKPercFlut is a percussive flute FM synthesis instrument. The instrument uses an algorithm like the algorithm 4 of the TX81Z.------ > asignal  STKPercFlut  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKPercFlut.html>-stkPercFlut ::  D -> D -> Sig-stkPercFlut b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKPercFlut" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKPlucked uses a plucked string physical model.------ STKPlucked uses a plucked string physical model based on the Karplus-Strong algorithm.------ > asignal  STKPlucked  ifrequency, iamplitude------ csound doc: <http://csound.com/docs/manual/STKPlucked.html>-stkPlucked ::  D -> D -> Sig-stkPlucked b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKPlucked" [(Ar,[Ir,Ir])] [a1,a2]---- | --- STKResonate is a noise driven formant filter.------ STKResonate is a noise driven formant filter. This instrument contains a noise source, which excites a biquad resonance filter, with volume controlled by an ADSR.------ > asignal  STKResonate  ifrequency, iamplitude, [kfreq, kv1[, kpole, kv2[, knotch, kv3[, kzero, kv4[, kenv, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKResonate.html>-stkResonate ::  D -> D -> Sig-stkResonate b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKResonate" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STK Fender Rhodes-like electric piano FM synthesis instrument.------ > asignal  STKRhodey  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKRhodey.html>-stkRhodey ::  D -> D -> Sig-stkRhodey b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKRhodey" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKSaxofony is a faux conical bore reed instrument.------ STKSaxofony is a faux conical bore reed instrument.---       This opcode uses a "hybrid" digital waveguide instrument that can generate a variety of wind-like sounds. It has also been referred to as the "blowed string" model. ---       The waveguide section is essentially that of a string, with one rigid and one lossy termination. The non-linear function is a reed table. ---       The string can be "blown" at any point between the terminations, though just as with strings, it is impossible to excite the system at either end. ---       If the excitation is placed at the string mid-point, the sound is that of a clarinet. At points closer to the "bridge", the sound is closer to that of a saxophone.------ > asignal  STKSaxofony --- >      ifrequency, iamplitude, [kstiff, kv1[, kapert, kv2[, kblow, kv3[, --- >     knoise, kv4[, klfo, kv5[, klfodepth, kv6[, kbreath, kv7]]]]]]]------ csound doc: <http://csound.com/docs/manual/STKSaxofony.html>-stkSaxofony ::  D -> D -> Sig-stkSaxofony b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKSaxofony" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1-                                                                                                ,a2]---- | --- STKShakers is an instrument that simulates environmental sounds or collisions of multiple independent sound producing objects.------ STKShakers are a set of PhISEM and PhOLIES instruments: ---       PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects. ---       It can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, Water Drops, Tambourine, Sleighbells, and a Guiro. On http://soundlab.cs.princeton.edu/research/controllers/shakers/--- PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) there is a similar approach for the synthesis of environmental sounds. --- It simulates of breaking sticks, crunchy snow (or not), a wrench, sandpaper, and more..------ > asignal  STKShakers  ifrequency, iamplitude, [kenerg, kv1[, kdecay, kv2[, kshake, kv3[, knum, kv4[, kres, kv5[, kinstr, kv6]]]]]]------ csound doc: <http://csound.com/docs/manual/STKShakers.html>-stkShakers ::  D -> D -> Sig-stkShakers b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKShakers" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKSimple is a wavetable/noise instrument.------ STKSimple is a wavetable/noise instrument.---       It combines a looped wave, a noise source, a biquad resonance filter, a one-pole filter, and an ADSR envelope to create some interesting sounds.------ > asignal  STKSimple  ifrequency, iamplitude, [kpos, kv1[, kcross, kv2[, kenv, kv3[, kgain, kv4]]]]------ csound doc: <http://csound.com/docs/manual/STKSimple.html>-stkSimple ::  D -> D -> Sig-stkSimple b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKSimple" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKSitar uses a plucked string physical model.------ STKSitar uses a plucked string physical model based on the Karplus-Strong algorithm.------ > asignal  STKSitar  ifrequency, iamplitude------ csound doc: <http://csound.com/docs/manual/STKSitar.html>-stkSitar ::  D -> D -> Sig-stkSitar b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKSitar" [(Ar,[Ir,Ir])] [a1,a2]---- | --- STKStifKarp is a plucked stiff string instrument.------ STKStifKarp is a plucked stiff string instrument. ---       It a simple plucked string algorithm (Karplus Strong) with enhancements, including string stiffness and pluck position controls. The stiffness is modeled with allpass filters.------ > asignal  STKStifKarp  ifrequency, iamplitude, [kpos, kv1[, ksus, kv2[, kstretch, kv3]]]------ csound doc: <http://csound.com/docs/manual/STKStifKarp.html>-stkStifKarp ::  D -> D -> Sig-stkStifKarp b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKStifKarp" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKTubeBell is a  tubular bell (orchestral chime) FM synthesis instrument.------ STKTubeBell is a tubular bell (orchestral chime) FM synthesis instrument. ---       It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.------ > asignal  STKTubeBell  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKTubeBell.html>-stkTubeBell ::  D -> D -> Sig-stkTubeBell b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKTubeBell" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKVoicForm is a  four formant synthesis instrument.------ STKVoicForm is a four formant synthesis instrument. --- This instrument contains an excitation singing wavetable (looping wave with random and periodic vibrato, smoothing on frequency, etc.), excitation noise, and four sweepable complex resonances. --- Measured formant data is included, and enough data is there to support either parallel or cascade synthesis. In the floating point case cascade synthesis is the most natural so that's what you'll find here.------ > asignal  STKVoicForm  ifrequency, iamplitude, [kmix, kv1[, ksel, kv2[, klfo, kv3[, klfodepth, kv4[, kloud, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKVoicForm.html>-stkVoicForm ::  D -> D -> Sig-stkVoicForm b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKVoicForm" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKWhistle produces whistle sounds.------ STKWhistle produces (police) whistle sounds. It uses a hybrid physical/spectral model of a police whistle (a la Cook).------ > asignal  STKWhistle  ifrequency, iamplitude, [kmod, kv1[, knoise, kv2[, kfipfreq, kv3[, kfipgain, kv4[, kvol, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKWhistle.html>-stkWhistle ::  D -> D -> Sig-stkWhistle b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKWhistle" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- STKWurley simulates a Wurlitzer electric piano FM synthesis instrument.------ STKWurley simulates a Wurlitzer electric piano FM synthesis instrument. ---       It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.------ > asignal  STKWurley  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]------ csound doc: <http://csound.com/docs/manual/STKWurley.html>-stkWurley ::  D -> D -> Sig-stkWurley b1 b2 = Sig $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "STKWurley" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]---- Table Access.---- | --- Accesses table values by incremental sampling.------ > kres  oscil1  idel, kamp, idur [, ifn]------ csound doc: <http://csound.com/docs/manual/oscil1.html>-oscil1 ::  D -> Sig -> D -> Sig-oscil1 b1 b2 b3 = Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "oscil1" [(Kr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Accesses table values by incremental sampling with linear interpolation.------ > kres  oscil1i  idel, kamp, idur [, ifn]------ csound doc: <http://csound.com/docs/manual/oscil1i.html>-oscil1i ::  D -> Sig -> D -> Sig-oscil1i b1 b2 b3 = Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "oscil1i" [(Kr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Accesses table values by direct indexing.------ > ares  ptable  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  ptable  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  ptable  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/ptable.html>-ptable ::  Sig -> Tab -> Sig-ptable b1 b2 = Sig $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "ptable" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                  ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                  ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Accesses table values by direct indexing with cubic interpolation.------ > ares  ptable3  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  ptable3  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  ptable3  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/ptable3.html>-ptable3 ::  Sig -> Tab -> Sig-ptable3 b1 b2 = Sig $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "ptable3" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                   ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                   ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Accesses table values by direct indexing with linear interpolation.------ > ares  ptablei  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  ptablei  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  ptablei  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/ptablei.html>-ptablei ::  Sig -> Tab -> Sig-ptablei b1 b2 = Sig $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "ptablei" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                   ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                   ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Fast table opcodes.------ Fast table opcodes. Faster than---     table and---     tablew because don't---     allow wrap-around and limit and don't check index validity. Have---     been implemented in order to provide fast access to---     arrays. Support non-power of two tables (can be generated by any---     GEN function by giving a negative length value).------ > ir  tab_i  indx, ifn[, ixmode]------ csound doc: <http://csound.com/docs/manual/tab.html>-tab_i ::  D -> Tab -> D-tab_i b1 b2 = D $ f <$> unD b1 <*> unTab b2-    where f a1 a2 = opcs "tab_i" [(Ir,[Ir,Ir,Ir])] [a1,a2]---- | --- Fast table opcodes.------ Fast table opcodes. Faster than---     table and---     tablew because don't---     allow wrap-around and limit and don't check index validity. Have---     been implemented in order to provide fast access to---     arrays. Support non-power of two tables (can be generated by any---     GEN function by giving a negative length value).------ > kr  tab  kndx, ifn[, ixmode]--- > ar  tab  xndx, ifn[, ixmode]------ csound doc: <http://csound.com/docs/manual/tab.html>-tab ::  Sig -> Tab -> Sig-tab b1 b2 = Sig $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "tab" [(Kr,[Kr,Ir,Ir]),(Ar,[Xr,Ir,Ir])] [a1,a2]---- | --- Fast table opcodes.------ Fast table opcodes. Faster than---     table and---     tablew because don't---     allow wrap-around and limit and don't check index validity. Have---     been implemented in order to provide fast access to---     arrays. Support non-power of two tables (can be generated by any---     GEN function by giving a negative length value).------ >  tabw_i  isig, indx, ifn [,ixmode]------ csound doc: <http://csound.com/docs/manual/tab.html>-tabw_i ::  D -> D -> Tab -> SE ()-tabw_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "tabw_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Fast table opcodes.------ Fast table opcodes. Faster than---     table and---     tablew because don't---     allow wrap-around and limit and don't check index validity. Have---     been implemented in order to provide fast access to---     arrays. Support non-power of two tables (can be generated by any---     GEN function by giving a negative length value).------ >  tabw  ksig, kndx, ifn [,ixmode]--- >  tabw  asig, andx, ifn [,ixmode]------ csound doc: <http://csound.com/docs/manual/tab.html>-tabw ::  Sig -> Sig -> Tab -> SE ()-tabw b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "tabw" [(Xr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Accesses table values by direct indexing.------ > ares  table  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  table  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  table  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/table.html>-table :: SigOrD a => a -> Tab -> a-table b1 b2 = fromGE $ f <$> toGE b1 <*> unTab b2-    where f a1 a2 = opcs "table" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                 ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                 ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Accesses table values by direct indexing with cubic interpolation.------ > ares  table3  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  table3  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  table3  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/table3.html>-table3 :: SigOrD a => a -> Tab -> a-table3 b1 b2 = fromGE $ f <$> toGE b1 <*> unTab b2-    where f a1 a2 = opcs "table3" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                  ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                  ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- | --- Accesses table values by direct indexing with linear interpolation.------ > ares  tablei  andx, ifn [, ixmode] [, ixoff] [, iwrap]--- > ires  tablei  indx, ifn [, ixmode] [, ixoff] [, iwrap]--- > kres  tablei  kndx, ifn [, ixmode] [, ixoff] [, iwrap]------ csound doc: <http://csound.com/docs/manual/tablei.html>-tablei :: SigOrD a => a -> Tab -> a-tablei b1 b2 = fromGE $ f <$> toGE b1 <*> unTab b2-    where f a1 a2 = opcs "tablei" [(Ar,[Ar,Ir,Ir,Ir,Ir])-                                  ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                  ,(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1,a2]---- Wave Terrain Synthesis.---- | --- A simple wave-terrain synthesis opcode.------ > aout  wterrain  kamp, kpch, k_xcenter, k_ycenter, k_xradius, k_yradius, \--- >           itabx, itaby------ csound doc: <http://csound.com/docs/manual/wterrain.html>-wterrain ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-wterrain b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wterrain" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1-                                                                                       ,a2-                                                                                       ,a3-                                                                                       ,a4-                                                                                       ,a5-                                                                                       ,a6-                                                                                       ,a7-                                                                                       ,a8]---- Waveguide Physical Modeling.---- | --- Produces a naturally decaying plucked string or drum sound.------ Audio output is a naturally decaying plucked string or drum sound based on the Karplus-Strong algorithms.------ > ares  pluck  kamp, kcps, icps, ifn, imeth [, iparm1] [, iparm2]------ csound doc: <http://csound.com/docs/manual/pluck.html>-pluck ::  Sig -> Sig -> D -> Tab -> D -> Sig-pluck b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "pluck" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Physical model of the plucked string.------ repluck is an implementation of the physical model of the plucked string. A user can control the pluck point, the pickup point, the filter, and an additional audio signal, axcite. axcite is used to excite the 'string'. Based on the Karplus-Strong algorithm.------ > ares  repluck  iplk, kamp, icps, kpick, krefl, axcite------ csound doc: <http://csound.com/docs/manual/repluck.html>-repluck ::  D -> Sig -> D -> Sig -> Sig -> Sig -> Sig-repluck b1 b2 b3 b4 b5 b6 = Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "repluck" [(Ar,[Ir,Kr,Ir,Kr,Kr,Ar])] [a1,a2,a3,a4,a5,a6]---- | --- A string resonator with variable fundamental frequency.------ An audio signal is modified by a string resonator with variable fundamental frequency.------ > ares  streson  asig, kfr, kfdbgain------ csound doc: <http://csound.com/docs/manual/streson.html>-streson ::  Sig -> Sig -> Sig -> Sig-streson b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "streson" [(Ar,[Ar,Kr,Kr])] [a1,a2,a3]---- | --- Creates a tone similar to a bowed string.------ Audio output is a tone similar to a bowed string, using a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  wgbow  kamp, kfreq, kpres, krat, kvibf, kvamp \--- >         [, ifn] [, iminfreq]------ csound doc: <http://csound.com/docs/manual/wgbow.html>-wgbow ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-wgbow b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "wgbow" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- A physical model of a bowed bar.------ A physical model of a bowed bar, belonging to the Perry Cook family of waveguide instruments.------ > ares  wgbowedbar  kamp, kfreq, kpos, kbowpres, kgain [, iconst] [, itvel] \--- >           [, ibowpos] [, ilow]------ csound doc: <http://csound.com/docs/manual/wgbowedbar.html>-wgbowedbar ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-wgbowedbar b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "wgbowedbar" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Creates a tone related to a brass instrument.------ Audio output is a tone related to a brass instrument, using a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  wgbrass  kamp, kfreq, ktens, iatt, kvibf, kvamp \--- >         [, ifn] [, iminfreq]------ csound doc: <http://csound.com/docs/manual/wgbrass.html>-wgbrass ::  Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig-wgbrass b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "wgbrass" [(Ar,[Kr,Kr,Kr,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Creates a tone similar to a clarinet.------ Audio output is a tone similar to a clarinet, using a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  wgclar  kamp, kfreq, kstiff, \--- >         iatt, idetk, kngain, kvibf, kvamp [, ifn] [, iminfreq]------ csound doc: <http://csound.com/docs/manual/wgclar.html>-wgclar ::  Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig-wgclar b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unSig b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wgclar" [(Ar,[Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Ir,Ir])] [a1-                                                                                           ,a2-                                                                                           ,a3-                                                                                           ,a4-                                                                                           ,a5-                                                                                           ,a6-                                                                                           ,a7-                                                                                           ,a8]---- | --- Creates a tone similar to a flute.------ Audio output is a tone similar to a flute, using a physical model developed from Perry Cook, but re-coded for Csound.------ > ares  wgflute  kamp, kfreq, kjet, iatt,--- >         idetk, kngain, kvibf, kvamp [, ifn] [, iminfreq] [, ijetrf] [, iendrf]------ csound doc: <http://csound.com/docs/manual/wgflute.html>-wgflute ::  Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig-wgflute b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unSig b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wgflute" [(Ar-                                                      ,[Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8]---- | --- A high fidelity simulation of a plucked string.------ A high fidelity simulation of a plucked string, using interpolating delay-lines.------ > ares  wgpluck  icps, iamp, kpick, iplk, idamp, ifilt, axcite------ csound doc: <http://csound.com/docs/manual/wgpluck.html>-wgpluck ::  D -> D -> Sig -> D -> D -> D -> Sig -> Sig-wgpluck b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "wgpluck" [(Ar,[Ir,Ir,Kr,Ir,Ir,Ir,Ar])] [a1-                                                                                ,a2-                                                                                ,a3-                                                                                ,a4-                                                                                ,a5-                                                                                ,a6-                                                                                ,a7]---- | --- Physical model of the plucked string.------ wgpluck2 is an implementation of the physical model of the plucked string, with control over the pluck point, the pickup point and the filter. Based on the Karplus-Strong algorithm.------ > ares  wgpluck2  iplk, kamp, icps, kpick, krefl------ csound doc: <http://csound.com/docs/manual/wgpluck2.html>-wgpluck2 ::  D -> Sig -> D -> Sig -> Sig -> Sig-wgpluck2 b1 b2 b3 b4 b5 = Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "wgpluck2" [(Ar,[Ir,Kr,Ir,Kr,Kr])] [a1,a2,a3,a4,a5]+    bpf, bpfcos, cosseg, cossegb, cossegr, expcurve, expon, expseg, expsega, expsegb, expsegba, expsegr, gainslider, lincos, line, linlin, linseg, linsegb, linsegr, logcurve, loopseg, loopsegp, looptseg, loopxseg, lpshold, lpsholdp, scale, scale2, transeg, transegb, transegr, trigexpseg, triglinseg, xyscale,+    +    -- * Envelope Generators.+    adsr, envlpx, envlpxr, gtadsr, linen, linenr, madsr, mxadsr, xadsr,+    +    -- * Models and Emulations.+    bamboo, barmodel, cabasa, chuap, crunch, dripwater, gendy, gendyc, gendyx, gogobel, guiro, lorenz, mandel, mandol, marimba, moog, planet, prepiano, sandpaper, sekere, shaker, sleighbells, stix, tambourine, vibes, voice,+    +    -- * Phasors.+    ephasor, phasor, phasorbnk, sc_phasor, syncphasor, trigphasor,+    +    -- * Random (Noise) Generators.+    betarand, bexprnd, cauchy, cauchyi, cuserrnd, duserrnd, dust, dust2, exprand, exprandi, fractalnoise, gauss, gaussi, gausstrig, getseed, jitter, jitter2, jspline, lfsr, linrand, noise, pcauchy, pinker, pinkish, poisson, rand, randh, randi, random, randomh, randomi, rnd31, rndseed, rspline, seed, trandom, trirand, unirand, urandom, urd, weibull,+    +    -- * Sample Playback.+    bbcutm, bbcuts, flooper, flooper2, fluidAllOut, fluidCCi, fluidCCk, fluidControl, fluidEngine, fluidInfo, fluidLoad, fluidNote, fluidOut, fluidProgramSelect, fluidSetInterpMethod, loscil, loscilphs, loscil3, loscil3phs, loscilx, lphasor, lposcil, lposcil3, lposcila, lposcilsa, lposcilsa2, sfilist, sfinstr, sfinstr3, sfinstr3m, sfinstrm, sfload, sflooper, sfpassign, sfplay, sfplay3, sfplay3m, sfplaym, sfplist, sfpreset, sndloop, waveset,+    +    -- * Scanned Synthesis.+    scanhammer, scanmap, scans, scansmap, scantable, scanu, scanu2, xscanmap, xscans, xscansmap, xscanu,+    +    -- * STK Opcodes.+    stkBandedWG, stkBeeThree, stkBlowBotl, stkBlowHole, stkBowed, stkBrass, stkClarinet, stkDrummer, stkFMVoices, stkFlute, stkHevyMetl, stkMandolin, stkModalBar, stkMoog, stkPercFlut, stkPlucked, stkResonate, stkRhodey, stkSaxofony, stkShakers, stkSimple, stkSitar, stkStifKarp, stkTubeBell, stkVoicForm, stkWhistle, stkWurley,+    +    -- * Table Access.+    oscil1, oscil1i, ptable, ptable3, ptablei, tab, tab_i, table, table3, tablei, tabw_i,+    +    -- * Wave Terrain Synthesis.+    sterrain, wterrain, wterrain2,+    +    -- * Waveguide Physical Modeling.+    pluck, repluck, streson, wgbow, wgbowedbar, wgbrass, wgclar, wgflute, wgpluck, wgpluck2) where++import Control.Monad.Trans.Class+import Control.Monad+import Csound.Dynamic+import Csound.Typed++-- Additive Synthesis/Resynthesis.++-- | +-- Output is an additive set of individually controlled sinusoids, using an oscillator bank.+--+-- > ares  adsyn  kamod, kfmod, ksmod, ifilcod+--+-- csound doc: <https://csound.com/docs/manual/adsyn.html>+adsyn ::  Sig -> Sig -> Sig -> Str -> Sig+adsyn b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4+  where+    f a1 a2 a3 a4 = opcs "adsyn" [(Ar,[Kr,Kr,Kr,Sr])] [a1,a2,a3,a4]++-- | +-- Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic.+--+-- > ares  adsynt  kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/adsynt.html>+adsynt ::  Sig -> Sig -> Tab -> Tab -> Tab -> D -> Sig+adsynt b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "adsynt" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Performs additive synthesis with an arbitrary number of partials -not necessarily harmonic- with interpolation.+--+-- Performs additive synthesis with an arbitrary number of partials, not necessarily harmonic. (see adsynt for detailed manual)+--+-- > ar  adsynt2  kamp, kcps, iwfn, ifreqfn, iampfn, icnt [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/adsynt2.html>+adsynt2 ::  Sig -> Sig -> Tab -> Tab -> Tab -> D -> Sig+adsynt2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unTab b4 <*> unTab b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "adsynt2" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- An oscillator which takes tonality and brightness as arguments.+--+-- An oscillator which takes tonality and brightness as arguments, relative to a base frequency.+--+-- > ares  hsboscil  kamp, ktone, kbrite, ibasfreq, iwfn, ioctfn \+-- >                    [, ioctcnt] [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/hsboscil.html>+hsboscil ::  Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig+hsboscil b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "hsboscil" [(Ar,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- Basic Oscillators.++-- | +-- A low frequency oscillator of various shapes.+--+-- > kres  lfo  kamp, kcps [, itype]+-- > ares  lfo  kamp, kcps [, itype]+--+-- csound doc: <https://csound.com/docs/manual/lfo.html>+lfo ::  Sig -> Sig -> Sig+lfo b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "lfo" [(Kr,[Kr,Kr,Ir]),(Ar,[Kr,Kr,Ir])] [a1,a2]++-- | +-- Mixes the output of any number of oscillators.+--+-- This unit generator mixes the output of any number of oscillators. The frequency, phase, and amplitude of each oscillator can be modulated by two LFOs (all oscillators have a separate set of LFOs, with different phase and frequency); additionally, the output of each oscillator can be filtered through an optional parametric equalizer (also controlled by the LFOs).  This opcode is most useful for rendering ensemble (strings, choir, etc.) instruments.+--+-- > ares  oscbnk   kcps, kamd, kfmd, kpmd, iovrlap, iseed, kl1minf, kl1maxf, \+-- >           kl2minf, kl2maxf, ilfomode, keqminf, keqmaxf, keqminl, keqmaxl, \+-- >           keqminq, keqmaxq, ieqmode, kfn [, il1fn] [, il2fn] [, ieqffn]   \+-- >           [, ieqlfn] [, ieqqfn] [, itabl] [, ioutfn]+--+-- csound doc: <https://csound.com/docs/manual/oscbnk.html>+oscbnk ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Sig+oscbnk b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unD b11 <*> unSig b12 <*> unSig b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unSig b17 <*> unD b18 <*> unTab b19+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 = opcs "oscbnk" [(Ar+                                                                                          ,[Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                                                                                                             ,a2+                                                                                                                                                                             ,a3+                                                                                                                                                                             ,a4+                                                                                                                                                                             ,a5+                                                                                                                                                                             ,a6+                                                                                                                                                                             ,a7+                                                                                                                                                                             ,a8+                                                                                                                                                                             ,a9+                                                                                                                                                                             ,a10+                                                                                                                                                                             ,a11+                                                                                                                                                                             ,a12+                                                                                                                                                                             ,a13+                                                                                                                                                                             ,a14+                                                                                                                                                                             ,a15+                                                                                                                                                                             ,a16+                                                                                                                                                                             ,a17+                                                                                                                                                                             ,a18+                                                                                                                                                                             ,a19]++-- | +-- A simple oscillator.+--+-- oscil reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp.+--+-- > ares  oscil  xamp, xcps [, ifn, iphs]+-- > kres  oscil  kamp, kcps [, ifn, iphs]+--+-- csound doc: <https://csound.com/docs/manual/oscil.html>+oscil ::  Sig -> Sig -> Tab -> Sig+oscil b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "oscil" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A simple oscillator with cubic interpolation.+--+-- oscil3 reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Cubic interpolation is applied for table look up from internal phase values.+--+-- > ares  oscil3  xamp, xcps [, ifn, iphs]+-- > kres  oscil3  kamp, kcps [, ifn, iphs]+--+-- csound doc: <https://csound.com/docs/manual/oscil3.html>+oscil3 ::  Sig -> Sig -> Tab -> Sig+oscil3 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "oscil3" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A simple oscillator with linear interpolation.+--+-- oscili reads table ifn sequentially and repeatedly at a frequency xcps. The amplitude is scaled by xamp. Linear interpolation is applied for table look up from internal phase values.+--+-- > ares  oscili  xamp, xcps[, ifn, iphs]+-- > kres  oscili  kamp, kcps[, ifn, iphs]+--+-- csound doc: <https://csound.com/docs/manual/oscili.html>+oscili ::  Sig -> Sig -> Tab -> Sig+oscili b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "oscili" [(Ar,[Xr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A linearly interpolated oscillator that allows changing the table number at k-rate.+--+-- oscilikt is very similar to oscili, but allows changing the table number at k-rate. It is slightly slower than oscili (especially with high control rate), although also more accurate as it uses a 31-bit phase accumulator, as opposed to the 24-bit one used by oscili.+--+-- > ares  oscilikt  xamp, xcps, kfn [, iphs] [, istor]+-- > kres  oscilikt  kamp, kcps, kfn [, iphs] [, istor]+--+-- csound doc: <https://csound.com/docs/manual/oscilikt.html>+oscilikt ::  Sig -> Sig -> Tab -> Sig+oscilikt b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "oscilikt" [(Ar,[Xr,Xr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A linearly interpolated oscillator that allows allows phase modulation.+--+-- osciliktp allows phase modulation (which is actually implemented as k-rate frequency modulation, by differentiating phase input). The disadvantage is that there is no amplitude control, and frequency can be varied only at the control-rate. This opcode can be faster or slower than oscilikt, depending on the control-rate.+--+-- > ares  osciliktp  kcps, kfn, kphs [, istor]+--+-- csound doc: <https://csound.com/docs/manual/osciliktp.html>+osciliktp ::  Sig -> Tab -> Sig -> Sig+osciliktp b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unTab b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "osciliktp" [(Ar,[Kr,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- A linearly interpolated oscillator with sync status that allows changing the table number at k-rate.+--+-- oscilikts is the same as oscilikt. Except it has a sync input that can be used to re-initialize the oscillator to a k-rate phase value. It is slower than oscilikt and osciliktp.+--+-- > ares  oscilikts  xamp, xcps, kfn, async, kphs [, istor]+--+-- csound doc: <https://csound.com/docs/manual/oscilikts.html>+oscilikts ::  Sig -> Sig -> Tab -> Sig -> Sig -> Sig+oscilikts b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "oscilikts" [(Ar,[Xr,Xr,Kr,Ar,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Accesses table values at a user-defined frequency.+--+-- Accesses table values at a user-defined frequency. This opcode can also be written as oscilx.+--+-- > ares  osciln  kamp, ifrq, ifn, itimes+--+-- csound doc: <https://csound.com/docs/manual/osciln.html>+osciln ::  Sig -> D -> Tab -> D -> Sig+osciln b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unTab b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "osciln" [(Ar,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- A simple, fast sine oscillator+--+-- Simple, fast sine oscillator, that uses only one multiply, and two add operations to generate one sample of output, and does not require a function table.+--+-- > ares  oscils  iamp, icps, iphs [, iflg]+--+-- csound doc: <https://csound.com/docs/manual/oscils.html>+oscils ::  D -> D -> D -> Sig+oscils b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "oscils" [(Ar,[Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- High precision oscillator.+--+-- > ares  poscil  aamp, acps [, ifn, iphs]+-- > ares  poscil  aamp, kcps [, ifn, iphs]+-- > ares  poscil  kamp, acps [, ifn, iphs]+-- > ares  poscil  kamp, kcps [, ifn, iphs]+-- > ires  poscil  kamp, kcps [, ifn, iphs]+-- > kres  poscil  kamp, kcps [, ifn, iphs]+--+-- csound doc: <https://csound.com/docs/manual/poscil.html>+poscil ::  Sig -> Sig -> Tab -> Sig+poscil b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "poscil" [(Ar,[Ar,Ar,Ir,Ir])+                               ,(Ar,[Ar,Kr,Ir,Ir])+                               ,(Ar,[Kr,Ar,Ir,Ir])+                               ,(Ar,[Kr,Kr,Ir,Ir])+                               ,(Ir,[Kr,Kr,Ir,Ir])+                               ,(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- High precision oscillator with cubic interpolation.+--+-- > ares  poscil3  aamp, acps [, ifn, iphs]+-- > ares  poscil3  aamp, kcps [, ifn, iphs]+-- > ares  poscil3  kamp, acps [, ifn, iphs]+-- > ares  poscil3  kamp, kcps [, ifn, iphs]+-- > ires  poscil3  kamp, kcps [, ifn, iphs]+-- > kres  poscil3  kamp, kcps [, ifn, iphs]+--+-- csound doc: <https://csound.com/docs/manual/poscil3.html>+poscil3 ::  Sig -> Sig -> Tab -> Sig+poscil3 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "poscil3" [(Ar,[Ar,Ar,Ir,Ir])+                                ,(Ar,[Ar,Kr,Ir,Ir])+                                ,(Ar,[Kr,Ar,Ir,Ir])+                                ,(Ar,[Kr,Kr,Ir,Ir])+                                ,(Ir,[Kr,Kr,Ir,Ir])+                                ,(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Easier-to-use user-controllable vibrato.+--+-- > kout  vibr  kAverageAmp, kAverageFreq, ifn+--+-- csound doc: <https://csound.com/docs/manual/vibr.html>+vibr ::  Sig -> Sig -> Tab -> Sig+vibr b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "vibr" [(Kr,[Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Generates a natural-sounding user-controllable vibrato.+--+-- > kout  vibrato  kAverageAmp, kAverageFreq, kRandAmountAmp, kRandAmountFreq, kAmpMinRate, kAmpMaxRate, kcpsMinRate, kcpsMaxRate, ifn [, iphs+--+-- csound doc: <https://csound.com/docs/manual/vibrato.html>+vibrato ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig+vibrato b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unTab b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "vibrato" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1+                                                                                         ,a2+                                                                                         ,a3+                                                                                         ,a4+                                                                                         ,a5+                                                                                         ,a6+                                                                                         ,a7+                                                                                         ,a8+                                                                                         ,a9]++-- Dynamic Spectrum Oscillators.++-- | +-- Output is a set of harmonically related sine partials.+--+-- > ares  buzz  xamp, xcps, knh, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/buzz.html>+buzz ::  Sig -> Sig -> Sig -> Tab -> Sig+buzz b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4+  where+    f a1 a2 a3 a4 = opcs "buzz" [(Ar,[Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Output is a set of harmonically related cosine partials.+--+-- > ares  gbuzz  xamp, xcps, knh, klh, kmul, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/gbuzz.html>+gbuzz ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig+gbuzz b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "gbuzz" [(Ar,[Xr,Xr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Generates a set of impulses.+--+-- Generates a set of impulses of amplitude kamp separated by kintvl seconds (or samples if kintvl is negative).  The first impulse is generated after a delay of ioffset seconds.+--+-- > ares  mpulse  kamp, kintvl [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/mpulse.html>+mpulse ::  Sig -> Sig -> Sig+mpulse b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "mpulse" [(Ar,[Kr,Kr,Ir])] [a1,a2]++-- | +-- A mostly bandlimited shape-shifting square-pulse-saw-sinewave oscillator with hardsync.+--+-- This oscillator generates a variable shape waveform that can morph freely between classical shapes sine, square, pulse and saw.+-- The shape is controlled by two interacting values: clip (squareness) and "skew" (symmetry).+-- All shapes use a minimum number of samples per transition (ie, the sharp end of a saw or a pulse uses minimum N samples), this makes output bandlimited.+-- At higher frequency, the minimum sweep rate takes over, so over a certain pitch all shapes "degrade" to sinewave. The minimum sweep rate is i-time configurable.+-- Hardsync (a very quick sweep to phase=0) is supported, and a sync signal is output once per cycle.+--+-- > aout [, asyncout]  squinewave  acps, aClip, aSkew, asyncin [, iMinSweep] [, iphase]+-- > aout [, asyncout]  squinewave  acps, aClip, aSkew [, ksyncin] [, iMinSweep] [, iphase]+--+-- csound doc: <https://csound.com/docs/manual/squinewave.html>+squinewave :: forall a . Tuple a => Sig -> Sig -> Sig -> Sig -> a+squinewave b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "squinewave" ([Ar,Ar],[Ar,Ar,Ar,Kr,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Implementation of a band limited, analog modeled oscillator.+--+-- Implementation of a band limited, analog modeled oscillator, based on integration of band limited impulses. vco can be used to simulate a variety of analog wave forms.+--+-- > ares  vco  xamp, xcps, iwave, kpw [, ifn] [, imaxd] [, ileak] [, inyx] \+-- >           [, iphs] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/vco.html>+vco ::  Sig -> Sig -> D -> Sig -> Sig+vco b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "vco" [(Ar,[Xr,Xr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Implementation of a band-limited oscillator using pre-calculated tables.+--+-- vco2 is similar to vco. But the implementation uses pre-calculated tables of band-limited waveforms (see also GEN30) rather than integrating impulses. This opcode can be faster than vco (especially if a low control-rate is used) and also allows better sound quality. Additionally, there are more waveforms and oscillator phase can be modulated at k-rate. The disadvantage is increased memory usage. For more details about vco2 tables, see also vco2init and vco2ft.+--+-- > ares  vco2  kamp, kcps [, imode] [, kpw] [, kphs] [, inyx]+--+-- csound doc: <https://csound.com/docs/manual/vco2.html>+vco2 ::  Sig -> Sig -> Sig+vco2 b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "vco2" [(Ar,[Kr,Kr,Ir,Kr,Kr,Ir])] [a1,a2]++-- | +-- Returns a table number at k-time for a given oscillator frequency and wavform.+--+-- vco2ft returns the function table number to be used for generating the specified waveform at a given frequency. This function table number can be used by any Csound opcode that generates a signal by reading function tables (like oscilikt). The tables must be calculated by vco2init before vco2ft is called and shared as Csound ftables (ibasfn).+--+-- > kfn  vco2ft  kcps, iwave [, inyx]+--+-- csound doc: <https://csound.com/docs/manual/vco2ft.html>+vco2ft ::  Sig -> D -> Tab+vco2ft b1 b2 =+  Tab $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "vco2ft" [(Kr,[Kr,Ir,Ir])] [a1,a2]++-- | +-- Returns a table number at i-time for a given oscillator frequency and wavform.+--+-- vco2ift is the same as vco2ft, but works at i-time. It is suitable for use with opcodes that expect an i-rate table number (for example, oscili).+--+-- > ifn  vco2ift  icps, iwave [, inyx]+--+-- csound doc: <https://csound.com/docs/manual/vco2ift.html>+vco2ift ::  D -> D -> Tab+vco2ift b1 b2 =+  Tab $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "vco2ift" [(Ir,[Ir,Ir,Ir])] [a1,a2]++-- | +-- Calculates tables for use by vco2 opcode.+--+-- vco2init calculates tables for use by vco2 opcode. Optionally, it is also possible to access these tables as standard Csound function tables. In this case, vco2ft can be used to find the correct table number for a given oscillator frequency.+--+-- > ifn  vco2init  iwave [, ibasfn] [, ipmul] [, iminsiz] [, imaxsiz] [, isrcft]+--+-- csound doc: <https://csound.com/docs/manual/vco2init.html>+vco2init ::  D -> SE Tab+vco2init b1 =+  fmap ( Tab . return) $ SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep "vco2init" [(Ir,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1]++-- FM Synthesis.++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crossfm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crossfm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crossfm b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                    ,a2+                                                                                    ,a3+                                                                                    ,a4+                                                                                    ,a5+                                                                                    ,a6+                                                                                    ,a7]++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crossfmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crossfmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crossfmi b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5+                                                                                     ,a6+                                                                                     ,a7]++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crosspm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crosspm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crosspm b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                    ,a2+                                                                                    ,a3+                                                                                    ,a4+                                                                                    ,a5+                                                                                    ,a6+                                                                                    ,a7]++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crosspmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crosspmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crosspmi b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crosspmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5+                                                                                     ,a6+                                                                                     ,a7]++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crossfmpm  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crossfmpm ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crossfmpm b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpm" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                      ,a2+                                                                                      ,a3+                                                                                      ,a4+                                                                                      ,a5+                                                                                      ,a6+                                                                                      ,a7]++-- | +-- Two mutually frequency and/or phase modulated oscillators.+--+-- Two oscillators, mutually frequency and/or phase modulated by each other.+--+-- > a1, a2  crossfmpmi  xfrq1, xfrq2, xndx1, xndx2, kcps, ifn1, ifn2 [, iphs1] [, iphs2]+--+-- csound doc: <https://csound.com/docs/manual/crossfm.html>+crossfmpmi ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> (Sig,Sig)+crossfmpmi b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "crossfmpmi" ([Ar,Ar],[Xr,Xr,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7]++-- | +-- Uses FM synthesis to create a Hammond B3 organ sound.+--+-- Uses FM synthesis to create a Hammond B3 organ sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmb3  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, ifn3, \+-- >           ifn4, ivfn]+--+-- csound doc: <https://csound.com/docs/manual/fmb3.html>+fmb3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+fmb3 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "fmb3" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Uses FM synthesis to create a tublar bell sound.+--+-- Uses FM synthesis to create a tublar bell sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmbell  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, ifn3, \+-- >           ifn4, ivfn, isus]+--+-- csound doc: <https://csound.com/docs/manual/fmbell.html>+fmbell ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+fmbell b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "fmbell" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5+                                                                                     ,a6]++-- | +-- Uses FM synthesis to create a “Heavy Metal” sound.+--+-- Uses FM synthesis to create a “Heavy Metal” sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmmetal  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \+-- >           ifn4, ivfn+--+-- csound doc: <https://csound.com/docs/manual/fmmetal.html>+fmmetal ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig+fmmetal b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmmetal" [(Ar+                                                           ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- | +-- Uses FM synthesis to create a percussive flute sound.+--+-- Uses FM synthesis to create a percussive flute sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmpercfl  kamp, kfreq, kc1, kc2, kvdepth, kvrate[, ifn1, ifn2, \+-- >           ifn3, ifn4, ivfn]+--+-- csound doc: <https://csound.com/docs/manual/fmpercfl.html>+fmpercfl ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+fmpercfl b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "fmpercfl" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                    ,a2+                                                                                    ,a3+                                                                                    ,a4+                                                                                    ,a5+                                                                                    ,a6]++-- | +-- Uses FM synthesis to create a Fender Rhodes electric piano sound.+--+-- Uses FM synthesis to create a Fender Rhodes electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmrhode  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, \+-- >           ifn3, ifn4, ivfn+--+-- csound doc: <https://csound.com/docs/manual/fmrhode.html>+fmrhode ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig+fmrhode b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmrhode" [(Ar+                                                           ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- | +-- FM Singing Voice Synthesis+--+-- > ares  fmvoice  kamp, kfreq, kvowel, ktilt, kvibamt, kvibrate[, ifn1, \+-- >           ifn2, ifn3, ifn4, ivibfn]+--+-- csound doc: <https://csound.com/docs/manual/fmvoice.html>+fmvoice ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+fmvoice b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "fmvoice" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                   ,a2+                                                                                   ,a3+                                                                                   ,a4+                                                                                   ,a5+                                                                                   ,a6]++-- | +-- Uses FM synthesis to create a Wurlitzer electric piano sound.+--+-- Uses FM synthesis to create a Wurlitzer electric piano sound. It comes from a family of FM sounds, all using 4 basic oscillators and various architectures, as used in the TX81Z synthesizer.+--+-- > ares  fmwurlie  kamp, kfreq, kc1, kc2, kvdepth, kvrate, ifn1, ifn2, ifn3, \+-- >           ifn4, ivfn+--+-- csound doc: <https://csound.com/docs/manual/fmwurlie.html>+fmwurlie ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig+fmwurlie b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9 <*> unTab b10 <*> unTab b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "fmwurlie" [(Ar+                                                            ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- | +-- A basic frequency modulated oscillator.+--+-- > ares  foscil  xamp, kcps, xcar, xmod, kndx, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/foscil.html>+foscil ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig+foscil b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "foscil" [(Ar,[Xr,Kr,Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Basic frequency modulated oscillator with linear interpolation.+--+-- > ares  foscili  xamp, kcps, xcar, xmod, kndx, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/foscili.html>+foscili ::  Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig+foscili b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "foscili" [(Ar,[Xr,Kr,Xr,Xr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- Granular Synthesis.++-- | +-- Synchronous granular synthesis, using a soundfile as source.+--+-- diskgrain implements synchronous granular synthesis. The source sound for the grains is obtained by reading a soundfile containing the samples of the source waveform.+--+-- > asig  diskgrain  Sfname, kamp, kfreq, kpitch, kgrsize, kprate, \+-- >           ifun, iolaps [,imaxgrsize , ioffset]+--+-- csound doc: <https://csound.com/docs/manual/diskgrain.html>+diskgrain ::  Str -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+diskgrain b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "diskgrain" [(Ar,[Sr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                        ,a2+                                                                                        ,a3+                                                                                        ,a4+                                                                                        ,a5+                                                                                        ,a6+                                                                                        ,a7+                                                                                        ,a8]++-- | +-- Produces sinusoid bursts useful for formant and granular synthesis.+--+-- Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis.+--+-- > ares  fof  xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \+-- >           ifna, ifnb, itotdur [, iphs] [, ifmode] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/fof.html>+fof ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig+fof b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unTab b10 <*> unTab b11 <*> unD b12+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = opcs "fof" [(Ar+                                                           ,[Xr,Xr,Xr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]++-- | +-- Produces sinusoid bursts including k-rate incremental indexing with each successive burst.+--+-- Audio output is a succession of sinusoid bursts initiated at frequency xfund with a spectral peak at xform. For xfund above 25 Hz these bursts produce a speech-like formant with spectral characteristics determined by the k-input parameters. For lower fundamentals this generator provides a special form of granular synthesis.+--+-- > ares  fof2  xamp, xfund, xform, koct, kband, kris, kdur, kdec, iolaps, \+-- >           ifna, ifnb, itotdur, kphs, kgliss [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/fof2.html>+fof2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig -> Sig -> Sig+fof2 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unTab b10 <*> unTab b11 <*> unD b12 <*> unSig b13 <*> unSig b14+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 = opcs "fof2" [(Ar+                                                                    ,[Xr,Xr,Xr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14]++-- | +-- Audio output is a succession of grains derived from data in a stored function table+--+-- Audio output is a succession of grains derived from data in a stored function table ifna. The local envelope of these grains and their timing is based on the model of fof synthesis and permits detailed control of the granular synthesis.+--+-- > ares  fog  xamp, xdens, xtrans, aspd, koct, kband, kris, kdur, kdec, \+-- >           iolaps, ifna, ifnb, itotdur [, iphs] [, itmode] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/fog.html>+fog ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> D -> Sig+fog b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unD b10 <*> unTab b11 <*> unTab b12 <*> unD b13+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = opcs "fog" [(Ar+                                                               ,[Xr,Xr,Xr,Ar,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13]++-- | +-- Generates granular synthesis textures.+--+-- > ares  grain  xamp, xpitch, xdens, kampoff, kpitchoff, kgdur, igfn, \+-- >           iwfn, imgdur [, igrnd]+--+-- csound doc: <https://csound.com/docs/manual/grain.html>+grain ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> D -> Sig+grain b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "grain" [(Ar,[Xr,Xr,Xr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7+                                                                                       ,a8+                                                                                       ,a9]++-- | +-- Easy-to-use granular synthesis texture generator.+--+-- Generate granular synthesis textures. grain2 is simpler to use, but grain3 offers more control.+--+-- > ares  grain2  kcps, kfmd, kgdur, iovrlp, kfn, iwfn [, irpow] \+-- >           [, iseed] [, imode]+--+-- csound doc: <https://csound.com/docs/manual/grain2.html>+grain2 ::  Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig+grain2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "grain2" [(Ar,[Kr,Kr,Kr,Ir,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Generate granular synthesis textures with more user control.+--+-- Generate granular synthesis textures. grain2 is simpler to use but grain3 offers more control.+--+-- > ares  grain3  kcps, kphs, kfmd, kpmd, kgdur, kdens, imaxovr, kfn, iwfn, \+-- >           kfrpow, kprpow [, iseed] [, imode]+--+-- csound doc: <https://csound.com/docs/manual/grain3.html>+grain3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Tab -> Tab -> Sig -> Sig -> Sig+grain3 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unTab b8 <*> unTab b9 <*> unSig b10 <*> unSig b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "grain3" [(Ar+                                                          ,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- | +-- A more complex granular synthesis texture generator.+--+-- The granule unit generator is more complex than grain, but does add new possibilities.+--+-- > ares  granule  xamp, ivoice, iratio, imode, ithd, ifn, ipshift, igskip, igskip_os, ilength, kgap, igap_os, kgsize, igsize_os, iatt, idec \+-- >           [, iseed] [, ipitch1] [, ipitch2] [, ipitch3] [, ipitch4] [, ifnenv]+--+-- csound doc: <https://csound.com/docs/manual/granule.html>+granule ::  Sig -> D -> D -> D -> D -> Tab -> D -> D -> D -> D -> Sig -> D -> Sig -> D -> D -> D -> Sig+granule b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unTab b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10 <*> unSig b11 <*> unD b12 <*> unSig b13 <*> unD b14 <*> unD b15 <*> unD b16+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 = opcs "granule" [(Ar+                                                                               ,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Ir,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                                                                                      ,a2+                                                                                                                                                      ,a3+                                                                                                                                                      ,a4+                                                                                                                                                      ,a5+                                                                                                                                                      ,a6+                                                                                                                                                      ,a7+                                                                                                                                                      ,a8+                                                                                                                                                      ,a9+                                                                                                                                                      ,a10+                                                                                                                                                      ,a11+                                                                                                                                                      ,a12+                                                                                                                                                      ,a13+                                                                                                                                                      ,a14+                                                                                                                                                      ,a15+                                                                                                                                                      ,a16]++-- | +-- Granular synthesizer with "per grain" control+--       over many of its parameters.  Has a sync input to+--       sychronize its internal grain scheduler clock to an external+--       clock source.+--+-- partikkel was conceived after reading Curtis Roads' book+--       "Microsound", and the goal was to create an opcode that was+--       capable of all time-domain varieties of granular synthesis+--       described in this book. The idea being that most of the+--       techniques only differ in parameter values, and by having a+--       single opcode that can do all varieties of granular synthesis+--       makes it possible to interpolate between techniques. Granular synthesis is sometimes dubbed particle+--       synthesis, and it was thought apt to name the opcode partikkel+--       to distinguish it from other granular opcodes.+--+-- > a1 [, a2, a3, a4, a5, a6, a7, a8]  partikkel  agrainfreq, \+-- >                   kdistribution, idisttab, async, kenv2amt, ienv2tab, ienv_attack, \+-- >                   ienv_decay, ksustain_amount, ka_d_ratio, kduration, kamp, igainmasks, \+-- >                   kwavfreq, ksweepshape, iwavfreqstarttab, iwavfreqendtab, awavfm, \+-- >                   ifmamptab, kfmenv, icosine, ktraincps, knumpartials, kchroma, \+-- >                   ichannelmasks, krandommask, kwaveform1, kwaveform2, kwaveform3, \+-- >                   kwaveform4, iwaveamptab, asamplepos1, asamplepos2, asamplepos3, \+-- >                   asamplepos4, kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains \+-- >                   [, iopcode_id, ipanlaws]+--+-- csound doc: <https://csound.com/docs/manual/partikkel.html>+partikkel :: forall a . Tuple a => Sig -> Sig -> D -> Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> D -> D -> Sig -> D -> Sig -> D -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> a+partikkel b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25 b26 b27 b28 b29 b30 b31 b32 b33 b34 b35 b36 b37 b38 b39 b40 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unSig b12 <*> unD b13 <*> unSig b14 <*> unSig b15 <*> unD b16 <*> unD b17 <*> unSig b18 <*> unD b19 <*> unSig b20 <*> unD b21 <*> unSig b22 <*> unSig b23 <*> unSig b24 <*> unD b25 <*> unSig b26 <*> unSig b27 <*> unSig b28 <*> unSig b29 <*> unSig b30 <*> unD b31 <*> unSig b32 <*> unSig b33 <*> unSig b34 <*> unSig b35 <*> unSig b36 <*> unSig b37 <*> unSig b38 <*> unSig b39 <*> unD b40+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 a32 a33 a34 a35 a36 a37 a38 a39 a40 = mopcs "partikkel" ([Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar]+                                                                                                                                                                                 ,[Ar+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Ar+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Kr+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ir+                                                                                                                                                                                  ,Ir]) [a1+                                                                                                                                                                                        ,a2+                                                                                                                                                                                        ,a3+                                                                                                                                                                                        ,a4+                                                                                                                                                                                        ,a5+                                                                                                                                                                                        ,a6+                                                                                                                                                                                        ,a7+                                                                                                                                                                                        ,a8+                                                                                                                                                                                        ,a9+                                                                                                                                                                                        ,a10+                                                                                                                                                                                        ,a11+                                                                                                                                                                                        ,a12+                                                                                                                                                                                        ,a13+                                                                                                                                                                                        ,a14+                                                                                                                                                                                        ,a15+                                                                                                                                                                                        ,a16+                                                                                                                                                                                        ,a17+                                                                                                                                                                                        ,a18+                                                                                                                                                                                        ,a19+                                                                                                                                                                                        ,a20+                                                                                                                                                                                        ,a21+                                                                                                                                                                                        ,a22+                                                                                                                                                                                        ,a23+                                                                                                                                                                                        ,a24+                                                                                                                                                                                        ,a25+                                                                                                                                                                                        ,a26+                                                                                                                                                                                        ,a27+                                                                                                                                                                                        ,a28+                                                                                                                                                                                        ,a29+                                                                                                                                                                                        ,a30+                                                                                                                                                                                        ,a31+                                                                                                                                                                                        ,a32+                                                                                                                                                                                        ,a33+                                                                                                                                                                                        ,a34+                                                                                                                                                                                        ,a35+                                                                                                                                                                                        ,a36+                                                                                                                                                                                        ,a37+                                                                                                                                                                                        ,a38+                                                                                                                                                                                        ,a39+                                                                                                                                                                                        ,a40]++-- | +-- Get mask index for a specific mask parameter of a running partikkel instance.+--+-- partikkelget is an opcode for outputting partikkel mask index for a specific parameter. +--       Used together with partikkelset, it can be used to synchronize partikkel masking between several running instances of the  partikkel opcode. +--       It can also be used to control other processes based on the internal mask index, for example to create more complex masking patterns than is available with the regular grain masking system.+--+-- > kindex  partikkelget  kparameterindex, iopcode_id+--+-- csound doc: <https://csound.com/docs/manual/partikkelget.html>+partikkelget ::  Sig -> D -> Sig+partikkelget b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "partikkelget" [(Kr,[Kr,Ir])] [a1,a2]++-- | +-- Set mask index for a specific mask parameter of a running partikkel instance.+--+-- partikkelset is an opcode for setting the partikkel mask index for a specific parameter. +--       Used together with partikkelget, it can be used to synchronize partikkel masking between several running instances of the  partikkel opcode. +--       It can also be used to set the internal mask index basaed on other processes, for example to create more complex masking patterns than is available with the regular grain masking system.+--+-- >  partikkelset  kparameterindex, kmaskindex, iopcode_id+--+-- csound doc: <https://csound.com/docs/manual/partikkelset.html>+partikkelset ::  Sig -> Sig -> D -> SE ()+partikkelset b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "partikkelset" [(Xr,[Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Outputs partikkel's grain+--       scheduler clock pulse and phase to synchronize several instances of the partikkel+--       opcode to the same clock source.+--+-- partikkelsync is an opcode for outputting partikkel's grain scheduler clock pulse and phase. partikkelsync's output can be used to synchronize other instances of the partikkel opcode to the same clock.+--+-- > async [,aphase]  partikkelsync  iopcode_id+--+-- csound doc: <https://csound.com/docs/manual/partikkelsync.html>+partikkelsync :: forall a . Tuple a => D -> a+partikkelsync b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "partikkelsync" ([Ar,Ar],[Ir]) [a1]++-- | +-- Reads a mono sound sample from a table and applies time-stretching and/or pitch modification.+--+-- sndwarp reads sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch!+--+-- > ares [, ac]  sndwarp  xamp, xtimewarp, xresample, ifn1, ibeg, iwsize, \+-- >           irandw, ioverlap, ifn2, itimemode+--+-- csound doc: <https://csound.com/docs/manual/sndwarp.html>+sndwarp :: forall a . Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a+sndwarp b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unTab b9 <*> unD b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "sndwarp" ([Ar,Ar],[Xr,Xr,Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                                 ,a2+                                                                                                 ,a3+                                                                                                 ,a4+                                                                                                 ,a5+                                                                                                 ,a6+                                                                                                 ,a7+                                                                                                 ,a8+                                                                                                 ,a9+                                                                                                 ,a10]++-- | +-- Reads a stereo sound sample from a table and applies time-stretching and/or pitch modification.+--+-- sndwarpst reads stereo sound samples from a table and applies time-stretching and/or pitch modification. Time and frequency modification are independent from one another. For example, a sound can be stretched in time while raising the pitch!+--+-- > ar1, ar2 [,ac1] [, ac2]  sndwarpst  xamp, xtimewarp, xresample, ifn1, \+-- >           ibeg, iwsize, irandw, ioverlap, ifn2, itimemode+--+-- csound doc: <https://csound.com/docs/manual/sndwarpst.html>+sndwarpst :: forall a . Tuple a => Sig -> Sig -> Sig -> Tab -> D -> D -> D -> D -> Tab -> D -> a+sndwarpst b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unTab b9 <*> unD b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "sndwarpst" ([Ar,Ar,Ar,Ar]+                                                         ,[Xr,Xr,Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]++-- | +-- Synchronous granular synthesis.+--+-- syncgrain implements synchronous granular synthesis. The source sound for the+-- grains is obtained by reading a function table containing the samples of the source waveform. +-- For sampled-sound sources, GEN01 is used.+-- syncgrain will accept deferred allocation tables.+--+-- > asig  syncgrain  kamp, kfreq, kpitch, kgrsize, kprate, ifun1, \+-- >           ifun2, iolaps+--+-- csound doc: <https://csound.com/docs/manual/syncgrain.html>+syncgrain ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig+syncgrain b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "syncgrain" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1+                                                                                  ,a2+                                                                                  ,a3+                                                                                  ,a4+                                                                                  ,a5+                                                                                  ,a6+                                                                                  ,a7+                                                                                  ,a8]++-- | +-- Synchronous granular synthesis.+--+-- syncloop is a variation on syncgrain,+-- which implements synchronous granular synthesis. +-- syncloop adds loop start and end points and an optional start position. Loop start+-- and end control grain start positions, so the actual grains can go beyond the loop+-- points (if the loop points are not at the extremes of the table), enabling+-- seamless crossfading. For more information on the granular synthesis process,+-- check the syncgrain manual page.+--+-- > asig  syncloop  kamp, kfreq, kpitch, kgrsize, kprate, klstart, \+-- >           klend, ifun1, ifun2, iolaps[,istart, iskip]+--+-- csound doc: <https://csound.com/docs/manual/syncloop.html>+syncloop ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig+syncloop b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unD b8 <*> unD b9 <*> unD b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcs "syncloop" [(Ar+                                                        ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]++-- | +-- Simple vocal simulation based on glottal pulses with formant characteristics.+--+-- This opcode produces a simple vocal simulation based on glottal pulses with formant characteristics.+-- Output is a series of sound events, where each event is composed of a burst of squared sine pulses followed by silence.+-- The VOSIM (VOcal SIMulation) synthesis method was developed by Kaegi and Tempelaars in the 1970's.+--+-- > ar  vosim  kamp, kFund, kForm, kDecay, kPulseCount, kPulseFactor, ifn [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/vosim.html>+vosim ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Sig+vosim b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "vosim" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- Hyper Vectorial Synthesis.++-- | +-- Allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- hvs1 allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- >  hvs1  kx, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]+--+-- csound doc: <https://csound.com/docs/manual/hvs1.html>+hvs1 ::  Sig -> D -> D -> D -> D -> D -> SE ()+hvs1 b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "hvs1" [(Xr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- hvs2 allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- >  hvs2  kx, ky, inumParms, inumPointsX, inumPointsY, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]+--+-- csound doc: <https://csound.com/docs/manual/hvs2.html>+hvs2 ::  Sig -> Sig -> D -> D -> D -> D -> D -> D -> SE ()+hvs2 b1 b2 b3 b4 b5 b6 b7 b8 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcsDep_ "hvs2" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                    ,a2+                                                                                    ,a3+                                                                                    ,a4+                                                                                    ,a5+                                                                                    ,a6+                                                                                    ,a7+                                                                                    ,a8]++-- | +-- Allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- hvs3 allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.+--+-- >  hvs3  kx, ky, kz, inumParms, inumPointsX, inumPointsY, inumPointsZ, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]+--+-- csound doc: <https://csound.com/docs/manual/hvs3.html>+hvs3 ::  Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> SE ()+hvs3 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9 <*> (lift . unD) b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = opcsDep_ "hvs3" [(Xr,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                                 ,a2+                                                                                                 ,a3+                                                                                                 ,a4+                                                                                                 ,a5+                                                                                                 ,a6+                                                                                                 ,a7+                                                                                                 ,a8+                                                                                                 ,a9+                                                                                                 ,a10]++-- Linear and Exponential Generators.++-- | +-- Break point function with linear interpolation+--+-- Break-point function with linear interpolation. Useful when+-- 	  defining a table with GEN27 and scaling the x value would be+-- 	  overkill.+--+-- > ky  bpf  kx, kx1, ky1, kx2, ..., kxn, kyn+-- > iy  bpf  ix, ix1, iy1, ix2, ..., ixn, iyn+-- > kys[]  bpf  kxs[], kx1, ky1, kx2, ..., kxn, kyn+-- > iys[]  bpf  ixs[], ix1, iy1, ix2, ..., ixn, iyn+-- > ky  bpf  kx, kxs[], kys[]+-- > iy  bpf  ix, ixs[], iys[]+-- > ay  bpf  ax, kx1, ky1, kx2, ..., kxn, kyn+-- > ay  bpf  ax, kxs[], kys[]+-- > ky, kw  bpf  kx, kxs[], kys[], kws[]+--+-- csound doc: <https://csound.com/docs/manual/bpf.html>+bpf ::  Sig -> Sig -> Sig -> [Sig] -> (Sig,Sig)+bpf b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> mapM unSig b4+  where+    f a1 a2 a3 a4 = mopcs "bpf" ([Kr,Kr],[Kr,Kr,Kr,Kr]) ([a1,a2,a3] ++ a4)++-- | ++--+-- > ky  bpfcos  kx, kx1, ky1, kx2, ..., kxn, kyn+-- > kys[]  bpfcos  kxs[], kx1, ky1, kx2, ..., kxn, kyn+-- > ky  bpfcos  kx, kxs[], kys[]+-- > ky  bpfcos  kx, ixs[], iys[]+-- > ky, kz  bpfcos  kx, kxs[], kys[], kzs[] +-- > ky, kz  bpfcos  kx, ixs[], iys[], izs[] +-- > kys[]  bpfcos  kxs[], kx1, ky1, kx2, ..., kxn, kyn+-- > ky  bpfcos  kx, ixs[], iys[]+-- > ky, kz  bpfcos  kx, kxs[], kys[], kzs[] +--+-- csound doc: <https://csound.com/docs/manual/bpfcos.html>+bpfcos ::  Sig -> Sig -> Sig -> [Sig] -> (Sig,Sig)+bpfcos b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> mapM unSig b4+  where+    f a1 a2 a3 a4 = mopcs "bpfcos" ([Kr,Kr],[Kr,Kr,Kr,Kr]) ([a1,a2,a3] ++ a4)++-- | +-- Trace a series of line segments between specified points with+--       cosine interpolation.+--+-- > ares  cosseg  ia, idur1, ib [, idur2] [, ic] [...]+-- > kres  cosseg  ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/cosseg.html>+cosseg ::  [D] -> Sig+cosseg b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "cosseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- Trace a series of line segments between specified absolute points with+--       cosine interpolation.+--+-- > ares  cossegb  ia, itim1, ib [, itim2] [, ic] [...]+-- > kres  cossegb  ia, itim1, ib [, itim2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/cossegb.html>+cossegb ::  [D] -> Sig+cossegb b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "cossegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- Trace a series of line segments between specified points with+--       cosine interpolation, including a release segment.+--+-- > ares  cossegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+-- > kres  cossegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+--+-- csound doc: <https://csound.com/docs/manual/cossegr.html>+cossegr ::  [D] -> D -> D -> Sig+cossegr b1 b2 b3 =+  Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = setRate Kr $ opcs "cossegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])++-- | +-- This opcode implements a formula for generating a normalised exponential curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.+--+-- Generates an exponential curve in range 0 to 1 of arbitrary steepness.+--       Steepness index equal to or lower than 1.0 will result in Not-a-Number+--       errors and cause unstable behavior.+--+-- > kout  expcurve  kindex, ksteepness+--+-- csound doc: <https://csound.com/docs/manual/expcurve.html>+expcurve ::  Sig -> Sig -> Sig+expcurve b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "expcurve" [(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Trace an exponential curve between specified points.+--+-- > ares  expon  ia, idur, ib+-- > kres  expon  ia, idur, ib+--+-- csound doc: <https://csound.com/docs/manual/expon.html>+expon ::  D -> D -> D -> Sig+expon b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "expon" [(Ar,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Trace a series of exponential segments between specified points.+--+-- > ares  expseg  ia, idur1, ib [, idur2] [, ic] [...]+-- > kres  expseg  ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/expseg.html>+expseg ::  [D] -> Sig+expseg b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "expseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- An exponential segment generator operating at a-rate.+--+-- An exponential segment generator operating at a-rate. This unit is almost identical to expseg, but more precise when defining segments with very short durations (i.e., in a percussive attack phase) at audio rate.+--+-- > ares  expsega  ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/expsega.html>+expsega ::  [D] -> Sig+expsega b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = opcs "expsega" [(Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- Trace a series of exponential segments between specified+--       absolute points.+--+-- > ares  expsegb  ia, itim1, ib [, itim2] [, ic] [...]+-- > kres  expsegb  ia, itim1, ib [, itim2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/expsegb.html>+expsegb ::  [D] -> Sig+expsegb b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = opcs "expsegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- An exponential segment generator operating at a-rate with+--       absolute times.+--+-- An exponential segment generator operating at a-rate. This unit+--       is almost identical to expsegb, but+--       more precise when defining segments with very short durations+--       (i.e., in a percussive attack phase) at audio rate.+--+-- > ares  expsegba  ia, itim1, ib [, itim2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/expsegba.html>+expsegba ::  D -> D -> D -> Sig+expsegba b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "expsegba" [(Ar,(repeat Ir))] [a1,a2,a3]++-- | +-- Trace a series of exponential segments between specified points including a release segment.+--+-- > ares  expsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+-- > kres  expsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+--+-- csound doc: <https://csound.com/docs/manual/expsegr.html>+expsegr ::  [D] -> D -> D -> Sig+expsegr b1 b2 b3 =+  Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = setRate Kr $ opcs "expsegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])++-- | +-- An implementation of a logarithmic gain curve which is similar to the gainslider~ object from Cycling 74 Max / MSP.+--+-- This opcode is intended for use to multiply by an audio signal to give a console mixer like feel. There is no bounds in the+--       source code so you can for example give higher than 127 values for extra amplitude but possibly clipped audio.+--+-- > kout  gainslider  kindex+--+-- csound doc: <https://csound.com/docs/manual/gainslider.html>+gainslider ::  Sig -> Sig+gainslider b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "gainslider" [(Kr,[Kr])] [a1]++-- | ++--+-- > ky  lincos  kx, ky0, ky1 [, kx0, kx1 ]+-- > iy  lincos  ix, iy0, iy1 [, ix0, ix1 ]+--+-- csound doc: <https://csound.com/docs/manual/lincos.html>+lincos ::  Sig -> Sig -> Sig -> D+lincos b1 b2 b3 =+  D $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "lincos" [(Kr,[Kr,Kr,Kr,Kr,Kr]),(Ir,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Trace a straight line between specified points.+--+-- > ares  line  ia, idur, ib+-- > kres  line  ia, idur, ib+--+-- csound doc: <https://csound.com/docs/manual/line.html>+line ::  D -> D -> D -> Sig+line b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "line" [(Ar,[Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Linear to linear interpolation+--+-- Maps a linear range of values to another linear range of values.+--+-- > ky  linlin  kx, ky0, ky1 [, kx0, kx1 ]+-- > iy  linlin  ix, iy0, iy1 [, ix0, ix1 ]+-- > kys[]  linlin  kxs[], ky0, ky1 [, kx0, kx1 ]+-- > iys[]  linlin  ixs[], ky0, ky1, [ kx0, kx1 ]+-- > kC[]  linlin  kx, kA[], kB[] [, kx0, kx1 ]+--+-- csound doc: <https://csound.com/docs/manual/linlin.html>+linlin ::  Sig -> Sig -> Sig -> Sig+linlin b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "linlin" [(Kr,[Kr,Kr,Kr,Kr,Kr])+                               ,(Ir,[Ir,Ir,Ir,Ir,Ir])+                               ,(Kr,[Kr,Kr,Kr,Kr,Kr])+                               ,(Ir,[Ir,Kr,Kr,Kr,Kr])+                               ,(Kr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Trace a series of line segments between specified points.+--+-- > ares  linseg  ia, idur1, ib [, idur2] [, ic] [...]+-- > kres  linseg  ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/linseg.html>+linseg ::  [D] -> Sig+linseg b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "linseg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- Trace a series of line segments between specified absolute points.+--+-- > ares  linsegb  ia, itim1, ib [, itim2] [, ic] [...]+-- > kres  linsegb  ia, itim1, ib [, itim2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/linsegb.html>+linsegb ::  [D] -> Sig+linsegb b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "linsegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1])++-- | +-- Trace a series of line segments between specified points including a release segment.+--+-- > ares  linsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+-- > kres  linsegr  ia, idur1, ib [, idur2] [, ic] [...], irel, iz+--+-- csound doc: <https://csound.com/docs/manual/linsegr.html>+linsegr ::  [D] -> D -> D -> Sig+linsegr b1 b2 b3 =+  Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = setRate Kr $ opcs "linsegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, last a1, a2, a3])++-- | +-- This opcode implements a formula for generating a normalised logarithmic curve in range 0 - 1. It is based on the Max / MSP work of Eric Singer (c) 1994.+--+-- Generates a logarithmic curve in range 0 to 1 of arbitrary steepness.+--       Steepness index equal to or lower than 1.0 will result in Not-a-Number+--       errors and cause unstable behavior.+--+-- > kout  logcurve  kindex, ksteepness+--+-- csound doc: <https://csound.com/docs/manual/logcurve.html>+logcurve ::  Sig -> Sig -> Sig+logcurve b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "logcurve" [(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Generate control signal consisting of linear segments delimited by two or more specified points.+--+-- Generate control signal consisting of linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.+--+-- > ksig  loopseg  kfreq, ktrig, iphase, kvalue0, ktime0 [, kvalue1] [, ktime1] \+-- >     [, kvalue2] [, ktime2][...]+--+-- csound doc: <https://csound.com/docs/manual/loopseg.html>+loopseg ::  Sig -> Sig -> D -> [Sig] -> Sig+loopseg b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4+  where+    f a1 a2 a3 a4 = opcs "loopseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)++-- | +-- Control signals based on linear segments.+--+-- Generate control signal consisiting of linear segments delimited+--     by two or more specified points. The entire envelope can be looped+--     at time-variant rate. Each segment coordinate can also be varied+--     at k-rate.+--+-- > ksig  loopsegp   kphase, kvalue0, kdur0, kvalue1 \+-- >           [, kdur1, ... , kdurN-1, kvalueN]+--+-- csound doc: <https://csound.com/docs/manual/loopsegp.html>+loopsegp ::  Sig -> [Sig] -> Sig+loopsegp b1 b2 =+  Sig $ f <$> unSig b1 <*> mapM unSig b2+  where+    f a1 a2 = opcs "loopsegp" [(Kr,(repeat Kr))] ([a1] ++ a2)++-- | +-- Generate control signal consisting of exponential or linear segments delimited by two or more specified points.+--+-- Generate control signal consisting of controllable exponential segments or linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.+--+-- > ksig  looptseg  kfreq, ktrig, iphase, kvalue0, ktype0, ktime0, [, kvalue1] [,ktype1] [, ktime1] \+-- >           [, kvalue2] [,ktype2] [, ktime2] [...] [, kvalueN] [,ktypeN] [, ktimeN]+--+-- csound doc: <https://csound.com/docs/manual/looptseg.html>+looptseg ::  Sig -> Sig -> [Sig] -> Sig+looptseg b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> mapM unSig b3+  where+    f a1 a2 a3 = opcs "looptseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)++-- | +-- Generate control signal consisting of exponential segments delimited by two or more specified points.+--+-- Generate control signal consisting of exponential segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.+--+-- > ksig  loopxseg  kfreq, ktrig, iphase, kvalue0, ktime0  [, kvalue1] [, ktime1] \+-- >           [, kvalue2] [, ktime2] [...]+--+-- csound doc: <https://csound.com/docs/manual/loopxseg.html>+loopxseg ::  Sig -> Sig -> D -> [Sig] -> Sig+loopxseg b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4+  where+    f a1 a2 a3 a4 = opcs "loopxseg" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)++-- | +-- Generate control signal consisting of held segments.+--+-- Generate control signal consisting of held segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate.+--+-- > ksig  lpshold  kfreq, ktrig, iphase, kvalue0, ktime0  [, kvalue1] [, ktime1] [, kvalue2] [, ktime2] [...]+--+-- csound doc: <https://csound.com/docs/manual/lpshold.html>+lpshold ::  Sig -> Sig -> D -> [Sig] -> Sig+lpshold b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> mapM unSig b4+  where+    f a1 a2 a3 a4 = opcs "lpshold" [(Kr,[Kr,Kr,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)++-- | +-- Control signals based on held segments.+--+-- Generate control signal consisiting of held segments delimited+--     by two or more specified points. The entire envelope can be looped+--     at time-variant rate. Each segment coordinate can also be varied+--     at k-rate.+--+-- > ksig  lpsholdp   kphase, kvalue0, ktime0  [, kvalue1] [, ktime1] \+-- >           [, kvalue2] [, ktime2] [...]+--+-- csound doc: <https://csound.com/docs/manual/lpsholdp.html>+lpsholdp ::  Sig -> Sig -> [Sig] -> Sig+lpsholdp b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> mapM unSig b3+  where+    f a1 a2 a3 = opcs "lpsholdp" [(Kr,(repeat Kr))] ([a1,a2] ++ a3)++-- | +-- Arbitrary signal scaling.+--+-- Scales incoming value to user-definable range. Similar to scale object found in popular dataflow languages.+--+-- > kscl  scale  kinput, kmax, kmin[, kimax, kimin]+--+-- csound doc: <https://csound.com/docs/manual/scale.html>+scale ::  Sig -> Sig -> Sig -> Sig+scale b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "scale" [(Kr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3]++-- | ++--+-- > kscl  scale2  kinput, kmin, kmax[, kimin, kimax][ihtime]+--+-- csound doc: <https://csound.com/docs/manual/scale2.html>+scale2 ::  Sig -> Sig -> Sig -> Sig+scale2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "scale2" [(Kr,[Kr,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Constructs a user-definable envelope.+--+-- > ares  transeg  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...+-- > kres  transeg  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...+--+-- csound doc: <https://csound.com/docs/manual/transeg.html>+transeg ::  [D] -> Sig+transeg b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "transeg" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1])++-- | +-- Constructs a user-definable envelope in absolute time.+--+-- > ares  transegb  ia, itim, itype, ib [, itim2] [, itype] [, ic] ...+-- > kres  transegb  ia, itim, itype, ib [, itim2] [, itype] [, ic] ...+--+-- csound doc: <https://csound.com/docs/manual/transegb.html>+transegb ::  [D] -> Sig+transegb b1 =+  Sig $ f <$> mapM unD b1+  where+    f a1 = setRate Kr $ opcs "transegb" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1])++-- | +-- Constructs a user-definable envelope with extended release segment.+--+-- Constructs a user-definable envelope. It is the same+--       as transeg,+--       with an extended release segment.+--+-- > ares  transegr  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...+-- > kres  transegr  ia, idur, itype, ib [, idur2] [, itype] [, ic] ...+--+-- csound doc: <https://csound.com/docs/manual/transegr.html>+transegr ::  [D] -> D -> D -> D -> Sig+transegr b1 b2 b3 b4 =+  Sig $ f <$> mapM unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = setRate Kr $ opcs "transegr" [(Kr, repeat Ir), (Ar, repeat Ir)] (a1 ++ [1, 0, last a1, a2, a3, a4])++-- | ++--+-- > ares  trigexpseg  kTrig, ia, idur1, ib [, idur2] [, ic] [...]+-- > kres  trigexpseg  kTrig, ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/trigexpseg.html>+trigexpseg ::  Sig -> D -> D -> D -> Sig+trigexpseg b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "trigexpseg" [(Ar,[Kr] ++ (repeat Ir)),(Kr,[Kr] ++ (repeat Ir))] [a1+                                                                                          ,a2+                                                                                          ,a3+                                                                                          ,a4]++-- | ++--+-- > ares  triglinseg  kTrig, ia, idur1, ib [, idur2] [, ic] [...]+-- > kres  triglinseg  kTrig, ia, idur1, ib [, idur2] [, ic] [...]+--+-- csound doc: <https://csound.com/docs/manual/triglinseg.html>+triglinseg ::  Sig -> D -> D -> D -> Sig+triglinseg b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "triglinseg" [(Ar,[Kr] ++ (repeat Ir)),(Kr,[Kr] ++ (repeat Ir))] [a1+                                                                                          ,a2+                                                                                          ,a3+                                                                                          ,a4]++-- | +-- 2D linear interpolation+--+-- 2D linear interpolation between 4 points at (0,0), (1,0), (0,1),+-- 	  (1,1)+--+-- > kout  xyscale  kx, ky, k00, k10, k01, k11+--+-- csound doc: <https://csound.com/docs/manual/xyscale.html>+xyscale ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+xyscale b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "xyscale" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]++-- Envelope Generators.++-- | +-- Calculates the classical ADSR envelope using linear segments.+--+-- > ares  adsr  iatt, idec, islev, irel [, idel]+-- > kres  adsr  iatt, idec, islev, irel [, idel]+--+-- csound doc: <https://csound.com/docs/manual/adsr.html>+adsr ::  D -> D -> D -> D -> Sig+adsr b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "adsr" [(Ar,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Applies an envelope consisting of 3 segments.+--+-- envlpx -- apply an envelope consisting of 3 segments:+--+-- > ares  envlpx  xamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod]+-- > kres  envlpx  kamp, irise, idur, idec, ifn, iatss, iatdec [, ixmod]+--+-- csound doc: <https://csound.com/docs/manual/envlpx.html>+envlpx ::  Sig -> D -> D -> D -> Tab -> D -> D -> Sig+envlpx b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unTab b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "envlpx" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])+                                           ,(Kr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- The envlpx opcode with a final release segment.+--+-- envlpxr is the same as envlpx except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.+--+-- > ares  envlpxr  xamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind]+-- > kres  envlpxr  kamp, irise, idec, ifn, iatss, iatdec [, ixmod] [,irind]+--+-- csound doc: <https://csound.com/docs/manual/envlpxr.html>+envlpxr ::  Sig -> D -> D -> Tab -> D -> D -> Sig+envlpxr b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unTab b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "envlpxr" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])+                                         ,(Kr,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- > ares  gtadsr  asig, katt, kdec, ksus,+-- >         krel, kgate+-- > xres  gtadsr  kamp, katt, kdec, ksus,+-- >         krel, kgate+--+-- csound doc: <https://csound.com/docs/manual/gtadsr.html>+gtadsr ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+gtadsr b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "gtadsr" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr]),(Xr,[Kr,Kr,Kr,Kr,Kr,Kr])] [a1+                                                                                            ,a2+                                                                                            ,a3+                                                                                            ,a4+                                                                                            ,a5+                                                                                            ,a6]++-- | +-- Applies a straight line rise and decay pattern to an input amp signal.+--+-- linen -- apply a straight line rise and decay pattern to an input amp signal.+--+-- > ares  linen  xamp, irise, idur, idec+-- > kres  linen  kamp, irise, idur, idec+--+-- csound doc: <https://csound.com/docs/manual/linen.html>+linen ::  Sig -> D -> D -> D -> Sig+linen b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "linen" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- The linen opcode extended with a final release segment.+--+-- linenr -- same as linen except that the final segment is entered only on sensing a MIDI note release. The note is then extended by the decay time.+--+-- > ares  linenr  xamp, irise, idec, iatdec+-- > kres  linenr  kamp, irise, idec, iatdec+--+-- csound doc: <https://csound.com/docs/manual/linenr.html>+linenr ::  Sig -> D -> D -> D -> Sig+linenr b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "linenr" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Calculates the classical ADSR envelope using the linsegr mechanism.+--+-- > ares  madsr  iatt, idec, islev, irel [, idel] [, ireltim]+-- > kres  madsr  iatt, idec, islev, irel [, idel] [, ireltim]+--+-- csound doc: <https://csound.com/docs/manual/madsr.html>+madsr ::  D -> D -> D -> D -> Sig+madsr b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "madsr" [(Ar,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Calculates the classical ADSR envelope using the expsegr mechanism.+--+-- > ares  mxadsr  iatt, idec, islev, irel [, idel] [, ireltim]+-- > kres  mxadsr  iatt, idec, islev, irel [, idel] [, ireltim]+--+-- csound doc: <https://csound.com/docs/manual/mxadsr.html>+mxadsr ::  D -> D -> D -> D -> Sig+mxadsr b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "mxadsr" [(Ar,[Ir,Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Calculates the classical ADSR envelope.+--+-- Calculates the classical ADSR envelope+--+-- > ares  xadsr  iatt, idec, islev, irel [, idel]+-- > kres  xadsr  iatt, idec, islev, irel [, idel]+--+-- csound doc: <https://csound.com/docs/manual/xadsr.html>+xadsr ::  D -> D -> D -> D -> Sig+xadsr b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "xadsr" [(Ar,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- Models and Emulations.++-- | +-- Semi-physical model of a bamboo sound.+--+-- bamboo is a semi-physical model of a bamboo sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  bamboo  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \+-- >           [, ifreq1] [, ifreq2]+--+-- csound doc: <https://csound.com/docs/manual/bamboo.html>+bamboo ::  Sig -> D -> Sig+bamboo b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "bamboo" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Creates a tone similar to a struck metal bar.+--+-- Audio output is a tone similar to a struck metal bar, using a+--     physical model developed from solving the partial differential+--     equation.  There are controls over the boundary conditions as+--     well as the bar characteristics.+--+-- > ares  barmodel  kbcL, kbcR, iK, ib, kscan, iT30, ipos, ivel, iwid+--+-- csound doc: <https://csound.com/docs/manual/barmodel.html>+barmodel ::  Sig -> Sig -> D -> D -> Sig -> D -> D -> D -> D -> Sig+barmodel b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "barmodel" [(Ar,[Kr,Kr,Ir,Ir,Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7+                                                                                       ,a8+                                                                                       ,a9]++-- | +-- Semi-physical model of a cabasa sound.+--+-- cabasa is a semi-physical model of a cabasa sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  cabasa  iamp, idettack [, inum] [, idamp] [, imaxshake]+--+-- csound doc: <https://csound.com/docs/manual/cabasa.html>+cabasa ::  D -> D -> Sig+cabasa b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "cabasa" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Simulates Chua's oscillator, an LRC oscillator with an active resistor, proved capable of bifurcation and chaotic attractors, with k-rate control of circuit elements.+--+-- > aI3, aV2, aV1  chuap  kL, kR0, kC2, kG, kGa, kGb, kE, kC1, iI3, iV2, iV1, ktime_step+--+-- csound doc: <https://csound.com/docs/manual/chuap.html>+chuap ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig -> (Sig+                                                                                        ,Sig+                                                                                        ,Sig)+chuap b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unSig b12+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = mopcs "chuap" ([Ar,Ar,Ar]+                                                             ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Kr]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12]++-- | +-- Semi-physical model of a crunch sound.+--+-- crunch is a semi-physical model of a crunch sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  crunch  iamp, idettack [, inum] [, idamp] [, imaxshake]+--+-- csound doc: <https://csound.com/docs/manual/crunch.html>+crunch ::  D -> D -> Sig+crunch b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "crunch" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Semi-physical model of a water drop.+--+-- dripwater is a semi-physical model of a water drop. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  dripwater  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \+-- >           [, ifreq1] [, ifreq2]+--+-- csound doc: <https://csound.com/docs/manual/dripwater.html>+dripwater ::  Sig -> D -> Sig+dripwater b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "dripwater" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Dynamic stochastic approach to waveform synthesis conceived by Iannis Xenakis.+--+-- Implementation of the Génération Dynamique Stochastique+--       (GENDYN), a dynamic stochastic approach to waveform synthesis conceived+--       by Iannis Xenakis.+--+-- > ares  gendy  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                kampscl, kdurscl [, initcps] [, knum]+-- > kres  gendy  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                kampscl, kdurscl [, initcps] [, knum]+--+-- csound doc: <https://csound.com/docs/manual/gendy.html>+gendy ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+gendy b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "gendy" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])+                                                ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9]++-- | +-- Dynamic stochastic approach to waveform synthesis using cubic interpolation.+--+-- Implementation with cubic interpolation of the+--       Génération Dynamique Stochastique (GENDYN),+--       a dynamic stochastic approach to waveform synthesis conceived by+--       Iannis Xenakis.+--+-- > ares  gendyc  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                 kampscl, kdurscl [, initcps] [, knum]+-- > kres  gendyc  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                 kampscl, kdurscl [, initcps] [, knum]+--+-- csound doc: <https://csound.com/docs/manual/gendyc.html>+gendyc ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+gendyc b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "gendyc" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])+                                                 ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9]++-- | +-- Variation of the dynamic stochastic approach to waveform+--       synthesis conceived by Iannis Xenakis.+--+-- gendyx (gendy eXtended) is an implementation+--       of the Génération Dynamique Stochastique+--       (GENDYN), a dynamic stochastic approach to waveform synthesis+--       conceived by Iannis Xenakis, using curves instead of segments.+--+-- > ares  gendyx  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                 kampscl, kdurscl, kcurveup, kcurvedown [, initcps] [, knum]+-- > kres  gendyx  kamp, kampdist, kdurdist, kadpar, kddpar, kminfreq, kmaxfreq, \+-- >                 kampscl, kdurscl, kcurveup, kcurvedown [, initcps] [, knum]+--+-- csound doc: <https://csound.com/docs/manual/gendyx.html>+gendyx ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+gendyx b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "gendyx" [(Ar+                                                          ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])+                                                         ,(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- | +-- Audio output is a tone related to the striking of a cow bell or similar.+--+-- Audio output is a tone related to the striking of a cow bell or similar. The method is a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  gogobel  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivfn+--+-- csound doc: <https://csound.com/docs/manual/gogobel.html>+gogobel ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> Sig+gogobel b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "gogobel" [(Ar,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir])] [a1+                                                                                ,a2+                                                                                ,a3+                                                                                ,a4+                                                                                ,a5+                                                                                ,a6+                                                                                ,a7+                                                                                ,a8]++-- | +-- Semi-physical model of a guiro sound.+--+-- guiro is a semi-physical model of a guiro sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  guiro  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] [, ifreq1]+--+-- csound doc: <https://csound.com/docs/manual/guiro.html>+guiro ::  Sig -> D -> Sig+guiro b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "guiro" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Implements the Lorenz system of equations.+--+-- Implements the Lorenz system of equations.  The Lorenz system is a chaotic-dynamic system which was originally used to simulate the motion of a particle in convection currents and simplified weather systems. Small differences in initial conditions rapidly lead to diverging values. This is sometimes expressed as the butterfly effect. If a butterfly flaps its wings in Australia, it will have an effect on the weather in Alaska. This system is one of the milestones in the development of chaos theory. It is useful as a chaotic audio source or as a low frequency modulation source.+--+-- > ax, ay, az  lorenz  ksv, krv, kbv, kh, ix, iy, iz, iskip [, iskipinit]+--+-- csound doc: <https://csound.com/docs/manual/lorenz.html>+lorenz ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> (Sig,Sig,Sig)+lorenz b1 b2 b3 b4 b5 b6 b7 b8 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "lorenz" ([Ar,Ar,Ar],[Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                         ,a2+                                                                                         ,a3+                                                                                         ,a4+                                                                                         ,a5+                                                                                         ,a6+                                                                                         ,a7+                                                                                         ,a8]++-- | +-- Mandelbrot set+--+-- Returns the number of iterations corresponding to a given point of complex plane by applying the Mandelbrot set formula.+--+-- > kiter, koutrig  mandel   ktrig, kx, ky, kmaxIter+--+-- csound doc: <https://csound.com/docs/manual/mandel.html>+mandel ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)+mandel b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "mandel" ([Kr,Kr],[Kr,Kr,Kr,Kr]) [a1,a2,a3,a4]++-- | +-- An emulation of a mandolin.+--+-- > ares  mandol  kamp, kfreq, kpluck, kdetune, kgain, ksize \+-- >         [, ifn] [, iminfreq]+--+-- csound doc: <https://csound.com/docs/manual/mandol.html>+mandol ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+mandol b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "mandol" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Physical model related to the striking of a wooden block.+--+-- Audio output is a tone related to the striking of a wooden block as found in a marimba. The method is a physical model developed from Perry Cook but re-coded for Csound.+--+-- > ares  marimba  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec \+-- >           [, idoubles] [, itriples]+--+-- csound doc: <https://csound.com/docs/manual/marimba.html>+marimba ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> D -> Sig+marimba b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "marimba" [(Ar,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                            ,a2+                                                                                            ,a3+                                                                                            ,a4+                                                                                            ,a5+                                                                                            ,a6+                                                                                            ,a7+                                                                                            ,a8+                                                                                            ,a9]++-- | +-- An emulation of a mini-Moog synthesizer.+--+-- > ares  moog  kamp, kfreq, kfiltq, kfiltrate, kvibf, kvamp, iafn, iwfn, ivfn+--+-- csound doc: <https://csound.com/docs/manual/moog.html>+moog ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Tab -> Sig+moog b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8 <*> unTab b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "moog" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1+                                                                                   ,a2+                                                                                   ,a3+                                                                                   ,a4+                                                                                   ,a5+                                                                                   ,a6+                                                                                   ,a7+                                                                                   ,a8+                                                                                   ,a9]++-- | +-- Simulates a planet orbiting in a binary star system.+--+-- planet simulates a planet orbiting in a binary star system. The outputs are the x, y and z coordinates of the orbiting planet. It is possible for the planet to achieve escape velocity by a close encounter with a star. This makes this system somewhat unstable.+--+-- > ax, ay, az  planet  kmass1, kmass2, ksep, ix, iy, iz, ivx, ivy, ivz, idelta \+-- >           [, ifriction] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/planet.html>+planet ::  Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig)+planet b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9 <*> unD b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "planet" ([Ar,Ar,Ar]+                                                      ,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]++-- | +-- Creates a tone similar to a piano string prepared in a Cageian fashion.+--+-- Audio output is a tone similar to a piano string, prepared with+--     a number of rubbers and rattles. The method uses a+--     physical model developed from solving the partial differential+--     equation.+--+-- > ares  prepiano  ifreq, iNS, iD, iK, \+-- >         iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \+-- >         isspread[, irattles, irubbers]+-- > al,ar  prepiano  ifreq, iNS, iD, iK, \+-- >         iT30,iB, kbcl, kbcr, imass, ihvfreq, iinit, ipos, ivel, isfreq, \+-- >         isspread[, irattles, irubbers]+--+-- csound doc: <https://csound.com/docs/manual/prepiano.html>+prepiano ::  D -> D -> D -> D -> D -> D -> Sig -> Sig -> D -> D -> D -> D -> D -> D -> D -> (Sig+                                                                                            ,Sig)+prepiano b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7 <*> unSig b8 <*> unD b9 <*> unD b10 <*> unD b11 <*> unD b12 <*> unD b13 <*> unD b14 <*> unD b15+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 = mopcs "prepiano" ([Ar,Ar]+                                                                            ,[Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                                                                   ,a2+                                                                                                                                   ,a3+                                                                                                                                   ,a4+                                                                                                                                   ,a5+                                                                                                                                   ,a6+                                                                                                                                   ,a7+                                                                                                                                   ,a8+                                                                                                                                   ,a9+                                                                                                                                   ,a10+                                                                                                                                   ,a11+                                                                                                                                   ,a12+                                                                                                                                   ,a13+                                                                                                                                   ,a14+                                                                                                                                   ,a15]++-- | +-- Semi-physical model of a sandpaper sound.+--+-- sandpaper is a semi-physical model of a sandpaper sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  sandpaper  iamp, idettack [, inum] [, idamp] [, imaxshake]+--+-- csound doc: <https://csound.com/docs/manual/sandpaper.html>+sandpaper ::  D -> D -> Sig+sandpaper b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "sandpaper" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Semi-physical model of a sekere sound.+--+-- sekere is a semi-physical model of a sekere sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  sekere  iamp, idettack [, inum] [, idamp] [, imaxshake]+--+-- csound doc: <https://csound.com/docs/manual/sekere.html>+sekere ::  D -> D -> Sig+sekere b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "sekere" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Sounds like the shaking of a maraca or similar gourd instrument.+--+-- Audio output is a tone related to the shaking of a maraca or similar gourd instrument. The method is a physically inspired model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  shaker  kamp, kfreq, kbeans, kdamp, ktimes [, idecay]+--+-- csound doc: <https://csound.com/docs/manual/shaker.html>+shaker ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+shaker b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "shaker" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Semi-physical model of a sleighbell sound.+--+-- sleighbells is a semi-physical model of a sleighbell sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  sleighbells  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \+-- >           [, ifreq1] [, ifreq2]+--+-- csound doc: <https://csound.com/docs/manual/sleighbells.html>+sleighbells ::  Sig -> D -> Sig+sleighbells b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "sleighbells" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Semi-physical model of a stick sound.+--+-- stix is a semi-physical model of a stick sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  stix  iamp, idettack [, inum] [, idamp] [, imaxshake]+--+-- csound doc: <https://csound.com/docs/manual/stix.html>+stix ::  D -> D -> Sig+stix b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "stix" [(Ar,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Semi-physical model of a tambourine sound.+--+-- tambourine is a semi-physical model of a tambourine sound. It is one of the PhISEM percussion opcodes. PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects.+--+-- > ares  tambourine  kamp, idettack [, inum] [, idamp] [, imaxshake] [, ifreq] \+-- >           [, ifreq1] [, ifreq2]+--+-- csound doc: <https://csound.com/docs/manual/tambourine.html>+tambourine ::  Sig -> D -> Sig+tambourine b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "tambourine" [(Ar,[Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Physical model related to the striking of a metal block.+--+-- Audio output is a tone related to the striking of a metal block as found in a vibraphone. The method is a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  vibes  kamp, kfreq, ihrd, ipos, imp, kvibf, kvamp, ivibfn, idec+--+-- csound doc: <https://csound.com/docs/manual/vibes.html>+vibes ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig -> Tab -> D -> Sig+vibes b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "vibes" [(Ar,[Kr,Kr,Ir,Ir,Ir,Kr,Kr,Ir,Ir])] [a1+                                                                                    ,a2+                                                                                    ,a3+                                                                                    ,a4+                                                                                    ,a5+                                                                                    ,a6+                                                                                    ,a7+                                                                                    ,a8+                                                                                    ,a9]++-- | +-- An emulation of a human voice.+--+-- > ares  voice  kamp, kfreq, kphoneme, kform, kvibf, kvamp, ifn, ivfn+--+-- csound doc: <https://csound.com/docs/manual/voice.html>+voice ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig+voice b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unTab b7 <*> unTab b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "voice" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1+                                                                              ,a2+                                                                              ,a3+                                                                              ,a4+                                                                              ,a5+                                                                              ,a6+                                                                              ,a7+                                                                              ,a8]++-- Phasors.++-- | ++--+-- > aexp,aph  ephasor  kfreq, kR+--+-- csound doc: <https://csound.com/docs/manual/ephasor.html>+ephasor ::  Sig -> Sig -> (Sig,Sig)+ephasor b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "ephasor" ([Ar,Ar],[Kr,Kr]) [a1,a2]++-- | +-- Produce a normalized moving phase value.+--+-- > ares  phasor  xcps [, iphs]+-- > kres  phasor  kcps [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/phasor.html>+phasor ::  Sig -> Sig+phasor b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "phasor" [(Ar,[Xr,Ir]),(Kr,[Kr,Ir])] [a1]++-- | +-- Produce an arbitrary number of normalized moving phase values.+--+-- Produce an arbitrary number of normalized moving phase values, accessable by an index.+--+-- > ares  phasorbnk  xcps, kndx, icnt [, iphs]+-- > kres  phasorbnk  kcps, kndx, icnt [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/phasorbnk.html>+phasorbnk ::  Sig -> Sig -> D -> Sig+phasorbnk b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "phasorbnk" [(Ar,[Xr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A resettable linear ramp between two levels+--+-- A resettable linear ramp between two levels. Port of+-- 	  Supercollider's Phasor.+--+-- > aindex  sc_phasor  xtrig, xrate, kstart, kend [, kresetPos] +-- > kindex  sc_phasor  xtrig, xrate, kstart, kend [, kresetPos] +--+-- csound doc: <https://csound.com/docs/manual/sc_phasor.html>+sc_phasor ::  Sig -> Sig -> Sig -> Sig -> Sig+sc_phasor b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "sc_phasor" [(Ar,[Xr,Xr,Kr,Kr,Kr]),(Kr,[Xr,Xr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Produces a normalized moving phase value with sync input and output.+--+-- Produces a moving phase value between zero and one and an extra impulse output ("sync out") whenever its phase value crosses or is reset to zero. The phase can be reset at any time by an impulse on the "sync in" parameter.+--+-- > aphase, asyncout  syncphasor  xcps, asyncin, [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/syncphasor.html>+syncphasor ::  Sig -> Sig -> (Sig,Sig)+syncphasor b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "syncphasor" ([Ar,Ar],[Xr,Ar,Ir]) [a1,a2]++-- | ++--+-- > aindex  trigphasor  xtrig, xrate, kstart, kend [, kresetPos] +-- > kindex  trigphasor  xtrig, xrate, kstart, kend [, kresetPos] +--+-- csound doc: <https://csound.com/docs/manual/trigphasor.html>+trigphasor ::  Sig -> Sig -> Sig -> Sig -> Sig+trigphasor b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "trigphasor" [(Ar,[Xr,Xr,Kr,Kr,Kr]),(Kr,[Xr,Xr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- Random (Noise) Generators.++-- | +-- Beta distribution random number generator (positive values only).+--+-- Beta distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  betarand  krange, kalpha, kbeta+-- > ires  betarand  krange, kalpha, kbeta+-- > kres  betarand  krange, kalpha, kbeta+--+-- csound doc: <https://csound.com/docs/manual/betarand.html>+betarand :: SigOrD a => a -> a -> a -> SE a+betarand b1 b2 b3 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2 <*> (lift . toGE) b3+  where+    f a1 a2 a3 = opcsDep "betarand" [(Ar,[Kr,Kr,Kr]),(Ir,[Kr,Kr,Kr]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Exponential distribution random number generator.+--+-- Exponential distribution random number generator. This is an x-class noise generator.+--+-- > ares  bexprnd  krange+-- > ires  bexprnd  krange+-- > kres  bexprnd  krange+--+-- csound doc: <https://csound.com/docs/manual/bexprnd.html>+bexprnd :: SigOrD a => a -> SE a+bexprnd b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "bexprnd" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Cauchy distribution random number generator.+--+-- Cauchy distribution random number generator. This is an x-class noise generator.+--+-- > ares  cauchy  kalpha+-- > ires  cauchy  kalpha+-- > kres  cauchy  kalpha+--+-- csound doc: <https://csound.com/docs/manual/cauchy.html>+cauchy :: SigOrD a => a -> SE a+cauchy b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "cauchy" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Cauchy distribution random number generator with+--       interpolation.+--+-- Cauchy distribution random number generator with controlled+--       interpolation between values. This is an x-class noise+--       generator.+--+-- > ares  cauchyi  klambda, xamp, xcps+-- > ires  cauchyi  klambda, xamp, xcps+-- > kres  cauchyi  klambda, xamp, xcps+--+-- csound doc: <https://csound.com/docs/manual/cauchyi.html>+cauchyi :: SigOrD a => a -> a -> a -> SE a+cauchyi b1 b2 b3 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2 <*> (lift . toGE) b3+  where+    f a1 a2 a3 = opcsDep "cauchyi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]++-- | +-- Continuous USER-defined-distribution RaNDom generator.+--+-- > aout  cuserrnd  kmin, kmax, ktableNum+-- > iout  cuserrnd  imin, imax, itableNum+-- > kout  cuserrnd  kmin, kmax, ktableNum+--+-- csound doc: <https://csound.com/docs/manual/cuserrnd.html>+cuserrnd :: SigOrD a => a -> a -> a -> SE a+cuserrnd b1 b2 b3 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2 <*> (lift . toGE) b3+  where+    f a1 a2 a3 = opcsDep "cuserrnd" [(Ar,[Kr,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Discrete USER-defined-distribution RaNDom generator.+--+-- > aout  duserrnd  ktableNum+-- > iout  duserrnd  itableNum+-- > kout  duserrnd  ktableNum+--+-- csound doc: <https://csound.com/docs/manual/duserrnd.html>+duserrnd :: SigOrD a => a -> SE a+duserrnd b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "duserrnd" [(Ar,[Kr]),(Ir,[Ir]),(Kr,[Kr])] [a1]++-- | +-- Random impulses.+--+-- Generates random impulses from 0 to 1.+--+-- > ares  dust  kamp, kdensity+-- > kres  dust  kamp, kdensity+--+-- csound doc: <https://csound.com/docs/manual/dust.html>+dust ::  Sig -> Sig -> SE Sig+dust b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "dust" [(Ar,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Random impulses.+--+-- Generates random impulses from -1 to 1.+--+-- > ares  dust2  kamp, kdensity+-- > kres  dust2  kamp, kdensity+--+-- csound doc: <https://csound.com/docs/manual/dust2.html>+dust2 ::  Sig -> Sig -> SE Sig+dust2 b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "dust2" [(Ar,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Exponential distribution random number generator (positive values only).+--+-- Exponential distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  exprand  klambda+-- > ires  exprand  klambda+-- > kres  exprand  klambda+--+-- csound doc: <https://csound.com/docs/manual/exprand.html>+exprand :: SigOrD a => a -> SE a+exprand b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "exprand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Exponential distribution random number generator with+--       interpolation (positive values only).+--+-- Exponential distribution random number generator with controlled+--       interpolation between values (positive values only). This is an+--       x-class noise generator.+--+-- > ares  exprandi  klambda, xamp, xcps+-- > ires  exprandi  klambda, xamp, xcps+-- > kres  exprandi  klambda, xamp, xcps+--+-- csound doc: <https://csound.com/docs/manual/exprandi.html>+exprandi :: SigOrD a => a -> a -> a -> SE a+exprandi b1 b2 b3 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2 <*> (lift . toGE) b3+  where+    f a1 a2 a3 = opcsDep "exprandi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]++-- | +-- A fractal noise generator.+--+-- A fractal noise generator implemented as a white noise filtered+--       by a cascade of 15 first-order filters.+--+-- > ares  fractalnoise  kamp, kbeta+--+-- csound doc: <https://csound.com/docs/manual/fractalnoise.html>+fractalnoise ::  Sig -> Sig -> SE Sig+fractalnoise b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "fractalnoise" [(Ar,[Kr,Kr])] [a1,a2]++-- | +-- Gaussian distribution random number generator.+--+-- Gaussian distribution random number generator. This is an x-class noise generator.+--+-- > ares  gauss  krange+-- > ires  gauss  irange+-- > kres  gauss  krange+-- > ares  gauss  kmean, ksdev+-- > ires  gauss  imean, isdev+-- > kres  gauss  kmean, ksdev+--+-- csound doc: <https://csound.com/docs/manual/gauss.html>+gauss ::  Sig -> SE Sig+gauss b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "gauss" [(Ar,[Kr])+                           ,(Ir,[Ir])+                           ,(Kr,[Kr])+                           ,(Ar,[Kr,Kr])+                           ,(Ir,[Ir,Ir])+                           ,(Kr,[Kr,Kr])] [a1]++-- | +-- Gaussian distribution random number generator with+--       interpolation.+--+-- Gaussian distribution random number generator with controlled+--       interpolation between values. This is an+--       x-class noise generator.+--+-- > ares  gaussi  krange, xamp, xcps+-- > ires  gaussi  krange, xamp, xcps+-- > kres  gaussi  krange, xamp, xcps+--+-- csound doc: <https://csound.com/docs/manual/gaussi.html>+gaussi :: SigOrD a => a -> a -> a -> SE a+gaussi b1 b2 b3 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2 <*> (lift . toGE) b3+  where+    f a1 a2 a3 = opcsDep "gaussi" [(Ar,[Kr,Xr,Xr]),(Ir,[Kr,Xr,Xr]),(Kr,[Kr,Xr,Xr])] [a1,a2,a3]++-- | +-- Random impulses around a certain frequency.+--+-- Generates random impulses around a certain frequency.+--+-- > ares  gausstrig  kamp, kcps, kdev [, imode] [, ifrst1]+-- > kres  gausstrig  kamp, kcps, kdev [, imode] [, ifrst1]+--+-- csound doc: <https://csound.com/docs/manual/gausstrig.html>+gausstrig ::  Sig -> Sig -> Sig -> SE Sig+gausstrig b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "gausstrig" [(Ar,[Kr,Kr,Kr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Reads the global seed value.+--+-- Returns the global seed value used for all x-class+--       noise generators.+--+-- > ians getseed +-- > kans getseed +--+-- csound doc: <https://csound.com/docs/manual/getseed.html>+getseed ::   SE Sig+getseed  =+  fmap ( Sig . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "getseed" [(Ir,[]),(Kr,[])] []++-- | +-- Generates a segmented line whose segments are randomly generated.+--+-- > kout  jitter  kamp, kcpsMin, kcpsMax+--+-- csound doc: <https://csound.com/docs/manual/jitter.html>+jitter ::  Sig -> Sig -> Sig -> SE Sig+jitter b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "jitter" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Generates a segmented line with user-controllable random segments.+--+-- > kout  jitter2  ktotamp, kamp1, kcps1,+-- >         kamp2, kcps2, kamp3, kcps3[ , iopt]+--+-- csound doc: <https://csound.com/docs/manual/jitter2.html>+jitter2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE Sig+jitter2 b1 b2 b3 b4 b5 b6 b7 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6 <*> (lift . unSig) b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcsDep "jitter2" [(Kr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1+                                                                                ,a2+                                                                                ,a3+                                                                                ,a4+                                                                                ,a5+                                                                                ,a6+                                                                                ,a7]++-- | +-- A jitter-spline generator.+--+-- > ares  jspline  xamp, kcpsMin, kcpsMax+-- > kres  jspline  kamp, kcpsMin, kcpsMax+--+-- csound doc: <https://csound.com/docs/manual/jspline.html>+jspline ::  Sig -> Sig -> Sig -> SE Sig+jspline b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "jspline" [(Ar,[Xr,Kr,Kr]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | ++--+-- > knum  lfsr  ilen, iprob [, iseed]+--+-- csound doc: <https://csound.com/docs/manual/lfsr.html>+lfsr ::  D -> D -> SE Sig+lfsr b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "lfsr" [(Kr,[Ir,Ir,Ir])] [a1,a2]++-- | +-- Linear distribution random number generator (positive values only).+--+-- Linear distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  linrand  krange+-- > ires  linrand  krange+-- > kres  linrand  krange+--+-- csound doc: <https://csound.com/docs/manual/linrand.html>+linrand :: SigOrD a => a -> SE a+linrand b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "linrand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- A white noise generator with an IIR lowpass filter.+--+-- > ares  noise  xamp, kbeta+--+-- csound doc: <https://csound.com/docs/manual/noise.html>+noise ::  Sig -> Sig -> SE Sig+noise b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "noise" [(Ar,[Xr,Kr])] [a1,a2]++-- | +-- Cauchy distribution random number generator (positive values only).+--+-- Cauchy distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  pcauchy  kalpha+-- > ires  pcauchy  kalpha+-- > kres  pcauchy  kalpha+--+-- csound doc: <https://csound.com/docs/manual/pcauchy.html>+pcauchy :: SigOrD a => a -> SE a+pcauchy b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "pcauchy" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Generates pink noise.+--+-- Generates pink noise (-3dB/oct response) by the New+--       Shade of Pink algorithm of Stefan Stenzel.+--+-- > ares  pinker +--+-- csound doc: <https://csound.com/docs/manual/pinker.html>+pinker ::   SE Sig+pinker  =+  fmap ( Sig . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "pinker" [(Ar,[])] []++-- | +-- Generates approximate pink noise.+--+-- Generates approximate pink noise (-3dB/oct response) by one of two different methods:+--+-- > ares  pinkish  xin [, imethod] [, inumbands] [, iseed] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/pinkish.html>+pinkish ::  Sig -> SE Sig+pinkish b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "pinkish" [(Ar,[Xr,Ir,Ir,Ir,Ir])] [a1]++-- | +-- Poisson distribution random number generator (positive values only).+--+-- Poisson distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  poisson  klambda+-- > ires  poisson  klambda+-- > kres  poisson  klambda+--+-- csound doc: <https://csound.com/docs/manual/poisson.html>+poisson :: SigOrD a => a -> SE a+poisson b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "poisson" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Generates a controlled random number series.+--+-- Output is a controlled random number series between -amp and +amp+--+-- > ares  rand  xamp [, iseed] [, isel] [, ioffset]+-- > kres  rand  xamp [, iseed] [, isel] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/rand.html>+rand ::  Sig -> SE Sig+rand b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "rand" [(Ar,[Xr,Ir,Ir,Ir]),(Kr,[Xr,Ir,Ir,Ir])] [a1]++-- | +-- Generates random numbers and holds them for a period of time.+--+-- > ares  randh  xamp, xcps [, iseed] [, isize] [, ioffset]+-- > kres  randh  kamp, kcps [, iseed] [, isize] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/randh.html>+randh ::  Sig -> Sig -> SE Sig+randh b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "randh" [(Ar,[Xr,Xr,Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]++-- | +-- Generates a controlled random number series with interpolation between each new number.+--+-- > ares  randi  xamp, xcps [, iseed] [, isize] [, ioffset]+-- > kres  randi  kamp, kcps [, iseed] [, isize] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/randi.html>+randi ::  Sig -> Sig -> SE Sig+randi b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep "randi" [(Ar,[Xr,Xr,Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]++-- | +-- Generates a controlled pseudo-random number series between min and max values.+--+-- Generates is a controlled pseudo-random number series between min and max values.+--+-- > ares  random  kmin, kmax+-- > ires  random  imin, imax+-- > kres  random  kmin, kmax+--+-- csound doc: <https://csound.com/docs/manual/random.html>+random :: SigOrD a => a -> a -> SE a+random b1 b2 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2+  where+    f a1 a2 = opcsDep "random" [(Ar,[Kr,Kr]),(Ir,[Ir,Ir]),(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Generates random numbers with a user-defined limit and holds them for a period of time.+--+-- > ares  randomh  kmin, kmax, xcps [,imode] [,ifirstval]+-- > kres  randomh  kmin, kmax, kcps [,imode] [,ifirstval]+--+-- csound doc: <https://csound.com/docs/manual/randomh.html>+randomh ::  Sig -> Sig -> Sig -> SE Sig+randomh b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "randomh" [(Ar,[Kr,Kr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Generates a user-controlled random number series with interpolation between each new number.+--+-- > ares  randomi  kmin, kmax, xcps [,imode] [,ifirstval]+-- > kres  randomi  kmin, kmax, kcps [,imode] [,ifirstval]+--+-- csound doc: <https://csound.com/docs/manual/randomi.html>+randomi ::  Sig -> Sig -> Sig -> SE Sig+randomi b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "randomi" [(Ar,[Kr,Kr,Xr,Ir,Ir]),(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- 31-bit bipolar random opcodes with controllable distribution.+--+-- 31-bit bipolar random opcodes with controllable distribution. These units are portable, i.e. using the same seed value will generate the same random sequence on all systems. The distribution of generated random numbers can be varied at k-rate.+--+-- > ax  rnd31  kscl, krpow [, iseed]+-- > ix  rnd31  iscl, irpow [, iseed]+-- > kx  rnd31  kscl, krpow [, iseed]+--+-- csound doc: <https://csound.com/docs/manual/rnd31.html>+rnd31 :: SigOrD a => a -> a -> SE a+rnd31 b1 b2 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2+  where+    f a1 a2 = opcsDep "rnd31" [(Ar,[Kr,Kr,Ir]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | ++--+-- >  rndseed  ival+--+-- csound doc: <https://csound.com/docs/manual/rndseed.html>+rndseed ::  D -> SE ()+rndseed b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "rndseed" [(Xr,[Ir])] [a1]++-- | +-- Generate random spline curves.+--+-- > ares  rspline  xrangeMin, xrangeMax, kcpsMin, kcpsMax+-- > kres  rspline  krangeMin, krangeMax, kcpsMin, kcpsMax+--+-- csound doc: <https://csound.com/docs/manual/rspline.html>+rspline ::  Sig -> Sig -> Sig -> Sig -> SE Sig+rspline b1 b2 b3 b4 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep "rspline" [(Ar,[Xr,Xr,Kr,Kr]),(Kr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Sets the global seed value.+--+-- Sets the global seed value for all x-class noise generators, as well as other opcodes that use a random call, such as grain.+--+-- >  seed  ival+--+-- csound doc: <https://csound.com/docs/manual/seed.html>+seed ::  D -> SE ()+seed b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "seed" [(Xr,[Ir])] [a1]++-- | +-- Generates a controlled pseudo-random number series between min and max values according to a trigger.+--+-- Generates a controlled pseudo-random number series between min and max values at k-rate whenever the trigger parameter is different to 0.+--+-- > kout  trandom  ktrig, kmin, kmax+--+-- csound doc: <https://csound.com/docs/manual/trandom.html>+trandom ::  Sig -> Sig -> Sig -> SE Sig+trandom b1 b2 b3 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep "trandom" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Triangular distribution random number generator+--+-- Triangular distribution random number generator. This is an x-class noise generator.+--+-- > ares  trirand  krange+-- > ires  trirand  krange+-- > kres  trirand  krange+--+-- csound doc: <https://csound.com/docs/manual/trirand.html>+trirand :: SigOrD a => a -> SE a+trirand b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "trirand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- Uniform distribution random number generator (positive values only).+--+-- Uniform distribution random number generator (positive values only). This is an x-class noise generator.+--+-- > ares  unirand  krange+-- > ires  unirand  krange+-- > kres  unirand  krange+--+-- csound doc: <https://csound.com/docs/manual/unirand.html>+unirand :: SigOrD a => a -> SE a+unirand b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = opcsDep "unirand" [(Ar,[Kr]),(Ir,[Kr]),(Kr,[Kr])] [a1]++-- | +-- truly random opcodes with controllable range.+--+-- Truly random opcodes with controllable range. These+--       units are for Unix-like systems only and use /dev/urandom to construct+--       Csound random values+--+-- > ax  urandom  [imin, imax]+-- > ix  urandom  [imin, imax]+-- > kx  urandom  [imin, imax]+--+-- csound doc: <https://csound.com/docs/manual/urandom.html>+urandom :: SigOrD a =>  SE a+urandom  =+  fmap ( fromGE . return) $ SE $ join $ return $ f +  where+    f  = opcsDep "urandom" [(Ar,[Ir,Ir]),(Ir,[Ir,Ir]),(Kr,[Ir,Ir])] []++-- | +-- A discrete user-defined-distribution random generator that can be used as a function.+--+-- > aout =  urd (ktableNum)+-- > iout =  urd (itableNum)+-- > kout =  urd (ktableNum)+--+-- csound doc: <https://csound.com/docs/manual/urd.html>+urd :: SigOrD a => a -> SE a+urd b1 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1+  where+    f a1 = oprByDep "urd" [(Ar,[Kr]), (Kr,[Kr]), (Ir,[Ir])] [a1]++-- | +-- Weibull distribution random number generator (positive values only).+--+-- Weibull distribution random number generator (positive values only). This is an x-class noise generator+--+-- > ares  weibull  ksigma, ktau+-- > ires  weibull  ksigma, ktau+-- > kres  weibull  ksigma, ktau+--+-- csound doc: <https://csound.com/docs/manual/weibull.html>+weibull :: SigOrD a => a -> a -> SE a+weibull b1 b2 =+  fmap ( fromGE . return) $ SE $ join $ f <$> (lift . toGE) b1 <*> (lift . toGE) b2+  where+    f a1 a2 = opcsDep "weibull" [(Ar,[Kr,Kr]),(Ir,[Kr,Kr]),(Kr,[Kr,Kr])] [a1,a2]++-- Sample Playback.++-- | +-- Generates breakbeat-style cut-ups of a mono audio stream.+--+-- The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations.  There are two versions, for mono (bbcutm) or stereo (bbcuts) sources.  Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio.+--+-- > a1  bbcutm  asource, ibps, isubdiv, ibarlength, iphrasebars, inumrepeats \+-- >           [, istutterspeed] [, istutterchance] [, ienvchoice ]+--+-- csound doc: <https://csound.com/docs/manual/bbcutm.html>+bbcutm ::  Sig -> D -> D -> D -> D -> D -> Sig+bbcutm b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "bbcutm" [(Ar,[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Generates breakbeat-style cut-ups of a stereo audio stream.+--+-- The BreakBeat Cutter automatically generates cut-ups of a source audio stream in the style of drum and bass/jungle breakbeat manipulations.  There are two versions, for mono (bbcutm) or stereo (bbcuts) sources.  Whilst originally based on breakbeat cutting, the opcode can be applied to any type of source audio.+--+-- > a1,a2  bbcuts  asource1, asource2, ibps, isubdiv, ibarlength, iphrasebars, \+-- >           inumrepeats [, istutterspeed] [, istutterchance] [, ienvchoice]+--+-- csound doc: <https://csound.com/docs/manual/bbcuts.html>+bbcuts ::  Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig)+bbcuts b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "bbcuts" ([Ar,Ar],[Ar,Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                      ,a2+                                                                                      ,a3+                                                                                      ,a4+                                                                                      ,a5+                                                                                      ,a6+                                                                                      ,a7]++-- | +-- Function-table-based crossfading looper.+--+-- This opcode reads audio from a function table and plays it back in a loop with user-defined+--    start time, duration and crossfade time. It also allows the pitch of the loop to be controlled,+--    including reversed playback. It accepts non-power-of-two tables, such as deferred-allocation+--    GEN01 tables, with one or two channels.+--+-- > asig1[, asig2]  flooper  kamp, kpitch, istart, idur, ifad, ifn+--+-- csound doc: <https://csound.com/docs/manual/flooper.html>+flooper :: forall a . Tuple a => Sig -> Sig -> D -> D -> D -> Tab -> a+flooper b1 b2 b3 b4 b5 b6 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = mopcs "flooper" ([Ar,Ar],[Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6]++-- | +-- Function-table-based crossfading looper.+--+-- This opcode implements a crossfading looper with variable loop parameters and three+--   looping modes, optionally using a table for its crossfade shape. It accepts +--   non-power-of-two tables for its source sounds, such as deferred-allocation+--    GEN01 tables, with one or two channels.+--+-- > asig1[,asig2]  flooper2  kamp, kpitch, kloopstart, kloopend, kcrossfade, ifn \+-- >           [, istart, imode, ifenv, iskip]+--+-- csound doc: <https://csound.com/docs/manual/flooper2.html>+flooper2 :: forall a . Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> a+flooper2 b1 b2 b3 b4 b5 b6 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = mopcs "flooper2" ([Ar,Ar],[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5+                                                                                     ,a6]++-- | +-- Collects all audio from all Fluidsynth engines in a performance+--+-- > aleft, aright  fluidAllOut +--+-- csound doc: <https://csound.com/docs/manual/fluidAllOut.html>+fluidAllOut ::   (Sig,Sig)+fluidAllOut  =+  pureTuple $ return $ f +  where+    f  = mopcs "fluidAllOut" ([Ar,Ar],[]) []++-- | +-- Sends a MIDI controller data message to fluid.+--+-- Sends a MIDI controller data (MIDI controller number and value to use)+--     message to a fluid engine by number on the user specified MIDI channel number.+--+-- >  fluidCCi  iEngineNumber, iChannelNumber, iControllerNumber, iValue+--+-- csound doc: <https://csound.com/docs/manual/fluidCCi.html>+fluidCCi ::  D -> D -> D -> D -> SE ()+fluidCCi b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fluidCCi" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Sends a MIDI controller data message to fluid.+--+-- Sends a MIDI controller data (MIDI controller number and value to use)+--     message to a fluid engine by number on the user specified MIDI channel number.+--+-- >  fluidCCk  iEngineNumber, iChannelNumber, iControllerNumber, kValue+--+-- csound doc: <https://csound.com/docs/manual/fluidCCk.html>+fluidCCk ::  D -> D -> D -> Sig -> SE ()+fluidCCk b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fluidCCk" [(Xr,[Ir,Ir,Ir,Kr])] [a1,a2,a3,a4]++-- | +-- Sends MIDI note on, note off, and other messages to a SoundFont preset.+--+-- The fluid opcodes provide a simple+--     Csound opcode wrapper around Peter Hanappe's Fluidsynth SoundFont2+--     synthesizer. This implementation accepts any MIDI note on, note+--     off, controller, pitch bend, or program change message at+--     k-rate. Maximum polyphony is 4096 simultaneously sounding+--     voices. Any number of SoundFonts may be loaded and played+--     simultaneously.+--+-- >  fluidControl  ienginenum, kstatus, kchannel, \+-- >         kdata1, kdata2 [,imsgs]+--+-- csound doc: <https://csound.com/docs/manual/fluidControl.html>+fluidControl ::  D -> Sig -> Sig -> Sig -> Sig -> SE ()+fluidControl b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "fluidControl" [(Xr,[Ir,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Instantiates a fluidsynth engine.+--+-- Instantiates a fluidsynth engine, and returns ienginenum to identify the+--     engine. ienginenum is passed to other other opcodes for loading +--     and playing SoundFonts and gathering the generated sound.+--+-- > ienginenum  fluidEngine  [iChorusEnabled] [, iRevervEnabled] [, iNumChannels] [, iPolyphony] +--+-- csound doc: <https://csound.com/docs/manual/fluidEngine.html>+fluidEngine ::   D+fluidEngine  =+  D $ return $ f +  where+    f  = opcs "fluidEngine" [(Ir,[Ir,Ir,Ir,Ir])] []++-- | ++--+-- > SPrograms[]  fluidInfo  ienginenum+--+-- csound doc: <https://csound.com/docs/manual/fluidInfo.html>+fluidInfo ::  D -> Str+fluidInfo b1 =+  Str $ f <$> unD b1+  where+    f a1 = opcs "fluidInfo" [(Sr,[Ir])] [a1]++-- | +-- Loads a SoundFont into a fluidEngine, optionally listing SoundFont contents.+--+-- Loads a SoundFont into an instance of a fluidEngine, optionally+--     listing banks and presets for SoundFont.+--+-- > isfnum  fluidLoad  soundfont, ienginenum[, ilistpresets]+--+-- csound doc: <https://csound.com/docs/manual/fluidLoad.html>+fluidLoad ::  D -> D -> Tab+fluidLoad b1 b2 =+  Tab $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "fluidLoad" [(Ir,[Ir,Ir,Ir])] [a1,a2]++-- | +-- Plays a note on a channel in a fluidSynth engine.+--+-- Plays a note at imidikey pitch and imidivel velocity+--     on ichannelnum channel of number ienginenum fluidEngine.+--+-- >  fluidNote  ienginenum, ichannelnum, imidikey, imidivel+--+-- csound doc: <https://csound.com/docs/manual/fluidNote.html>+fluidNote ::  D -> D -> D -> D -> SE ()+fluidNote b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fluidNote" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Outputs sound from a given fluidEngine+--+-- Outputs the sound from a fluidEngine.+--+-- > aleft, aright  fluidOut  ienginenum+--+-- csound doc: <https://csound.com/docs/manual/fluidOut.html>+fluidOut ::  D -> (Sig,Sig)+fluidOut b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "fluidOut" ([Ar,Ar],[Ir]) [a1]++-- | +-- Assigns a preset from a SoundFont to a channel on a fluidEngine.+--+-- >  fluidProgramSelect  ienginenum, ichannelnum, isfnum, ibanknum, ipresetnum+--+-- csound doc: <https://csound.com/docs/manual/fluidProgramSelect.html>+fluidProgramSelect ::  D -> D -> Tab -> D -> D -> SE ()+fluidProgramSelect b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "fluidProgramSelect" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Set interpolation method for channel in Fluid Engine+--+-- Set interpolation method for channel in Fluid Engine.  Lower +--     order interpolation methods will render faster at lower fidelity while +--     higher order interpolation methods will render slower at higher fidelity.+--     Default interpolation for a channel is 4th order interpolation.+--+-- >  fluidSetInterpMethod  ienginenum, ichannelnum, iInterpMethod+--+-- csound doc: <https://csound.com/docs/manual/fluidSetInterpMethod.html>+fluidSetInterpMethod ::  D -> D -> D -> SE ()+fluidSetInterpMethod b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "fluidSetInterpMethod" [(Xr,[Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Read sampled sound from a table.+--+-- Read sampled sound (mono or stereo) from a table, with optional sustain and release looping.+--+-- > ar1 [,ar2]  loscil  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \+-- >         [, imod2] [, ibeg2] [, iend2]+--+-- csound doc: <https://csound.com/docs/manual/loscil.html>+loscil :: forall a . Tuple a => Sig -> Sig -> Tab -> a+loscil b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = mopcs "loscil" ([Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | ++--+-- > aph, ar1 [,ar2]  loscilphs  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \+-- >           [, imod2] [, ibeg2] [, iend2]+--+-- csound doc: <https://csound.com/docs/manual/loscil.html>+loscilphs :: forall a . Tuple a => Sig -> Sig -> Tab -> a+loscilphs b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = mopcs "loscilphs" ([Ar,Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | +-- Read sampled sound from a table using cubic interpolation.+--+-- Read sampled sound (mono or stereo) from a table, with optional sustain and release looping, using cubic interpolation.+--+-- > ar1 [,ar2]  loscil3  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \+-- >         [, imod2] [, ibeg2] [, iend2]+--+-- csound doc: <https://csound.com/docs/manual/loscil3.html>+loscil3 :: forall a . Tuple a => Sig -> Sig -> Tab -> a+loscil3 b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = mopcs "loscil3" ([Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | ++--+-- > aph, ar1 [,ar2]  loscil3phs  xamp, kcps, ifn [, ibas] [, imod1] [, ibeg1] [, iend1] \+-- >           [, imod2] [, ibeg2] [, iend2]+--+-- csound doc: <https://csound.com/docs/manual/loscil3.html>+loscil3phs :: forall a . Tuple a => Sig -> Sig -> Tab -> a+loscil3phs b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = mopcs "loscil3phs" ([Ar,Ar,Ar],[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | +-- Read multi-channel sampled sound from a table.+--+-- Read sampled sound (up to 16 channels) from a table, with+--       optional sustain and release looping.+--+-- > ar1 [, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \+-- >           ar15, ar16]  loscilx  xamp, kcps, ifn \+-- >         [, iwsize, ibas, istrt, imod, ibeg, iend]+-- > ar[]  loscilx  xamp, kcps, ifn \+-- >         [, iwsize, ibas, istrt, imod, ibeg, iend]+--+-- csound doc: <https://csound.com/docs/manual/loscilx.html>+loscilx :: forall a . Tuple a => Sig -> Sig -> Tab -> a+loscilx b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = mopcs "loscilx" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]+                                 ,[Xr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | +-- Generates a table index for sample playback+--+-- This opcode can be used to generate table index for sample playback (e.g. tablexkt).+--+-- > ares  lphasor  xtrns [, ilps] [, ilpe] [, imode] [, istrt] [, istor]+--+-- csound doc: <https://csound.com/docs/manual/lphasor.html>+lphasor ::  Sig -> Sig+lphasor b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "lphasor" [(Ar,[Xr,Ir,Ir,Ir,Ir,Ir])] [a1]++-- | +-- Read sampled sound from a table with looping and high precision.+--+-- Read sampled sound (mono or stereo) from a table, with looping, and high precision.+--+-- > ares  lposcil  kamp, kfreqratio, kloop, kend, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/lposcil.html>+lposcil ::  Sig -> Sig -> Sig -> Sig -> Tab -> Sig+lposcil b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5+  where+    f a1 a2 a3 a4 a5 = opcs "lposcil" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Read sampled sound from a table with high precision and cubic interpolation.+--+-- Read sampled sound (mono or stereo) from a table, with looping, and high precision. lposcil3 uses cubic interpolation.+--+-- > ares  lposcil3  kamp, kfreqratio, kloop, kend, ifn [, iphs]+--+-- csound doc: <https://csound.com/docs/manual/lposcil3.html>+lposcil3 ::  Sig -> Sig -> Sig -> Sig -> Tab -> Sig+lposcil3 b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5+  where+    f a1 a2 a3 a4 a5 = opcs "lposcil3" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Read sampled sound from a table with looping and high precision.+--+-- lposcila reads sampled sound from a table with looping and high precision.+--+-- > ar  lposcila  aamp, kfreqratio, kloop, kend, ift [,iphs] +--+-- csound doc: <https://csound.com/docs/manual/lposcila.html>+lposcila ::  Sig -> Sig -> Sig -> Sig -> D -> Sig+lposcila b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "lposcila" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Read stereo sampled sound from a table with looping and high precision.+--+-- lposcilsa reads stereo sampled sound from a table with looping and high precision.+--+-- > ar1, ar2  lposcilsa  aamp, kfreqratio, kloop, kend, ift [,iphs] +--+-- csound doc: <https://csound.com/docs/manual/lposcilsa.html>+lposcilsa ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)+lposcilsa b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "lposcilsa" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Read stereo sampled sound from a table with looping and high precision.+--+-- lposcilsa2 reads stereo sampled sound from a table with looping and high precision.+--+-- > ar1, ar2  lposcilsa2  aamp, kfreqratio, kloop, kend, ift [,iphs] +--+-- csound doc: <https://csound.com/docs/manual/lposcilsa2.html>+lposcilsa2 ::  Sig -> Sig -> Sig -> Sig -> D -> (Sig,Sig)+lposcilsa2 b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "lposcilsa2" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Prints a list of all instruments of a previously loaded SoundFont2 (SF2) file.+--+-- Prints a list of all instruments of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- >  sfilist  ifilhandle [, Sprintprefix] +--+-- csound doc: <https://csound.com/docs/manual/sfilist.html>+sfilist ::  Sf -> SE ()+sfilist b1 =+  SE $ join $ f <$> (lift . unSf) b1+  where+    f a1 = opcsDep_ "sfilist" [(Xr,[Sr,Sr])] [a1]++-- | +-- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound.+--+-- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ar1, ar2  sfinstr  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \+-- >           [, iflag] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/sfinstr.html>+sfinstr ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)+sfinstr b1 b2 b3 b4 b5 b6 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6+  where+    f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1,a2,a3,a4,a5,a6]++-- | +-- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation.+--+-- Plays a SoundFont2 (SF2) sample instrument, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ar1, ar2  sfinstr3  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \+-- >           [, iflag] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/sfinstr3.html>+sfinstr3 ::  D -> D -> Sig -> Sig -> D -> Sf -> (Sig,Sig)+sfinstr3 b1 b2 b3 b4 b5 b6 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6+  where+    f a1 a2 a3 a4 a5 a6 = mopcs "sfinstr3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir]) [a1,a2,a3,a4,a5,a6]++-- | +-- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation.+--+-- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ares  sfinstr3m  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \+-- >           [, iflag] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/sfinstr3m.html>+sfinstr3m ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig+sfinstr3m b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "sfinstr3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound.+--+-- Plays a SoundFont2 (SF2) sample instrument, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ares  sfinstrm  ivel, inotenum, xamp, xfreq, instrnum, ifilhandle \+-- >           [, iflag] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/sfinstrm.html>+sfinstrm ::  D -> D -> Sig -> Sig -> D -> Sf -> Sig+sfinstrm b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unSf b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "sfinstrm" [(Ar,[Ir,Ir,Xr,Xr,Ir,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Loads an entire SoundFont2 (SF2) sample file into memory.+--+-- Loads an entire SoundFont2 (SF2) sample file into memory. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ir  sfload  "filename"+--+-- csound doc: <https://csound.com/docs/manual/sfload.html>+sfload ::  Str -> D+sfload b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "sfload" [(Ir,[Sr])] [a1]++-- | +-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, with user-defined+--       time-varying crossfade looping.+--+-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound, similarly to sfplay. Unlike that opcode, though,+-- 	  it ignores the looping points set in the SF2 file and substitutes them for a user-defined crossfade loop. It is+-- 	  a cross between sfplay and+--       flooper2.+--+-- > ar1, ar2  sflooper  ivel, inotenum, kamp, kpitch, ipreindex, kloopstart, kloopend, kcrossfade \+-- >           [, istart, imode, ifenv, iskip, iflag] +--+-- csound doc: <https://csound.com/docs/manual/sflooper.html>+sflooper ::  D -> D -> Sig -> Sig -> Sf -> Sig -> Sig -> Sig -> (Sig,Sig)+sflooper b1 b2 b3 b4 b5 b6 b7 b8 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5 <*> unSig b6 <*> unSig b7 <*> unSig b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "sflooper" ([Ar,Ar]+                                                 ,[Ir,Ir,Kr,Kr,Ir,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]++-- | +-- Assigns all presets of a SoundFont2 (SF2) sample file to a sequence of progressive index numbers.+--+-- Assigns all presets of a previously loaded SoundFont2 (SF2)+--       sample file to a sequence of progressive index numbers. These+--       opcodes allow management the sample-structure of SF2 files. In+--       order to understand the usage of these opcodes, the user must+--       have some knowledge of the SF2 format, so a brief description of+--       this format can be found in+--       the SoundFont2 File Format+--       Appendix.+--+-- >  sfpassign  istartindex, ifilhandle[, imsgs]+--+-- csound doc: <https://csound.com/docs/manual/sfpassign.html>+sfpassign ::  D -> Sf -> SE ()+sfpassign b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSf) b2+  where+    f a1 a2 = opcsDep_ "sfpassign" [(Xr,[Ir,Sr,Ir])] [a1,a2]++-- | +-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound.+--+-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ar1, ar2  sfplay  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]+--+-- csound doc: <https://csound.com/docs/manual/sfplay.html>+sfplay ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)+sfplay b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5+  where+    f a1 a2 a3 a4 a5 = mopcs "sfplay" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation.+--+-- Plays a SoundFont2 (SF2) sample preset, generating a stereo sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ar1, ar2  sfplay3  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]+--+-- csound doc: <https://csound.com/docs/manual/sfplay3.html>+sfplay3 ::  D -> D -> Sig -> Sig -> Sf -> (Sig,Sig)+sfplay3 b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5+  where+    f a1 a2 a3 a4 a5 = mopcs "sfplay3" ([Ar,Ar],[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation.+--+-- Plays a SoundFont2 (SF2) sample preset, generating a mono sound with cubic interpolation. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ares  sfplay3m  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]+--+-- csound doc: <https://csound.com/docs/manual/sfplay3m.html>+sfplay3m ::  D -> D -> Sig -> Sig -> Sf -> Sig+sfplay3m b1 b2 b3 b4 b5 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5+  where+    f a1 a2 a3 a4 a5 = opcs "sfplay3m" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Plays a SoundFont2 (SF2) sample preset, generating a mono sound.+--+-- Plays a SoundFont2 (SF2) sample preset, generating a mono sound. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ares  sfplaym  ivel, inotenum, xamp, xfreq, ipreindex [, iflag] [, ioffset] [, ienv]+--+-- csound doc: <https://csound.com/docs/manual/sfplaym.html>+sfplaym ::  D -> D -> Sig -> Sig -> Sf -> Sig+sfplaym b1 b2 b3 b4 b5 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4 <*> unSf b5+  where+    f a1 a2 a3 a4 a5 = opcs "sfplaym" [(Ar,[Ir,Ir,Xr,Xr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Prints a list of all presets of a SoundFont2 (SF2) sample file.+--+-- Prints a list of all presets of a previously loaded SoundFont2 (SF2) sample file. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- >  sfplist  ifilhandle+--+-- csound doc: <https://csound.com/docs/manual/sfplist.html>+sfplist ::  Sf -> SE ()+sfplist b1 =+  SE $ join $ f <$> (lift . unSf) b1+  where+    f a1 = opcsDep_ "sfplist" [(Xr,[Sr])] [a1]++-- | +-- Assigns an existing preset of a SoundFont2 (SF2) sample file to an index number.+--+-- Assigns an existing preset of a previously loaded SoundFont2 (SF2) sample file to an index number. These opcodes allow management the sample-structure of SF2 files. In order to understand the usage of these opcodes, the user must have some knowledge of the SF2 format, so a brief description of this format can be found in the SoundFont2 File Format Appendix.+--+-- > ir  sfpreset  iprog, ibank, ifilhandle, ipreindex+--+-- csound doc: <https://csound.com/docs/manual/sfpreset.html>+sfpreset ::  D -> D -> Sf -> Sf -> D+sfpreset b1 b2 b3 b4 =+  D $ f <$> unD b1 <*> unD b2 <*> unSf b3 <*> unSf b4+  where+    f a1 a2 a3 a4 = opcs "sfpreset" [(Ir,[Ir,Ir,Sr,Ir])] [a1,a2,a3,a4]++-- | +-- A sound looper with pitch control.+--+-- This opcode records input audio and plays it back in a loop with user-defined+--    duration and crossfade time. It also allows the pitch of the loop to be controlled,+--    including reversed playback.+--+-- > asig, krec  sndloop  ain, kpitch, ktrig, idur, ifad+--+-- csound doc: <https://csound.com/docs/manual/sndloop.html>+sndloop ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)+sndloop b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "sndloop" ([Ar,Kr],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- A simple time stretch by repeating cycles.+--+-- > ares  waveset  ain, krep [, ilen]+--+-- csound doc: <https://csound.com/docs/manual/waveset.html>+waveset ::  Sig -> Sig -> Sig+waveset b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "waveset" [(Ar,[Ar,Kr,Ir])] [a1,a2]++-- Scanned Synthesis.++-- | +-- Copies from one table to another with a gain control.+--+-- This is is a variant of tablecopy, copying from one table to another, starting at ipos, and with a gain control. The number of points copied is determined by the length of the source. Other points are not changed. This opcode can be used to “hit” a string in the scanned synthesis code.+--+-- >  scanhammer  isrc, idst, ipos, imult+--+-- csound doc: <https://csound.com/docs/manual/scanhammer.html>+scanhammer ::  D -> D -> D -> D -> SE ()+scanhammer b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "scanhammer" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > kpos, kvel  scanmap  iscan, kamp, kvamp [, iwhich]+--+-- csound doc: <https://csound.com/docs/manual/scanmap.html>+scanmap ::  D -> Sig -> Sig -> (Sig,Sig)+scanmap b1 b2 b3 =+  pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "scanmap" ([Kr,Kr],[Ir,Kr,Kr,Ir]) [a1,a2,a3]++-- | +-- Generate audio output using scanned synthesis.+--+-- > ares  scans  kamp, kfreq, ifn, id [, iorder]+--+-- csound doc: <https://csound.com/docs/manual/scans.html>+scans ::  Sig -> Sig -> Tab -> D -> Sig+scans b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "scans" [(Ar,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | ++--+-- >  scansmap  kpos, kvel, iscan, kamp, kvamp [, iwhich]+--+-- csound doc: <https://csound.com/docs/manual/scansmap.html>+scansmap ::  Sig -> Sig -> D -> Sig -> Sig -> SE ()+scansmap b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "scansmap" [(Xr,[Kr,Kr,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- A simpler scanned synthesis implementation.+--+-- A simpler scanned synthesis implementation. This is an implementation of a circular string scanned using external tables. This opcode will allow direct modification and reading of values with the table opcodes.+--+-- > aout  scantable  kamp, kpch, ipos, imass, istiff, idamp, ivel+--+-- csound doc: <https://csound.com/docs/manual/scantable.html>+scantable ::  Sig -> Sig -> D -> D -> D -> D -> D -> Sig+scantable b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "scantable" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- Compute the waveform and the wavetable for use in scanned synthesis.+--+-- >  scanu  init, irate, ifndisplace,+-- >         ifnmass, ifnmatrix, ifncentr, ifndamp, kmass, kmtrxstiff, kcentr,+-- >         kdamp, ileft, iright, kpos, kdisplace, ain, idisp, id+--+-- csound doc: <https://csound.com/docs/manual/scanu.html>+scanu ::  D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()+scanu b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unTab) b4 <*> (lift . unTab) b5 <*> (lift . unTab) b6 <*> (lift . unTab) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9 <*> (lift . unSig) b10 <*> (lift . unSig) b11 <*> (lift . unD) b12 <*> (lift . unD) b13 <*> (lift . unSig) b14 <*> (lift . unSig) b15 <*> (lift . unSig) b16 <*> (lift . unD) b17 <*> (lift . unD) b18+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 = opcsDep_ "scanu" [(Xr+                                                                                         ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Ar,Ir,Ir])] [a1+                                                                                                                                                    ,a2+                                                                                                                                                    ,a3+                                                                                                                                                    ,a4+                                                                                                                                                    ,a5+                                                                                                                                                    ,a6+                                                                                                                                                    ,a7+                                                                                                                                                    ,a8+                                                                                                                                                    ,a9+                                                                                                                                                    ,a10+                                                                                                                                                    ,a11+                                                                                                                                                    ,a12+                                                                                                                                                    ,a13+                                                                                                                                                    ,a14+                                                                                                                                                    ,a15+                                                                                                                                                    ,a16+                                                                                                                                                    ,a17+                                                                                                                                                    ,a18]++-- | ++--+-- >  scanu2  init, irate, ifndisplace,+-- >         ifnmass, ifnmatrix, ifncentr, ifndamp, kmass, kmtrxstiff, kcentr,+-- >         kdamp, ileft, iright, kpos, kdisplace, ain, idisp, id+--+-- csound doc: <https://csound.com/docs/manual/scanu2.html>+scanu2 ::  D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()+scanu2 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unTab) b4 <*> (lift . unTab) b5 <*> (lift . unTab) b6 <*> (lift . unTab) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9 <*> (lift . unSig) b10 <*> (lift . unSig) b11 <*> (lift . unD) b12 <*> (lift . unD) b13 <*> (lift . unSig) b14 <*> (lift . unSig) b15 <*> (lift . unSig) b16 <*> (lift . unD) b17 <*> (lift . unD) b18+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 = opcsDep_ "scanu2" [(Xr+                                                                                          ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Ar,Ir,Ir])] [a1+                                                                                                                                                     ,a2+                                                                                                                                                     ,a3+                                                                                                                                                     ,a4+                                                                                                                                                     ,a5+                                                                                                                                                     ,a6+                                                                                                                                                     ,a7+                                                                                                                                                     ,a8+                                                                                                                                                     ,a9+                                                                                                                                                     ,a10+                                                                                                                                                     ,a11+                                                                                                                                                     ,a12+                                                                                                                                                     ,a13+                                                                                                                                                     ,a14+                                                                                                                                                     ,a15+                                                                                                                                                     ,a16+                                                                                                                                                     ,a17+                                                                                                                                                     ,a18]++-- | +-- Allows the position and velocity of a node in a scanned process to be read.+--+-- > kpos, kvel  xscanmap  iscan, kamp, kvamp [, iwhich]+--+-- csound doc: <https://csound.com/docs/manual/xscanmap.html>+xscanmap ::  D -> Sig -> Sig -> (Sig,Sig)+xscanmap b1 b2 b3 =+  pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "xscanmap" ([Kr,Kr],[Ir,Kr,Kr,Ir]) [a1,a2,a3]++-- | +-- Fast scanned synthesis waveform and the wavetable generator.+--+-- Experimental version of scans.  Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility.  If liked, it will replace the older opcode as it is syntax compatible but extended.+--+-- > ares  xscans  kamp, kfreq, ifntraj, id [, iorder]+--+-- csound doc: <https://csound.com/docs/manual/xscans.html>+xscans ::  Sig -> Sig -> Tab -> D -> Sig+xscans b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "xscans" [(Ar,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Allows the position and velocity of a node in a scanned process to be read.+--+-- >  xscansmap  kpos, kvel, iscan, kamp, kvamp [, iwhich]+--+-- csound doc: <https://csound.com/docs/manual/xscansmap.html>+xscansmap ::  Sig -> Sig -> D -> Sig -> Sig -> SE ()+xscansmap b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "xscansmap" [(Xr,[Kr,Kr,Ir,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Compute the waveform and the wavetable for use in scanned synthesis.+--+-- Experimental version of scanu. Allows much larger matrices and is faster and smaller but removes some (unused?) flexibility.  If liked, it will replace the older opcode as it is syntax compatible but extended.+--+-- >  xscanu  init, irate, ifndisplace, ifnmass, ifnmatrix, ifncentr, ifndamp, kmass, \+-- >           kmtrxstiff, kcentr, kdamp, ileft, iright, kpos, kdisplace, ain, idisp, id+--+-- csound doc: <https://csound.com/docs/manual/xscanu.html>+xscanu ::  D -> D -> Tab -> Tab -> Tab -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> D -> D -> SE ()+xscanu b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unTab) b4 <*> (lift . unTab) b5 <*> (lift . unTab) b6 <*> (lift . unTab) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9 <*> (lift . unSig) b10 <*> (lift . unSig) b11 <*> (lift . unD) b12 <*> (lift . unD) b13 <*> (lift . unSig) b14 <*> (lift . unSig) b15 <*> (lift . unSig) b16 <*> (lift . unD) b17 <*> (lift . unD) b18+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 = opcsDep_ "xscanu" [(Xr+                                                                                          ,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Kr,Kr,Kr,Kr,Ir,Ir,Kr,Kr,Ar,Ir,Ir])] [a1+                                                                                                                                                     ,a2+                                                                                                                                                     ,a3+                                                                                                                                                     ,a4+                                                                                                                                                     ,a5+                                                                                                                                                     ,a6+                                                                                                                                                     ,a7+                                                                                                                                                     ,a8+                                                                                                                                                     ,a9+                                                                                                                                                     ,a10+                                                                                                                                                     ,a11+                                                                                                                                                     ,a12+                                                                                                                                                     ,a13+                                                                                                                                                     ,a14+                                                                                                                                                     ,a15+                                                                                                                                                     ,a16+                                                                                                                                                     ,a17+                                                                                                                                                     ,a18]++-- STK Opcodes.++-- | +-- STKBandedWG uses banded waveguide techniques to model a variety of sounds.+--+-- This opcode uses banded waveguide techniques to model a variety of sounds, including bowed bars, glasses, and bowls.+--+-- > asignal  STKBandedWG  ifrequency, iamplitude, [kpress, kv1[, kmot, kv2[, klfo, kv3[, klfodepth, kv4[, kvel, kv5[, kstrk, kv6[, kinstr, kv7]]]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBandedWG.html>+stkBandedWG ::  D -> D -> Sig+stkBandedWG b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBandedWG" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STK Hammond-oid organ-like FM synthesis instrument.+--+-- > asignal  STKBeeThree  ifrequency, iamplitude, [kop4, kv1[, kop3, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBeeThree.html>+stkBeeThree ::  D -> D -> Sig+stkBeeThree b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBeeThree" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKBlowBotl uses a helmholtz resonator (biquad filter) with a polynomial jet excitation.+--+-- This opcode implements a helmholtz resonator (biquad filter) with a polynomial jet excitation (a la Cook).+--+-- > asignal  STKBlowBotl  ifrequency, iamplitude, [knoise, kv1[, klfo, kv2[, klfodepth, kv3[, kvol, kv4]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBlowBotl.html>+stkBlowBotl ::  D -> D -> Sig+stkBlowBotl b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBlowBotl" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STK clarinet physical model with one register hole and one tonehole.+--+-- This opcode is based on the clarinet model, with the addition of a two-port register hole and a three-port dynamic tonehole implementation.+--+-- > asignal  STKBlowHole  ifrequency, iamplitude, [kreed, kv1[, knoise, kv2[, khole, kv3[, kreg, kv4[, kbreath, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBlowHole.html>+stkBlowHole ::  D -> D -> Sig+stkBlowHole b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBlowHole" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKBowed is a bowed string instrument.+--+-- STKBowed is a bowed string instrument, using a waveguide model.+--+-- > asignal  STKBowed  ifrequency, iamplitude, [kpress, kv1[, kpos, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBowed.html>+stkBowed ::  D -> D -> Sig+stkBowed b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBowed" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKBrass is a simple brass instrument.+--+-- STKBrass uses a simple brass instrument waveguide model, a la Cook.+--+-- > asignal  STKBrass  ifrequency, iamplitude, [klip, kv1[, kslide, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKBrass.html>+stkBrass ::  D -> D -> Sig+stkBrass b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKBrass" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKClarinet uses a simple clarinet physical model.+--+-- > asignal  STKClarinet  ifrequency, iamplitude, [kstiff, kv1[, knoise, kv2[, klfo, kv3[, klfodepth, kv4[, kbreath, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKClarinet.html>+stkClarinet ::  D -> D -> Sig+stkClarinet b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKClarinet" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKDrummer is a drum sampling synthesizer.+--+-- STKDrummer is a drum sampling synthesizer using raw waves and one-pole filters,+--       The drum rawwave files are sampled at 22050 Hz, but will be appropriately interpolated for other sample rates.+--+-- > asignal  STKDrummer  ifrequency, iamplitude+--+-- csound doc: <https://csound.com/docs/manual/STKDrummer.html>+stkDrummer ::  D -> D -> Sig+stkDrummer b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKDrummer" [(Ar,[Ir,Ir])] [a1,a2]++-- | +-- STKFMVoices is a singing FM synthesis instrument.+--+-- STKFMVoices is a singing FM synthesis instrument. It has 3 carriers and a common modulator, also referred to as algorithm 6 of the TX81Z.+--+-- > asignal  STKFMVoices  ifrequency, iamplitude, [kvowel, kv1[, kspec, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKFMVoices.html>+stkFMVoices ::  D -> D -> Sig+stkFMVoices b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKFMVoices" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKFlute uses a simple flute physical model.+--+-- STKFlute uses a simple flute physical model. The jet model uses a polynomial, a la Cook.+--+-- > asignal  STKFlute  ifrequency, iamplitude, [kjet, kv1[, knoise, kv2[, klfo, kv3[, klfodepth, kv4[, kbreath, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKFlute.html>+stkFlute ::  D -> D -> Sig+stkFlute b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKFlute" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKHevyMetl produces metal sounds.+--+-- STKHevyMetl produces metal sounds, using FM synthesis.+--       It uses 3 cascade operators with feedback modulation, also referred to as algorithm 3 of the TX81Z.+--+-- > asignal  STKHevyMetl  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKHevyMetl.html>+stkHevyMetl ::  D -> D -> Sig+stkHevyMetl b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKHevyMetl" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKMandolin produces mamdolin-like sounds.+--+-- STKMandolin produces mamdolin-like sounds, using "commuted synthesis" techniques to model a mandolin instrument.+--+-- > asignal  STKMandolin  ifrequency, iamplitude, [kbody, kv1[, kpos, kv2[, ksus, kv3[, kdetune, kv4[, kmic, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKMandolin.html>+stkMandolin ::  D -> D -> Sig+stkMandolin b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKMandolin" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKModalBar is a resonant bar instrument.+--+-- This opcode is a resonant bar instrument.It has a number of different struck bar instruments.+--+-- > asignal  STKModalBar  ifrequency, iamplitude, [khard, kv1[, kpos, kv2[, klfo, kv3[, klfodepth, kv4[, kmix, kv5[, kvol, kv6[, kinstr, kv7]]]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKModalBar.html>+stkModalBar ::  D -> D -> Sig+stkModalBar b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKModalBar" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKMoog produces moog-like swept filter sounds.+--+-- STKMoog produces moog-like swept filter sounds, using one attack wave, one looped wave, and an ADSR envelope and adds two sweepable formant filters.+--+-- > asignal  STKMoog  ifrequency, iamplitude, [kq, kv1[, krate, kv2[, klfo, kv3[, klfodepth, kv4[, kvol, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKMoog.html>+stkMoog ::  D -> D -> Sig+stkMoog b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKMoog" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKPercFlut is a percussive flute FM synthesis instrument.+--+-- STKPercFlut is a percussive flute FM synthesis instrument. The instrument uses an algorithm like the algorithm 4 of the TX81Z.+--+-- > asignal  STKPercFlut  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKPercFlut.html>+stkPercFlut ::  D -> D -> Sig+stkPercFlut b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKPercFlut" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKPlucked uses a plucked string physical model.+--+-- STKPlucked uses a plucked string physical model based on the Karplus-Strong algorithm.+--+-- > asignal  STKPlucked  ifrequency, iamplitude+--+-- csound doc: <https://csound.com/docs/manual/STKPlucked.html>+stkPlucked ::  D -> D -> Sig+stkPlucked b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKPlucked" [(Ar,[Ir,Ir])] [a1,a2]++-- | +-- STKResonate is a noise driven formant filter.+--+-- STKResonate is a noise driven formant filter. This instrument contains a noise source, which excites a biquad resonance filter, with volume controlled by an ADSR.+--+-- > asignal  STKResonate  ifrequency, iamplitude, [kfreq, kv1[, kpole, kv2[, knotch, kv3[, kzero, kv4[, kenv, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKResonate.html>+stkResonate ::  D -> D -> Sig+stkResonate b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKResonate" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STK Fender Rhodes-like electric piano FM synthesis instrument.+--+-- > asignal  STKRhodey  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKRhodey.html>+stkRhodey ::  D -> D -> Sig+stkRhodey b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKRhodey" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKSaxofony is a faux conical bore reed instrument.+--+-- STKSaxofony is a faux conical bore reed instrument.+--       This opcode uses a "hybrid" digital waveguide instrument that can generate a variety of wind-like sounds. It has also been referred to as the "blowed string" model. +--       The waveguide section is essentially that of a string, with one rigid and one lossy termination. The non-linear function is a reed table. +--       The string can be "blown" at any point between the terminations, though just as with strings, it is impossible to excite the system at either end. +--       If the excitation is placed at the string mid-point, the sound is that of a clarinet. At points closer to the "bridge", the sound is closer to that of a saxophone.+--+-- > asignal  STKSaxofony  ifrequency, iamplitude, [kstiff, kv1[, kapert, kv2[, kblow, kv3[, knoise, kv4[, klfo, kv5[, klfodepth, kv6[, kbreath, kv7]]]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKSaxofony.html>+stkSaxofony ::  D -> D -> Sig+stkSaxofony b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKSaxofony" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKShakers is an instrument that simulates environmental sounds or collisions of multiple independent sound producing objects.+--+-- STKShakers are a set of PhISEM and PhOLIES instruments: +--       PhISEM (Physically Informed Stochastic Event Modeling) is an algorithmic approach for simulating collisions of multiple independent sound producing objects. +--       It can simulate a Maraca, Sekere, Cabasa, Bamboo Wind Chimes, Water Drops, Tambourine, Sleighbells, and a Guiro. On http://soundlab.cs.princeton.edu/research/controllers/shakers/+-- PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) there is a similar approach for the synthesis of environmental sounds. +-- It simulates of breaking sticks, crunchy snow (or not), a wrench, sandpaper, and more..+--+-- > asignal  STKShakers  ifrequency, iamplitude, [kenerg, kv1[, kdecay, kv2[, kshake, kv3[, knum, kv4[, kres, kv5[, kinstr, kv6]]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKShakers.html>+stkShakers ::  D -> D -> Sig+stkShakers b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKShakers" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKSimple is a wavetable/noise instrument.+--+-- STKSimple is a wavetable/noise instrument.+--       It combines a looped wave, a noise source, a biquad resonance filter, a one-pole filter, and an ADSR envelope to create some interesting sounds.+--+-- > asignal  STKSimple  ifrequency, iamplitude, [kpos, kv1[, kcross, kv2[, kenv, kv3[, kgain, kv4]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKSimple.html>+stkSimple ::  D -> D -> Sig+stkSimple b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKSimple" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKSitar uses a plucked string physical model.+--+-- STKSitar uses a plucked string physical model based on the Karplus-Strong algorithm.+--+-- > asignal  STKSitar  ifrequency, iamplitude+--+-- csound doc: <https://csound.com/docs/manual/STKSitar.html>+stkSitar ::  D -> D -> Sig+stkSitar b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKSitar" [(Ar,[Ir,Ir])] [a1,a2]++-- | +-- STKStifKarp is a plucked stiff string instrument.+--+-- STKStifKarp is a plucked stiff string instrument. +--       It a simple plucked string algorithm (Karplus Strong) with enhancements, including string stiffness and pluck position controls. The stiffness is modeled with allpass filters.+--+-- > asignal  STKStifKarp  ifrequency, iamplitude, [kpos, kv1[, ksus, kv2[, kstretch, kv3]]]+--+-- csound doc: <https://csound.com/docs/manual/STKStifKarp.html>+stkStifKarp ::  D -> D -> Sig+stkStifKarp b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKStifKarp" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKTubeBell is a  tubular bell (orchestral chime) FM synthesis instrument.+--+-- STKTubeBell is a tubular bell (orchestral chime) FM synthesis instrument. +--       It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.+--+-- > asignal  STKTubeBell  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKTubeBell.html>+stkTubeBell ::  D -> D -> Sig+stkTubeBell b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKTubeBell" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKVoicForm is a  four formant synthesis instrument.+--+-- STKVoicForm is a four formant synthesis instrument. +-- This instrument contains an excitation singing wavetable (looping wave with random and periodic vibrato, smoothing on frequency, etc.), excitation noise, and four sweepable complex resonances. +-- Measured formant data is included, and enough data is there to support either parallel or cascade synthesis. In the floating point case cascade synthesis is the most natural so that's what you'll find here.+--+-- > asignal  STKVoicForm  ifrequency, iamplitude, [kmix, kv1[, ksel, kv2[, klfo, kv3[, klfodepth, kv4[, kloud, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKVoicForm.html>+stkVoicForm ::  D -> D -> Sig+stkVoicForm b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKVoicForm" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKWhistle produces whistle sounds.+--+-- STKWhistle produces (police) whistle sounds. It uses a hybrid physical/spectral model of a police whistle (a la Cook).+--+-- > asignal  STKWhistle  ifrequency, iamplitude, [kmod, kv1[, knoise, kv2[, kfipfreq, kv3[, kfipgain, kv4[, kvol, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKWhistle.html>+stkWhistle ::  D -> D -> Sig+stkWhistle b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKWhistle" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- STKWurley simulates a Wurlitzer electric piano FM synthesis instrument.+--+-- STKWurley simulates a Wurlitzer electric piano FM synthesis instrument. +--       It uses two simple FM Pairs summed together, also referred to as algorithm 5 of the TX81Z.+--+-- > asignal  STKWurley  ifrequency, iamplitude, [kmod, kv1[, kcross, kv2[, klfo, kv3[, klfodepth, kv4[, kadsr, kv5]]]]]+--+-- csound doc: <https://csound.com/docs/manual/STKWurley.html>+stkWurley ::  D -> D -> Sig+stkWurley b1 b2 =+  Sig $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "STKWurley" [(Ar,[Ir,Ir,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- Table Access.++-- | +-- Accesses table values by incremental sampling.+--+-- > kres  oscil1  idel, kamp, idur [, ifn]+--+-- csound doc: <https://csound.com/docs/manual/oscil1.html>+oscil1 ::  D -> Sig -> D -> Sig+oscil1 b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "oscil1" [(Kr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Accesses table values by incremental sampling with linear interpolation.+--+-- > kres  oscil1i  idel, kamp, idur [, ifn]+--+-- csound doc: <https://csound.com/docs/manual/oscil1i.html>+oscil1i ::  D -> Sig -> D -> Sig+oscil1i b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "oscil1i" [(Kr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Accesses table values by direct indexing.+--+-- > ares  ptable  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  ptable  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  ptable  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/ptable.html>+ptable ::  Sig -> Tab -> Sig+ptable b1 b2 =+  Sig $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "ptable" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                                ,a2]++-- | +-- Accesses table values by direct indexing with cubic interpolation.+--+-- > ares  ptable3  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  ptable3  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  ptable3  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/ptable3.html>+ptable3 ::  Sig -> Tab -> Sig+ptable3 b1 b2 =+  Sig $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "ptable3" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                                 ,a2]++-- | +-- Accesses table values by direct indexing with linear interpolation.+--+-- > ares  ptablei  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  ptablei  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  ptablei  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/ptablei.html>+ptablei ::  Sig -> Tab -> Sig+ptablei b1 b2 =+  Sig $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "ptablei" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                                 ,a2]++-- | +-- Fast table opcodes.+--+-- Fast table opcodes. Faster than+--     table and+--     tablew because don't+--     allow wrap-around and limit and don't check index validity. Have+--     been implemented in order to provide fast access to+--     arrays. Support non-power of two tables (can be generated by any+--     GEN function by giving a negative length value).+--+-- > kr  tab  kndx, ifn[, ixmode]+-- > ar  tab  xndx, ifn[, ixmode]+--+-- csound doc: <https://csound.com/docs/manual/tab.html>+tab ::  Sig -> Tab -> Sig+tab b1 b2 =+  Sig $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "tab" [(Kr,[Kr,Ir,Ir]),(Ar,[Xr,Ir,Ir])] [a1,a2]++-- | +-- Fast table opcodes.+--+-- Fast table opcodes. Faster than+--     table and+--     tablew because don't+--     allow wrap-around and limit and don't check index validity. Have+--     been implemented in order to provide fast access to+--     arrays. Support non-power of two tables (can be generated by any+--     GEN function by giving a negative length value).+--+-- > ir  tab_i  indx, ifn[, ixmode]+--+-- csound doc: <https://csound.com/docs/manual/tab_i.html>+tab_i ::  D -> Tab -> D+tab_i b1 b2 =+  D $ f <$> unD b1 <*> unTab b2+  where+    f a1 a2 = opcs "tab_i" [(Ir,[Ir,Ir,Ir])] [a1,a2]++-- | +-- Accesses table values by direct indexing.+--+-- > ares  table  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  table  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  table  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/table.html>+table :: SigOrD a => a -> Tab -> a+table b1 b2 =+  fromGE $ f <$> toGE b1 <*> unTab b2+  where+    f a1 a2 = opcs "table" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                               ,a2]++-- | +-- Accesses table values by direct indexing with cubic interpolation.+--+-- > ares  table3  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  table3  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  table3  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/table3.html>+table3 :: SigOrD a => a -> Tab -> a+table3 b1 b2 =+  fromGE $ f <$> toGE b1 <*> unTab b2+  where+    f a1 a2 = opcs "table3" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                                ,a2]++-- | +-- Accesses table values by direct indexing with linear interpolation.+--+-- > ares  tablei  andx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > ires  tablei  indx, ifn [, ixmode] [, ixoff] [, iwrap]+-- > kres  tablei  kndx, ifn [, ixmode] [, ixoff] [, iwrap]+--+-- csound doc: <https://csound.com/docs/manual/tablei.html>+tablei :: SigOrD a => a -> Tab -> a+tablei b1 b2 =+  fromGE $ f <$> toGE b1 <*> unTab b2+  where+    f a1 a2 = opcs "tablei" [(Ar,[Ar,Ir,Ir,Ir,Ir]),(Ir,[Ir,Ir,Ir,Ir,Ir]),(Kr,[Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                                ,a2]++-- | +-- Fast table opcodes.+--+-- Fast table opcodes. Faster than+--     table and+--     tablew because don't+--     allow wrap-around and limit and don't check index validity. Have+--     been implemented in order to provide fast access to+--     arrays. Support non-power of two tables (can be generated by any+--     GEN function by giving a negative length value).+--+-- >  tabw_i  isig, indx, ifn [,ixmode]+--+-- csound doc: <https://csound.com/docs/manual/tabw_i.html>+tabw_i ::  D -> D -> Tab -> SE ()+tabw_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tabw_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- Wave Terrain Synthesis.++-- | ++--+-- > aout  sterrain  kamp, kcps, kx, ky, krx, kry, krot, ktab0, ktab1, km1, km2, kn1, kn2, kn3, ka, kb, kperiod+-- >         +--+-- csound doc: <https://csound.com/docs/manual/sterrain.html>+sterrain ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+sterrain b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unTab b9 <*> unSig b10 <*> unSig b11 <*> unSig b12 <*> unSig b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unSig b17+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 = opcs "sterrain" [(Ar+                                                                                    ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1+                                                                                                                                            ,a2+                                                                                                                                            ,a3+                                                                                                                                            ,a4+                                                                                                                                            ,a5+                                                                                                                                            ,a6+                                                                                                                                            ,a7+                                                                                                                                            ,a8+                                                                                                                                            ,a9+                                                                                                                                            ,a10+                                                                                                                                            ,a11+                                                                                                                                            ,a12+                                                                                                                                            ,a13+                                                                                                                                            ,a14+                                                                                                                                            ,a15+                                                                                                                                            ,a16+                                                                                                                                            ,a17]++-- | +-- A simple wave-terrain synthesis opcode.+--+-- > aout  wterrain  kamp, kpch, k_xcenter, k_ycenter, k_xradius, k_yradius, \+-- >           itabx, itaby+--+-- csound doc: <https://csound.com/docs/manual/wterrain.html>+wterrain ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+wterrain b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wterrain" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1+                                                                                 ,a2+                                                                                 ,a3+                                                                                 ,a4+                                                                                 ,a5+                                                                                 ,a6+                                                                                 ,a7+                                                                                 ,a8]++-- | ++--+-- > aout  wterrain2  kamp, kcps, kx, ky, krx, kry, krot, \+-- >           ktab0, ktab1, kcurve, kcurveparam+-- >         +--+-- csound doc: <https://csound.com/docs/manual/wterrain2.html>+wterrain2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig -> Sig -> Sig+wterrain2 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unTab b8 <*> unTab b9 <*> unSig b10 <*> unSig b11+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = opcs "wterrain2" [(Ar+                                                             ,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11]++-- Waveguide Physical Modeling.++-- | +-- Produces a naturally decaying plucked string or drum sound.+--+-- Audio output is a naturally decaying plucked string or drum sound based on the Karplus-Strong algorithms.+--+-- > ares  pluck  kamp, kcps, icps, ifn, imeth [, iparm1] [, iparm2]+--+-- csound doc: <https://csound.com/docs/manual/pluck.html>+pluck ::  Sig -> Sig -> D -> Tab -> D -> Sig+pluck b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "pluck" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Physical model of the plucked string.+--+-- repluck is an implementation of the physical model of the plucked string. A user can control the pluck point, the pickup point, the filter, and an additional audio signal, axcite. axcite is used to excite the 'string'. Based on the Karplus-Strong algorithm.+--+-- > ares  repluck  iplk, kamp, icps, kpick, krefl, axcite+--+-- csound doc: <https://csound.com/docs/manual/repluck.html>+repluck ::  D -> Sig -> D -> Sig -> Sig -> Sig -> Sig+repluck b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "repluck" [(Ar,[Ir,Kr,Ir,Kr,Kr,Ar])] [a1,a2,a3,a4,a5,a6]++-- | +-- A string resonator with variable fundamental frequency.+--+-- An audio signal is modified by a string resonator with variable fundamental frequency.+--+-- > ares  streson  asig, kfr, kfdbgain+--+-- csound doc: <https://csound.com/docs/manual/streson.html>+streson ::  Sig -> Sig -> Sig -> Sig+streson b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "streson" [(Ar,[Ar,Kr,Kr])] [a1,a2,a3]++-- | +-- Creates a tone similar to a bowed string.+--+-- Audio output is a tone similar to a bowed string, using a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  wgbow  kamp, kfreq, kpres, krat, kvibf, kvamp \+-- >         [, ifn] [, iminfreq]+--+-- csound doc: <https://csound.com/docs/manual/wgbow.html>+wgbow ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+wgbow b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "wgbow" [(Ar,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- A physical model of a bowed bar.+--+-- A physical model of a bowed bar, belonging to the Perry Cook family of waveguide instruments.+--+-- > ares  wgbowedbar  kamp, kfreq, kpos, kbowpres, kgain [, iconst] [, itvel] \+-- >           [, ibowpos] [, ilow]+--+-- csound doc: <https://csound.com/docs/manual/wgbowedbar.html>+wgbowedbar ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+wgbowedbar b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "wgbowedbar" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Creates a tone related to a brass instrument.+--+-- Audio output is a tone related to a brass instrument, using a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  wgbrass  kamp, kfreq, ktens, iatt, kvibf, kvamp \+-- >         [, ifn] [, iminfreq]+--+-- csound doc: <https://csound.com/docs/manual/wgbrass.html>+wgbrass ::  Sig -> Sig -> Sig -> D -> Sig -> Sig -> Sig+wgbrass b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "wgbrass" [(Ar,[Kr,Kr,Kr,Ir,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Creates a tone similar to a clarinet.+--+-- Audio output is a tone similar to a clarinet, using a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  wgclar  kamp, kfreq, kstiff, \+-- >         iatt, idetk, kngain, kvibf, kvamp [, ifn] [, iminfreq]+--+-- csound doc: <https://csound.com/docs/manual/wgclar.html>+wgclar ::  Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig+wgclar b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unSig b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wgclar" [(Ar,[Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Ir,Ir])] [a1+                                                                                     ,a2+                                                                                     ,a3+                                                                                     ,a4+                                                                                     ,a5+                                                                                     ,a6+                                                                                     ,a7+                                                                                     ,a8]++-- | +-- Creates a tone similar to a flute.+--+-- Audio output is a tone similar to a flute, using a physical model developed from Perry Cook, but re-coded for Csound.+--+-- > ares  wgflute  kamp, kfreq, kjet, iatt,+-- >         idetk, kngain, kvibf, kvamp [, ifn] [, iminfreq] [, ijetrf] [, iendrf]+--+-- csound doc: <https://csound.com/docs/manual/wgflute.html>+wgflute ::  Sig -> Sig -> Sig -> D -> D -> Sig -> Sig -> Sig -> Sig+wgflute b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unSig b6 <*> unSig b7 <*> unSig b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "wgflute" [(Ar,[Kr,Kr,Kr,Ir,Ir,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1+                                                                                            ,a2+                                                                                            ,a3+                                                                                            ,a4+                                                                                            ,a5+                                                                                            ,a6+                                                                                            ,a7+                                                                                            ,a8]++-- | +-- A high fidelity simulation of a plucked string.+--+-- A high fidelity simulation of a plucked string, using interpolating delay-lines.+--+-- > ares  wgpluck  icps, iamp, kpick, iplk, idamp, ifilt, axcite+--+-- csound doc: <https://csound.com/docs/manual/wgpluck.html>+wgpluck ::  D -> D -> Sig -> D -> D -> D -> Sig -> Sig+wgpluck b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unSig b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "wgpluck" [(Ar,[Ir,Ir,Kr,Ir,Ir,Ir,Ar])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- Physical model of the plucked string.+--+-- wgpluck2 is an implementation of the physical model of the plucked string, with control over the pluck point, the pickup point and the filter. Based on the Karplus-Strong algorithm.+--+-- > ares  wgpluck2  iplk, kamp, icps, kpick, krefl+--+-- csound doc: <https://csound.com/docs/manual/wgpluck2.html>+wgpluck2 ::  D -> Sig -> D -> Sig -> Sig -> Sig+wgpluck2 b1 b2 b3 b4 b5 =+  Sig $ f <$> unD b1 <*> unSig b2 <*> unD b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "wgpluck2" [(Ar,[Ir,Kr,Ir,Kr,Kr])] [a1,a2,a3,a4,a5]
src/Csound/Typed/Opcode/SignalIO.hs view
@@ -2,1290 +2,1620 @@               -- * File I/O.-    dumpk, dumpk2, dumpk3, dumpk4, ficlose, fin, fini, fink, fiopen, fout, fouti, foutir, foutk, fprintks, fprints, hdf5read, hdf5write, readf, readfi, readk, readk2, readk3, readk4,-    -    -- * Signal Input.-    diskin, diskin2, in', in32, inch, inh, ino, inq, inrg, ins, invalue, inx, inz, mp3in, soundin,-    -    -- * Signal Output.-    mdelay, monitor, out, out32, outc, outch, outh, outo, outq, outq1, outq2, outq3, outq4, outrg, outs, outs1, outs2, outvalue, outx, outz, soundout, soundouts,-    -    -- * Software Bus.-    chani, chano, chn_k, chn_a, chn_S, chnclear, chnexport, chnget, chngetks, chnmix, chnparams, chnset, chnsetks, setksmps, xin, xout,-    -    -- * Printing and Display.-    dispfft, display, flashtxt, print', printf_i, printf, printk, printk2, printks, printks2, prints,-    -    -- * Soundfile Queries.-    filebit, filelen, filenchnls, filepeak, filesr, filevalid, mp3len) where--import Control.Monad.Trans.Class-import Csound.Dynamic-import Csound.Typed---- File I/O.---- | --- Periodically writes an orchestra control-signal value to an external file.------ Periodically writes an orchestra control-signal value to a named external file in a specific format.------ >  dumpk   ksig, ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/dumpk.html>-dumpk ::  Sig -> Str -> D -> D -> SE ()-dumpk b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "dumpk" [(Xr,[Kr,Sr,Ir,Ir])] [a1,a2,a3,a4]---- | --- Periodically writes two orchestra control-signal values to an external file.------ Periodically writes two orchestra control-signal values to a named external file in a specific format.------ >  dumpk2  ksig1, ksig2, ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/dumpk2.html>-dumpk2 ::  Sig -> Sig -> Str -> D -> D -> SE ()-dumpk2 b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "dumpk2" [(Xr,[Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Periodically writes three orchestra control-signal values to an external file.------ Periodically writes three orchestra control-signal values to a named external file in a specific format.------ >  dumpk3  ksig1, ksig2, ksig3, ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/dumpk3.html>-dumpk3 ::  Sig -> Sig -> Sig -> Str -> D -> D -> SE ()-dumpk3 b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "dumpk3" [(Xr,[Kr,Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Periodically writes four orchestra control-signal values to an external file.------ Periodically writes four orchestra control-signal values to a named external file in a specific format.------ >  dumpk4  ksig1, ksig2, ksig3, ksig4, ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/dumpk4.html>-dumpk4 ::  Sig -> Sig -> Sig -> Sig -> Str -> D -> D -> SE ()-dumpk4 b1 b2 b3 b4 b5 b6 b7 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unStr b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "dumpk4" [(Xr,[Kr,Kr,Kr,Kr,Sr,Ir,Ir])] [a1-                                                                               ,a2-                                                                               ,a3-                                                                               ,a4-                                                                               ,a5-                                                                               ,a6-                                                                               ,a7]---- | --- Closes a previously opened file.------ ficlose can be used to close a file which was opened with fiopen.------ >  ficlose  ihandle--- >  ficlose  Sfilename------ csound doc: <http://csound.com/docs/manual/ficlose.html>-ficlose ::  D -> SE ()-ficlose b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "ficlose" [(Xr,[Ir])] [a1]---- | --- Read signals from a file at a-rate.------ >  fin  ifilename, iskipframes, iformat, ain1 [, ain2] [, ain3] [,...]--- >  fin  ifilename, iskipframes, iformat, arr[]------ csound doc: <http://csound.com/docs/manual/fin.html>-fin ::  Str -> D -> D -> [Sig] -> SE ()-fin b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "fin" [(Xr,[Sr,Ir,Ir] ++ (repeat Ar))] ([a1,a2,a3] ++ a4)---- | --- Read signals from a file at i-rate.------ >  fini  ifilename, iskipframes, iformat, in1 [, in2] [, in3] [, ...]------ csound doc: <http://csound.com/docs/manual/fini.html>-fini ::  Str -> D -> D -> [D] -> SE ()-fini b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> mapM unD b4-    where f a1 a2 a3 a4 = opcs "fini" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2,a3] ++ a4)---- | --- Read signals from a file at k-rate.------ >  fink  ifilename, iskipframes, iformat, kin1 [, kin2] [, kin3] [,...]------ csound doc: <http://csound.com/docs/manual/fink.html>-fink ::  Str -> D -> D -> [Sig] -> SE ()-fink b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> mapM unSig b4-    where f a1 a2 a3 a4 = opcs "fink" [(Xr,[Sr,Ir,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)---- | --- Opens a file in a specific mode.------ fiopen can be used to open a file in one of the specified modes.------ > ihandle  fiopen  ifilename, imode------ csound doc: <http://csound.com/docs/manual/fiopen.html>-fiopen ::  Str -> D -> SE D-fiopen b1 b2 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "fiopen" [(Ir,[Sr,Ir])] [a1,a2]---- | --- Outputs a-rate signals to an arbitrary number of channels.------ fout outputs N a-rate signals to a specified file of N channels.------ >  fout  ifilename, iformat, aout1 [, aout2, aout3,...,aoutN]--- >  fout  ifilename, iformat, array[]------ csound doc: <http://csound.com/docs/manual/fout.html>-fout ::  Str -> D -> [Sig] -> SE ()-fout b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "fout" [(Xr,[Sr,Ir] ++ (repeat Ar))] ([a1,a2] ++ a3)---- | --- Outputs i-rate signals of an arbitrary number of channels to a specified file.------ fouti output N i-rate signals to a specified file of N channels.------ >  fouti  ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]------ csound doc: <http://csound.com/docs/manual/fouti.html>-fouti ::  Str -> D -> D -> [D] -> SE ()-fouti b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> mapM unD b4-    where f a1 a2 a3 a4 = opcs "fouti" [(Xr,(repeat Ir))] ([a1,a2,a3] ++ a4)---- | --- Outputs i-rate signals from an arbitrary number of channels to a specified file.------ foutir output N i-rate signals to a specified file of N channels.------ >  foutir  ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]------ csound doc: <http://csound.com/docs/manual/foutir.html>-foutir ::  Str -> D -> D -> [D] -> SE ()-foutir b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> mapM unD b4-    where f a1 a2 a3 a4 = opcs "foutir" [(Xr,(repeat Ir))] ([a1,a2,a3] ++ a4)---- | --- Outputs k-rate signals of an arbitrary number of channels to a specified file, in raw (headerless) format.------ foutk outputs N k-rate signals to a specified file of N channels.------ >  foutk  ifilename, iformat, kout1 [, kout2, kout3,....,koutN]------ csound doc: <http://csound.com/docs/manual/foutk.html>-foutk ::  Str -> D -> [Sig] -> SE ()-foutk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "foutk" [(Xr,[Sr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)---- | --- Similar to printks but prints to a file.------ >  fprintks  "filename", "string", [, kval1] [, kval2] [...]------ csound doc: <http://csound.com/docs/manual/fprintks.html>-fprintks ::  Str -> Str -> [Sig] -> SE ()-fprintks b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "fprintks" [(Xr,[Sr,Sr] ++ (repeat Kr))] ([a1,a2] ++ a3)---- | --- Similar to prints but prints to a file.------ >  fprints  "filename", "string" [, ival1] [, ival2] [...]------ csound doc: <http://csound.com/docs/manual/fprints.html>-fprints ::  Str -> Str -> [D] -> SE ()-fprints b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2 <*> mapM unD b3-    where f a1 a2 a3 = opcs "fprints" [(Xr,[Sr,Sr] ++ (repeat Ir))] ([a1,a2] ++ a3)---- | --- Read signals and arrays from an hdf5 file.------ hdf5read reads N signals and arrays from a specified hdf5 file.------ > xout1[, xout2, xout3, ..., xoutN]  hdf5read  ifilename, ivariablename1[, ivariablename2, ivariablename3, ..., ivariablenameN]------ csound doc: <http://csound.com/docs/manual/hdf5read.html>-hdf5read :: Tuple a => Str -> D -> a-hdf5read b1 b2 = pureTuple $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = mopcs "hdf5read" ((repeat Xr),[Sr] ++ (repeat Ir)) [a1,a2]---- | --- Write signals and arrays to an hdf5 file.------ hdf5write writes N signals and arrays to a specified hdf5 file.------ >  hdf5write  ifilename, xout1[, xout2, xout3, ..., xoutN]------ csound doc: <http://csound.com/docs/manual/hdf5write.html>-hdf5write ::  Str -> Sig -> SE ()-hdf5write b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "hdf5write" [(Xr,[Sr] ++ (repeat Xr))] [a1,a2]---- | --- Read a line of text from an external file.------ Read a line of text from an external file once each k-cycle.------ > Sres, kline  readf  ifilname------ csound doc: <http://csound.com/docs/manual/readf.html>-readf ::  Str -> (Str,Sig)-readf b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "readf" ([Sr,Kr],[Sr]) [a1]---- | --- Read a line of text from an external file.------ Read a line of text from an external file once on initialisation.------ > Sres, iline  readfi  ifilname------ csound doc: <http://csound.com/docs/manual/readfi.html>-readfi ::  Str -> (Str,D)-readfi b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "readfi" ([Sr,Ir],[Sr]) [a1]---- | --- Periodically reads an orchestra control-signal value from an external file.------ Periodically reads an orchestra control-signal value from a named external file in a specific format.------ > kres  readk  ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/readk.html>-readk ::  Str -> D -> D -> Sig-readk b1 b2 b3 = Sig $ f <$> unStr b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "readk" [(Kr,[Sr,Ir,Ir])] [a1,a2,a3]---- | --- Periodically reads two orchestra control-signal values from an external file.------ > kr1, kr2  readk2  ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/readk2.html>-readk2 ::  Str -> D -> D -> (Sig,Sig)-readk2 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "readk2" ([Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]---- | --- Periodically reads three orchestra control-signal values from an external file.------ > kr1, kr2, kr3  readk3  ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/readk3.html>-readk3 ::  Str -> D -> D -> (Sig,Sig,Sig)-readk3 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "readk3" ([Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]---- | --- Periodically reads four orchestra control-signal values from an external file.------ > kr1, kr2, kr3, kr4  readk4  ifilname, iformat, iprd------ csound doc: <http://csound.com/docs/manual/readk4.html>-readk4 ::  Str -> D -> D -> (Sig,Sig,Sig,Sig)-readk4 b1 b2 b3 = pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "readk4" ([Kr,Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]---- Signal Input.---- | --- Reads audio data from an external device or stream and can alter its pitch.------ > ar1 [, ar2 [, ar3 [, ... arN]]]  diskin  ifilcod[, kpitch[, iskiptim \--- >           [, iwraparound[, iformat[, iskipinit]]]]]--- > ar1[]  diskin  ifilcod[, kpitch[, iskiptim \--- >           [, iwraparound[, iformat[, iskipinit]]]]]------ csound doc: <http://csound.com/docs/manual/diskin.html>-diskin :: Tuple a => Str -> a-diskin b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "diskin" ((repeat Ar),[Sr,Kr,Ir,Ir,Ir,Ir]) [a1]---- | --- Reads audio data from a file, and can alter its pitch using one of several---       available interpolation types, as well as convert the sample rate to match---       the orchestra sr setting.------ Reads audio data from a file, and can alter its pitch using--- 	one of several available interpolation types, as well as--- 	convert the sample rate to match the orchestra sr--- 	setting. diskin2 can also read--- 	multichannel files with any number of channels in the range 1--- 	to 24 in versions before 5.14, and 40 after.------ > a1[, a2[, ... aN]]  diskin2  ifilcod[, kpitch[, iskiptim \--- >           [, iwrap[, iformat[, iwsize[, ibufsize[, iskipinit]]]]]]]--- > ar1[]  diskin2  ifilcod[, kpitch[, iskiptim \--- >           [, iwrap[, iformat[, iwsize[, ibufsize[, iskipinit]]]]]]]------ csound doc: <http://csound.com/docs/manual/diskin2.html>-diskin2 :: Tuple a => Str -> a-diskin2 b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "diskin2" ((repeat Ar),[Sr,Kr,Ir,Ir,Ir,Ir,Ir,Ir]) [a1]---- | --- Reads mono audio data from an external device or stream.------ Reads audio data from an external device or stream.------ > ar1  in --- > aarray  in ------ csound doc: <http://csound.com/docs/manual/in.html>-in' ::   Sig-in'  = Sig $ return $ f -    where f  = opcs "in" [(Ar,[]),(Ar,[])] []---- | --- Reads a 32-channel audio signal from an external device or stream.------ > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \--- >           ar15, ar16, ar17, ar18, ar19, ar20, ar21, ar22, ar23, ar24, ar25, ar26, \--- >           ar27, ar28, ar29, ar30, ar31, ar32  in32 ------ csound doc: <http://csound.com/docs/manual/in32.html>-in32 :: Tuple a =>  a-in32  = pureTuple $ return $ f -    where f  = mopcs "in32" ([Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar-                             ,Ar]-                            ,[]) []---- | --- Reads from numbered channels in an external audio signal or stream.------ > ain1[, ...]  inch  kchan1[,...]------ csound doc: <http://csound.com/docs/manual/inch.html>-inch :: Tuple a => [Sig] -> a-inch b1 = pureTuple $ f <$> mapM unSig b1-    where f a1 = mopcs "inch" ((repeat Ar),(repeat Kr)) a1---- | --- Reads six-channel audio data from an external device or stream.------ > ar1, ar2, ar3, ar4, ar5, ar6  inh ------ csound doc: <http://csound.com/docs/manual/inh.html>-inh :: Tuple a =>  a-inh  = pureTuple $ return $ f -    where f  = mopcs "inh" ([Ar,Ar,Ar,Ar,Ar,Ar],[]) []---- | --- Reads eight-channel audio data from an external device or stream.------ > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8  ino ------ csound doc: <http://csound.com/docs/manual/ino.html>-ino :: Tuple a =>  a-ino  = pureTuple $ return $ f -    where f  = mopcs "ino" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar],[]) []---- | --- Reads quad audio data from an external device or stream.------ > ar1, ar2,  ar3, a4  inq ------ csound doc: <http://csound.com/docs/manual/inq.html>-inq ::   (Sig,Sig,Sig,Sig)-inq  = pureTuple $ return $ f -    where f  = mopcs "inq" ([Ar,Ar,Ar,Ar],[]) []---- | --- Allow input from a range of adjacent audio channels from the audio input device------ inrg reads audio from a range of adjacent audio channels from the audio input device.------ >  inrg  kstart, ain1 [,ain2, ain3, ..., ainN]------ csound doc: <http://csound.com/docs/manual/inrg.html>-inrg ::  Sig -> [Sig] -> SE ()-inrg b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "inrg" [(Xr,[Kr] ++ (repeat Ar))] ([a1] ++ a2)---- | --- Reads stereo audio data from an external device or stream.------ > ar1, ar2  ins ------ csound doc: <http://csound.com/docs/manual/ins.html>-ins ::   (Sig,Sig)-ins  = pureTuple $ return $ f -    where f  = mopcs "ins" ([Ar,Ar],[]) []---- | --- Reads a k-rate signal from a user-defined channel.------ Reads a k-rate or i-rate signal or string from a user-defined channel.------ > ivalue  invalue  "channel name"--- > kvalue  invalue  "channel name"--- > Sname  invalue  "channel name"------ csound doc: <http://csound.com/docs/manual/invalue.html>-invalue ::  Str -> Str-invalue b1 = Str $ f <$> unStr b1-    where f a1 = opcs "invalue" [(Ir,[Sr]),(Kr,[Sr]),(Sr,[Sr])] [a1]---- | --- Reads a 16-channel audio signal from an external device or stream.------ > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, \--- >           ar13, ar14, ar15, ar16  inx ------ csound doc: <http://csound.com/docs/manual/inx.html>-inx :: Tuple a =>  a-inx  = pureTuple $ return $ f -    where f  = mopcs "inx" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar],[]) []---- | --- Reads multi-channel audio samples into a ZAK array from an external device or stream.------ >  inz  ksig1------ csound doc: <http://csound.com/docs/manual/inz.html>-inz ::  Sig -> SE ()-inz b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "inz" [(Xr,[Kr])] [a1]---- | --- Reads mono or stereo audio data from an external MP3 file.------ > ar1, ar2  mp3in  ifilcod[, iskptim, iformat, iskipinit, ibufsize]--- > ar1  mp3in  ifilcod[, iskptim, iformat, iskipinit, ibufsize]------ csound doc: <http://csound.com/docs/manual/mp3in.html>-mp3in ::  Str -> (Sig,Sig)-mp3in b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "mp3in" ([Ar,Ar],[Sr,Ir,Ir,Ir,Ir]) [a1]---- | --- Reads audio data from an external device or stream.------ Reads audio data from an external device or stream.  Up to 24---       channels may be read before v5.14, extended to 40 in later versions.------ > ar1[, ar2[, ar3[, ... a24]]]  soundin  ifilcod [, iskptim] [, iformat] \--- >           [, iskipinit] [, ibufsize]------ csound doc: <http://csound.com/docs/manual/soundin.html>-soundin :: Tuple a => Str -> a-soundin b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "soundin" ((repeat Ar),[Sr,Ir,Ir,Ir,Ir]) [a1]---- Signal Output.---- | --- A MIDI delay opcode.------ >  mdelay  kstatus, kchan, kd1, kd2, kdelay------ csound doc: <http://csound.com/docs/manual/mdelay.html>-mdelay ::  Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-mdelay b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "mdelay" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Returns the audio spout frame.------ Returns the audio spout frame (if active), otherwise it returns zero.------ > aout1 [,aout2 ... aoutX]  monitor --- > aarra  monitor ------ csound doc: <http://csound.com/docs/manual/monitor.html>-monitor :: Tuple a =>  a-monitor  = pureTuple $ return $ f -    where f  = mopcs "monitor" ((repeat Ar),[]) []---- | --- Writes audio data to an external device or stream.------ Writes audio data to an external device or stream, either from---       audio variables or from an audio array.------ >  out  asig1[, asig2,....]--- >  out  aarray------ csound doc: <http://csound.com/docs/manual/out.html>-out ::  Sig -> SE ()-out b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "out" [(Xr,(repeat Ar))] [a1]---- | --- Writes 32-channel audio data to an external device or stream.------ >  out32  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, asig10, \--- >           asig11, asig12, asig13, asig14, asig15, asig16, asig17, asig18, \--- >           asig19, asig20, asig21, asig22, asig23, asig24, asig25, asig26, \--- >           asig27, asig28, asig29, asig30, asig31, asig32------ csound doc: <http://csound.com/docs/manual/out32.html>-out32 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-out32 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25 b26 b27 b28 b29 b30 b31 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unSig b12 <*> unSig b13 <*> unSig b14 <*> unSig b15 <*> unSig b16 <*> unSig b17 <*> unSig b18 <*> unSig b19 <*> unSig b20 <*> unSig b21 <*> unSig b22 <*> unSig b23 <*> unSig b24 <*> unSig b25 <*> unSig b26 <*> unSig b27 <*> unSig b28 <*> unSig b29 <*> unSig b30 <*> unSig b31-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 = opcs "out32" [(Xr-                                                                                                                                               ,[Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar-                                                                                                                                                ,Ar])] [a1-                                                                                                                                                       ,a2-                                                                                                                                                       ,a3-                                                                                                                                                       ,a4-                                                                                                                                                       ,a5-                                                                                                                                                       ,a6-                                                                                                                                                       ,a7-                                                                                                                                                       ,a8-                                                                                                                                                       ,a9-                                                                                                                                                       ,a10-                                                                                                                                                       ,a11-                                                                                                                                                       ,a12-                                                                                                                                                       ,a13-                                                                                                                                                       ,a14-                                                                                                                                                       ,a15-                                                                                                                                                       ,a16-                                                                                                                                                       ,a17-                                                                                                                                                       ,a18-                                                                                                                                                       ,a19-                                                                                                                                                       ,a20-                                                                                                                                                       ,a21-                                                                                                                                                       ,a22-                                                                                                                                                       ,a23-                                                                                                                                                       ,a24-                                                                                                                                                       ,a25-                                                                                                                                                       ,a26-                                                                                                                                                       ,a27-                                                                                                                                                       ,a28-                                                                                                                                                       ,a29-                                                                                                                                                       ,a30-                                                                                                                                                       ,a31]---- | --- Writes audio data with an arbitrary number of channels to an external device or stream.------ >  outc  asig1 [, asig2] [...]------ csound doc: <http://csound.com/docs/manual/outc.html>-outc ::  [Sig] -> SE ()-outc b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unSig b1-    where f a1 = opcs "outc" [(Xr,(repeat Ar))] a1---- | --- Writes multi-channel audio data, with user-controllable channels, to an external device or stream.------ >  outch  kchan1, asig1 [, kchan2] [, asig2] [...]------ csound doc: <http://csound.com/docs/manual/outch.html>-outch ::  Sig -> [Sig] -> SE ()-outch b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "outch" [(Xr,[Kr,Ar,Kr] ++ (repeat Ar))] ([a1] ++ a2)---- | --- Writes 6-channel audio data to an external device or stream.------ >  outh  asig1, asig2, asig3, asig4, asig5, asig6------ csound doc: <http://csound.com/docs/manual/outh.html>-outh ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outh b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "outh" [(Xr,[Ar,Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5,a6]---- | --- Writes 8-channel audio data to an external device or stream.------ >  outo  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8------ csound doc: <http://csound.com/docs/manual/outo.html>-outo ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outo b1 b2 b3 b4 b5 b6 b7 b8 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "outo" [(Xr,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar])] [a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4-                                                                                   ,a5-                                                                                   ,a6-                                                                                   ,a7-                                                                                   ,a8]---- | --- Writes 4-channel audio data to an external device or stream.------ >  outq  asig1, asig2, asig3, asig4------ csound doc: <http://csound.com/docs/manual/outq.html>-outq ::  Sig -> Sig -> Sig -> Sig -> SE ()-outq b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "outq" [(Xr,[Ar,Ar,Ar,Ar])] [a1,a2,a3,a4]---- | --- Writes samples to quad channel 1 of an external device or stream.------ >  outq1  asig------ csound doc: <http://csound.com/docs/manual/outq1.html>-outq1 ::  Sig -> SE ()-outq1 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outq1" [(Xr,[Ar])] [a1]---- | --- Writes samples to quad channel 2 of an external device or stream.------ >  outq2  asig------ csound doc: <http://csound.com/docs/manual/outq2.html>-outq2 ::  Sig -> SE ()-outq2 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outq2" [(Xr,[Ar])] [a1]---- | --- Writes samples to quad channel 3 of an external device or stream.------ >  outq3  asig------ csound doc: <http://csound.com/docs/manual/outq3.html>-outq3 ::  Sig -> SE ()-outq3 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outq3" [(Xr,[Ar])] [a1]---- | --- Writes samples to quad channel 4 of an external device or stream.------ >  outq4  asig------ csound doc: <http://csound.com/docs/manual/outq4.html>-outq4 ::  Sig -> SE ()-outq4 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outq4" [(Xr,[Ar])] [a1]---- | --- Allow output to a range of adjacent audio channels on the audio output device------ outrg outputs audio to a range of adjacent audio channels on the audio output device.------ >  outrg  kstart, aout1 [,aout2, aout3, ..., aoutN]------ csound doc: <http://csound.com/docs/manual/outrg.html>-outrg ::  Sig -> [Sig] -> SE ()-outrg b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "outrg" [(Xr,[Kr] ++ (repeat Ar))] ([a1] ++ a2)---- | --- Writes stereo audio data to an external device or stream.------ >  outs  asig1, asig2------ csound doc: <http://csound.com/docs/manual/outs.html>-outs ::  Sig -> Sig -> SE ()-outs b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "outs" [(Xr,[Ar,Ar])] [a1,a2]---- | --- Writes samples to stereo channel 1 of an external device or stream.------ >  outs1  asig------ csound doc: <http://csound.com/docs/manual/outs1.html>-outs1 ::  Sig -> SE ()-outs1 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outs1" [(Xr,[Ar])] [a1]---- | --- Writes samples to stereo channel 2 of an external device or stream.------ >  outs2  asig------ csound doc: <http://csound.com/docs/manual/outs2.html>-outs2 ::  Sig -> SE ()-outs2 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outs2" [(Xr,[Ar])] [a1]---- | --- Sends an i-rate or k-rate signal or string to a user-defined channel.------ Sends an irate or k-rate signal or string to a user-defined channel.------ >  outvalue  "channel name", ivalue--- >  outvalue  "channel name", kvalue--- >  outvalue  "channel name", "string"------ csound doc: <http://csound.com/docs/manual/outvalue.html>-outvalue ::  Str -> D -> SE ()-outvalue b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "outvalue" [(Xr,[Sr,Ir])] [a1,a2]---- | --- Writes 16-channel audio data to an external device or stream.------ >  outx  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, \--- >           asig9, asig10, asig11, asig12, asig13, asig14, asig15, asig16------ csound doc: <http://csound.com/docs/manual/outx.html>-outx ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()-outx b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9 <*> unSig b10 <*> unSig b11 <*> unSig b12 <*> unSig b13 <*> unSig b14 <*> unSig b15 <*> unSig b16-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 = opcs "outx" [(Xr-                                                                                  ,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar])] [a1-                                                                                                                                       ,a2-                                                                                                                                       ,a3-                                                                                                                                       ,a4-                                                                                                                                       ,a5-                                                                                                                                       ,a6-                                                                                                                                       ,a7-                                                                                                                                       ,a8-                                                                                                                                       ,a9-                                                                                                                                       ,a10-                                                                                                                                       ,a11-                                                                                                                                       ,a12-                                                                                                                                       ,a13-                                                                                                                                       ,a14-                                                                                                                                       ,a15-                                                                                                                                       ,a16]---- | --- Writes multi-channel audio data from a ZAK array to an external device or stream.------ >  outz  ksig1------ csound doc: <http://csound.com/docs/manual/outz.html>-outz ::  Sig -> SE ()-outz b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "outz" [(Xr,[Kr])] [a1]---- | --- Deprecated. Writes audio output to a disk file.------ The usage of soundout is discouraged. Please use  fout instead.------ >  soundout   asig1, ifilcod [, iformat]------ csound doc: <http://csound.com/docs/manual/soundout.html>-soundout ::  Sig -> Str -> SE ()-soundout b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = opcs "soundout" [(Xr,[Ar,Sr,Ir])] [a1,a2]---- | --- Deprecated. Writes audio output to a disk file.------ The usage of soundouts is discouraged. Please use  fout instead.------ >  soundouts   asigl, asigr, ifilcod [, iformat]------ csound doc: <http://csound.com/docs/manual/soundouts.html>-soundouts ::  Sig -> Sig -> Str -> SE ()-soundouts b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unStr b3-    where f a1 a2 a3 = opcs "soundouts" [(Xr,[Ar,Ar,Sr,Ir])] [a1,a2,a3]---- Software Bus.---- | --- Reads data from the software bus------ Reads data from a channel of the inward software bus.------ > kval  chani  kchan--- > aval  chani  kchan------ csound doc: <http://csound.com/docs/manual/chani.html>-chani ::  Sig -> SE Sig-chani b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "chani" [(Kr,[Kr]),(Ar,[Kr])] [a1]---- | --- Send data to the outwards software bus------ Send data to a channel of the outward software bus.------ >  chano  kval, kchan--- >  chano  aval, kchan------ csound doc: <http://csound.com/docs/manual/chano.html>-chano ::  Sig -> Sig -> SE ()-chano b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "chano" [(Xr,[Kr,Kr])] [a1,a2]---- | --- Declare a channel of the named software bus.------ Declare a channel of the named software bus, with setting optional---       parameters in the case of a control channel. If the channel does not---       exist yet, it is created, with an inital value of zero or empty string.---       Otherwise, the type (control, audio, or string) of the existing channel---       must match the declaration, or an init error occurs. The input/output---       mode of an existing channel is updated so that it becomes the bitwise---       OR of the previous and the newly specified value.------ >   chn_k  Sname, imode[, itype, idflt, imin, ima, ix, iy, iwidth, iheight, Sattributes]------ csound doc: <http://csound.com/docs/manual/chn.html>-chn_k ::  Str -> D -> SE ()-chn_k b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "chn_k" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Sr])] [a1,a2]---- | --- Declare a channel of the named software bus.------ Declare a channel of the named software bus, with setting optional---       parameters in the case of a control channel. If the channel does not---       exist yet, it is created, with an inital value of zero or empty string.---       Otherwise, the type (control, audio, or string) of the existing channel---       must match the declaration, or an init error occurs. The input/output---       mode of an existing channel is updated so that it becomes the bitwise---       OR of the previous and the newly specified value.------ >   chn_a  Sname, imode------ csound doc: <http://csound.com/docs/manual/chn.html>-chn_a ::  Str -> D -> SE ()-chn_a b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "chn_a" [(Xr,[Sr,Ir])] [a1,a2]---- | --- Declare a channel of the named software bus.------ Declare a channel of the named software bus, with setting optional---       parameters in the case of a control channel. If the channel does not---       exist yet, it is created, with an inital value of zero or empty string.---       Otherwise, the type (control, audio, or string) of the existing channel---       must match the declaration, or an init error occurs. The input/output---       mode of an existing channel is updated so that it becomes the bitwise---       OR of the previous and the newly specified value.------ >   chn_S  Sname, imode------ csound doc: <http://csound.com/docs/manual/chn.html>-chn_S ::  Str -> D -> SE ()-chn_S b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "chn_S" [(Xr,[Sr,Ir])] [a1,a2]---- | --- Clears an audio output channel of the named software bus.------ Clears an audio channel of the named software bus to zero.---       Implies declaring the channel with imode=2 (see also---       chn_a).------ >  chnclear  Sname------ csound doc: <http://csound.com/docs/manual/chnclear.html>-chnclear ::  Str -> SE ()-chnclear b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "chnclear" [(Xr,[Sr])] [a1]---- | --- Export a global variable as a channel of the bus.------ Export a global variable as a channel of the bus; the channel---       should not already exist, otherwise an init error occurs.---       This opcode is normally called from the orchestra header, and allows---       the host application to read or write orchestra variables directly,---       without having to use---       chnget or---       chnset to copy data.------ > gival  chnexport  Sname, imode[, itype, idflt, imin, imax]--- > gkval  chnexport  Sname, imode[, itype, idflt, imin, imax]--- > gaval  chnexport  Sname, imode--- > gSval  chnexport  Sname, imode------ csound doc: <http://csound.com/docs/manual/chnexport.html>-chnexport ::  Str -> D -> Str-chnexport b1 b2 = Str $ f <$> unStr b1 <*> unD b2-    where f a1 a2 = opcs "chnexport" [(Ir,[Sr,Ir,Ir,Ir,Ir,Ir])-                                     ,(Kr,[Sr,Ir,Ir,Ir,Ir,Ir])-                                     ,(Ar,[Sr,Ir])-                                     ,(Sr,[Sr,Ir])] [a1,a2]---- | --- Reads data from the software bus.------ Reads data from a channel of the inward named software bus.---       Implies declaring the channel with imode=1 (see also---       chn_k, chn_a, and chn_S).------ > ival  chnget  Sname--- > kval  chnget  Sname--- > aval  chnget  Sname--- > Sval  chnget  Sname------ csound doc: <http://csound.com/docs/manual/chnget.html>-chnget ::  Str -> SE Str-chnget b1 = fmap ( Str . return) $ SE $ (depT =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "chnget" [(Ir,[Sr]),(Kr,[Sr]),(Ar,[Sr]),(Sr,[Sr])] [a1]---- | --- Reads data from the software bus.------ Reads data from a channel of the inward named software bus.---       Implies declaring the channel with imode=1 (see also---       chn_k, chn_a, and chn_S).------ > Sval  chngetks  Sname------ csound doc: <http://csound.com/docs/manual/chnget.html>-chngetks ::  Str -> Str-chngetks b1 = Str $ f <$> unStr b1-    where f a1 = opcs "chngetks" [(Sr,[Sr])] [a1]---- | --- Writes audio data to the named software bus, mixing to the previous---       output.------ Adds an audio signal to a channel of the named software bus.---       Implies declaring the channel with imode=2 (see also---       chn_a).------ >  chnmix  aval, Sname------ csound doc: <http://csound.com/docs/manual/chnmix.html>-chnmix ::  Sig -> Str -> SE ()-chnmix b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = opcs "chnmix" [(Xr,[Ar,Sr])] [a1,a2]---- | --- Query parameters of a channel.------ Query parameters of a channel (if it does not exist, all---       returned values are zero).------ > itype, imode, ictltype, idflt, imin, imax  chnparams  Sname------ csound doc: <http://csound.com/docs/manual/chnparams.html>-chnparams :: Tuple a => Str -> a-chnparams b1 = pureTuple $ f <$> unStr b1-    where f a1 = mopcs "chnparams" ([Ir,Ir,Ir,Ir,Ir,Ir],[Sr]) [a1]---- | --- Writes data to the named software bus.------ Write to a channel of the named software bus. Implies declaring the---       channel with imod=2 (see also---       chn_k, chn_a, and chn_S).------ >  chnset  ival, Sname--- >  chnset  kval, Sname--- >  chnset  aval, Sname--- >  chnset  Sval, Sname------ csound doc: <http://csound.com/docs/manual/chnset.html>-chnset ::  D -> Str -> SE ()-chnset b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unStr b2-    where f a1 a2 = opcs "chnset" [(Xr,[Ir,Sr])] [a1,a2]---- | --- Writes data to the named software bus.------ Write to a channel of the named software bus. Implies declaring the---       channel with imod=2 (see also---       chn_k, chn_a, and chn_S).------ >  chnsetks  Sval, Sname------ csound doc: <http://csound.com/docs/manual/chnset.html>-chnsetks ::  Str -> Str -> SE ()-chnsetks b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "chnsetks" [(Xr,[Sr,Sr])] [a1,a2]---- | --- Sets the local ksmps value in an instrument or user-defined opcode block------ Sets the local ksmps value in an instrument or user-defined opcode block.------ >  setksmps  iksmps------ csound doc: <http://csound.com/docs/manual/setksmps.html>-setksmps ::  D -> SE ()-setksmps b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "setksmps" [(Xr,[Ir])] [a1]---- | --- Passes variables to a user-defined opcode block,------ The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument.------ > xinarg1 [, xinarg2] ... [xinargN]  xin ------ csound doc: <http://csound.com/docs/manual/xin.html>-xin :: Tuple a =>  a-xin  = pureTuple $ return $ f -    where f  = mopcs "xin" ((repeat Xr),[]) []---- | --- Retrieves variables from a user-defined opcode block,------ The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument.------ >  xout  xoutarg1 [, xoutarg2] ... [, xoutargN]------ csound doc: <http://csound.com/docs/manual/xout.html>-xout ::  [Sig] -> SE ()-xout b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unSig b1-    where f a1 = opcs "xout" [(Xr,(repeat Xr))] a1---- Printing and Display.---- | --- Displays the Fourier Transform of an audio or control signal.------ These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.------ >  dispfft  xsig, iprd, iwsiz [, iwtyp] [, idbout] [, iwtflg] [,imin] [,imax]------ csound doc: <http://csound.com/docs/manual/dispfft.html>-dispfft ::  Sig -> D -> D -> SE ()-dispfft b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "dispfft" [(Xr,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Displays the audio or control signals as an amplitude vs. time graph.------ These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.------ >  display  xsig, iprd [, inprds] [, iwtflg]------ csound doc: <http://csound.com/docs/manual/display.html>-display ::  Sig -> D -> SE ()-display b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "display" [(Xr,[Xr,Ir,Ir,Ir])] [a1,a2]---- | --- Allows text to be displayed from instruments like sliders------ Allows text to be displayed from instruments like sliders etc. (only on Unix and Windows at present)------ >  flashtxt   iwhich, String------ csound doc: <http://csound.com/docs/manual/flashtxt.html>-flashtxt ::  D -> Str -> SE ()-flashtxt b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unStr b2-    where f a1 a2 = opcs "flashtxt" [(Xr,[Ir,Sr])] [a1,a2]---- | --- Displays the values init (i-rate) variables.------ These units will print orchestra init-values.------ >  print  iarg [, iarg1] [, iarg2] [...]------ csound doc: <http://csound.com/docs/manual/print.html>-print' ::  [D] -> SE ()-print' b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unD b1-    where f a1 = opcs "print" [(Xr,(repeat Ir))] a1---- | --- printf-style formatted output------ printf and printf_i write---     formatted output, similarly to the C function---     printf(). printf_i runs at i-time only, while---     printf runs both at initialization and---     performance time.------ >  printf_i  Sfmt, itrig, [iarg1[, iarg2[, ... ]]]------ csound doc: <http://csound.com/docs/manual/printf.html>-printf_i ::  Str -> D -> [D] -> SE ()-printf_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> mapM unD b3-    where f a1 a2 a3 = opcs "printf_i" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2] ++ a3)---- | --- printf-style formatted output------ printf and printf_i write---     formatted output, similarly to the C function---     printf(). printf_i runs at i-time only, while---     printf runs both at initialization and---     performance time.------ >  printf  Sfmt, ktrig, [xarg1[, xarg2[, ... ]]]------ csound doc: <http://csound.com/docs/manual/printf.html>-printf ::  Str -> Sig -> [Sig] -> SE ()-printf b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "printf" [(Xr,[Sr,Kr] ++ (repeat Xr))] ([a1,a2] ++ a3)---- | --- Prints one k-rate value at specified intervals.------ >  printk  itime, kval [, ispace]------ csound doc: <http://csound.com/docs/manual/printk.html>-printk ::  D -> Sig -> SE ()-printk b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "printk" [(Xr,[Ir,Kr,Ir])] [a1,a2]---- | --- Prints a new value every time a control variable changes.------ >  printk2  kvar [, inumspaces]------ csound doc: <http://csound.com/docs/manual/printk2.html>-printk2 ::  Sig -> SE ()-printk2 b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "printk2" [(Xr,[Kr,Ir])] [a1]---- | --- Prints at k-rate using a printf() style syntax.------ >  printks  "string", itime [, kval1] [, kval2] [...]------ csound doc: <http://csound.com/docs/manual/printks.html>-printks ::  Str -> D -> [Sig] -> SE ()-printks b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unD b2 <*> mapM unSig b3-    where f a1 a2 a3 = opcs "printks" [(Xr,[Sr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)---- | --- Prints a new value every time a control variable changes using a---       printf() style syntax.------ >  printks2  "string", kval------ csound doc: <http://csound.com/docs/manual/printks2.html>-printks2 ::  Str -> Sig -> SE ()-printks2 b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "printks2" [(Xr,[Sr,Kr])] [a1,a2]---- | --- Prints at init-time using a printf() style syntax.------ >  prints  "string" [, kval1] [, kval2] [...]------ csound doc: <http://csound.com/docs/manual/prints.html>-prints ::  Str -> [Sig] -> SE ()-prints b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> mapM unSig b2-    where f a1 a2 = opcs "prints" [(Xr,[Sr] ++ (repeat Kr))] ([a1] ++ a2)---- Soundfile Queries.---- | --- Returns the number of bits in each sample in a sound file.------ > ir  filebit  ifilcod [, iallowraw]------ csound doc: <http://csound.com/docs/manual/filebit.html>-filebit ::  Str -> D-filebit b1 = D $ f <$> unStr b1-    where f a1 = opcs "filebit" [(Ir,[Sr,Ir])] [a1]---- | --- Returns the length of a sound file.------ > ir  filelen  ifilcod, [iallowraw]------ csound doc: <http://csound.com/docs/manual/filelen.html>-filelen ::  Str -> D-filelen b1 = D $ f <$> unStr b1-    where f a1 = opcs "filelen" [(Ir,[Sr,Ir])] [a1]---- | --- Returns the number of channels in a sound file.------ > ir  filenchnls  ifilcod [, iallowraw]------ csound doc: <http://csound.com/docs/manual/filenchnls.html>-filenchnls ::  Str -> D-filenchnls b1 = D $ f <$> unStr b1-    where f a1 = opcs "filenchnls" [(Ir,[Sr,Ir])] [a1]---- | --- Returns the peak absolute value of a sound file.------ > ir  filepeak  ifilcod [, ichnl]------ csound doc: <http://csound.com/docs/manual/filepeak.html>-filepeak ::  Str -> D-filepeak b1 = D $ f <$> unStr b1-    where f a1 = opcs "filepeak" [(Ir,[Sr,Ir])] [a1]---- | --- Returns the sample rate of a sound file.------ > ir  filesr  ifilcod [, iallowraw]------ csound doc: <http://csound.com/docs/manual/filesr.html>-filesr ::  Str -> D-filesr b1 = D $ f <$> unStr b1-    where f a1 = opcs "filesr" [(Ir,[Sr,Ir])] [a1]---- | --- Checks that a file can be used.------ Returns 1 if the sound file is valid, or 0 if not.------ > ir  filevalid  ifilcod------ csound doc: <http://csound.com/docs/manual/filevalid.html>-filevalid ::  Str -> D-filevalid b1 = D $ f <$> unStr b1-    where f a1 = opcs "filevalid" [(Ir,[Sr])] [a1]---- | --- Returns the length of an MP3 sound file.------ > ir  mp3len  ifilcod------ csound doc: <http://csound.com/docs/manual/mp3len.html>-mp3len ::  Str -> D-mp3len b1 = D $ f <$> unStr b1-    where f a1 = opcs "mp3len" [(Ir,[Sr])] [a1]+    dumpk, dumpk2, dumpk3, dumpk4, ficlose, fin, fini, fink, fiopen, fout, fouti, foutir, foutk, fprintks, fprints, hdf5read, hdf5write, readf, readfi, readk, readk2, readk3, readk4, websocket,+    +    -- * Signal Input.+    diskin, diskin2, in', in32, inch, inh, ino, inq, inrg, ins, invalue, inx, inz, mp3in, soundin,+    +    -- * Signal Output.+    mdelay, monitor, out, out32, outall, outc, outch, outh, outo, outq, outq1, outq2, outq3, outq4, outrg, outs, outs1, outs2, outvalue, outx, outz, soundout, soundouts,+    +    -- * Software Bus.+    chani, chano, chn_k, chn_a, chn_S, chnclear, chnexport, chnget, chngetks, chngeti, chngetk, chngeta, chngets, chnmix, chnparams, chnset, chnsetks, chnseti, chnsetk, chnseta, chnsets, setksmps, xin, xout,+    +    -- * Printing and Display.+    dispfft, display, flashtxt, print', printf_i, printf, printk, printk2, printks, printks2, println, prints, printsk,+    +    -- * Soundfile Queries.+    filebit, filelen, filenchnls, filepeak, filesr, filevalid, mp3len) where++import Control.Monad.Trans.Class+import Control.Monad+import Csound.Dynamic+import Csound.Typed++-- File I/O.++-- | +-- Periodically writes an orchestra control-signal value to an external file.+--+-- Periodically writes an orchestra control-signal value to a named external file in a specific format.+--+-- >  dumpk   ksig, ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/dumpk.html>+dumpk ::  Sig -> Str -> D -> D -> SE ()+dumpk b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "dumpk" [(Xr,[Kr,Sr,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Periodically writes two orchestra control-signal values to an external file.+--+-- Periodically writes two orchestra control-signal values to a named external file in a specific format.+--+-- >  dumpk2  ksig1, ksig2, ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/dumpk2.html>+dumpk2 ::  Sig -> Sig -> Str -> D -> D -> SE ()+dumpk2 b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unStr) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "dumpk2" [(Xr,[Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Periodically writes three orchestra control-signal values to an external file.+--+-- Periodically writes three orchestra control-signal values to a named external file in a specific format.+--+-- >  dumpk3  ksig1, ksig2, ksig3, ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/dumpk3.html>+dumpk3 ::  Sig -> Sig -> Sig -> Str -> D -> D -> SE ()+dumpk3 b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unStr) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "dumpk3" [(Xr,[Kr,Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Periodically writes four orchestra control-signal values to an external file.+--+-- Periodically writes four orchestra control-signal values to a named external file in a specific format.+--+-- >  dumpk4  ksig1, ksig2, ksig3, ksig4, ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/dumpk4.html>+dumpk4 ::  Sig -> Sig -> Sig -> Sig -> Str -> D -> D -> SE ()+dumpk4 b1 b2 b3 b4 b5 b6 b7 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unStr) b5 <*> (lift . unD) b6 <*> (lift . unD) b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcsDep_ "dumpk4" [(Xr,[Kr,Kr,Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- Closes a previously opened file.+--+-- ficlose can be used to close a file which was opened with fiopen.+--+-- >  ficlose  ihandle+-- >  ficlose  Sfilename+--+-- csound doc: <https://csound.com/docs/manual/ficlose.html>+ficlose ::  D -> SE ()+ficlose b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "ficlose" [(Xr,[Ir])] [a1]++-- | +-- Read signals from a file at a-rate.+--+-- >  fin  ifilename, iskipframes, iformat, ain1 [, ain2] [, ain3] [,...]+-- >  fin  ifilename, iskipframes, iformat, arr[]+--+-- csound doc: <https://csound.com/docs/manual/fin.html>+fin ::  Str -> D -> D -> [Sig] -> SE ()+fin b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fin" [(Xr,[Sr,Ir,Ir] ++ (repeat Ar))] ([a1,a2,a3] ++ a4)++-- | +-- Read signals from a file at i-rate.+--+-- >  fini  ifilename, iskipframes, iformat, in1 [, in2] [, in3] [, ...]+--+-- csound doc: <https://csound.com/docs/manual/fini.html>+fini ::  Str -> D -> D -> [D] -> SE ()+fini b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fini" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2,a3] ++ a4)++-- | +-- Read signals from a file at k-rate.+--+-- >  fink  ifilename, iskipframes, iformat, kin1 [, kin2] [, kin3] [,...]+--+-- csound doc: <https://csound.com/docs/manual/fink.html>+fink ::  Str -> D -> D -> [Sig] -> SE ()+fink b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fink" [(Xr,[Sr,Ir,Ir] ++ (repeat Kr))] ([a1,a2,a3] ++ a4)++-- | +-- Opens a file in a specific mode.+--+-- fiopen can be used to open a file in one of the specified modes.+--+-- > ihandle  fiopen  ifilename, imode+--+-- csound doc: <https://csound.com/docs/manual/fiopen.html>+fiopen ::  Str -> D -> SE D+fiopen b1 b2 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "fiopen" [(Ir,[Sr,Ir])] [a1,a2]++-- | +-- Outputs a-rate signals to an arbitrary number of channels.+--+-- fout outputs N a-rate signals to a specified file of N channels.+--+-- >  fout  ifilename, iformat, aout1 [, aout2, aout3,...,aoutN]+-- >  fout  ifilename, iformat, array[]+--+-- csound doc: <https://csound.com/docs/manual/fout.html>+fout ::  Str -> D -> [Sig] -> SE ()+fout b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> mapM (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "fout" [(Xr,[Sr,Ir] ++ (repeat Ar))] ([a1,a2] ++ a3)++-- | +-- Outputs i-rate signals of an arbitrary number of channels to a specified file.+--+-- fouti output N i-rate signals to a specified file of N channels.+--+-- >  fouti  ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]+--+-- csound doc: <https://csound.com/docs/manual/fouti.html>+fouti ::  Str -> D -> D -> [D] -> SE ()+fouti b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "fouti" [(Xr,(repeat Ir))] ([a1,a2,a3] ++ a4)++-- | +-- Outputs i-rate signals from an arbitrary number of channels to a specified file.+--+-- foutir output N i-rate signals to a specified file of N channels.+--+-- >  foutir  ihandle, iformat, iflag, iout1 [, iout2, iout3,....,ioutN]+--+-- csound doc: <https://csound.com/docs/manual/foutir.html>+foutir ::  Str -> D -> D -> [D] -> SE ()+foutir b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> mapM (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "foutir" [(Xr,(repeat Ir))] ([a1,a2,a3] ++ a4)++-- | +-- Outputs k-rate signals of an arbitrary number of channels to a specified file, in raw (headerless) format.+--+-- foutk outputs N k-rate signals to a specified file of N channels.+--+-- >  foutk  ifilename, iformat, kout1 [, kout2, kout3,....,koutN]+--+-- csound doc: <https://csound.com/docs/manual/foutk.html>+foutk ::  Str -> D -> [Sig] -> SE ()+foutk b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> mapM (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "foutk" [(Xr,[Sr,Ir] ++ (repeat Kr))] ([a1,a2] ++ a3)++-- | +-- Similar to printks but prints to a file.+--+-- >  fprintks  "filename", "string", [, kval1] [, kval2] [...]+--+-- csound doc: <https://csound.com/docs/manual/fprintks.html>+fprintks ::  Str -> Str -> [Sig] -> SE ()+fprintks b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2 <*> mapM (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "fprintks" [(Xr,[Sr,Sr] ++ (repeat Kr))] ([a1,a2] ++ a3)++-- | +-- Similar to prints but prints to a file.+--+-- >  fprints  "filename", "string" [, ival1] [, ival2] [...]+--+-- csound doc: <https://csound.com/docs/manual/fprints.html>+fprints ::  Str -> Str -> [D] -> SE ()+fprints b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2 <*> mapM (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "fprints" [(Xr,[Sr,Sr] ++ (repeat Ir))] ([a1,a2] ++ a3)++-- | +-- Read signals and arrays from an hdf5 file.+--+-- hdf5read reads N signals and arrays from a specified hdf5 file.+--+-- > xout1[, xout2, xout3, ..., xoutN]  hdf5read  ifilename, ivariablename1[, ivariablename2, ivariablename3, ..., ivariablenameN]+--+-- csound doc: <https://csound.com/docs/manual/hdf5read.html>+hdf5read :: forall a . Tuple a => Str -> D -> a+hdf5read b1 b2 =+  pureTuple $ f <$> unStr b1 <*> unD b2+  where+    f a1 a2 = mopcs "hdf5read" ((repeat Xr),[Sr] ++ (repeat Ir)) [a1,a2]++-- | +-- Write signals and arrays to an hdf5 file.+--+-- hdf5write writes N signals and arrays to a specified hdf5 file.+--+-- >  hdf5write  ifilename, xout1[, xout2, xout3, ..., xoutN]+--+-- csound doc: <https://csound.com/docs/manual/hdf5write.html>+hdf5write ::  Str -> Sig -> SE ()+hdf5write b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "hdf5write" [(Xr,[Sr] ++ (repeat Xr))] [a1,a2]++-- | +-- Read a line of text from an external file.+--+-- Read a line of text from an external file once each k-cycle.+--+-- > Sres, kline  readf  ifilname+--+-- csound doc: <https://csound.com/docs/manual/readf.html>+readf ::  Str -> (Str,Sig)+readf b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "readf" ([Sr,Kr],[Sr]) [a1]++-- | +-- Read a line of text from an external file.+--+-- Read a line of text from an external file once on initialisation.+--+-- > Sres, iline  readfi  ifilname+--+-- csound doc: <https://csound.com/docs/manual/readfi.html>+readfi ::  Str -> (Str,D)+readfi b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "readfi" ([Sr,Ir],[Sr]) [a1]++-- | +-- Periodically reads an orchestra control-signal value from an external file.+--+-- Periodically reads an orchestra control-signal value from a named external file in a specific format.+--+-- > kres  readk  ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/readk.html>+readk ::  Str -> D -> D -> Sig+readk b1 b2 b3 =+  Sig $ f <$> unStr b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "readk" [(Kr,[Sr,Ir,Ir])] [a1,a2,a3]++-- | +-- Periodically reads two orchestra control-signal values from an external file.+--+-- > kr1, kr2  readk2  ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/readk2.html>+readk2 ::  Str -> D -> D -> (Sig,Sig)+readk2 b1 b2 b3 =+  pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "readk2" ([Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]++-- | +-- Periodically reads three orchestra control-signal values from an external file.+--+-- > kr1, kr2, kr3  readk3  ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/readk3.html>+readk3 ::  Str -> D -> D -> (Sig,Sig,Sig)+readk3 b1 b2 b3 =+  pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "readk3" ([Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]++-- | +-- Periodically reads four orchestra control-signal values from an external file.+--+-- > kr1, kr2, kr3, kr4  readk4  ifilname, iformat, iprd+--+-- csound doc: <https://csound.com/docs/manual/readk4.html>+readk4 ::  Str -> D -> D -> (Sig,Sig,Sig,Sig)+readk4 b1 b2 b3 =+  pureTuple $ f <$> unStr b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "readk4" ([Kr,Kr,Kr,Kr],[Sr,Ir,Ir]) [a1,a2,a3]++-- | ++--+-- > xout1[, xout2, xout3, ..., xoutN]  websocket  iport, xin+--+-- csound doc: <https://csound.com/docs/manual/websocket.html>+websocket :: forall a . Tuple a => D -> Sig -> a+websocket b1 b2 =+  pureTuple $ f <$> unD b1 <*> unSig b2+  where+    f a1 a2 = mopcs "websocket" ((repeat Xr),[Ir,Xr]) [a1,a2]++-- Signal Input.++-- | +-- Reads audio data from an external device or stream and can alter its pitch.+--+-- > ar1 [, ar2 [, ar3 [, ... arN]]]  diskin  ifilcod[, kpitch[, iskiptim \+-- >           [, iwraparound[, iformat[, iskipinit]]]]]+-- > ar1[]  diskin  ifilcod[, kpitch[, iskiptim \+-- >           [, iwraparound[, iformat[, iskipinit]]]]]+--+-- csound doc: <https://csound.com/docs/manual/diskin.html>+diskin :: forall a . Tuple a => Str -> a+diskin b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "diskin" ((repeat Ar),[Sr,Kr,Ir,Ir,Ir,Ir]) [a1]++-- | +-- Reads audio data from a file, and can alter its pitch using one of several+--       available interpolation types, as well as convert the sample rate to match+--       the orchestra sr setting.+--+-- Reads audio data from a file, and can alter its pitch using+-- 	one of several available interpolation types, as well as+-- 	convert the sample rate to match the orchestra sr+-- 	setting. diskin2 can also read+-- 	multichannel files with any number of channels in the range 1+-- 	to 24 in versions before 5.14, and 40 after.+--+-- > a1[, a2[, ... aN]]  diskin2  ifilcod[, kpitch[, iskiptim \+-- >           [, iwrap[, iformat[, iwsize[, ibufsize[, iskipinit]]]]]]]+-- > ar1[]  diskin2  ifilcod[, kpitch[, iskiptim \+-- >           [, iwrap[, iformat[, iwsize[, ibufsize[, iskipinit]]]]]]]+--+-- csound doc: <https://csound.com/docs/manual/diskin2.html>+diskin2 :: forall a . Tuple a => Str -> a+diskin2 b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "diskin2" ((repeat Ar),[Sr,Kr,Ir,Ir,Ir,Ir,Ir,Ir]) [a1]++-- | +-- Reads mono audio data from an external device or stream.+--+-- Reads audio data from an external device or stream.+--+-- > ar1  in +-- > aarray  in +--+-- csound doc: <https://csound.com/docs/manual/in.html>+in' ::   Sig+in'  =+  Sig $ return $ f +  where+    f  = opcs "in" [(Ar,[]),(Ar,[])] []++-- | +-- Reads a 32-channel audio signal from an external device or stream.+--+-- > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, ar13, ar14, \+-- >           ar15, ar16, ar17, ar18, ar19, ar20, ar21, ar22, ar23, ar24, ar25, ar26, \+-- >           ar27, ar28, ar29, ar30, ar31, ar32  in32 +--+-- csound doc: <https://csound.com/docs/manual/in32.html>+in32 :: forall a . Tuple a =>  a+in32  =+  pureTuple $ return $ f +  where+    f  = mopcs "in32" ([Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar+                       ,Ar]+                      ,[]) []++-- | +-- Reads from numbered channels in an external audio signal or stream.+--+-- > ain1[, ...]  inch  kchan1[,...]+--+-- csound doc: <https://csound.com/docs/manual/inch.html>+inch :: forall a . Tuple a => [Sig] -> a+inch b1 =+  pureTuple $ f <$> mapM unSig b1+  where+    f a1 = mopcs "inch" ((repeat Ar),(repeat Kr)) a1++-- | +-- Reads six-channel audio data from an external device or stream.+--+-- > ar1, ar2, ar3, ar4, ar5, ar6  inh +--+-- csound doc: <https://csound.com/docs/manual/inh.html>+inh :: forall a . Tuple a =>  a+inh  =+  pureTuple $ return $ f +  where+    f  = mopcs "inh" ([Ar,Ar,Ar,Ar,Ar,Ar],[]) []++-- | +-- Reads eight-channel audio data from an external device or stream.+--+-- > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8  ino +--+-- csound doc: <https://csound.com/docs/manual/ino.html>+ino :: forall a . Tuple a =>  a+ino  =+  pureTuple $ return $ f +  where+    f  = mopcs "ino" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar],[]) []++-- | +-- Reads quad audio data from an external device or stream.+--+-- > ar1, ar2,  ar3, a4  inq +--+-- csound doc: <https://csound.com/docs/manual/inq.html>+inq ::   (Sig,Sig,Sig,Sig)+inq  =+  pureTuple $ return $ f +  where+    f  = mopcs "inq" ([Ar,Ar,Ar,Ar],[]) []++-- | +-- Allow input from a range of adjacent audio channels from the audio input device+--+-- inrg reads audio from a range of adjacent audio channels from the audio input device.+--+-- >  inrg  kstart, ain1 [,ain2, ain3, ..., ainN]+--+-- csound doc: <https://csound.com/docs/manual/inrg.html>+inrg ::  Sig -> [Sig] -> SE ()+inrg b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> mapM (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "inrg" [(Xr,[Kr] ++ (repeat Ar))] ([a1] ++ a2)++-- | +-- Reads stereo audio data from an external device or stream.+--+-- > ar1, ar2  ins +--+-- csound doc: <https://csound.com/docs/manual/ins.html>+ins ::   (Sig,Sig)+ins  =+  pureTuple $ return $ f +  where+    f  = mopcs "ins" ([Ar,Ar],[]) []++-- | +-- Reads a k-rate signal from a user-defined channel.+--+-- Reads a k-rate or i-rate signal or string from a user-defined channel.+--+-- > ivalue  invalue  "channel name"+-- > kvalue  invalue  "channel name"+-- > Sname  invalue  "channel name"+--+-- csound doc: <https://csound.com/docs/manual/invalue.html>+invalue ::  Str -> Str+invalue b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "invalue" [(Ir,[Sr]),(Kr,[Sr]),(Sr,[Sr])] [a1]++-- | +-- Reads a 16-channel audio signal from an external device or stream.+--+-- > ar1, ar2, ar3, ar4, ar5, ar6, ar7, ar8, ar9, ar10, ar11, ar12, \+-- >           ar13, ar14, ar15, ar16  inx +--+-- csound doc: <https://csound.com/docs/manual/inx.html>+inx :: forall a . Tuple a =>  a+inx  =+  pureTuple $ return $ f +  where+    f  = mopcs "inx" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar],[]) []++-- | +-- Reads multi-channel audio samples into a ZAK array from an external device or stream.+--+-- >  inz  ksig1+--+-- csound doc: <https://csound.com/docs/manual/inz.html>+inz ::  Sig -> SE ()+inz b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "inz" [(Xr,[Kr])] [a1]++-- | +-- Reads mono or stereo audio data from an external MP3 file.+--+-- > ar1, ar2  mp3in  ifilcod[, iskptim, iformat, iskipinit, ibufsize]+-- > ar1  mp3in  ifilcod[, iskptim, iformat, iskipinit, ibufsize]+--+-- csound doc: <https://csound.com/docs/manual/mp3in.html>+mp3in ::  Str -> (Sig,Sig)+mp3in b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "mp3in" ([Ar,Ar],[Sr,Ir,Ir,Ir,Ir]) [a1]++-- | +-- Reads audio data from an external device or stream.+--+-- Reads audio data from an external device or stream.  Up to 24+--       channels may be read before v5.14, extended to 40 in later versions.+--+-- > ar1[, ar2[, ar3[, ... a24]]]  soundin  ifilcod [, iskptim] [, iformat] \+-- >           [, iskipinit] [, ibufsize]+--+-- csound doc: <https://csound.com/docs/manual/soundin.html>+soundin :: forall a . Tuple a => Str -> a+soundin b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "soundin" ((repeat Ar),[Sr,Ir,Ir,Ir,Ir]) [a1]++-- Signal Output.++-- | +-- A MIDI delay opcode.+--+-- >  mdelay  kstatus, kchan, kd1, kd2, kdelay+--+-- csound doc: <https://csound.com/docs/manual/mdelay.html>+mdelay ::  Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+mdelay b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "mdelay" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]++-- | +-- Returns the audio spout frame.+--+-- Returns the audio spout frame (if active), otherwise it returns zero.+--+-- > aout1 [,aout2 ... aoutX]  monitor +-- > aarra  monitor +--+-- csound doc: <https://csound.com/docs/manual/monitor.html>+monitor :: forall a . Tuple a =>  a+monitor  =+  pureTuple $ return $ f +  where+    f  = mopcs "monitor" ((repeat Ar),[]) []++-- | +-- Writes audio data to an external device or stream.+--+-- Writes audio data to an external device or stream, either from+--       audio variables or from an audio array.+--+-- >  out  asig1[, asig2,....]+-- >  out  aarray+--+-- csound doc: <https://csound.com/docs/manual/out.html>+out ::  Sig -> SE ()+out b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "out" [(Xr,(repeat Ar))] [a1]++-- | +-- Writes 32-channel audio data to an external device or stream.+--+-- >  out32  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, asig10, \+-- >           asig11, asig12, asig13, asig14, asig15, asig16, asig17, asig18, \+-- >           asig19, asig20, asig21, asig22, asig23, asig24, asig25, asig26, \+-- >           asig27, asig28, asig29, asig30, asig31, asig32+--+-- csound doc: <https://csound.com/docs/manual/out32.html>+out32 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+out32 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25 b26 b27 b28 b29 b30 b31 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6 <*> (lift . unSig) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9 <*> (lift . unSig) b10 <*> (lift . unSig) b11 <*> (lift . unSig) b12 <*> (lift . unSig) b13 <*> (lift . unSig) b14 <*> (lift . unSig) b15 <*> (lift . unSig) b16 <*> (lift . unSig) b17 <*> (lift . unSig) b18 <*> (lift . unSig) b19 <*> (lift . unSig) b20 <*> (lift . unSig) b21 <*> (lift . unSig) b22 <*> (lift . unSig) b23 <*> (lift . unSig) b24 <*> (lift . unSig) b25 <*> (lift . unSig) b26 <*> (lift . unSig) b27 <*> (lift . unSig) b28 <*> (lift . unSig) b29 <*> (lift . unSig) b30 <*> (lift . unSig) b31+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a29 a30 a31 = opcsDep_ "out32" [(Xr+                                                                                                                                             ,[Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar+                                                                                                                                              ,Ar])] [a1+                                                                                                                                                     ,a2+                                                                                                                                                     ,a3+                                                                                                                                                     ,a4+                                                                                                                                                     ,a5+                                                                                                                                                     ,a6+                                                                                                                                                     ,a7+                                                                                                                                                     ,a8+                                                                                                                                                     ,a9+                                                                                                                                                     ,a10+                                                                                                                                                     ,a11+                                                                                                                                                     ,a12+                                                                                                                                                     ,a13+                                                                                                                                                     ,a14+                                                                                                                                                     ,a15+                                                                                                                                                     ,a16+                                                                                                                                                     ,a17+                                                                                                                                                     ,a18+                                                                                                                                                     ,a19+                                                                                                                                                     ,a20+                                                                                                                                                     ,a21+                                                                                                                                                     ,a22+                                                                                                                                                     ,a23+                                                                                                                                                     ,a24+                                                                                                                                                     ,a25+                                                                                                                                                     ,a26+                                                                                                                                                     ,a27+                                                                                                                                                     ,a28+                                                                                                                                                     ,a29+                                                                                                                                                     ,a30+                                                                                                                                                     ,a31]++-- | ++--+-- >  outall  asig+--+-- csound doc: <https://csound.com/docs/manual/outall.html>+outall ::  Sig -> SE ()+outall b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outall" [(Xr,[Ar])] [a1]++-- | +-- Writes audio data with an arbitrary number of channels to an external device or stream.+--+-- >  outc  asig1 [, asig2] [...]+--+-- csound doc: <https://csound.com/docs/manual/outc.html>+outc ::  [Sig] -> SE ()+outc b1 =+  SE $ join $ f <$> mapM (lift . unSig) b1+  where+    f a1 = opcsDep_ "outc" [(Xr,(repeat Ar))] a1++-- | +-- Writes multi-channel audio data, with user-controllable channels, to an external device or stream.+--+-- >  outch  kchan1, asig1 [, kchan2] [, asig2] [...]+--+-- csound doc: <https://csound.com/docs/manual/outch.html>+outch ::  Sig -> [Sig] -> SE ()+outch b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> mapM (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outch" [(Xr,[Kr,Ar,Kr] ++ (repeat Ar))] ([a1] ++ a2)++-- | +-- Writes 6-channel audio data to an external device or stream.+--+-- >  outh  asig1, asig2, asig3, asig4, asig5, asig6+--+-- csound doc: <https://csound.com/docs/manual/outh.html>+outh ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+outh b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "outh" [(Xr,[Ar,Ar,Ar,Ar,Ar,Ar])] [a1,a2,a3,a4,a5,a6]++-- | +-- Writes 8-channel audio data to an external device or stream.+--+-- >  outo  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8+--+-- csound doc: <https://csound.com/docs/manual/outo.html>+outo ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+outo b1 b2 b3 b4 b5 b6 b7 b8 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6 <*> (lift . unSig) b7 <*> (lift . unSig) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcsDep_ "outo" [(Xr,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar])] [a1+                                                                                 ,a2+                                                                                 ,a3+                                                                                 ,a4+                                                                                 ,a5+                                                                                 ,a6+                                                                                 ,a7+                                                                                 ,a8]++-- | +-- Writes 4-channel audio data to an external device or stream.+--+-- >  outq  asig1, asig2, asig3, asig4+--+-- csound doc: <https://csound.com/docs/manual/outq.html>+outq ::  Sig -> Sig -> Sig -> Sig -> SE ()+outq b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "outq" [(Xr,[Ar,Ar,Ar,Ar])] [a1,a2,a3,a4]++-- | +-- Writes samples to quad channel 1 of an external device or stream.+--+-- >  outq1  asig+--+-- csound doc: <https://csound.com/docs/manual/outq1.html>+outq1 ::  Sig -> SE ()+outq1 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outq1" [(Xr,[Ar])] [a1]++-- | +-- Writes samples to quad channel 2 of an external device or stream.+--+-- >  outq2  asig+--+-- csound doc: <https://csound.com/docs/manual/outq2.html>+outq2 ::  Sig -> SE ()+outq2 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outq2" [(Xr,[Ar])] [a1]++-- | +-- Writes samples to quad channel 3 of an external device or stream.+--+-- >  outq3  asig+--+-- csound doc: <https://csound.com/docs/manual/outq3.html>+outq3 ::  Sig -> SE ()+outq3 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outq3" [(Xr,[Ar])] [a1]++-- | +-- Writes samples to quad channel 4 of an external device or stream.+--+-- >  outq4  asig+--+-- csound doc: <https://csound.com/docs/manual/outq4.html>+outq4 ::  Sig -> SE ()+outq4 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outq4" [(Xr,[Ar])] [a1]++-- | +-- Allow output to a range of adjacent audio channels on the audio output device+--+-- outrg outputs audio to a range of adjacent audio channels on the audio output device.+--+-- >  outrg  kstart, aout1 [,aout2, aout3, ..., aoutN]+--+-- csound doc: <https://csound.com/docs/manual/outrg.html>+outrg ::  Sig -> [Sig] -> SE ()+outrg b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> mapM (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outrg" [(Xr,[Kr] ++ (repeat Ar))] ([a1] ++ a2)++-- | +-- Writes stereo audio data to an external device or stream.+--+-- >  outs  asig1, asig2+--+-- csound doc: <https://csound.com/docs/manual/outs.html>+outs ::  Sig -> Sig -> SE ()+outs b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "outs" [(Xr,[Ar,Ar])] [a1,a2]++-- | +-- Writes samples to stereo channel 1 of an external device or stream.+--+-- >  outs1  asig+--+-- csound doc: <https://csound.com/docs/manual/outs1.html>+outs1 ::  Sig -> SE ()+outs1 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outs1" [(Xr,[Ar])] [a1]++-- | +-- Writes samples to stereo channel 2 of an external device or stream.+--+-- >  outs2  asig+--+-- csound doc: <https://csound.com/docs/manual/outs2.html>+outs2 ::  Sig -> SE ()+outs2 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outs2" [(Xr,[Ar])] [a1]++-- | +-- Sends an i-rate or k-rate signal or string to a user-defined channel.+--+-- Sends an irate or k-rate signal or string to a user-defined channel.+--+-- >  outvalue  "channel name", ivalue+-- >  outvalue  "channel name", kvalue+-- >  outvalue  "channel name", "string"+--+-- csound doc: <https://csound.com/docs/manual/outvalue.html>+outvalue ::  Str -> D -> SE ()+outvalue b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "outvalue" [(Xr,[Sr,Ir])] [a1,a2]++-- | +-- Writes 16-channel audio data to an external device or stream.+--+-- >  outx  asig1, asig2, asig3, asig4, asig5, asig6, asig7, asig8, \+-- >           asig9, asig10, asig11, asig12, asig13, asig14, asig15, asig16+--+-- csound doc: <https://csound.com/docs/manual/outx.html>+outx ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+outx b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6 <*> (lift . unSig) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9 <*> (lift . unSig) b10 <*> (lift . unSig) b11 <*> (lift . unSig) b12 <*> (lift . unSig) b13 <*> (lift . unSig) b14 <*> (lift . unSig) b15 <*> (lift . unSig) b16+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 = opcsDep_ "outx" [(Xr+                                                                                ,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar])] [a1+                                                                                                                                     ,a2+                                                                                                                                     ,a3+                                                                                                                                     ,a4+                                                                                                                                     ,a5+                                                                                                                                     ,a6+                                                                                                                                     ,a7+                                                                                                                                     ,a8+                                                                                                                                     ,a9+                                                                                                                                     ,a10+                                                                                                                                     ,a11+                                                                                                                                     ,a12+                                                                                                                                     ,a13+                                                                                                                                     ,a14+                                                                                                                                     ,a15+                                                                                                                                     ,a16]++-- | +-- Writes multi-channel audio data from a ZAK array to an external device or stream.+--+-- >  outz  ksig1+--+-- csound doc: <https://csound.com/docs/manual/outz.html>+outz ::  Sig -> SE ()+outz b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "outz" [(Xr,[Kr])] [a1]++-- | +-- Deprecated. Writes audio output to a disk file.+--+-- The usage of soundout is discouraged. Please use  fout instead.+--+-- >  soundout   asig1, ifilcod [, iformat]+--+-- csound doc: <https://csound.com/docs/manual/soundout.html>+soundout ::  Sig -> Str -> SE ()+soundout b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "soundout" [(Xr,[Ar,Sr,Ir])] [a1,a2]++-- | +-- Deprecated. Writes audio output to a disk file.+--+-- The usage of soundouts is discouraged. Please use  fout instead.+--+-- >  soundouts   asigl, asigr, ifilcod [, iformat]+--+-- csound doc: <https://csound.com/docs/manual/soundouts.html>+soundouts ::  Sig -> Sig -> Str -> SE ()+soundouts b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unStr) b3+  where+    f a1 a2 a3 = opcsDep_ "soundouts" [(Xr,[Ar,Ar,Sr,Ir])] [a1,a2,a3]++-- Software Bus.++-- | +-- Reads data from the software bus+--+-- Reads data from a channel of the inward software bus.+--+-- > kval  chani  kchan+-- > aval  chani  kchan+--+-- csound doc: <https://csound.com/docs/manual/chani.html>+chani ::  Sig -> SE Sig+chani b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "chani" [(Kr,[Kr]),(Ar,[Kr])] [a1]++-- | +-- Send data to the outwards software bus+--+-- Send data to a channel of the outward software bus.+--+-- >  chano  kval, kchan+-- >  chano  aval, kchan+--+-- csound doc: <https://csound.com/docs/manual/chano.html>+chano ::  Sig -> Sig -> SE ()+chano b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "chano" [(Xr,[Kr,Kr])] [a1,a2]++-- | +-- Declare a channel of the named software bus.+--+-- Declare a channel of the named software bus, with setting optional+--       parameters in the case of a control channel. If the channel does not+--       exist yet, it is created, with an inital value of zero or empty string.+--       Otherwise, the type (control, audio, or string) of the existing channel+--       must match the declaration, or an init error occurs. The input/output+--       mode of an existing channel is updated so that it becomes the bitwise+--       OR of the previous and the newly specified value.+--+-- >   chn_k  Sname, imode[, itype, idflt, imin, ima, ix, iy,+-- >           iwidth, iheight, Sattributes]+--+-- csound doc: <https://csound.com/docs/manual/chn.html>+chn_k ::  Str -> D -> SE ()+chn_k b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "chn_k" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Sr])] [a1,a2]++-- | +-- Declare a channel of the named software bus.+--+-- Declare a channel of the named software bus, with setting optional+--       parameters in the case of a control channel. If the channel does not+--       exist yet, it is created, with an inital value of zero or empty string.+--       Otherwise, the type (control, audio, or string) of the existing channel+--       must match the declaration, or an init error occurs. The input/output+--       mode of an existing channel is updated so that it becomes the bitwise+--       OR of the previous and the newly specified value.+--+-- >   chn_a  Sname, imode+--+-- csound doc: <https://csound.com/docs/manual/chn.html>+chn_a ::  Str -> D -> SE ()+chn_a b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "chn_a" [(Xr,[Sr,Ir])] [a1,a2]++-- | +-- Declare a channel of the named software bus.+--+-- Declare a channel of the named software bus, with setting optional+--       parameters in the case of a control channel. If the channel does not+--       exist yet, it is created, with an inital value of zero or empty string.+--       Otherwise, the type (control, audio, or string) of the existing channel+--       must match the declaration, or an init error occurs. The input/output+--       mode of an existing channel is updated so that it becomes the bitwise+--       OR of the previous and the newly specified value.+--+-- >   chn_S  Sname, imode+-- >   chn_S  Sname, Smode+--+-- csound doc: <https://csound.com/docs/manual/chn.html>+chn_S ::  Str -> D -> SE ()+chn_S b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "chn_S" [(Xr,[Sr,Ir])] [a1,a2]++-- | +-- Clears an audio output channel of the named software bus.+--+-- Clears an audio channel of the named software bus to zero.+--       Implies declaring the channel with imode=2 (see also+--       chn_a).+--+-- >  chnclear  Sname1[, Sname2,...]+--+-- csound doc: <https://csound.com/docs/manual/chnclear.html>+chnclear ::  Str -> SE ()+chnclear b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "chnclear" [(Xr,(repeat Sr))] [a1]++-- | +-- Export a global variable as a channel of the bus.+--+-- Export a global variable as a channel of the bus; the channel+--       should not already exist, otherwise an init error occurs.+--       This opcode is normally called from the orchestra header, and allows+--       the host application to read or write orchestra variables directly,+--       without having to use+--       chnget or+--       chnset to copy data.+--+-- > gival  chnexport  Sname, imode[, itype, idflt, imin, imax]+-- > gkval  chnexport  Sname, imode[, itype, idflt, imin, imax]+-- > gaval  chnexport  Sname, imode+-- > gSval  chnexport  Sname, imode+--+-- csound doc: <https://csound.com/docs/manual/chnexport.html>+chnexport ::  Str -> D -> Str+chnexport b1 b2 =+  Str $ f <$> unStr b1 <*> unD b2+  where+    f a1 a2 = opcs "chnexport" [(Ir,[Sr,Ir,Ir,Ir,Ir,Ir])+                               ,(Kr,[Sr,Ir,Ir,Ir,Ir,Ir])+                               ,(Ar,[Sr,Ir])+                               ,(Sr,[Sr,Ir])] [a1,a2]++-- | +-- Reads data from the software bus.+--+-- Reads data from a channel of the inward named software bus.+--       Implies declaring the channel with imode=1 (see also+--       chn_k, chn_a, and chn_S).+--+-- > ival  chnget  Sname+-- > kval  chnget  Sname+-- > aval  chnget  Sname+-- > Sval  chnget  Sname+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chnget ::  Str -> SE Str+chnget b1 =+  fmap ( Str . return) $ SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep "chnget" [(Ir,[Sr]),(Kr,[Sr]),(Ar,[Sr]),(Sr,[Sr])] [a1]++-- | +-- Reads data from the software bus.+--+-- Reads data from a channel of the inward named software bus.+--       Implies declaring the channel with imode=1 (see also+--       chn_k, chn_a, and chn_S).+--+-- > Sval  chngetks  Sname+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chngetks ::  Str -> Str+chngetks b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "chngetks" [(Sr,[Sr])] [a1]++-- | ++--+-- > ival[]  chngeti  Sname[]+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chngeti ::  Str -> D+chngeti b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "chngeti" [(Ir,[Sr])] [a1]++-- | ++--+-- > kval[]  chngetk  Sname[]+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chngetk ::  Str -> Sig+chngetk b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "chngetk" [(Kr,[Sr])] [a1]++-- | ++--+-- > aval[]  chngeta  Sname[]+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chngeta ::  Str -> Sig+chngeta b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "chngeta" [(Ar,[Sr])] [a1]++-- | ++--+-- > Sval[]  chngets  Sname[]+--+-- csound doc: <https://csound.com/docs/manual/chnget.html>+chngets ::  Str -> Str+chngets b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "chngets" [(Sr,[Sr])] [a1]++-- | +-- Writes audio data to the named software bus, mixing to the previous+--       output.+--+-- Adds an audio signal to a channel of the named software bus.+--       Implies declaring the channel with imode=2 (see also+--       chn_a).+--+-- >  chnmix  aval, Sname+--+-- csound doc: <https://csound.com/docs/manual/chnmix.html>+chnmix ::  Sig -> Str -> SE ()+chnmix b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "chnmix" [(Xr,[Ar,Sr])] [a1,a2]++-- | +-- Query parameters of a channel.+--+-- Query parameters of a channel (if it does not exist, all+--       returned values are zero).+--+-- > itype, imode, ictltype, idflt, imin, imax  chnparams  Sname+--+-- csound doc: <https://csound.com/docs/manual/chnparams.html>+chnparams :: forall a . Tuple a => Str -> a+chnparams b1 =+  pureTuple $ f <$> unStr b1+  where+    f a1 = mopcs "chnparams" ([Ir,Ir,Ir,Ir,Ir,Ir],[Sr]) [a1]++-- | +-- Writes data to the named software bus.+--+-- Write to a channel of the named software bus. Implies declaring the+--       channel with imod=2 (see also+--       chn_k, chn_a, and chn_S).+--+-- >  chnset  ival, Sname+-- >  chnset  kval, Sname+-- >  chnset  aval, Sname+-- >  chnset  Sval, Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnset ::  D -> Str -> SE ()+chnset b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "chnset" [(Xr,[Ir,Sr])] [a1,a2]++-- | +-- Writes data to the named software bus.+--+-- Write to a channel of the named software bus. Implies declaring the+--       channel with imod=2 (see also+--       chn_k, chn_a, and chn_S).+--+-- >  chnsetks  Sval, Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnsetks ::  Str -> Str -> SE ()+chnsetks b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "chnsetks" [(Xr,[Sr,Sr])] [a1,a2]++-- | ++--+-- >  chnseti  ival[], []Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnseti ::  D -> SE ()+chnseti b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "chnseti" [(Xr,[Ir,Sr])] [a1]++-- | ++--+-- >  chnsetk  kval[], []Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnsetk ::  Sig -> SE ()+chnsetk b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "chnsetk" [(Xr,[Kr,Sr])] [a1]++-- | ++--+-- >  chnseta  aval[], []Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnseta ::  Sig -> SE ()+chnseta b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "chnseta" [(Xr,[Ar,Sr])] [a1]++-- | ++--+-- >  chnsets  Sval[], []Sname+--+-- csound doc: <https://csound.com/docs/manual/chnset.html>+chnsets ::  Str -> SE ()+chnsets b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "chnsets" [(Xr,[Sr,Sr])] [a1]++-- | +-- Sets the local ksmps value in an instrument or user-defined opcode block+--+-- Sets the local ksmps value in an instrument or user-defined opcode block.+--+-- >  setksmps  iksmps+--+-- csound doc: <https://csound.com/docs/manual/setksmps.html>+setksmps ::  D -> SE ()+setksmps b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "setksmps" [(Xr,[Ir])] [a1]++-- | +-- Passes variables to a user-defined opcode block,+--+-- The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument.+--+-- > xinarg1 [, xinarg2] ... [xinargN]  xin +--+-- csound doc: <https://csound.com/docs/manual/xin.html>+xin :: forall a . Tuple a =>  a+xin  =+  pureTuple $ return $ f +  where+    f  = mopcs "xin" ((repeat Xr),[]) []++-- | +-- Retrieves variables from a user-defined opcode block,+--+-- The xin and xout opcodes copy variables to and from the opcode definition, allowing communication with the calling instrument.+--+-- >  xout  xoutarg1 [, xoutarg2] ... [, xoutargN]+--+-- csound doc: <https://csound.com/docs/manual/xout.html>+xout ::  [Sig] -> SE ()+xout b1 =+  SE $ join $ f <$> mapM (lift . unSig) b1+  where+    f a1 = opcsDep_ "xout" [(Xr,(repeat Xr))] a1++-- Printing and Display.++-- | +-- Displays the Fourier Transform of an audio or control signal.+--+-- These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.+--+-- >  dispfft  xsig, iprd, iwsiz [, iwtyp] [, idbout] [, iwtflg] [,imin] [,imax]+--+-- csound doc: <https://csound.com/docs/manual/dispfft.html>+dispfft ::  Sig -> D -> D -> SE ()+dispfft b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "dispfft" [(Xr,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Displays the audio or control signals as an amplitude vs. time graph.+--+-- These units will print orchestra init-values, or produce graphic display of orchestra control signals and audio signals. Uses X11 windows if enabled, else (or if -g flag is set) displays are approximated in ASCII characters.+--+-- >  display  xsig, iprd [, inprds] [, iwtflg]+--+-- csound doc: <https://csound.com/docs/manual/display.html>+display ::  Sig -> D -> SE ()+display b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "display" [(Xr,[Xr,Ir,Ir,Ir])] [a1,a2]++-- | +-- Allows text to be displayed from instruments like sliders+--+-- Allows text to be displayed from instruments like sliders etc. (only on Unix and Windows at present)+--+-- >  flashtxt   iwhich, String+--+-- csound doc: <https://csound.com/docs/manual/flashtxt.html>+flashtxt ::  D -> Str -> SE ()+flashtxt b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "flashtxt" [(Xr,[Ir,Sr])] [a1,a2]++-- | +-- Displays the values init (i-rate) variables.+--+-- These units will print orchestra init-values.+--+-- >  print  iarg [, iarg1] [, iarg2] [...]+--+-- csound doc: <https://csound.com/docs/manual/print.html>+print' ::  [D] -> SE ()+print' b1 =+  SE $ join $ f <$> mapM (lift . unD) b1+  where+    f a1 = opcsDep_ "print" [(Xr,(repeat Ir))] a1++-- | +-- printf-style formatted output+--+-- printf and printf_i write+--     formatted output, similarly to the C function+--     printf(). printf_i runs at i-time only, while+--     printf runs both at initialization and+--     performance time.+--+-- >  printf_i  Sfmt, itrig, [iarg1[, iarg2[, ... ]]]+--+-- csound doc: <https://csound.com/docs/manual/printf.html>+printf_i ::  Str -> D -> [D] -> SE ()+printf_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> mapM (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "printf_i" [(Xr,[Sr] ++ (repeat Ir))] ([a1,a2] ++ a3)++-- | +-- printf-style formatted output+--+-- printf and printf_i write+--     formatted output, similarly to the C function+--     printf(). printf_i runs at i-time only, while+--     printf runs both at initialization and+--     performance time.+--+-- >  printf  Sfmt, ktrig, [xarg1[, xarg2[, ... ]]]+--+-- csound doc: <https://csound.com/docs/manual/printf.html>+printf ::  Str -> Sig -> [Sig] -> SE ()+printf b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> mapM (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "printf" [(Xr,[Sr,Kr] ++ (repeat Xr))] ([a1,a2] ++ a3)++-- | +-- Prints one k-rate value at specified intervals.+--+-- >  printk  itime, kval [, ispace] [, inamed]+--+-- csound doc: <https://csound.com/docs/manual/printk.html>+printk ::  D -> Sig -> SE ()+printk b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "printk" [(Xr,[Ir,Kr,Ir,Ir])] [a1,a2]++-- | +-- Prints a new value every time a control variable changes.+--+-- >  printk2  kvar [, inumspaces] [, inamed]+--+-- csound doc: <https://csound.com/docs/manual/printk2.html>+printk2 ::  Sig -> SE ()+printk2 b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "printk2" [(Xr,[Kr,Ir,Ir])] [a1]++-- | +-- Prints at k-rate using a printf() style syntax.+--+-- >  printks  "string", itime [, xval1] [, xval2] [...]+--+-- csound doc: <https://csound.com/docs/manual/printks.html>+printks ::  Str -> D -> [Sig] -> SE ()+printks b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> mapM (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "printks" [(Xr,[Sr,Ir] ++ (repeat Xr))] ([a1,a2] ++ a3)++-- | +-- Prints a new value every time a control variable changes using a+--       printf() style syntax.+--+-- >  printks2  "string", kval+--+-- csound doc: <https://csound.com/docs/manual/printks2.html>+printks2 ::  Str -> Sig -> SE ()+printks2 b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "printks2" [(Xr,[Sr,Kr])] [a1,a2]++-- | ++--+-- >  println  "string", [, xval1] [, xval2] [...]+--+-- csound doc: <https://csound.com/docs/manual/println.html>+println ::  Str -> SE ()+println b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "println" [(Xr,[Sr] ++ (repeat Xr))] [a1]++-- | +-- Prints at init-time using a printf() style syntax.+--+-- >  prints  "string" [, xval1] [, xval2] [...]+--+-- csound doc: <https://csound.com/docs/manual/prints.html>+prints ::  Str -> [Sig] -> SE ()+prints b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> mapM (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "prints" [(Xr,[Sr] ++ (repeat Xr))] ([a1] ++ a2)++-- | ++--+-- >  printsk  "string", [, xval1] [, xval2] [...]+--+-- csound doc: <https://csound.com/docs/manual/printsk.html>+printsk ::  Str -> SE ()+printsk b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "printsk" [(Xr,[Sr] ++ (repeat Xr))] [a1]++-- Soundfile Queries.++-- | +-- Returns the number of bits in each sample in a sound file.+--+-- > ir  filebit  ifilcod [, iallowraw]+--+-- csound doc: <https://csound.com/docs/manual/filebit.html>+filebit ::  Str -> D+filebit b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "filebit" [(Ir,[Sr,Ir])] [a1]++-- | +-- Returns the length of a sound file.+--+-- > ir  filelen  ifilcod, [iallowraw]+--+-- csound doc: <https://csound.com/docs/manual/filelen.html>+filelen ::  Str -> D+filelen b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "filelen" [(Ir,[Sr,Ir])] [a1]++-- | +-- Returns the number of channels in a sound file.+--+-- > ir  filenchnls  ifilcod [, iallowraw]+--+-- csound doc: <https://csound.com/docs/manual/filenchnls.html>+filenchnls ::  Str -> D+filenchnls b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "filenchnls" [(Ir,[Sr,Ir])] [a1]++-- | +-- Returns the peak absolute value of a sound file.+--+-- > ir  filepeak  ifilcod [, ichnl]+--+-- csound doc: <https://csound.com/docs/manual/filepeak.html>+filepeak ::  Str -> D+filepeak b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "filepeak" [(Ir,[Sr,Ir])] [a1]++-- | +-- Returns the sample rate of a sound file.+--+-- > ir  filesr  ifilcod [, iallowraw]+--+-- csound doc: <https://csound.com/docs/manual/filesr.html>+filesr ::  Str -> D+filesr b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "filesr" [(Ir,[Sr,Ir])] [a1]++-- | +-- Checks that a file can be used.+--+-- Returns 1 if the sound file is valid, or 0 if not.+--+-- > ir  filevalid  ifilcod+-- > kr  filevalid  ifilcod+--+-- csound doc: <https://csound.com/docs/manual/filevalid.html>+filevalid ::  Str -> Sig+filevalid b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "filevalid" [(Ir,[Sr]),(Kr,[Sr])] [a1]++-- | +-- Returns the length of an MP3 sound file.+--+-- > ir  mp3len  ifilcod+--+-- csound doc: <https://csound.com/docs/manual/mp3len.html>+mp3len ::  Str -> D+mp3len b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "mp3len" [(Ir,[Sr])] [a1]
src/Csound/Typed/Opcode/SignalModifiers.hs view
@@ -2,2702 +2,3194 @@               -- * Amplitude Modifiers.-    balance, clip, compress, compress2, dam, gain,-    -    -- * Convolution and Morphing.-    convolve, cross2, dconv, ftconv, ftmorf, liveconv, pconvolve, tvconv,-    -    -- * Delay.-    delay, delay1, delayk, vdel_k, delayr, delayw, deltap, deltap3, deltapi, deltapn, deltapx, deltapxw, multitap, vdelay, vdelay3, vdelayx, vdelayxq, vdelayxs, vdelayxw, vdelayxwq, vdelayxws,-    -    -- * Panning and Spatialization.-    bformdec, bformdec1, bformenc, bformenc1, hrtfearly, hrtfmove, hrtfmove2, hrtfreverb, hrtfstat, locsend, locsig, pan, pan2, space, spat3d, spat3di, spat3dt, spdist, spsend, vbap, vbap16, vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbapg, vbapgmove, vbaplsinit, vbapmove, vbapz, vbapzmove,-    -    -- * Reverberation.-    alpass, babo, comb, combinv, freeverb, nestedap, nreverb, platerev, reverb, reverb2, reverbsc, valpass, vcomb,-    -    -- * Sample Level Operators.-    denorm, diff, downsamp, fold, integ, interp, ntrpol, samphold, upsamp, vaget, vaset,-    -    -- * Signal Limiters.-    limit, mirror, wrap,-    -    -- * Special Effects.-    distort, distort1, flanger, harmon, harmon2, harmon3, harmon4, phaser1, phaser2,-    -    -- * Standard Filters.-    atone, atonex, biquad, biquada, butbp, butbr, buthp, butlp, butterbp, butterbr, butterhp, butterlp, clfilt, diode_ladder, doppler, k35_hpf, k35_lpf, median, mediank, mode, tone, tonex, zdf_1pole, zdf_1pole_mode, zdf_2pole, zdf_2pole_mode, zdf_ladder,-    -    -- * Standard Filters:Resonant.-    areson, bqrez, lowpass2, lowres, lowresx, lpf18, moogladder, moogladder2, moogvcf, moogvcf2, mvchpf, mvclpf1, mvclpf2, mvclpf3, mvclpf4, reson, resonr, resonx, resony, resonz, rezzy, statevar, svfilter, tbvcf, vlowres,-    -    -- * Standard Filters:Control.-    aresonk, atonek, lineto, port, portk, resonk, resonxk, sc_lag, sc_lagud, sc_trig, tlineto, tonek,-    -    -- * Specialized Filters.-    dcblock, dcblock2, eqfil, filter2, fmanal, fofilter, hilbert, hilbert2, nlfilt, nlfilt2, pareq, rbjeq, zfilter2,-    -    -- * Waveguides.-    wguide1, wguide2,-    -    -- * Waveshaping.-    chebyshevpoly, pdclip, pdhalf, pdhalfy, powershape,-    -    -- * Comparators and Accumulators.-    cmp, max', max_k, maxabs, maxabsaccum, maxaccum, min', minabs, minabsaccum, minaccum) where--import Control.Monad.Trans.Class-import Csound.Dynamic-import Csound.Typed---- Amplitude Modifiers.---- | --- Adjust one audio signal according to the values of another.------ The rms power of asig can be interrogated, set, or adjusted to match that of a comparator signal.------ > ares  balance  asig, acomp [, ihp] [, iskip]------ csound doc: <http://csound.com/docs/manual/balance.html>-balance ::  Sig -> Sig -> Sig-balance b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "balance" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]---- | --- Clips a signal to a predefined limit.------ Clips an a-rate signal to a predefined limit, in a “soft” manner, using one of three methods.------ > ares  clip  asig, imeth, ilimit [, iarg]------ csound doc: <http://csound.com/docs/manual/clip.html>-clip ::  Sig -> D -> D -> Sig-clip b1 b2 b3 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "clip" [(Ar,[Ar,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Compress, limit, expand, duck or gate an audio signal.------ This unit functions as an audio---     compressor, limiter, expander, or noise gate, using either---     soft-knee or hard-knee mapping, and with dynamically variable---     performance characteristics.  It takes two audio input signals,---     aasig and acsig, the first of which is modified by a running---     analysis of the second. Both signals can be the same, or the first---     can be modified by a different controlling signal.------ > ar  compress  aasig, acsig, kthresh, kloknee, khiknee, kratio, katt, krel, ilook------ csound doc: <http://csound.com/docs/manual/compress.html>-compress ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig-compress b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "compress" [(Ar,[Ar,Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7-                                                                                             ,a8-                                                                                             ,a9]---- | --- Compress, limit, expand, duck or gate an audio signal.------ This unit functions as an audio---     compressor, limiter, expander, or noise gate, using either---     soft-knee or hard-knee mapping, and with dynamically variable---     performance characteristics.  It takes two audio input signals,---     aasig and acsig, the first of which is modified by a running---     analysis of the second. Both signals can be the same, or the first---     can be modified by a different controlling signal.------ > ar  compress2  aasig, acsig, kthresh, kloknee, khiknee, kratio, katt, krel, ilook------ csound doc: <http://csound.com/docs/manual/compress2.html>-compress2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig-compress2 b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "compress2" [(Ar,[Ar,Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1-                                                                                              ,a2-                                                                                              ,a3-                                                                                              ,a4-                                                                                              ,a5-                                                                                              ,a6-                                                                                              ,a7-                                                                                              ,a8-                                                                                              ,a9]---- | --- A dynamic compressor/expander.------ This opcode dynamically modifies a gain value applied to the input sound ain by comparing its power level to a given threshold level. The signal will be compressed/expanded with different factors regarding that it is over or under the threshold.------ > ares  dam  asig, kthreshold, icomp1, icomp2, irtime, iftime------ csound doc: <http://csound.com/docs/manual/dam.html>-dam ::  Sig -> Sig -> D -> D -> D -> D -> Sig-dam b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "dam" [(Ar,[Ar,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Adjusts the amplitude audio signal according to a root-mean-square value.------ > ares  gain  asig, krms [, ihp] [, iskip]------ csound doc: <http://csound.com/docs/manual/gain.html>-gain ::  Sig -> Sig -> Sig-gain b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "gain" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]---- Convolution and Morphing.---- | --- Convolves a signal and an impulse response.------ Output is the convolution of signal ain and the impulse response contained in ifilcod. If more than one output signal is supplied, each will be convolved with the same impulse response. Note that it is considerably more efficient to use one instance of the operator when processing a mono input to create stereo, or quad, outputs.------ > ar1 [, ar2] [, ar3] [, ar4]  convolve  ain, ifilcod [, ichannel]------ csound doc: <http://csound.com/docs/manual/convolve.html>-convolve :: Tuple a => Sig -> Str -> a-convolve b1 b2 = pureTuple $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = mopcs "convolve" ([Ar,Ar,Ar,Ar],[Ar,Sr,Ir]) [a1,a2]---- | --- Cross synthesis using FFT's.------ This is an implementation of cross synthesis using FFT's.------ > ares  cross2  ain1, ain2, isize, ioverlap, iwin, kbias------ csound doc: <http://csound.com/docs/manual/cross2.html>-cross2 ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig-cross2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "cross2" [(Ar,[Ar,Ar,Ir,Ir,Ir,Kr])] [a1,a2,a3,a4,a5,a6]---- | --- A direct convolution opcode.------ > ares  dconv  asig, isize, ifn------ csound doc: <http://csound.com/docs/manual/dconv.html>-dconv ::  Sig -> D -> Tab -> Sig-dconv b1 b2 b3 = Sig $ f <$> unSig b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "dconv" [(Ar,[Ar,Ir,Ir])] [a1,a2,a3]---- | --- Low latency multichannel convolution, using a function table as impulse--- 	response source.------ Low latency multichannel convolution, using a function table as impulse--- 	response source. The algorithm is to split the impulse response to--- 	partitions of length determined by the iplen parameter, and delay and--- 	mix partitions so that the original, full length impulse response is--- 	reconstructed without gaps. The output delay (latency) is iplen samples,--- 	and does not depend on the control rate, unlike in the case of other--- 	convolve opcodes.------ > a1[, a2[, a3[, ... a8]]]  ftconv  ain, ift, iplen[, iskipsamples \--- >           [, iirlen[, iskipinit]]]------ csound doc: <http://csound.com/docs/manual/ftconv.html>-ftconv :: Tuple a => Sig -> D -> D -> a-ftconv b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "ftconv" ((repeat Ar),[Ar,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]---- | --- Morphs between multiple ftables as specified in a list.------ Uses an index into a table of ftable numbers to morph between adjacent tables in the list.This morphed function is written into the table referenced by iresfn on every k-cycle.------ >  ftmorf  kftndx, iftfn, iresfn------ csound doc: <http://csound.com/docs/manual/ftmorf.html>-ftmorf ::  Sig -> Tab -> Tab -> SE ()-ftmorf b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unTab b3-    where f a1 a2 a3 = opcs "ftmorf" [(Xr,[Kr,Ir,Ir])] [a1,a2,a3]---- | --- Partitioned convolution with dynamically reloadable impulse response------ Computationally efficient, partitioned convolution, using a function table as impulse response (IR) source,---       similar to the ftconv opcode. ---       The liveconv opcode allows dynamic reload of IR data at any time---       while the convolution is running, controlled by the kupdate parameter.---       Due to the manner in which the IR is updated, the operation can be done without audio artifacts in the convolution output.------ > ares  liveconv  ain, ift, iplen, kupdate, kclear------ csound doc: <http://csound.com/docs/manual/liveconv.html>-liveconv ::  Sig -> D -> D -> Sig -> Sig -> Sig-liveconv b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "liveconv" [(Ar,[Ar,Ir,Ir,Kr,Kr])] [a1,a2,a3,a4,a5]---- | --- Convolution based on a uniformly partitioned overlap-save algorithm------ Convolution based on a uniformly partitioned overlap-save algorithm. Compared to the convolve opcode, pconvolve has these benefits:------ > ar1 [, ar2] [, ar3] [, ar4]  pconvolve  ain, ifilcod [, ipartitionsize, ichannel]------ csound doc: <http://csound.com/docs/manual/pconvolve.html>-pconvolve :: Tuple a => Sig -> Str -> a-pconvolve b1 b2 = pureTuple $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = mopcs "pconvolve" ([Ar,Ar,Ar,Ar],[Ar,Sr,Ir,Ir]) [a1,a2]---- | --- A time-varying convolution (FIR filter) opcode.------ An opcode that takes two incoming signals and---       interprets one of them as the coefficients of linear---       time-variable finite impulse response filter. This is---       implemented via direct convolution (for partition sizes of---       1 sample) or DFT-based partitioned convolution.---       The signals can be 'frozen' (i.e. the filter coefficients are---       kept the same) at any point in time, at a-rate or k-rate.------ > ares  tvconv  asig1, asig2, xfreez1,--- >         xfreez2, iparts, ifils------ csound doc: <http://csound.com/docs/manual/tvconv.html>-tvconv ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-tvconv b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "tvconv" [(Ar,[Ar,Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- Delay.---- | --- Delays an input signal by some time interval.------ A signal can be read from or written into a delay path, or it can be automatically delayed by some time interval.------ > ares  delay  asig, idlt [, iskip]------ csound doc: <http://csound.com/docs/manual/delay.html>-delay ::  Sig -> D -> Sig-delay b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "delay" [(Ar,[Ar,Ir,Ir])] [a1,a2]---- | --- Delays an input signal by one sample.------ > ares  delay1  asig [, iskip]------ csound doc: <http://csound.com/docs/manual/delay1.html>-delay1 ::  Sig -> Sig-delay1 b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "delay1" [(Ar,[Ar,Ir])] [a1]---- | --- Delays an input signal by some time interval.------ k-rate delay opcodes------ > kr  delayk   ksig, idel[, imode]------ csound doc: <http://csound.com/docs/manual/delayk.html>-delayk ::  Sig -> D -> Sig-delayk b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "delayk" [(Kr,[Kr,Ir,Ir])] [a1,a2]---- | --- Delays an input signal by some time interval.------ k-rate delay opcodes------ > kr  vdel_k   ksig, kdel, imdel[, imode]------ csound doc: <http://csound.com/docs/manual/delayk.html>-vdel_k ::  Sig -> Sig -> D -> Sig-vdel_k b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "vdel_k" [(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Reads from an automatically established digital delay line.------ > ares  delayr  idlt [, iskip]------ csound doc: <http://csound.com/docs/manual/delayr.html>-delayr ::  D -> SE Sig-delayr b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "delayr" [(Ar,[Ir,Ir])] [a1]---- | --- Writes the audio signal to a digital delay line.------ >  delayw  asig------ csound doc: <http://csound.com/docs/manual/delayw.html>-delayw ::  Sig -> SE ()-delayw b1 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "delayw" [(Xr,[Ar])] [a1]---- | --- Taps a delay line at variable offset times.------ Tap a delay line at variable offset times.------ > ares  deltap  kdlt------ csound doc: <http://csound.com/docs/manual/deltap.html>-deltap ::  Sig -> SE Sig-deltap b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "deltap" [(Ar,[Kr])] [a1]---- | --- Taps a delay line at variable offset times, uses cubic interpolation.------ > ares  deltap3  xdlt------ csound doc: <http://csound.com/docs/manual/deltap3.html>-deltap3 ::  Sig -> SE Sig-deltap3 b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "deltap3" [(Ar,[Xr])] [a1]---- | --- Taps a delay line at variable offset times, uses interpolation.------ > ares  deltapi  xdlt------ csound doc: <http://csound.com/docs/manual/deltapi.html>-deltapi ::  Sig -> SE Sig-deltapi b1 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1-    where f a1 = opcs "deltapi" [(Ar,[Xr])] [a1]---- | --- Taps a delay line at variable offset times.------ Tap a delay line at variable offset times.------ > ares  deltapn  xnumsamps------ csound doc: <http://csound.com/docs/manual/deltapn.html>-deltapn ::  Sig -> Sig-deltapn b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "deltapn" [(Ar,[Xr])] [a1]---- | --- Read from or write to a delay line with interpolation.------ deltapx is similar to deltapi or deltap3. However, it allows higher quality interpolation. This opcode can read from and write to a delayr/delayw delay line with interpolation.------ > aout  deltapx  adel, iwsize------ csound doc: <http://csound.com/docs/manual/deltapx.html>-deltapx ::  Sig -> D -> SE Sig-deltapx b1 b2 = fmap ( Sig . return) $ SE $ (depT =<<) $ lift $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "deltapx" [(Ar,[Ar,Ir])] [a1,a2]---- | --- Mixes the input signal to a delay line.------ deltapxw mixes the input signal to a delay line. This opcode can be mixed with reading units (deltap, deltapn, deltapi, deltap3, and deltapx) in any order; the actual delay time is the difference of the read and write time. This opcode can read from and write to a delayr/delayw delay line with interpolation.------ >  deltapxw  ain, adel, iwsize------ csound doc: <http://csound.com/docs/manual/deltapxw.html>-deltapxw ::  Sig -> Sig -> D -> SE ()-deltapxw b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "deltapxw" [(Xr,[Ar,Ar,Ir])] [a1,a2,a3]---- | --- Multitap delay line implementation.------ > ares  multitap  asig [, itime1, igain1] [, itime2, igain2] [...]------ csound doc: <http://csound.com/docs/manual/multitap.html>-multitap ::  Sig -> [D] -> Sig-multitap b1 b2 = Sig $ f <$> unSig b1 <*> mapM unD b2-    where f a1 a2 = opcs "multitap" [(Ar,[Ar] ++ (repeat Ir))] ([a1] ++ a2)---- | --- An interpolating variable time delay.------ This is an interpolating variable time delay, it is not very different from the existing implementation (deltapi), it is only easier to use.------ > ares  vdelay  asig, adel, imaxdel [, iskip]------ csound doc: <http://csound.com/docs/manual/vdelay.html>-vdelay ::  Sig -> Sig -> D -> Sig-vdelay b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "vdelay" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2,a3]---- | --- A variable time delay with cubic interpolation.------ vdelay3 is experimental. It is the same as vdelay except that it uses cubic interpolation. (New in Version 3.50.)------ > ares  vdelay3  asig, adel, imaxdel [, iskip]------ csound doc: <http://csound.com/docs/manual/vdelay3.html>-vdelay3 ::  Sig -> Sig -> D -> Sig-vdelay3 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "vdelay3" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2,a3]---- | --- A variable delay opcode with high quality interpolation.------ > aout  vdelayx  ain, adl, imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayx.html>-vdelayx ::  Sig -> Sig -> D -> D -> Sig-vdelayx b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vdelayx" [(Ar,[Ar,Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- A 4-channel variable delay opcode with high quality interpolation.------ > aout1, aout2, aout3, aout4  vdelayxq  ain1, ain2, ain3, ain4, adl, imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayxq.html>-vdelayxq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)-vdelayxq b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1-                                                                                              ,a2-                                                                                              ,a3-                                                                                              ,a4-                                                                                              ,a5-                                                                                              ,a6-                                                                                              ,a7]---- | --- A stereo variable delay opcode with high quality interpolation.------ > aout1, aout2  vdelayxs  ain1, ain2, adl, imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayxs.html>-vdelayxs ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)-vdelayxs b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vdelayxs" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Variable delay opcodes with high quality interpolation.------ > aout  vdelayxw  ain, adl, imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayxw.html>-vdelayxw ::  Sig -> Sig -> D -> D -> Sig-vdelayxw b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vdelayxw" [(Ar,[Ar,Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Variable delay opcodes with high quality interpolation.------ > aout1, aout2, aout3, aout4  vdelayxwq  ain1, ain2, ain3, ain4, adl, \--- >           imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayxwq.html>-vdelayxwq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)-vdelayxwq b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxwq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1-                                                                                               ,a2-                                                                                               ,a3-                                                                                               ,a4-                                                                                               ,a5-                                                                                               ,a6-                                                                                               ,a7]---- | --- Variable delay opcodes with high quality interpolation.------ > aout1, aout2  vdelayxws  ain1, ain2, adl, imd, iws [, ist]------ csound doc: <http://csound.com/docs/manual/vdelayxws.html>-vdelayxws ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)-vdelayxws b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vdelayxws" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- Panning and Spatialization.---- | --- Deprecated. Decodes an ambisonic B format signal.------ Decodes an ambisonic B format signal into loudspeaker specific signals. Note that this opcode is---       deprecated as it is inaccurate, and is replaced by the much---       better opcode bformdec1 which replicates all---       the important features.------ > ao1, ao2  bformdec  isetup, aw, ax, ay, az [, ar, as, at, au, av \--- >           [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4  bformdec  isetup, aw, ax, ay, az [, ar, as, at, \--- >           au, av [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4, ao5  bformdec  isetup, aw, ax, ay, az [, ar, as, \--- >           at, au, av [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8  bformdec  isetup, aw, ax, ay, az \--- >           [, ar, as, at, au, av [, abk, al, am, an, ao, ap, aq]]]------ csound doc: <http://csound.com/docs/manual/bformdec.html>-bformdec :: Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a-bformdec b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = mopcs "bformdec" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]-                                              ,[Ir,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]) [a1,a2,a3,a4,a5]---- | --- Decodes an ambisonic B format signal------ Decodes an ambisonic B format signal into loudspeaker specific signals.------ > ao1, ao2  bformdec1  isetup, aw, ax, ay, az [, ar, as, at, au, av \--- >           [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4  bformdec1  isetup, aw, ax, ay, az [, ar, as, at, \--- >           au, av [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4, ao5  bformdec1  isetup, aw, ax, ay, az [, ar, as, \--- >           at, au, av [, abk, al, am, an, ao, ap, aq]]--- > ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8  bformdec1  isetup, aw, ax, ay, az \--- >           [, ar, as, at, au, av [, abk, al, am, an, ao, ap,--- >         aq]]]--- > aout[]  bformdec1  isetup, abform[]------ csound doc: <http://csound.com/docs/manual/bformdec1.html>-bformdec1 :: Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a-bformdec1 b1 b2 b3 b4 b5 = pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = mopcs "bformdec1" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]-                                               ,[Ir,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]) [a1,a2,a3,a4,a5]---- | --- Deprecated. Codes a signal into the ambisonic B format.------ Codes a signal into the ambisonic B format. Note that this opcode is---       deprecated as it is inaccurate, and is replaced by the much---       better---       opcode bformenc1---       which replicates all the important features; also note that the---       gain arguments are not available in bformenc1.------ > aw, ax, ay, az  bformenc  asig, kalpha, kbeta, kord0, kord1--- > aw, ax, ay, az, ar, as, at, au, av  bformenc  asig, kalpha, kbeta, \--- >           kord0, kord1 , kord2--- > aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq  bformenc  \--- >           asig, kalpha, kbeta, kord0, kord1, kord2, kord3------ csound doc: <http://csound.com/docs/manual/bformenc.html>-bformenc :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> a-bformenc b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = mopcs "bformenc" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]-                                              ,[Ar,Kr,Kr,Kr,Kr,Kr,Kr]) [a1,a2,a3,a4,a5]---- | --- Codes a signal into the ambisonic B format.------ Codes a signal into the ambisonic B format------ > aw, ax, ay, az  bformenc1  asig, kalpha, kbeta--- > aw, ax, ay, az, ar, as, at, au, av  bformenc1  asig, kalpha, kbeta--- > aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq  bformenc1  \--- >           asig, kalpha, kbeta--- > aarray[]  bformenc1  asig, kalpha, kbeta------ csound doc: <http://csound.com/docs/manual/bformenc1.html>-bformenc1 :: Tuple a => Sig -> Sig -> Sig -> a-bformenc1 b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "bformenc1" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]-                                         ,[Ar,Kr,Kr]) [a1,a2,a3]---- | --- Generates 3D binaural audio with high-fidelity early reflections in a parametric room using a Phase Truncation algorithm.------ This opcode essentially nests the hrtfmove opcode in an image model for a user-definable shoebox-shaped room. A default room can be selected, or advanced room parameters can be used. Room surfaces can be controlled with high and low-frequency absorption coefficients and gain factors of a three-band equaliser.------ > aleft, aright, irt60low, irt60high, imfp  hrtfearly  asrc, ksrcx, ksrcy, ksrcz, klstnrx, klstnry, klstnrz, \--- >           ifilel, ifiler, idefroom [,ifade, isr, iorder, ithreed, kheadrot, iroomx, iroomy, iroomz, iwallhigh, \--- >           iwalllow, iwallgain1, iwallgain2, iwallgain3, ifloorhigh, ifloorlow, ifloorgain1, ifloorgain2, \--- >           ifloorgain3, iceilinghigh, iceilinglow, iceilinggain1, iceilinggain2, iceilinggain3]------ csound doc: <http://csound.com/docs/manual/hrtfearly.html>-hrtfearly :: Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> a-hrtfearly b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unD b8 <*> unD b9 <*> unD b10-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "hrtfearly" ([Ar,Ar,Ir,Ir,Ir]-                                                               ,[Ar-                                                                ,Kr-                                                                ,Kr-                                                                ,Kr-                                                                ,Kr-                                                                ,Kr-                                                                ,Kr-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Kr-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir-                                                                ,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]---- | --- Generates dynamic 3d binaural audio for headphones using magnitude interpolation and phase truncation.------ This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener---       by convolving the source with stored head related transfer function (HRTF) based filters.------ > aleft, aright  hrtfmove  asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr]------ csound doc: <http://csound.com/docs/manual/hrtfmove.html>-hrtfmove ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)-hrtfmove b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "hrtfmove" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Generates dynamic 3d binaural audio for headphones using a Woodworth based spherical head model---       with improved low frequency phase accuracy.------ This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener---       using head related transfer function (HRTF) based filters.------ > aleft, aright  hrtfmove2  asrc, kAz, kElev, ifilel, ifiler [,ioverlap, iradius, isr]------ csound doc: <http://csound.com/docs/manual/hrtfmove2.html>-hrtfmove2 ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)-hrtfmove2 b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "hrtfmove2" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- A binaural, dynamic FDN based diffuse-field reverberator. The opcode works independently as an efficient, flexible reverberator.------ A frequency-dependent, efficient reverberant field is created based on low and high frequency desired reverb times. The opcode is designed to work with hrtfearly, ideally using its outputs as inputs. However, hrtfreverb can be used as a standalone tool. Stability is enforced.------ > aleft, aright, idel  hrtfreverb  asrc, ilowrt60, ihighrt60, ifilel, ifiler [,isr, imfp, iorder]------ csound doc: <http://csound.com/docs/manual/hrtfreverb.html>-hrtfreverb ::  Sig -> D -> D -> D -> D -> (Sig,Sig,D)-hrtfreverb b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "hrtfreverb" ([Ar,Ar,Ir],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                       ,a2-                                                                                       ,a3-                                                                                       ,a4-                                                                                       ,a5]---- | --- Generates static 3d binaural audio for headphones using a---       Woodworth based spherical head model with improved low frequency---       phase accuracy.------ This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener using head related transfer function (HRTF) based filters. It produces a static output (azimuth and elevation parameters are i-rate), because a static source allows much more efficient processing than hrtfmove and hrtfmove2,.------ >       aleft, aright  hrtfstat  asrc, iAz, iElev, ifilel, ifiler [,iradius, isr]--- >         ------ csound doc: <http://csound.com/docs/manual/hrtfstat.html>-hrtfstat ::  Sig -> D -> D -> D -> D -> (Sig,Sig)-hrtfstat b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = mopcs "hrtfstat" ([Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Distributes the audio signals of a previous locsig opcode.------ locsend depends upon the existence of a previously defined locsig. The number of output signals must match the number in the previous locsig. The output signals from locsend are derived from the values given for distance and reverb in the locsig and are ready to be sent to local or global reverb units (see example below). The reverb amount and the balance between the 2 or 4 channels are calculated in the same way as described in the Dodge book (an essential text!).------ > a1, a2  locsend --- > a1, a2,  a3, a4  locsend ------ csound doc: <http://csound.com/docs/manual/locsend.html>-locsend ::   (Sig,Sig,Sig,Sig)-locsend  = pureTuple $ return $ f -    where f  = mopcs "locsend" ([Ar,Ar,Ar,Ar],[]) []---- | --- Takes an input signal and distributes between 2 or 4 channels.------ locsig takes an input signal and distributes it among 2 or 4 channels using values in degrees to calculate the balance between adjacent channels. It also takes arguments for distance (used to attenuate signals that are to sound as if they are some distance further than the loudspeaker itself), and for the amount the signal that will be sent to reverberators. This unit is based upon the example in the Charles Dodge/Thomas Jerse book, Computer Music, page 320.------ > a1, a2  locsig  asig, kdegree, kdistance, kreverbsend--- > a1, a2,  a3, a4  locsig  asig, kdegree, kdistance, kreverbsend------ csound doc: <http://csound.com/docs/manual/locsig.html>-locsig ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)-locsig b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = mopcs "locsig" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2,a3,a4]---- | --- Distribute an audio signal amongst four channels.------ Distribute an audio signal amongst four channels with localization control.------ > a1, a2, a3, a4  pan  asig, kx, ky, ifn [, imode] [, ioffset]------ csound doc: <http://csound.com/docs/manual/pan.html>-pan ::  Sig -> Sig -> Sig -> Tab -> (Sig,Sig,Sig,Sig)-pan b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4-    where f a1 a2 a3 a4 = mopcs "pan" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]---- | --- Distribute an audio signal across two channels.------ Distribute an audio signal across two channels with a choice of methods.------ > a1, a2  pan2  asig, xp [, imode]------ csound doc: <http://csound.com/docs/manual/pan2.html>-pan2 ::  Sig -> Sig -> (Sig,Sig)-pan2 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "pan2" ([Ar,Ar],[Ar,Xr,Ir]) [a1,a2]---- | --- Distributes an input signal among 4 channels using cartesian coordinates.------ space takes an input signal and distributes it among 4 channels using Cartesian xy coordinates to calculate the balance of the outputs. The xy coordinates can be defined in a separate text file and accessed through a Function statement in the score using Gen28, or they can be specified using the optional kx, ky arguments. The advantages to the former are:------ > a1, a2, a3, a4   space  asig, ifn, ktime, kreverbsend, kx, ky------ csound doc: <http://csound.com/docs/manual/space.html>-space ::  Sig -> Tab -> Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)-space b1 b2 b3 b4 b5 b6 = pureTuple $ f <$> unSig b1 <*> unTab b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = mopcs "space" ([Ar,Ar,Ar,Ar],[Ar,Ir,Kr,Kr,Kr,Kr]) [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6]---- | --- Positions the input sound in a 3D space and allows moving the sound at k-rate.------ This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3d allows moving the sound at k-rate (this movement is interpolated internally to eliminate "zipper noise" if sr not equal to kr).------ > aW, aX, aY, aZ  spat3d  ain, kX, kY, kZ, idist, ift, imode, imdel, iovr [, istor]------ csound doc: <http://csound.com/docs/manual/spat3d.html>-spat3d ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)-spat3d b1 b2 b3 b4 b5 b6 b7 b8 b9 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "spat3d" ([Ar,Ar,Ar,Ar]-                                                        ,[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9]---- | --- Positions the input sound in a 3D space with the sound source position set at i-time.------ This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. With spat3di, sound source position is set at i-time.------ > aW, aX, aY, aZ  spat3di  ain, iX, iY, iZ, idist, ift, imode [, istor]------ csound doc: <http://csound.com/docs/manual/spat3di.html>-spat3di ::  Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)-spat3di b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "spat3di" ([Ar,Ar,Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7]---- | --- Can be used to render an impulse response for a 3D space at i-time.------ This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3dt can be used to render the impulse response at i-time, storing output in a function table, suitable for convolution.------ >  spat3dt  ioutft, iX, iY, iZ, idist, ift, imode, irlen [, iftnocl]------ csound doc: <http://csound.com/docs/manual/spat3dt.html>-spat3dt ::  D -> D -> D -> D -> D -> D -> D -> D -> SE ()-spat3dt b1 b2 b3 b4 b5 b6 b7 b8 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "spat3dt" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                         ,a2-                                                                                         ,a3-                                                                                         ,a4-                                                                                         ,a5-                                                                                         ,a6-                                                                                         ,a7-                                                                                         ,a8]---- | --- Calculates distance values from xy coordinates.------ spdist uses the same xy data as space, also either from a text file using Gen28 or from x and y arguments given to the unit directly. The purpose of this unit is to make available the values for distance that are calculated from the xy coordinates.------ > k1  spdist  ifn, ktime, kx, ky------ csound doc: <http://csound.com/docs/manual/spdist.html>-spdist ::  Tab -> Sig -> Sig -> Sig -> Sig-spdist b1 b2 b3 b4 = Sig $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "spdist" [(Kr,[Ir,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Generates output signals based on a previously defined space opcode.------ spsend depends upon the existence of a previously defined space. The output signals from spsend are derived from the values given for xy and reverb in the space and are ready to be sent to local or global reverb units (see example below).------ > a1, a2, a3, a4  spsend ------ csound doc: <http://csound.com/docs/manual/spsend.html>-spsend ::   (Sig,Sig,Sig,Sig)-spsend  = pureTuple $ return $ f -    where f  = mopcs "spsend" ([Ar,Ar,Ar,Ar],[]) []---- | --- Distributes an audio signal among many channels.------ Distributes an audio signal amongmany channels, up to 64 in the---       first form, arbitrary in the second.------ > ar1[, ar2...]  vbap  asig, kazim [,--- >         kelev] [, kspread] [, ilayout]--- > array[]  vbap  asig, kazim [,--- >         kelev] [, kspread] [, ilayout]------ csound doc: <http://csound.com/docs/manual/vbap.html>-vbap :: Tuple a => Sig -> Sig -> a-vbap b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "vbap" ((repeat Ar),[Ar,Kr,Kr,Kr,Ir]) [a1,a2]---- | --- Distributes an audio signal among 16 channels.------ > ar1, ..., ar16  vbap16  asig, kazim [, kelev] [, kspread]------ csound doc: <http://csound.com/docs/manual/vbap16.html>-vbap16 :: Tuple a => Sig -> Sig -> a-vbap16 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "vbap16" ((repeat Ar),[Ar,Kr,Kr,Kr]) [a1,a2]---- | --- Distribute an audio signal among 16 channels with moving virtual sources.------ > ar1, ..., ar16  vbap16move  asig, idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]------ csound doc: <http://csound.com/docs/manual/vbap16move.html>-vbap16move :: Tuple a => Sig -> D -> D -> D -> [D] -> a-vbap16move b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vbap16move" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4] ++ a5)---- | --- Distributes an audio signal among 4 channels.------ > ar1, ar2, ar3, ar4  vbap4  asig, kazim [, kelev] [, kspread]------ csound doc: <http://csound.com/docs/manual/vbap4.html>-vbap4 ::  Sig -> Sig -> (Sig,Sig,Sig,Sig)-vbap4 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "vbap4" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2]---- | --- Distributes an audio signal among 4 channels with moving virtual sources.------ > ar1, ar2, ar3, ar4  vbap4move  asig, idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]------ csound doc: <http://csound.com/docs/manual/vbap4move.html>-vbap4move :: Tuple a => Sig -> D -> D -> D -> [D] -> a-vbap4move b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vbap4move" ([Ar,Ar,Ar,Ar],[Ar] ++ (repeat Ir)) ([a1-                                                                                    ,a2-                                                                                    ,a3-                                                                                    ,a4] ++ a5)---- | --- Distributes an audio signal among 8 channels.------ > ar1, ..., ar8  vbap8  asig, kazim [, kelev] [, kspread]------ csound doc: <http://csound.com/docs/manual/vbap8.html>-vbap8 :: Tuple a => Sig -> Sig -> a-vbap8 b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "vbap8" ((repeat Ar),[Ar,Kr,Kr,Kr]) [a1,a2]---- | --- Distributes an audio signal among 8 channels with moving virtual sources.------ > ar1, ..., ar8  vbap8move  asig, idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]------ csound doc: <http://csound.com/docs/manual/vbap8move.html>-vbap8move :: Tuple a => Sig -> D -> D -> D -> [D] -> a-vbap8move b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vbap8move" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4] ++ a5)---- | --- Calculates the gains for a sound location between multiple channels.------ Calculates the gains for a sound location for up to 64.------ > k1[, k2...]  vbapg  kazim [,kelev] [, kspread] [, ilayout]--- > karray[]  vbapg  kazim [,kelev] [, kspread] [, ilayout]------ csound doc: <http://csound.com/docs/manual/vbapg.html>-vbapg :: Tuple a => Sig -> a-vbapg b1 = pureTuple $ f <$> unSig b1-    where f a1 = mopcs "vbapg" ((repeat Kr),[Kr,Kr,Kr,Ir]) [a1]---- | --- Calculates the gains for a sound location between multiple---       channels with moving virtual sources.------ > kr1[, kr2...]  vbapgmove  idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]--- > karray[]  vbapgmove  idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]------ csound doc: <http://csound.com/docs/manual/vbapgmove.html>-vbapgmove :: Tuple a => D -> D -> D -> D -> a-vbapgmove b1 b2 b3 b4 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = mopcs "vbapgmove" ((repeat Kr),(repeat Ir)) [a1,a2,a3,a4]---- | --- Configures VBAP output according to loudspeaker parameters.------ >  vbaplsinit  idim, ilsnum [, idir1] [, idir2] [...] [, idir32]--- >  vbaplsinit  idim, ilsnum, ilsarray------ csound doc: <http://csound.com/docs/manual/vbaplsinit.html>-vbaplsinit ::  D -> D -> SE ()-vbaplsinit b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "vbaplsinit" [(Xr,(repeat Ir))] [a1,a2]---- | --- Distributes an audio signal among many channels with moving virtual sources.------ Distributes an audio signal among upto 64 channels with moving---       virtual sources.------ > ar1[, ar2...]  vbapmove  asig, idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]--- > aarray[]  vbapmove  asig, idur, ispread, ifldnum, ifld1 \--- >           [, ifld2] [...]------ csound doc: <http://csound.com/docs/manual/vbapmove.html>-vbapmove :: Tuple a => Sig -> D -> D -> D -> [D] -> a-vbapmove b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = mopcs "vbapmove" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1-                                                                                 ,a2-                                                                                 ,a3-                                                                                 ,a4] ++ a5)---- | --- Writes a multi-channel audio signal to a ZAK array.------ >  vbapz  inumchnls, istartndx, asig, kazim [, kelev] [, kspread]------ csound doc: <http://csound.com/docs/manual/vbapz.html>-vbapz ::  D -> D -> Sig -> Sig -> SE ()-vbapz b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "vbapz" [(Xr,[Ir,Ir,Ar,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Writes a multi-channel audio signal to a ZAK array with moving virtual sources.------ >  vbapzmove  inumchnls, istartndx, asig, idur, ispread, ifldnum, ifld1, \--- >           ifld2, [...]------ csound doc: <http://csound.com/docs/manual/vbapzmove.html>-vbapzmove ::  Sig -> D -> D -> D -> [D] -> SE ()-vbapzmove b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5-    where f a1 a2 a3 a4 a5 = opcs "vbapzmove" [(Xr,[Ir,Ir,Ar] ++ (repeat Ir))] ([a1,a2,a3,a4] ++ a5)---- Reverberation.---- | --- Reverberates an input signal with a flat frequency response.------ > ares  alpass  asig, xrvt, ilpt [, iskip] [, insmps]------ csound doc: <http://csound.com/docs/manual/alpass.html>-alpass ::  Sig -> Sig -> D -> Sig-alpass b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "alpass" [(Ar,[Ar,Xr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- A physical model reverberator.------ babo  stands  for  ball-within-the-box.   It is a physical model reverberator based on the paper by Davide  Rocchesso "The  Ball  within  the Box: a sound-processing metaphor", Computer Music Journal,  Vol  19,  N.4,  pp.45-47,  Winter 1995.------ > a1, a2  babo  asig, ksrcx, ksrcy, ksrcz, irx, iry, irz [, idiff] [, ifno]------ csound doc: <http://csound.com/docs/manual/babo.html>-babo ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> (Sig,Sig)-babo b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "babo" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1-                                                                                       ,a2-                                                                                       ,a3-                                                                                       ,a4-                                                                                       ,a5-                                                                                       ,a6-                                                                                       ,a7]---- | --- Reverberates an input signal with a “colored” frequency response.------ > ares  comb  asig, krvt, ilpt [, iskip] [, insmps]------ csound doc: <http://csound.com/docs/manual/comb.html>-comb ::  Sig -> Sig -> D -> Sig-comb b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "comb" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Reverberates an input signal with a “colored” frequency response.------ Reverberates an input signal with a “colored”---       frequency response with a FIR filter.------ > ares  combinv  asig, krvt, ilpt [, iskip] [, insmps]------ csound doc: <http://csound.com/docs/manual/combinv.html>-combinv ::  Sig -> Sig -> D -> Sig-combinv b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "combinv" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Opcode version of Jezar's Freeverb------ freeverb is a stereo reverb unit based on Jezar's public domain--- 		C++ sources, composed of eight parallel comb filters on both--- 		channels, followed by four allpass units in series. The filters--- 		on the right channel are slightly detuned compared to the left--- 		channel in order to create a stereo effect.------ > aoutL, aoutR  freeverb  ainL, ainR, kRoomSize, kHFDamp[, iSRate[, iSkip]] ------ csound doc: <http://csound.com/docs/manual/freeverb.html>-freeverb ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)-freeverb b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = mopcs "freeverb" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4]---- | --- Three different nested all-pass filters.------ Three different nested all-pass filters, useful for implementing reverbs.------ > ares  nestedap  asig, imode, imaxdel, idel1, igain1 [, idel2] [, igain2] \--- >           [, idel3] [, igain3] [, istor]------ csound doc: <http://csound.com/docs/manual/nestedap.html>-nestedap ::  Sig -> D -> D -> D -> D -> Sig-nestedap b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "nestedap" [(Ar,[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- A reverberator consisting of 6 parallel comb-lowpass filters.------ This is a reverberator consisting of 6 parallel comb-lowpass filters being fed into a series of 5 allpass filters. nreverb replaces reverb2 (version 3.48) and so both opcodes are identical.------ > ares  nreverb  asig, ktime, khdif [, iskip] [,inumCombs] [, ifnCombs] \--- >           [, inumAlpas] [, ifnAlpas]------ csound doc: <http://csound.com/docs/manual/nreverb.html>-nreverb ::  Sig -> Sig -> Sig -> Sig-nreverb b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "nreverb" [(Ar,[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Models the reverberation of a metal plate.------ Models the reverberation of a rectangular metal plate with---       settable physical characteristics when excited by audio signal(s).------ > a1[, a2, ...]  platerev  itabexcite. itabouts, kbndry, iaspect, istiff, idecay, iloss, aexcite1[, aexcite2, ...]------ csound doc: <http://csound.com/docs/manual/platerev.html>-platerev :: Tuple a => D -> D -> Sig -> D -> D -> D -> D -> [Sig] -> a-platerev b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> mapM unSig b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "platerev" ((repeat Ar)-                                                       ,[Ir,Ir,Kr,Ir,Ir,Ir,Ir] ++ (repeat Ar)) ([a1,a2,a3,a4,a5,a6,a7] ++ a8)---- | --- Reverberates an input signal with a “natural room” frequency response.------ > ares  reverb  asig, krvt [, iskip]------ csound doc: <http://csound.com/docs/manual/reverb.html>-reverb ::  Sig -> Sig -> Sig-reverb b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "reverb" [(Ar,[Ar,Kr,Ir])] [a1,a2]---- | --- Same as the nreverb opcode.------ > ares  reverb2  asig, ktime, khdif [, iskip] [,inumCombs] \--- >           [, ifnCombs] [, inumAlpas] [, ifnAlpas]------ csound doc: <http://csound.com/docs/manual/reverb2.html>-reverb2 ::  Sig -> Sig -> Sig -> Sig-reverb2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "reverb2" [(Ar,[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- 8 delay line stereo FDN reverb, based on work by Sean Costello------ 8 delay line stereo FDN reverb, with feedback matrix based upon physical--- 		modeling scattering junction of 8 lossless waveguides of equal characteristic--- 		impedance. Based on Csound orchestra version by Sean Costello.------ > aoutL, aoutR  reverbsc  ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]] ------ csound doc: <http://csound.com/docs/manual/reverbsc.html>-reverbsc ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)-reverbsc b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = mopcs "reverbsc" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]---- | --- Variably reverberates an input signal with a flat frequency response.------ > ares  valpass  asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]------ csound doc: <http://csound.com/docs/manual/valpass.html>-valpass ::  Sig -> Sig -> Sig -> D -> Sig-valpass b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "valpass" [(Ar,[Ar,Kr,Xr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Variably reverberates an input signal with a “colored” frequency response.------ > ares  vcomb  asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]------ csound doc: <http://csound.com/docs/manual/vcomb.html>-vcomb ::  Sig -> Sig -> Sig -> D -> Sig-vcomb b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vcomb" [(Ar,[Ar,Kr,Xr,Ir,Ir,Ir])] [a1,a2,a3,a4]---- Sample Level Operators.---- | --- Mixes low level noise to a list of a-rate signals------ 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.------ >  denorm  a1[, a2[, a3[, ... ]]]------ csound doc: <http://csound.com/docs/manual/denorm.html>-denorm ::  [Sig] -> SE ()-denorm b1 = SE $ (depT_ =<<) $ lift $ f <$> mapM unSig b1-    where f a1 = opcs "denorm" [(Xr,(repeat Ar))] a1---- | --- Modify a signal by differentiation.------ > ares  diff  asig [, iskip]--- > kres  diff  ksig [, iskip]------ csound doc: <http://csound.com/docs/manual/diff.html>-diff ::  Sig -> Sig-diff b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "diff" [(Ar,[Ar,Ir]),(Kr,[Kr,Ir])] [a1]---- | --- Modify a signal by down-sampling.------ > kres  downsamp  asig [, iwlen]------ csound doc: <http://csound.com/docs/manual/downsamp.html>-downsamp ::  Sig -> Sig-downsamp b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "downsamp" [(Kr,[Ar,Ir])] [a1]---- | --- Adds artificial foldover to an audio signal.------ > ares  fold  asig, kincr------ csound doc: <http://csound.com/docs/manual/fold.html>-fold ::  Sig -> Sig -> Sig-fold b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "fold" [(Ar,[Ar,Kr])] [a1,a2]---- | --- Modify a signal by integration.------ > ares  integ  asig [, iskip]--- > kres  integ  ksig [, iskip]------ csound doc: <http://csound.com/docs/manual/integ.html>-integ ::  Sig -> Sig-integ b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "integ" [(Ar,[Ar,Ir]),(Kr,[Kr,Ir])] [a1]---- | --- Converts a control signal to an audio signal using linear interpolation.------ > ares  interp  ksig [, iskip] [, imode]--- >         [, ivalue]------ csound doc: <http://csound.com/docs/manual/interp.html>-interp ::  Sig -> Sig-interp b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "interp" [(Ar,[Kr,Ir,Ir,Ir])] [a1]---- | --- Calculates the weighted mean value of two input signals.------ Calculates the weighted mean value (i.e. linear interpolation) of two input signals------ > ares  ntrpol  asig1, asig2, kpoint [, imin] [, imax]--- > ires  ntrpol  isig1, isig2, ipoint [, imin] [, imax]--- > kres  ntrpol  ksig1, ksig2, kpoint [, imin] [, imax]------ csound doc: <http://csound.com/docs/manual/ntrpol.html>-ntrpol ::  Sig -> Sig -> Sig -> Sig-ntrpol b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "ntrpol" [(Ar,[Ar,Ar,Kr,Ir,Ir])-                                     ,(Ir,[Ir,Ir,Ir,Ir,Ir])-                                     ,(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Performs a sample-and-hold operation on its input.------ > ares  samphold  asig, agate [, ival] [, ivstor]--- > kres  samphold  ksig, kgate [, ival] [, ivstor]------ csound doc: <http://csound.com/docs/manual/samphold.html>-samphold ::  Sig -> Sig -> Sig-samphold b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "samphold" [(Ar,[Ar,Ar,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2]---- | --- Modify a signal by up-sampling.------ > ares  upsamp  ksig------ csound doc: <http://csound.com/docs/manual/upsamp.html>-upsamp ::  Sig -> Sig-upsamp b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "upsamp" [(Ar,[Kr])] [a1]---- | --- Access values of the current buffer of an a-rate variable by indexing.------ 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.------ > kval  vaget  kndx, avar------ csound doc: <http://csound.com/docs/manual/vaget.html>-vaget ::  Sig -> Sig -> Sig-vaget b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "vaget" [(Kr,[Kr,Ar])] [a1,a2]---- | --- Write value of into the current buffer of an a-rate variable by index.------ 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.------ >  vaset  kval, kndx, avar------ csound doc: <http://csound.com/docs/manual/vaset.html>-vaset ::  Sig -> Sig -> Sig -> SE ()-vaset b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vaset" [(Xr,[Kr,Kr,Ar])] [a1,a2,a3]---- Signal Limiters.---- | --- Sets the lower and upper limits of the value it processes.------ > ares  limit  asig, klow, khigh--- > ires  limit  isig, ilow, ihigh--- > kres  limit  ksig, klow, khigh--- > ires[]  limit  isig[], ilow, ihigh--- > kres[]  limit  ksig[], klow, khigh------ csound doc: <http://csound.com/docs/manual/limit.html>-limit ::  Sig -> Sig -> Sig -> Sig-limit b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "limit" [(Ar,[Ar,Kr,Kr])-                                    ,(Ir,[Ir,Ir,Ir])-                                    ,(Kr,[Kr,Kr,Kr])-                                    ,(Ir,[Ir,Ir,Ir])-                                    ,(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Reflects the signal that exceeds the low and high thresholds.------ > ares  mirror  asig, klow, khigh--- > ires  mirror  isig, ilow, ihigh--- > kres  mirror  ksig, klow, khigh------ csound doc: <http://csound.com/docs/manual/mirror.html>-mirror ::  Sig -> Sig -> Sig -> Sig-mirror b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "mirror" [(Ar,[Ar,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Wraps-around the signal that exceeds the low and high thresholds.------ > ares  wrap  asig, klow, khigh--- > ires  wrap  isig, ilow, ihigh--- > kres  wrap  ksig, klow, khigh------ csound doc: <http://csound.com/docs/manual/wrap.html>-wrap ::  Sig -> Sig -> Sig -> Sig-wrap b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "wrap" [(Ar,[Ar,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- Special Effects.---- | --- Distort an audio signal via waveshaping and optional clipping.------ > ar  distort  asig, kdist, ifn[, ihp, istor]------ csound doc: <http://csound.com/docs/manual/distort.html>-distort ::  Sig -> Sig -> Tab -> Sig-distort b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "distort" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Modified hyperbolic tangent distortion.------ Implementation of modified hyperbolic tangent distortion. distort1 can be used to generate wave shaping distortion based on a modification of the tanh function.------ > ares  distort1  asig, kpregain, kpostgain, kshape1, kshape2[, imode]------ csound doc: <http://csound.com/docs/manual/distort1.html>-distort1 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-distort1 b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "distort1" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- A user controlled flanger.------ > ares  flanger  asig, adel, kfeedback [, imaxd]------ csound doc: <http://csound.com/docs/manual/flanger.html>-flanger ::  Sig -> Sig -> Sig -> Sig-flanger b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "flanger" [(Ar,[Ar,Ar,Kr,Ir])] [a1,a2,a3]---- | --- Analyze an audio input and generate harmonizing voices in synchrony.------ > ares  harmon  asig, kestfrq, kmaxvar, kgenfreq1, kgenfreq2, imode, \--- >           iminfrq, iprd------ csound doc: <http://csound.com/docs/manual/harmon.html>-harmon ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig-harmon b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "harmon" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                     ,a2-                                                                                     ,a3-                                                                                     ,a4-                                                                                     ,a5-                                                                                     ,a6-                                                                                     ,a7-                                                                                     ,a8]---- | --- Analyze an audio input and generate harmonizing voices in---       synchrony with formants preserved.------ Generate harmonizing voices with formants preserved.------ > ares  harmon2  asig, koct, kfrq1, kfrq2, icpsmode, ilowest[, ipolarity]------ csound doc: <http://csound.com/docs/manual/harmon2.html>-harmon2 ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-harmon2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "harmon2" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Analyze an audio input and generate harmonizing voices in---       synchrony with formants preserved.------ Generate harmonizing voices with formants preserved.------ > ares  harmon3  asig, koct, kfrq1, \--- >         kfrq2, kfrq3, icpsmode, ilowest[, ipolarity]------ csound doc: <http://csound.com/docs/manual/harmon2.html>-harmon3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-harmon3 b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "harmon3" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4-                                                                                   ,a5-                                                                                   ,a6-                                                                                   ,a7]---- | --- Analyze an audio input and generate harmonizing voices in---       synchrony with formants preserved.------ Generate harmonizing voices with formants preserved.------ > ares  harmon4  asig, koct, kfrq1, \--- >         kfrq2, kfrq3, kfrq4, icpsmode, ilowest[, ipolarity]------ csound doc: <http://csound.com/docs/manual/harmon2.html>-harmon4 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-harmon4 b1 b2 b3 b4 b5 b6 b7 b8 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "harmon4" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                         ,a2-                                                                                         ,a3-                                                                                         ,a4-                                                                                         ,a5-                                                                                         ,a6-                                                                                         ,a7-                                                                                         ,a8]---- | --- First-order allpass filters arranged in a series.------ An implementation of iord number of first-order allpass filters in series.------ > ares  phaser1  asig, kfreq, kord, kfeedback [, iskip]------ csound doc: <http://csound.com/docs/manual/phaser1.html>-phaser1 ::  Sig -> Sig -> Sig -> Sig -> Sig-phaser1 b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "phaser1" [(Ar,[Ar,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4]---- | --- Second-order allpass filters arranged in a series.------ An implementation of iord number of second-order allpass filters in series.------ > ares  phaser2  asig, kfreq, kq, kord, kmode, ksep, kfeedback------ csound doc: <http://csound.com/docs/manual/phaser2.html>-phaser2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-phaser2 b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "phaser2" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Kr])] [a1-                                                                                ,a2-                                                                                ,a3-                                                                                ,a4-                                                                                ,a5-                                                                                ,a6-                                                                                ,a7]---- Standard Filters.---- | --- A hi-pass filter whose transfer functions are the complements of the tone opcode.------ > ares  atone  asig, khp [, iskip]------ csound doc: <http://csound.com/docs/manual/atone.html>-atone ::  Sig -> Sig -> Sig-atone b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "atone" [(Ar,[Ar,Kr,Ir])] [a1,a2]---- | --- Emulates a stack of filters using the atone opcode.------ atonex is equivalent to a filter consisting of more layers of atone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.------ > ares  atonex  asig, khp [, inumlayer] [, iskip]--- > ares  atonex  asig, ahp [, inumlayer] [, iskip]------ csound doc: <http://csound.com/docs/manual/atonex.html>-atonex ::  Sig -> Sig -> Sig-atonex b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "atonex" [(Ar,[Ar,Kr,Ir,Ir]),(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]---- | --- A sweepable general purpose biquadratic digital filter.------ > ares  biquad  asig, kb0, kb1, kb2, ka0, ka1, ka2 [, iskip]------ csound doc: <http://csound.com/docs/manual/biquad.html>-biquad ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-biquad b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "biquad" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6-                                                                                  ,a7]---- | --- A sweepable general purpose biquadratic digital filter with a-rate parameters.------ A sweepable general purpose biquadratic digital filter.------ > ares  biquada  asig, ab0, ab1, ab2, aa0, aa1, aa2 [, iskip]------ csound doc: <http://csound.com/docs/manual/biquada.html>-biquada ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-biquada b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "biquada" [(Ar,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ir])] [a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4-                                                                                   ,a5-                                                                                   ,a6-                                                                                   ,a7]---- | --- Same as the butterbp opcode.------ > ares  butbp  asig, kfreq, kband [, iskip]------ csound doc: <http://csound.com/docs/manual/butbp.html>-butbp ::  Sig -> Sig -> Sig -> Sig-butbp b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "butbp" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]---- | --- Same as the butterbr opcode.------ > ares  butbr  asig, kfreq, kband [, iskip]------ csound doc: <http://csound.com/docs/manual/butbr.html>-butbr ::  Sig -> Sig -> Sig -> Sig-butbr b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "butbr" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]---- | --- Same as the butterhp opcode.------ > ares  buthp  asig, kfreq [, iskip]--- > ares  buthp  asig, afreq [, iskip]------ csound doc: <http://csound.com/docs/manual/buthp.html>-buthp ::  Sig -> Sig -> Sig-buthp b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "buthp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]---- | --- Same as the butterlp opcode.------ > ares  butlp  asig, kfreq [, iskip]--- > ares  butlp  asig, afreq [, iskip]------ csound doc: <http://csound.com/docs/manual/butlp.html>-butlp ::  Sig -> Sig -> Sig-butlp b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "butlp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]---- | --- A band-pass Butterworth filter.------ Implementation of a second-order band-pass Butterworth filter. This opcode can also be written as butbp.------ > ares  butterbp  asig, xfreq, xband [, iskip]------ csound doc: <http://csound.com/docs/manual/butterbp.html>-butterbp ::  Sig -> Sig -> Sig -> Sig-butterbp b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "butterbp" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- A band-reject Butterworth filter.------ Implementation of a second-order band-reject Butterworth filter. This opcode can also be written as butbr.------ > ares  butterbr  asig, xfreq, xband [, iskip]------ csound doc: <http://csound.com/docs/manual/butterbr.html>-butterbr ::  Sig -> Sig -> Sig -> Sig-butterbr b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "butterbr" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- A high-pass Butterworth filter.------ Implementation of second-order high-pass Butterworth filter. This opcode can also be written as buthp.------ > ares  butterhp  asig, kfreq [, iskip]--- > ares  butterhp  asig, afreq [, iskip]------ csound doc: <http://csound.com/docs/manual/butterhp.html>-butterhp ::  Sig -> Sig -> Sig-butterhp b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "butterhp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]---- | --- A low-pass Butterworth filter.------ Implementation of a second-order low-pass Butterworth filter. This opcode can also be written as butlp.------ > ares  butterlp  asig, kfreq [, iskip]--- > ares  butterlp  asig, afreq [, iskip]------ csound doc: <http://csound.com/docs/manual/butterlp.html>-butterlp ::  Sig -> Sig -> Sig-butterlp b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "butterlp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]---- | --- Implements low-pass and high-pass filters of different styles.------ Implements the classical standard analog filter types: low-pass and high-pass. They are implemented with the four classical kinds of filters: Butterworth, Chebyshev Type I, Chebyshev Type II, and Elliptical.  The number of poles may be any even number from 2 to 80.------ > ares  clfilt  asig, kfreq, itype, inpol [, ikind] [, ipbr] [, isba] [, iskip]------ csound doc: <http://csound.com/docs/manual/clfilt.html>-clfilt ::  Sig -> Sig -> D -> D -> Sig-clfilt b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "clfilt" [(Ar,[Ar,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Zero-delay feedback implementation of 4 pole diode ladder filter.------ Zero-delay feedback implementation of a 4 pole (24 dB/oct) diode low-pass filter. This filter design was originally used in the EMS VCS3 and was the resonant filter in the Roland TB-303.------ > asig  diode_ladder  ain, xcf, xk [, inlp, isaturation, istor]------ csound doc: <http://csound.com/docs/manual/diode_ladder.html>-diode_ladder ::  Sig -> Sig -> Sig -> Sig-diode_ladder b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "diode_ladder" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations.------ A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations. The method computes frequency shifts based on reading an input delay line at a delay time computed from the distance between source and mic and the speed of sound. One instance of the opcode is required for each dimension of space through which the sound source moves. If the source sound moves at a constant speed from in front of the microphone, through the microphone, to behind the microphone, then the output will be frequency shifted above the source frequency at a constant frequency while the source approaches, then discontinuously will be shifted below the source frequency at a constant frequency as the source recedes from the microphone. If the source sound moves at a constant speed through a point to one side of the microphone, then the rate of change of position will not be constant, and the familiar Doppler frequency shift typical of a siren or engine approaching and receding along a road beside a listener will be heard.------ > ashifted  doppler  asource, ksourceposition, kmicposition [, isoundspeed, ifiltercutoff]------ csound doc: <http://csound.com/docs/manual/doppler.html>-doppler ::  Sig -> Sig -> Sig -> Sig-doppler b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "doppler" [(Ar,[Ar,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Zero-delay feedback implementation of Korg35 resonant high-pass filter.------ Zero-delay feedback implementation of Korg35 resonant high-pass filter. This filter design is found in the Korg MS10 early MS20.------ > asig  K35_hpf  ain, xcf, xQ [, inlp, isaturation, istor]------ csound doc: <http://csound.com/docs/manual/k35_hpf.html>-k35_hpf ::  Sig -> Sig -> Sig -> Sig-k35_hpf b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "K35_hpf" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Zero-delay feedback implementation of Korg35 resonant low-pass filter.------ Zero-delay feedback implementation of Korg35 resonant low-pass filter. This filter design is found in the Korg MS10, early MS20, and Monotron series.------ > asig  K35_lpf  ain, xcf, xQ [, inlp, isaturation, istor]------ csound doc: <http://csound.com/docs/manual/k35_lpf.html>-k35_lpf ::  Sig -> Sig -> Sig -> Sig-k35_lpf b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "K35_lpf" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- A median filter, a variant FIR lowpass filter.------ Implementation of a median filter.------ > ares  median  asig, ksize, imaxsize [, iskip]------ csound doc: <http://csound.com/docs/manual/median.html>-median ::  Sig -> Sig -> D -> Sig-median b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "median" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A median filter, a variant FIR lowpass filter.------ Implementation of a median filter.------ > kres  mediank  kin, ksize, imaxsize [, iskip]------ csound doc: <http://csound.com/docs/manual/mediank.html>-mediank ::  Sig -> Sig -> D -> Sig-mediank b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "mediank" [(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A filter that simulates a mass-spring-damper system------ Filters the incoming signal with the specified resonance frequency and---       quality factor. It can also be seen as a signal generator for high quality---       factor, with an impulse for the excitation. You can combine several modes---       to built complex instruments such as bells or guitar tables.------ > aout  mode  ain, xfreq, xQ [, iskip]------ csound doc: <http://csound.com/docs/manual/mode.html>-mode ::  Sig -> Sig -> Sig -> Sig-mode b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "mode" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- A first-order recursive low-pass filter with variable frequency response.------ > ares  tone  asig, khp [, iskip]------ csound doc: <http://csound.com/docs/manual/tone.html>-tone ::  Sig -> Sig -> Sig-tone b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "tone" [(Ar,[Ar,Kr,Ir])] [a1,a2]---- | --- Emulates a stack of filters using the tone opcode.------ tonex is equivalent to a filter consisting of more layers of tone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.------ > ares  tonex   asig, khp [, inumlayer] [, iskip]--- > ares  tonex   asig, ahp [, inumlayer] [, iskip]------ csound doc: <http://csound.com/docs/manual/tonex.html>-tonex ::  Sig -> Sig -> Sig-tonex b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "tonex" [(Ar,[Ar,Kr,Ir,Ir]),(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]---- | --- Zero-delay feedback implementation of 1 pole filter.------ Zero-delay feedback implementation of a 1 pole (6 dB/oct) filter. Offers low-pass (default), high-pass, and allpass output modes.------ > asig  zdf_1pole  ain, xcf [, kmode, istor]------ csound doc: <http://csound.com/docs/manual/zdf_1pole.html>-zdf_1pole ::  Sig -> Sig -> Sig-zdf_1pole b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zdf_1pole" [(Ar,[Ar,Xr,Kr,Ir])] [a1,a2]---- | --- Zero-delay feedback implementation of 1 pole filter with multimode output.------ Zero-delay feedback implementation of a 1 pole (6 dB/oct) filter. Offers low-pass and high-pass output.------ > alp, ahp  zdf_1pole_mode  ain, xcf [, istor]------ csound doc: <http://csound.com/docs/manual/zdf_1pole_mode.html>-zdf_1pole_mode ::  Sig -> Sig -> (Sig,Sig)-zdf_1pole_mode b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "zdf_1pole_mode" ([Ar,Ar],[Ar,Xr,Ir]) [a1,a2]---- | --- Zero-delay feedback implementation of 2 pole filter.------ Zero-delay feedback implementation of a 2 pole (12 dB/oct) filter. Offers low-pass (default), high-pass, and allpass output modes.------ > asig  zdf_2pole  ain, xcf, xQ [, kmode, istor]------ csound doc: <http://csound.com/docs/manual/zdf_2pole.html>-zdf_2pole ::  Sig -> Sig -> Sig -> Sig-zdf_2pole b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "zdf_2pole" [(Ar,[Ar,Xr,Xr,Kr,Ir])] [a1,a2,a3]---- | --- Zero-delay feedback implementation of 2 pole filter with multimode output.------ Zero-delay feedback implementation of a 2 pole (12 dB/oct) filter. Offers low-pass,---       band-pass, and high-pass output.------ > alp, abp, ahp  zdf_2pole_mode  ain, xcf, Q [, istor]------ csound doc: <http://csound.com/docs/manual/zdf_2pole_mode.html>-zdf_2pole_mode ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig)-zdf_2pole_mode b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "zdf_2pole_mode" ([Ar,Ar,Ar],[Ar,Xr,Xr,Ir]) [a1,a2,a3]---- | --- Zero-delay feedback implementation of 4 pole ladder filter.------ Zero-delay feedback implementation of a 4 pole (24 dB/oct) low-pass filter based on the Moog ladder filter.------ > asig  zdf_ladder  ain, xcf, xQ [, istor]------ csound doc: <http://csound.com/docs/manual/zdf_ladder.html>-zdf_ladder ::  Sig -> Sig -> Sig -> Sig-zdf_ladder b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "zdf_ladder" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- Standard Filters:Resonant.---- | --- A notch filter whose transfer functions are the complements of---       the reson opcode.------ > ares  areson  asig, kcf, kbw [, iscl] [, iskip]--- > ares  areson  asig, acf, kbw [, iscl] [, iskip]--- > ares  areson  asig, kcf, abw [, iscl] [, iskip]--- > ares  areson  asig, acf, abw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/areson.html>-areson ::  Sig -> Sig -> Sig -> Sig-areson b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "areson" [(Ar,[Ar,Kr,Kr,Ir,Ir])-                                     ,(Ar,[Ar,Ar,Kr,Ir,Ir])-                                     ,(Ar,[Ar,Kr,Ar,Ir,Ir])-                                     ,(Ar,[Ar,Ar,Ar,Ir,Ir])] [a1,a2,a3]---- | --- A second-order multi-mode filter.------ > ares  bqrez  asig, xfco, xres [, imode] [, iskip]------ csound doc: <http://csound.com/docs/manual/bqrez.html>-bqrez ::  Sig -> Sig -> Sig -> Sig-bqrez b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "bqrez" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- A resonant lowpass filter.------ Implementation of a resonant second-order lowpass filter.------ > ares  lowpass2  asig, kcf, kq [, iskip]------ csound doc: <http://csound.com/docs/manual/lowpass2.html>-lowpass2 ::  Sig -> Sig -> Sig -> Sig-lowpass2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "lowpass2" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]---- | --- Another resonant lowpass filter.------ lowres is a resonant lowpass filter.------ > ares  lowres  asig, kcutoff, kresonance [, iskip]------ csound doc: <http://csound.com/docs/manual/lowres.html>-lowres ::  Sig -> Sig -> Sig -> Sig-lowres b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "lowres" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]---- | --- Simulates layers of serially connected resonant lowpass filters.------ lowresx is equivalent to more layers of lowres with the same arguments serially connected.------ > ares  lowresx  asig, xcutoff, xresonance [, inumlayer] [, iskip]------ csound doc: <http://csound.com/docs/manual/lowresx.html>-lowresx ::  Sig -> Sig -> Sig -> Sig-lowresx b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "lowresx" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- A 3-pole sweepable resonant lowpass filter.------ Implementation of a 3 pole sweepable resonant lowpass filter.------ > ares  lpf18  asig, xfco, xres, xdist [, iskip]------ csound doc: <http://csound.com/docs/manual/lpf18.html>-lpf18 ::  Sig -> Sig -> Sig -> Sig -> Sig-lpf18 b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "lpf18" [(Ar,[Ar,Xr,Xr,Xr,Ir])] [a1,a2,a3,a4]---- | --- Moog ladder lowpass filter.------ Moogladder is an new digital implementation of the Moog ladder filter based on --- the work of Antti Huovilainen, described in the paper "Non-Linear Digital --- Implementation of the Moog Ladder Filter" (Proceedings of DaFX04, Univ of Napoli). --- This implementation is probably a more accurate digital representation of --- the original analogue filter.------ > asig  moogladder  ain, kcf, kres[, istor]--- > asig  moogladder  ain, acf, kres[, istor]--- > asig  moogladder  ain, kcf, ares[, istor]--- > asig  moogladder  ain, acf, ares[, istor]------ csound doc: <http://csound.com/docs/manual/moogladder.html>-moogladder ::  Sig -> Sig -> Sig -> Sig-moogladder b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "moogladder" [(Ar,[Ar,Kr,Kr,Ir])-                                         ,(Ar,[Ar,Ar,Kr,Ir])-                                         ,(Ar,[Ar,Kr,Ar,Ir])-                                         ,(Ar,[Ar,Ar,Ar,Ir])] [a1,a2,a3]---- | --- Moog ladder lowpass filter.------ Moogladder2 is an new digital implementation of the Moog ladder filter based on --- the work of Antti Huovilainen, described in the paper "Non-Linear Digital --- Implementation of the Moog Ladder Filter" (Proceedings of DaFX04, Univ of Napoli). --- This implementation uses approximations to the tanh function and so is--- faster but less accurate than moogladder.------ > asig  moogladder2  ain, kcf, kres[, istor]--- > asig  moogladder2  ain, acf, kres[, istor]--- > asig  moogladder2  ain, kcf, ares[, istor]--- > asig  moogladder2  ain, acf, ares[, istor]------ csound doc: <http://csound.com/docs/manual/moogladder2.html>-moogladder2 ::  Sig -> Sig -> Sig -> Sig-moogladder2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "moogladder2" [(Ar,[Ar,Kr,Kr,Ir])-                                          ,(Ar,[Ar,Ar,Kr,Ir])-                                          ,(Ar,[Ar,Kr,Ar,Ir])-                                          ,(Ar,[Ar,Ar,Ar,Ir])] [a1,a2,a3]---- | --- A digital emulation of the Moog diode ladder filter configuration.------ > ares  moogvcf  asig, xfco, xres [,iscale, iskip]------ csound doc: <http://csound.com/docs/manual/moogvcf.html>-moogvcf ::  Sig -> Sig -> Sig -> Sig-moogvcf b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "moogvcf" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- A digital emulation of the Moog diode ladder filter configuration.------ > ares  moogvcf2  asig, xfco, xres [,iscale, iskip]------ csound doc: <http://csound.com/docs/manual/moogvcf2.html>-moogvcf2 ::  Sig -> Sig -> Sig -> Sig-moogvcf2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "moogvcf2" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- Moog voltage-controlled highpass filter emulation.------ Mvchpf is an digital implementation of the 4th-order (24 dB/oct)  Moog--- high-pass filter, originally written by Fons Andriaensen. According to the author,--- mvchpf "...is based on the voltage controlled highpass filter by Robert Moog.--- again with some attention to the nonlinear effects."------ > asig  mvchpf  ain, xcf[, istor]------ csound doc: <http://csound.com/docs/manual/mvchpf.html>-mvchpf ::  Sig -> Sig -> Sig-mvchpf b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "mvchpf" [(Ar,[Ar,Xr,Ir])] [a1,a2]---- | --- Moog voltage-controlled lowpass filter emulation.------ Mvclpf1 is an digital implementation of the 4th-order (24 dB/oct)  Moog ladder filter--- originally written by Fons Andriaensen. According to the author,--- mvclpf1 "is a fairly simple design, and it does not even pretend to come--- close the 'real thing'. It uses a very crude approximation of the non-linear--- resistor in the first filter section only. [...] [I]t's [a] cheap (in--- terms of CPU usage) general purpose 24 dB/oct lowpass--- filter that could be useful".------ > asig  mvclpf1  ain, xcf, xres[,istor]------ csound doc: <http://csound.com/docs/manual/mvclpf1.html>-mvclpf1 ::  Sig -> Sig -> Sig -> Sig-mvclpf1 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "mvclpf1" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- Moog voltage-controlled lowpass filter emulation.------ Mvclpf2 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter--- originally written by Fons Andriaensen. According to the author,--- mvclpf2 "uses five non-linear elements, in the input and in all four filter--- sections. It works by using the derivative of the nonlinearity (for which--- 1 / (1 + x * x) is reasonable approximation). The main advantage of this is--- that only one evaluation of the non-linear function is required for each--- section".------ > asig  mvclpf2  ain, xcf, xres[, istor]------ csound doc: <http://csound.com/docs/manual/mvclpf2.html>-mvclpf2 ::  Sig -> Sig -> Sig -> Sig-mvclpf2 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "mvclpf2" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- Moog voltage-controlled lowpass filter emulation.------ Mvclpf3 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter--- originally written by Fons Andriaensen. According to the author,--- mvclpf3 "is based on mvclpf2 , with two differences. It uses the--- the technique described by Stilson and Smith to extend the constant-Q--- range, and the internal sample frequency is doubled, giving a better--- approximation to the non-linear behaviour at high freqencies.--- This version has high Q over the entire frequency range and will--- oscillate up to above 10 kHz, while the two others show a decreasing--- Q at high frequencies. Mvclpf3  is reasonably well tuned, and can be--- 'played' as a VCO up to at least 5 kHz".------ > asig  mvclpf3  ain, xcf, xres[, istor]------ csound doc: <http://csound.com/docs/manual/mvclpf3.html>-mvclpf3 ::  Sig -> Sig -> Sig -> Sig-mvclpf3 b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "mvclpf3" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]---- | --- Moog voltage-controlled lowpass filter emulation.------ Mvclpf4 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter--- originally written by Fons Andriaensen. It is a version of the--- mvclpf3 opcode with four outputs, for 6dB, 12dB, 18dB, and--- 24 dB/octave responses.------ > asig1,asig2,asig3,asig4  mvclpf4  ain, xcf, xres[, istor]------ csound doc: <http://csound.com/docs/manual/mvclpf4.html>-mvclpf4 ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)-mvclpf4 b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "mvclpf4" ([Ar,Ar,Ar,Ar],[Ar,Xr,Xr,Ir]) [a1,a2,a3]---- | --- A second-order resonant filter.------ > ares  reson  asig, xcf, xbw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/reson.html>-reson ::  Sig -> Sig -> Sig -> Sig-reson b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "reson" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- A bandpass filter with variable frequency response.------ Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.------ > ares  resonr  asig, xcf, xbw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/resonr.html>-resonr ::  Sig -> Sig -> Sig -> Sig-resonr b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "resonr" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- Emulates a stack of filters using the reson opcode.------ resonx is equivalent to a filters consisting of more layers of reson with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.------ > ares  resonx  asig, xcf, xbw [, inumlayer] [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/resonx.html>-resonx ::  Sig -> Sig -> Sig -> Sig-resonx b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "resonx" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- A bank of second-order bandpass filters, connected in parallel.------ > ares  resony  asig, kbf, kbw, inum, ksep [, isepmode] [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/resony.html>-resony ::  Sig -> Sig -> Sig -> D -> Sig -> Sig-resony b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "resony" [(Ar,[Ar,Kr,Kr,Ir,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- A bandpass filter with variable frequency response.------ Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.------ > ares  resonz  asig, xcf, xbw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/resonz.html>-resonz ::  Sig -> Sig -> Sig -> Sig-resonz b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "resonz" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- A resonant low-pass filter.------ > ares  rezzy  asig, xfco, xres [, imode, iskip]------ csound doc: <http://csound.com/docs/manual/rezzy.html>-rezzy ::  Sig -> Sig -> Sig -> Sig-rezzy b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "rezzy" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]---- | --- State-variable filter.------ Statevar is a new digital implementation of the analogue state-variable filter. --- This filter has four simultaneous outputs: high-pass, low-pass,--- band-pass and band-reject. This filter uses oversampling for sharper--- resonance (default: 3 times oversampling). It includes a--- resonance limiter that prevents the filter from getting unstable.------ > ahp,alp,abp,abr  statevar  ain, xcf, xq [, iosamps, istor]------ csound doc: <http://csound.com/docs/manual/statevar.html>-statevar ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)-statevar b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "statevar" ([Ar,Ar,Ar,Ar],[Ar,Xr,Xr,Ir,Ir]) [a1,a2,a3]---- | --- A resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.------ Implementation of a resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.------ > alow, ahigh, aband  svfilter   asig, kcf, kq [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/svfilter.html>-svfilter ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig)-svfilter b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = mopcs "svfilter" ([Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3]---- | --- Models some of the filter characteristics of a Roland TB303 voltage-controlled filter.------ This opcode attempts to model some of the filter characteristics of a Roland TB303 voltage-controlled filter. Euler's method is used to approximate the system, rather than traditional filter methods. Cutoff frequency, Q, and distortion are all coupled. Empirical methods were used to try to unentwine,  but frequency is only approximate as a result. Future fixes for some problems with this opcode may break existing orchestras relying on this version of tbvcf.------ > ares  tbvcf  asig, xfco, xres, kdist, kasym [, iskip]------ csound doc: <http://csound.com/docs/manual/tbvcf.html>-tbvcf ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-tbvcf b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "tbvcf" [(Ar,[Ar,Xr,Xr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- A bank of filters in which the cutoff frequency can be separated under user control.------ A bank of filters in which the cutoff frequency can be separated under user control------ > ares  vlowres  asig, kfco, kres, iord, ksep------ csound doc: <http://csound.com/docs/manual/vlowres.html>-vlowres ::  Sig -> Sig -> Sig -> D -> Sig -> Sig-vlowres b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "vlowres" [(Ar,[Ar,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5]---- Standard Filters:Control.---- | --- A notch filter whose transfer functions are the complements of the reson opcode.------ > kres  aresonk  ksig, kcf, kbw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/aresonk.html>-aresonk ::  Sig -> Sig -> Sig -> Sig-aresonk b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "aresonk" [(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- A hi-pass filter whose transfer functions are the complements of the tonek opcode.------ > kres  atonek  ksig, khp [, iskip]------ csound doc: <http://csound.com/docs/manual/atonek.html>-atonek ::  Sig -> Sig -> Sig-atonek b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "atonek" [(Kr,[Kr,Kr,Ir])] [a1,a2]---- | --- Generate glissandos starting from a control signal.------ > kres  lineto  ksig, ktime------ csound doc: <http://csound.com/docs/manual/lineto.html>-lineto ::  Sig -> Sig -> Sig-lineto b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "lineto" [(Kr,[Kr,Kr])] [a1,a2]---- | --- Applies portamento to a step-valued control signal.------ > kres  port  ksig, ihtim [, isig]------ csound doc: <http://csound.com/docs/manual/port.html>-port ::  Sig -> D -> Sig-port b1 b2 = Sig $ f <$> unSig b1 <*> unD b2-    where f a1 a2 = opcs "port" [(Kr,[Kr,Ir,Ir])] [a1,a2]---- | --- Applies portamento to a step-valued control signal.------ > kres  portk  ksig, khtim [, isig]------ csound doc: <http://csound.com/docs/manual/portk.html>-portk ::  Sig -> Sig -> Sig-portk b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "portk" [(Kr,[Kr,Kr,Ir])] [a1,a2]---- | --- A second-order resonant filter.------ > kres  resonk  ksig, kcf, kbw [, iscl] [, iskip]------ csound doc: <http://csound.com/docs/manual/resonk.html>-resonk ::  Sig -> Sig -> Sig -> Sig-resonk b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "resonk" [(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Control signal resonant filter stack.------ resonxk is equivalent to a group of resonk filters, with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff.------ > kres  resonxk  ksig, kcf, kbw[, inumlayer, iscl, istor]------ csound doc: <http://csound.com/docs/manual/resonxk.html>-resonxk ::  Sig -> Sig -> Sig -> Sig-resonxk b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "resonxk" [(Kr,[Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Exponential Lag------ Exponential lag with 60dB lag time. Port of Supercollider's Lag------ > aout  sc_lag  ain, klagtime [, initialvalue=0]--- > kout  sc_lag  kin, klagtime [, initialvalue=0]------ csound doc: <http://csound.com/docs/manual/sc_lag.html>-sc_lag ::  Sig -> Sig -> Sig-sc_lag b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "sc_lag" [(Ar,[Ar,Kr,Ir]),(Kr,[Kr,Kr,Ir])] [a1,a2]---- | --- Exponential Lag------ Exponential lag with different smoothing time for up- and--- 	  downgoing signals. Port of Supercollider's LagUD------ > aout  sc_lagud  ain, klagup, klagdown--- > kout  sc_lagud  kin, klagup, klagdown------ csound doc: <http://csound.com/docs/manual/sc_lagud.html>-sc_lagud ::  Sig -> Sig -> Sig -> Sig-sc_lagud b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "sc_lagud" [(Ar,[Ar,Kr,Kr]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- Timed trigger------ Timed trigger. Port of Supercollider's Trig ugen------ > aout  sc_trig  ain, kdur--- > kout  sc_trig  kin, kdur------ csound doc: <http://csound.com/docs/manual/sc_trig.html>-sc_trig ::  Sig -> Sig -> Sig-sc_trig b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "sc_trig" [(Ar,[Ar,Kr]),(Kr,[Kr,Kr])] [a1,a2]---- | --- Generate glissandos starting from a control signal.------ Generate glissandos starting from a control signal with a trigger.------ > kres  tlineto  ksig, ktime, ktrig------ csound doc: <http://csound.com/docs/manual/tlineto.html>-tlineto ::  Sig -> Sig -> Sig -> Sig-tlineto b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "tlineto" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]---- | --- A first-order recursive low-pass filter with variable frequency response.------ > kres  tonek  ksig, khp [, iskip]------ csound doc: <http://csound.com/docs/manual/tonek.html>-tonek ::  Sig -> Sig -> Sig-tonek b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "tonek" [(Kr,[Kr,Kr,Ir])] [a1,a2]---- Specialized Filters.---- | --- A DC blocking filter.------ Implements the DC blocking filter------ > ares  dcblock  ain [, igain]------ csound doc: <http://csound.com/docs/manual/dcblock.html>-dcblock ::  Sig -> Sig-dcblock b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "dcblock" [(Ar,[Ar,Ir])] [a1]---- | --- A DC blocking filter.------ Implements a DC blocking filter with improved DC attenuation.------ > ares  dcblock2  ain [, iorder] [, iskip]------ csound doc: <http://csound.com/docs/manual/dcblock2.html>-dcblock2 ::  Sig -> Sig-dcblock2 b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "dcblock2" [(Ar,[Ar,Ir,Ir])] [a1]---- | --- Equalizer filter------ The opcode eqfil is a 2nd order tunable equalisation filter based on Regalia and Mitra---       design ("Tunable Digital Frequency Response Equalization Filters", IEEE Trans.---       on Ac., Sp. and Sig Proc., 35 (1), 1987). It provides a peak/notch filter for---       building parametric/graphic equalisers.------ > asig  eqfil  ain, kcf, kbw, kgain[, istor]------ csound doc: <http://csound.com/docs/manual/eqfil.html>-eqfil ::  Sig -> Sig -> Sig -> Sig -> Sig-eqfil b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "eqfil" [(Ar,[Ar,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4]---- | --- Performs filtering using a transposed form-II digital filter lattice with no time-varying control.------ General purpose custom filter with no time-varying pole control. The filter coefficients implement the following difference equation:------ > ares  filter2  asig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN--- > kres  filter2  ksig, iM, iN, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN------ csound doc: <http://csound.com/docs/manual/filter2.html>-filter2 ::  Sig -> D -> D -> [D] -> Sig-filter2 b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> mapM unD b4-    where f a1 a2 a3 a4 = opcs "filter2" [(Ar,[Ar] ++ (repeat Ir)),(Kr,[Kr] ++ (repeat Ir))] ([a1-                                                                                              ,a2-                                                                                              ,a3] ++ a4)---- | --- AM/FM analysis from quadrature signal.------ This opcode attempts to extract the AM and FM signals off a---       quadrature signal (e.g. from a Hilbert transform).------ > am, af  fmanal  are, aim------ csound doc: <http://csound.com/docs/manual/fmanal.html>-fmanal ::  Sig -> Sig -> (Sig,Sig)-fmanal b1 b2 = pureTuple $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = mopcs "fmanal" ([Ar,Ar],[Ar,Ar]) [a1,a2]---- | --- Formant filter.------ Fofilter generates a stream of overlapping sinewave grains, when fed with --- a pulse train. Each grain is the impulse response of a combination of --- two BP filters. The grains are defined by their attack time (determining --- the skirtwidth of the formant region at -60dB) and decay time --- (-6dB bandwidth). Overlapping will occur when 1/freq < decay, but, --- unlike FOF, there is no upper limit on the number of overlaps. --- The original idea for this opcode came from J McCartney's formlet class --- in SuperCollider, but this is possibly implemented differently(?).------ > asig  fofilter  ain, xcf, xris, xdec[, istor]------ csound doc: <http://csound.com/docs/manual/fofilter.html>-fofilter ::  Sig -> Sig -> Sig -> Sig -> Sig-fofilter b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "fofilter" [(Ar,[Ar,Xr,Xr,Xr,Ir])] [a1,a2,a3,a4]---- | --- A Hilbert transformer.------ An IIR implementation of a Hilbert transformer.------ > ar1, ar2  hilbert  asig------ csound doc: <http://csound.com/docs/manual/hilbert.html>-hilbert ::  Sig -> (Sig,Sig)-hilbert b1 = pureTuple $ f <$> unSig b1-    where f a1 = mopcs "hilbert" ([Ar,Ar],[Ar]) [a1]---- | --- A Hilbert rransformer.------ A DFT-based implementation of a Hilbert transformer.------ > ar1, ar2  hilbert2  asig, ifftsize, ihopsize------ csound doc: <http://csound.com/docs/manual/hilbert2.html>-hilbert2 ::  Sig -> D -> D -> (Sig,Sig)-hilbert2 b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "hilbert2" ([Ar,Ar],[Ar,Ir,Ir]) [a1,a2,a3]---- | --- A filter with a non-linear effect.------ Implements the filter:------ > ares  nlfilt  ain, ka, kb, kd, kC, kL------ csound doc: <http://csound.com/docs/manual/nlfilt.html>-nlfilt ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-nlfilt b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "nlfilt" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]---- | --- A filter with a non-linear effect and blowup protection.------ Implements the filter:------ > ares  nlfilt2  ain, ka, kb, kd, kC, kL------ csound doc: <http://csound.com/docs/manual/nlfilt2.html>-nlfilt2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-nlfilt2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "nlfilt2" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]---- | --- Implementation of Zoelzer's parametric equalizer filters.------ Implementation of Zoelzer's parametric equalizer filters, with some modifications by the author.------ > ares  pareq  asig, kc, kv, kq [, imode] [, iskip]------ csound doc: <http://csound.com/docs/manual/pareq.html>-pareq ::  Sig -> Sig -> Sig -> Sig -> Sig-pareq b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "pareq" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]---- | --- Parametric equalizer and filter opcode with 7 filter types, based---       on algorithm by Robert Bristow-Johnson.------ Parametric equalizer and filter opcode with 7 filter types,---     	based on algorithm by Robert Bristow-Johnson.------ > ar  rbjeq  asig, kfco, klvl, kQ, kS[, imode]------ csound doc: <http://csound.com/docs/manual/rbjeq.html>-rbjeq ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig-rbjeq b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "rbjeq" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Performs filtering using a transposed form-II digital filter lattice with radial pole-shearing and angular pole-warping.------ General purpose custom filter with time-varying pole control. The filter coefficients implement the following difference equation:------ > ares  zfilter2  asig, kdamp, kfreq, iM, iN, ib0, ib1, ..., ibM, \--- >           ia1,ia2, ..., iaN------ csound doc: <http://csound.com/docs/manual/zfilter2.html>-zfilter2 ::  Sig -> Sig -> Sig -> D -> D -> [D] -> Sig-zfilter2 b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> mapM unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "zfilter2" [(Ar,[Ar,Kr,Kr] ++ (repeat Ir))] ([a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5] ++ a6)---- Waveguides.---- | --- A simple waveguide model consisting of one delay-line and one first-order lowpass filter.------ > ares  wguide1  asig, xfreq, kcutoff, kfeedback------ csound doc: <http://csound.com/docs/manual/wguide1.html>-wguide1 ::  Sig -> Sig -> Sig -> Sig -> Sig-wguide1 b1 b2 b3 b4 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "wguide1" [(Ar,[Ar,Xr,Kr,Kr])] [a1,a2,a3,a4]---- | --- A model of beaten plate consisting of two parallel delay-lines and two first-order lowpass filters.------ > ares  wguide2  asig, xfreq1, xfreq2, kcutoff1, kcutoff2, \--- >           kfeedback1, kfeedback2------ csound doc: <http://csound.com/docs/manual/wguide2.html>-wguide2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-wguide2 b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "wguide2" [(Ar,[Ar,Xr,Xr,Kr,Kr,Kr,Kr])] [a1-                                                                                ,a2-                                                                                ,a3-                                                                                ,a4-                                                                                ,a5-                                                                                ,a6-                                                                                ,a7]---- Waveshaping.---- | --- Efficiently evaluates the sum of Chebyshev polynomials of arbitrary order.------ The chebyshevpoly opcode calculates the value of a polynomial expression with a single a-rate input variable that is made up of a linear combination of the first N Chebyshev polynomials of the first kind.  Each Chebyshev polynomial, Tn(x), is weighted by a k-rate coefficient, kn, so that the opcode is calculating a sum of any number of terms in the form kn*Tn(x).  Thus, the chebyshevpoly opcode allows for the waveshaping of an audio signal with a dynamic transfer function that gives precise control over the harmonic content of the output.------ > aout  chebyshevpoly  ain, k0 [, k1 [, k2 [...]]]------ csound doc: <http://csound.com/docs/manual/chebyshevpoly.html>-chebyshevpoly ::  Sig -> [Sig] -> Sig-chebyshevpoly b1 b2 = Sig $ f <$> unSig b1 <*> mapM unSig b2-    where f a1 a2 = opcs "chebyshevpoly" [(Ar,[Ar] ++ (repeat Kr))] ([a1] ++ a2)---- | --- Performs linear clipping on an audio signal or a phasor.------ The pdclip opcode allows a percentage of the input range of a signal to be clipped to fullscale. It is similar to simply multiplying the signal and limiting the range of the result, but pdclip allows you to think about how much of the signal range is being distorted instead of the scalar factor and has a offset parameter for assymetric clipping of the signal range. pdclip is also useful for remapping phasors for phase distortion synthesis.------ > aout  pdclip  ain, kWidth, kCenter [, ibipolar [, ifullscale]]------ csound doc: <http://csound.com/docs/manual/pdclip.html>-pdclip ::  Sig -> Sig -> Sig -> Sig-pdclip b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pdclip" [(Ar,[Ar,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Distorts a phasor for reading the two halves of a table at different rates.------ The pdhalf opcode is designed to emulate the "classic" phase distortion synthesis method of the Casio CZ-series of synthesizers from the mid-1980's.  This technique reads the first and second halves of a function table at different rates in order to warp the waveform.  For example, pdhalf can smoothly transform a sine wave into something approximating the shape of a saw wave.------ > aout  pdhalf  ain, kShapeAmount [, ibipolar [, ifullscale]]------ csound doc: <http://csound.com/docs/manual/pdhalf.html>-pdhalf ::  Sig -> Sig -> Sig-pdhalf b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "pdhalf" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]---- | --- Distorts a phasor for reading two unequal portions of a table in equal periods.------ The pdhalfy opcode is a variation on the phase distortion synthesis method of the pdhalf opcode.  It is useful for distorting a phasor in order to read two unequal portions of a table in the same number of samples.------ > aout  pdhalfy  ain, kShapeAmount [, ibipolar [, ifullscale]]------ csound doc: <http://csound.com/docs/manual/pdhalfy.html>-pdhalfy ::  Sig -> Sig -> Sig-pdhalfy b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "pdhalfy" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]---- | --- Waveshapes a signal by raising it to a variable exponent.------ The powershape opcode raises an input signal to a power with pre- and post-scaling of the signal so that the output will be in a predictable range.  It also processes negative inputs in a symmetrical way to positive inputs, calculating a dynamic transfer function that is useful for waveshaping.------ > aout  powershape  ain, kShapeAmount [, ifullscale]------ csound doc: <http://csound.com/docs/manual/powershape.html>-powershape ::  Sig -> Sig -> Sig-powershape b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "powershape" [(Ar,[Ar,Kr,Ir])] [a1,a2]---- Comparators and Accumulators.---- | --- Compares two audio signals------ Compares two audio signals using the standard math operators------ > aout  cmp  aL, S_operator, aR------ csound doc: <http://csound.com/docs/manual/cmp.html>-cmp ::  Sig -> Str -> Sig -> Sig-cmp b1 b2 b3 = Sig $ f <$> unSig b1 <*> unStr b2 <*> unSig b3-    where f a1 a2 a3 = opcs "cmp" [(Ar,[Ar,Sr,Ar])] [a1,a2,a3]---- | --- Produces a signal that is the maximum of any number of input signals.------ The max opcode takes any number of a-rate,---       k-rate or i-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs.  For a-rate signals, the inputs are compared one sample at a time (i.e. max does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).------ > amax  max  ain1, ain2 [, ain3] [, ain4] [...]--- > kmax  max  kin1, kin2 [, kin3] [, kin4] [...]--- > imax  max  iin1, iin2 [, iin3] [, iin4] [...]------ csound doc: <http://csound.com/docs/manual/max.html>-max' ::  [Sig] -> Sig-max' b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "max" [(Ar,(repeat Ar)),(Kr,(repeat Kr)),(Ir,(repeat Ir))] a1---- | --- Local maximum (or minimum) value of an incoming asig signal------ max_k outputs the local maximum (or minimum) value of  the incoming asig signal, checked in the time interval between ktrig has become true twice.------ > knumkout  max_k  asig, ktrig, itype------ csound doc: <http://csound.com/docs/manual/max_k.html>-max_k ::  Sig -> Sig -> D -> Sig-max_k b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "max_k" [(Kr,[Ar,Kr,Ir])] [a1,a2,a3]---- | --- Produces a signal that is the maximum of the absolute values of any number of input signals.------ The maxabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs.  It is identical to the max opcode except that it takes the absolute value of each input before comparing them.  Therefore, the output is always non-negative.  For a-rate signals, the inputs are compared one sample at a time (i.e. maxabs does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).------ > amax  maxabs  ain1, ain2 [, ain3] [, ain4] [...]--- > kmax  maxabs  kin1, kin2 [, kin3] [, kin4] [...]------ csound doc: <http://csound.com/docs/manual/maxabs.html>-maxabs ::  [Sig] -> Sig-maxabs b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "maxabs" [(Ar,(repeat Ar)),(Kr,(repeat Kr))] a1---- | --- Accumulates the maximum of the absolute values of audio signals.------ maxabsaccum compares two audio-rate variables and stores the maximum of their absolute values into the first.------ >  maxabsaccum  aAccumulator, aInput------ csound doc: <http://csound.com/docs/manual/maxabsaccum.html>-maxabsaccum ::  Sig -> Sig -> SE ()-maxabsaccum b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "maxabsaccum" [(Xr,[Ar,Ar])] [a1,a2]---- | --- Accumulates the maximum value of audio signals.------ maxaccum compares two audio-rate variables and stores the maximum value between them into the first.------ >  maxaccum  aAccumulator, aInput------ csound doc: <http://csound.com/docs/manual/maxaccum.html>-maxaccum ::  Sig -> Sig -> SE ()-maxaccum b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "maxaccum" [(Xr,[Ar,Ar])] [a1,a2]---- | --- Produces a signal that is the minimum of any number of input signals.------ The min opcode takes any number of a-rate,---       k-rate or i-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs.  For a-rate signals, the inputs are compared one sample at a time (i.e. min does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).------ > amin  min  ain1, ain2 [, ain3] [, ain4] [...]--- > kmin  min  kin1, kin2 [, kin3] [, kin4] [...]--- > imin  min  iin1, iin2 [, iin3] [, iin4] [...]------ csound doc: <http://csound.com/docs/manual/min.html>-min' ::  [Sig] -> Sig-min' b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "min" [(Ar,(repeat Ar)),(Kr,(repeat Kr)),(Ir,(repeat Ir))] a1---- | --- Produces a signal that is the minimum of the absolute values of any number of input signals.------ The minabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs.  It is identical to the min opcode except that it takes the absolute value of each input before comparing them.  Therefore, the output is always non-negative.    For a-rate signals, the inputs are compared one sample at a time (i.e. minabs does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).------ > amin  minabs  ain1, ain2 [, ain3] [, ain4] [...]--- > kmin  minabs  kin1, kin2 [, kin3] [, kin4] [...]------ csound doc: <http://csound.com/docs/manual/minabs.html>-minabs ::  [Sig] -> Sig-minabs b1 = Sig $ f <$> mapM unSig b1-    where f a1 = opcs "minabs" [(Ar,(repeat Ar)),(Kr,(repeat Kr))] a1---- | --- Accumulates the minimum of the absolute values of audio signals.------ minabsaccum compares two audio-rate variables and stores the minimum of their absolute values into the first.------ >  minabsaccum  aAccumulator, aInput------ csound doc: <http://csound.com/docs/manual/minabsaccum.html>-minabsaccum ::  Sig -> Sig -> SE ()-minabsaccum b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "minabsaccum" [(Xr,[Ar,Ar])] [a1,a2]---- | --- Accumulates the minimum value of audio signals.------ minaccum compares two audio-rate variables and stores the minimum value between them into the first.------ >  minaccum  aAccumulator, aInput------ csound doc: <http://csound.com/docs/manual/minaccum.html>-minaccum ::  Sig -> Sig -> SE ()-minaccum b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "minaccum" [(Xr,[Ar,Ar])] [a1,a2]+    balance, balance2, clip, compress, compress2, dam, gain,+    +    -- * Convolution and Morphing.+    convolve, cross2, dconv, ftconv, ftmorf, liveconv, pconvolve, tvconv,+    +    -- * Delay.+    delay, delay1, delayk, vdel_k, delayr, delayw, deltap, deltap3, deltapi, deltapn, deltapx, deltapxw, multitap, vdelay, vdelay3, vdelayx, vdelayxq, vdelayxs, vdelayxw, vdelayxwq, vdelayxws,+    +    -- * Panning and Spatialization.+    bformdec, bformdec1, bformdec2, bformenc, bformenc1, hrtfearly, hrtfmove, hrtfmove2, hrtfreverb, hrtfstat, locsend, locsig, pan, pan2, space, spat3d, spat3di, spat3dt, spdist, spsend, vbap, vbap16, vbap16move, vbap4, vbap4move, vbap8, vbap8move, vbapg, vbapgmove, vbaplsinit, vbapmove, vbapz, vbapzmove,+    +    -- * Reverberation.+    alpass, babo, comb, combinv, freeverb, nestedap, nreverb, platerev, reverb, reverb2, reverbsc, valpass, vcomb,+    +    -- * Sample Level Operators.+    denorm, diff, downsamp, fold, integ, interp, ntrpol, samphold, upsamp, vaget, vaset,+    +    -- * Signal Limiters.+    limit, mirror, wrap,+    +    -- * Special Effects.+    distort, distort1, flanger, harmon, harmon2, harmon3, harmon4, phaser1, phaser2,+    +    -- * Standard Filters.+    atone, atonex, biquad, biquada, bob, butbp, butbr, buthp, butlp, butterbp, butterbr, butterhp, butterlp, clfilt, diode_ladder, doppler, k35_hpf, k35_lpf, median, mediank, tone, tonex, zdf_1pole, zdf_1pole_mode, zdf_2pole, zdf_2pole_mode, zdf_ladder,+    +    -- * Standard Filters:Resonant.+    areson, bqrez, lowpass2, lowres, lowresx, lpf18, moogladder, moogladder2, moogvcf, moogvcf2, mvchpf, mvclpf1, mvclpf2, mvclpf3, mvclpf4, reson, resonr, resonx, resony, resonz, rezzy, skf, spf, statevar, svfilter, svn, tbvcf, vclpf, vlowres,+    +    -- * Standard Filters:Control.+    aresonk, atonek, lag, lagud, lineto, port, portk, resonk, resonxk, sc_lag, sc_lagud, sc_trig, tlineto, tonek, trighold,+    +    -- * Specialized Filters.+    dcblock, dcblock2, eqfil, exciter, filter2, fmanal, fofilter, gtf, hilbert, hilbert2, mvmfilter, nlfilt, nlfilt2, pareq, rbjeq, zfilter2,+    +    -- * Waveguides.+    wguide1, wguide2,+    +    -- * Waveshaping.+    chebyshevpoly, pdclip, pdhalf, pdhalfy, powershape,+    +    -- * Comparators and Accumulators.+    cmp, max', max_k, maxabs, maxabsaccum, maxaccum, min', minabs, minabsaccum, minaccum) where++import Control.Monad.Trans.Class+import Control.Monad+import Csound.Dynamic+import Csound.Typed++-- Amplitude Modifiers.++-- | +-- Adjust one audio signal according to the values of another.+--+-- The rms power of asig can be interrogated, set, or adjusted to match that of a comparator signal.+--+-- > ares  balance  asig, acomp [, ihp] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/balance.html>+balance ::  Sig -> Sig -> Sig+balance b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "balance" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]++-- | ++--+-- > ares  balance2  asig, acomp [, ihp] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/balance2.html>+balance2 ::  Sig -> Sig -> Sig+balance2 b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "balance2" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]++-- | +-- Clips a signal to a predefined limit.+--+-- Clips an a-rate signal to a predefined limit, in a “soft” manner, using one of three methods.+--+-- > ares  clip  asig, imeth, ilimit [, iarg]+--+-- csound doc: <https://csound.com/docs/manual/clip.html>+clip ::  Sig -> D -> D -> Sig+clip b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "clip" [(Ar,[Ar,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Compress, limit, expand, duck or gate an audio signal.+--+-- This unit functions as an audio+--     compressor, limiter, expander, or noise gate, using either+--     soft-knee or hard-knee mapping, and with dynamically variable+--     performance characteristics.  It takes two audio input signals,+--     aasig and acsig, the first of which is modified by a running+--     analysis of the second. Both signals can be the same, or the first+--     can be modified by a different controlling signal.+--+-- > ar  compress  aasig, acsig, kthresh, kloknee, khiknee, kratio, katt, krel, ilook+--+-- csound doc: <https://csound.com/docs/manual/compress.html>+compress ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig+compress b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "compress" [(Ar,[Ar,Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7+                                                                                       ,a8+                                                                                       ,a9]++-- | +-- Compress, limit, expand, duck or gate an audio signal.+--+-- This unit functions as an audio+--     compressor, limiter, expander, or noise gate, using either+--     soft-knee or hard-knee mapping, and with dynamically variable+--     performance characteristics.  It takes two audio input signals,+--     aasig and acsig, the first of which is modified by a running+--     analysis of the second. Both signals can be the same, or the first+--     can be modified by a different controlling signal.+--+-- > ar  compress2  aasig, acsig, kthresh, kloknee, khiknee, kratio, katt, krel, ilook+--+-- csound doc: <https://csound.com/docs/manual/compress2.html>+compress2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> Sig+compress2 b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "compress2" [(Ar,[Ar,Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1+                                                                                        ,a2+                                                                                        ,a3+                                                                                        ,a4+                                                                                        ,a5+                                                                                        ,a6+                                                                                        ,a7+                                                                                        ,a8+                                                                                        ,a9]++-- | +-- A dynamic compressor/expander.+--+-- This opcode dynamically modifies a gain value applied to the input sound ain by comparing its power level to a given threshold level. The signal will be compressed/expanded with different factors regarding that it is over or under the threshold.+--+-- > ares  dam  asig, kthreshold, icomp1, icomp2, irtime, iftime+--+-- csound doc: <https://csound.com/docs/manual/dam.html>+dam ::  Sig -> Sig -> D -> D -> D -> D -> Sig+dam b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "dam" [(Ar,[Ar,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Adjusts the amplitude audio signal according to a root-mean-square value.+--+-- > ares  gain  asig, krms [, ihp] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/gain.html>+gain ::  Sig -> Sig -> Sig+gain b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "gain" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]++-- Convolution and Morphing.++-- | +-- Convolves a signal and an impulse response.+--+-- Output is the convolution of signal ain and the impulse response contained in ifilcod. If more than one output signal is supplied, each will be convolved with the same impulse response. Note that it is considerably more efficient to use one instance of the operator when processing a mono input to create stereo, or quad, outputs.+--+-- > ar1 [, ar2] [, ar3] [, ar4]  convolve  ain, ifilcod [, ichannel]+--+-- csound doc: <https://csound.com/docs/manual/convolve.html>+convolve :: forall a . Tuple a => Sig -> Str -> a+convolve b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unStr b2+  where+    f a1 a2 = mopcs "convolve" ([Ar,Ar,Ar,Ar],[Ar,Sr,Ir]) [a1,a2]++-- | +-- Cross synthesis using FFT's.+--+-- This is an implementation of cross synthesis using FFT's.+--+-- > ares  cross2  ain1, ain2, isize, ioverlap, iwin, kbias+--+-- csound doc: <https://csound.com/docs/manual/cross2.html>+cross2 ::  Sig -> Sig -> D -> D -> D -> Sig -> Sig+cross2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "cross2" [(Ar,[Ar,Ar,Ir,Ir,Ir,Kr])] [a1,a2,a3,a4,a5,a6]++-- | +-- A direct convolution opcode.+--+-- > ares  dconv  asig, isize, ifn+--+-- csound doc: <https://csound.com/docs/manual/dconv.html>+dconv ::  Sig -> D -> Tab -> Sig+dconv b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "dconv" [(Ar,[Ar,Ir,Ir])] [a1,a2,a3]++-- | +-- Low latency multichannel convolution, using a function table as impulse+-- 	response source.+--+-- Low latency multichannel convolution, using a function table as impulse+-- 	response source. The algorithm is to split the impulse response to+-- 	partitions of length determined by the iplen parameter, and delay and+-- 	mix partitions so that the original, full length impulse response is+-- 	reconstructed without gaps. The output delay (latency) is iplen samples,+-- 	and does not depend on the control rate, unlike in the case of other+-- 	convolve opcodes.+--+-- > a1[, a2[, a3[, ... a8]]]  ftconv  ain, ift, iplen[, iskipsamples \+-- >           [, iirlen[, iskipinit]]]+--+-- csound doc: <https://csound.com/docs/manual/ftconv.html>+ftconv :: forall a . Tuple a => Sig -> D -> D -> a+ftconv b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "ftconv" ((repeat Ar),[Ar,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3]++-- | +-- Morphs between multiple ftables as specified in a list.+--+-- Uses an index into a table of ftable numbers to morph between adjacent tables in the list.This morphed function is written into the table referenced by iresfn on every k-cycle.+--+-- >  ftmorf  kftndx, iftfn, iresfn+--+-- csound doc: <https://csound.com/docs/manual/ftmorf.html>+ftmorf ::  Sig -> Tab -> Tab -> SE ()+ftmorf b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "ftmorf" [(Xr,[Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Partitioned convolution with dynamically reloadable impulse response+--+-- Computationally efficient, partitioned convolution, using a function table as impulse response (IR) source,+--       similar to the ftconv opcode. +--       The liveconv opcode allows dynamic reload of IR data at any time+--       while the convolution is running, controlled by the kupdate parameter.+--       Due to the manner in which the IR is updated, the operation can be done without audio artifacts in the convolution output.+--+-- > ares  liveconv  ain, ift, iplen, kupdate, kclear+--+-- csound doc: <https://csound.com/docs/manual/liveconv.html>+liveconv ::  Sig -> D -> D -> Sig -> Sig -> Sig+liveconv b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "liveconv" [(Ar,[Ar,Ir,Ir,Kr,Kr])] [a1,a2,a3,a4,a5]++-- | +-- Convolution based on a uniformly partitioned overlap-save algorithm+--+-- Convolution based on a uniformly partitioned overlap-save algorithm. Compared to the convolve opcode, pconvolve has these benefits:+--+-- > ar1 [, ar2] [, ar3] [, ar4]  pconvolve  ain, ifilcod [, ipartitionsize, ichannel]+--+-- csound doc: <https://csound.com/docs/manual/pconvolve.html>+pconvolve :: forall a . Tuple a => Sig -> Str -> a+pconvolve b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unStr b2+  where+    f a1 a2 = mopcs "pconvolve" ([Ar,Ar,Ar,Ar],[Ar,Sr,Ir,Ir]) [a1,a2]++-- | +-- A time-varying convolution (FIR filter) opcode.+--+-- An opcode that takes two incoming signals and+--       interprets one of them as the coefficients of linear+--       time-variable finite impulse response filter. This is+--       implemented via direct convolution (for partition sizes of+--       1 sample) or DFT-based partitioned convolution.+--       The signals can be 'frozen' (i.e. the filter coefficients are+--       kept the same) at any point in time, at a-rate or k-rate.+--+-- > ares  tvconv  asig1, asig2, xfreez1,+-- >         xfreez2, iparts, ifils+--+-- csound doc: <https://csound.com/docs/manual/tvconv.html>+tvconv ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+tvconv b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "tvconv" [(Ar,[Ar,Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- Delay.++-- | +-- Delays an input signal by some time interval.+--+-- A signal can be read from or written into a delay path, or it can be automatically delayed by some time interval.+--+-- > ares  delay  asig, idlt [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/delay.html>+delay ::  Sig -> D -> Sig+delay b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "delay" [(Ar,[Ar,Ir,Ir])] [a1,a2]++-- | +-- Delays an input signal by one sample.+--+-- > ares  delay1  asig [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/delay1.html>+delay1 ::  Sig -> Sig+delay1 b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "delay1" [(Ar,[Ar,Ir])] [a1]++-- | +-- Delays an input signal by some time interval.+--+-- k-rate delay opcodes+--+-- > kr  delayk   ksig, idel[, imode]+--+-- csound doc: <https://csound.com/docs/manual/delayk.html>+delayk ::  Sig -> D -> Sig+delayk b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "delayk" [(Kr,[Kr,Ir,Ir])] [a1,a2]++-- | +-- Delays an input signal by some time interval.+--+-- k-rate delay opcodes+--+-- > kr  vdel_k   ksig, kdel, imdel[, imode]+--+-- csound doc: <https://csound.com/docs/manual/delayk.html>+vdel_k ::  Sig -> Sig -> D -> Sig+vdel_k b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "vdel_k" [(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Reads from an automatically established digital delay line.+--+-- > ares  delayr  idlt [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/delayr.html>+delayr ::  D -> SE Sig+delayr b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep "delayr" [(Ar,[Ir,Ir])] [a1]++-- | +-- Writes the audio signal to a digital delay line.+--+-- >  delayw  asig+--+-- csound doc: <https://csound.com/docs/manual/delayw.html>+delayw ::  Sig -> SE ()+delayw b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "delayw" [(Xr,[Ar])] [a1]++-- | +-- Taps a delay line at variable offset times.+--+-- Tap a delay line at variable offset times.+--+-- > ares  deltap  kdlt+--+-- csound doc: <https://csound.com/docs/manual/deltap.html>+deltap ::  Sig -> SE Sig+deltap b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "deltap" [(Ar,[Kr])] [a1]++-- | +-- Taps a delay line at variable offset times, uses cubic interpolation.+--+-- > ares  deltap3  xdlt+--+-- csound doc: <https://csound.com/docs/manual/deltap3.html>+deltap3 ::  Sig -> SE Sig+deltap3 b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "deltap3" [(Ar,[Xr])] [a1]++-- | +-- Taps a delay line at variable offset times, uses interpolation.+--+-- > ares  deltapi  xdlt+--+-- csound doc: <https://csound.com/docs/manual/deltapi.html>+deltapi ::  Sig -> SE Sig+deltapi b1 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep "deltapi" [(Ar,[Xr])] [a1]++-- | +-- Taps a delay line at variable offset times.+--+-- Tap a delay line at variable offset times.+--+-- > ares  deltapn  xnumsamps+--+-- csound doc: <https://csound.com/docs/manual/deltapn.html>+deltapn ::  Sig -> Sig+deltapn b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "deltapn" [(Ar,[Xr])] [a1]++-- | +-- Read from or write to a delay line with interpolation.+--+-- deltapx is similar to deltapi or deltap3. However, it allows higher quality interpolation. This opcode can read from and write to a delayr/delayw delay line with interpolation.+--+-- > aout  deltapx  adel, iwsize+--+-- csound doc: <https://csound.com/docs/manual/deltapx.html>+deltapx ::  Sig -> D -> SE Sig+deltapx b1 b2 =+  fmap ( Sig . return) $ SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep "deltapx" [(Ar,[Ar,Ir])] [a1,a2]++-- | +-- Mixes the input signal to a delay line.+--+-- deltapxw mixes the input signal to a delay line. This opcode can be mixed with reading units (deltap, deltapn, deltapi, deltap3, and deltapx) in any order; the actual delay time is the difference of the read and write time. This opcode can read from and write to a delayr/delayw delay line with interpolation.+--+-- >  deltapxw  ain, adel, iwsize+--+-- csound doc: <https://csound.com/docs/manual/deltapxw.html>+deltapxw ::  Sig -> Sig -> D -> SE ()+deltapxw b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "deltapxw" [(Xr,[Ar,Ar,Ir])] [a1,a2,a3]++-- | +-- Multitap delay line implementation.+--+-- > ares  multitap  asig [, itime1, igain1] [, itime2, igain2] [...]+--+-- csound doc: <https://csound.com/docs/manual/multitap.html>+multitap ::  Sig -> [D] -> Sig+multitap b1 b2 =+  Sig $ f <$> unSig b1 <*> mapM unD b2+  where+    f a1 a2 = opcs "multitap" [(Ar,[Ar] ++ (repeat Ir))] ([a1] ++ a2)++-- | +-- An interpolating variable time delay.+--+-- This is an interpolating variable time delay, it is not very different from the existing implementation (deltapi), it is only easier to use.+--+-- > ares  vdelay  asig, adel, imaxdel [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/vdelay.html>+vdelay ::  Sig -> Sig -> D -> Sig+vdelay b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "vdelay" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2,a3]++-- | +-- A variable time delay with cubic interpolation.+--+-- vdelay3 is experimental. It is the same as vdelay except that it uses cubic interpolation. (New in Version 3.50.)+--+-- > ares  vdelay3  asig, adel, imaxdel [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/vdelay3.html>+vdelay3 ::  Sig -> Sig -> D -> Sig+vdelay3 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "vdelay3" [(Ar,[Ar,Ar,Ir,Ir])] [a1,a2,a3]++-- | +-- A variable delay opcode with high quality interpolation.+--+-- > aout  vdelayx  ain, adl, imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayx.html>+vdelayx ::  Sig -> Sig -> D -> D -> Sig+vdelayx b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "vdelayx" [(Ar,[Ar,Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- A 4-channel variable delay opcode with high quality interpolation.+--+-- > aout1, aout2, aout3, aout4  vdelayxq  ain1, ain2, ain3, ain4, adl, imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayxq.html>+vdelayxq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)+vdelayxq b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1+                                                                                        ,a2+                                                                                        ,a3+                                                                                        ,a4+                                                                                        ,a5+                                                                                        ,a6+                                                                                        ,a7]++-- | +-- A stereo variable delay opcode with high quality interpolation.+--+-- > aout1, aout2  vdelayxs  ain1, ain2, adl, imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayxs.html>+vdelayxs ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)+vdelayxs b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vdelayxs" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Variable delay opcodes with high quality interpolation.+--+-- > aout  vdelayxw  ain, adl, imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayxw.html>+vdelayxw ::  Sig -> Sig -> D -> D -> Sig+vdelayxw b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "vdelayxw" [(Ar,[Ar,Ar,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Variable delay opcodes with high quality interpolation.+--+-- > aout1, aout2, aout3, aout4  vdelayxwq  ain1, ain2, ain3, ain4, adl, \+-- >           imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayxwq.html>+vdelayxwq ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> (Sig,Sig,Sig,Sig)+vdelayxwq b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "vdelayxwq" ([Ar,Ar,Ar,Ar],[Ar,Ar,Ar,Ar,Ar,Ir,Ir,Ir]) [a1+                                                                                         ,a2+                                                                                         ,a3+                                                                                         ,a4+                                                                                         ,a5+                                                                                         ,a6+                                                                                         ,a7]++-- | +-- Variable delay opcodes with high quality interpolation.+--+-- > aout1, aout2  vdelayxws  ain1, ain2, adl, imd, iws [, ist]+--+-- csound doc: <https://csound.com/docs/manual/vdelayxws.html>+vdelayxws ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)+vdelayxws b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vdelayxws" ([Ar,Ar],[Ar,Ar,Ar,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- Panning and Spatialization.++-- | +-- Deprecated. Decodes an ambisonic B format signal.+--+-- Decodes an ambisonic B format signal into loudspeaker specific signals. Note that this opcode is+--       deprecated as it is inaccurate, and is replaced by the much+--       better opcode bformdec1 which replicates all+--       the important features.+--+-- > ao1, ao2  bformdec  isetup, aw, ax, ay, az [, ar, as, at, au, av \+-- >           [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4  bformdec  isetup, aw, ax, ay, az [, ar, as, at, \+-- >           au, av [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4, ao5  bformdec  isetup, aw, ax, ay, az [, ar, as, \+-- >           at, au, av [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8  bformdec  isetup, aw, ax, ay, az \+-- >           [, ar, as, at, au, av [, abk, al, am, an, ao, ap, aq]]]+--+-- csound doc: <https://csound.com/docs/manual/bformdec.html>+bformdec :: forall a . Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a+bformdec b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = mopcs "bformdec" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]+                                        ,[Ir,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]) [a1,a2,a3,a4,a5]++-- | +-- Decodes an ambisonic B format signal+--+-- Decodes an ambisonic B format signal into loudspeaker specific signals.+--+-- > ao1, ao2  bformdec1  isetup, aw, ax, ay, az [, ar, as, at, au, av \+-- >           [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4  bformdec1  isetup, aw, ax, ay, az [, ar, as, at, \+-- >           au, av [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4, ao5  bformdec1  isetup, aw, ax, ay, az [, ar, as, \+-- >           at, au, av [, abk, al, am, an, ao, ap, aq]]+-- > ao1, ao2, ao3, ao4, ao5, ao6, ao7, ao8  bformdec1  isetup, aw, ax, ay, az \+-- >           [, ar, as, at, au, av [, abk, al, am, an, ao, ap,+-- >         aq]]]+-- > aout[]  bformdec1  isetup, abform[]+--+-- csound doc: <https://csound.com/docs/manual/bformdec1.html>+bformdec1 :: forall a . Tuple a => D -> Sig -> Sig -> Sig -> Sig -> a+bformdec1 b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = mopcs "bformdec1" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]+                                         ,[Ir,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]) [a1,a2,a3,a4,a5]++-- | ++--+-- > aout[]  bformdec2  isetup, abform[], [idecoder, idistance, ifreq, \+-- >     		imix, ifilel, ifiler]+--+-- csound doc: <https://csound.com/docs/manual/bformdec2.html>+bformdec2 ::  D -> Sig -> Sig+bformdec2 b1 b2 =+  Sig $ f <$> unD b1 <*> unSig b2+  where+    f a1 a2 = opcs "bformdec2" [(Ar,[Ir,Ar,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | +-- Deprecated. Codes a signal into the ambisonic B format.+--+-- Codes a signal into the ambisonic B format. Note that this opcode is+--       deprecated as it is inaccurate, and is replaced by the much+--       better+--       opcode bformenc1+--       which replicates all the important features; also note that the+--       gain arguments are not available in bformenc1.+--+-- > aw, ax, ay, az  bformenc  asig, kalpha, kbeta, kord0, kord1+-- > aw, ax, ay, az, ar, as, at, au, av  bformenc  asig, kalpha, kbeta, \+-- >           kord0, kord1 , kord2+-- > aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq  bformenc  \+-- >           asig, kalpha, kbeta, kord0, kord1, kord2, kord3+--+-- csound doc: <https://csound.com/docs/manual/bformenc.html>+bformenc :: forall a . Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> a+bformenc b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = mopcs "bformenc" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]+                                        ,[Ar,Kr,Kr,Kr,Kr,Kr,Kr]) [a1,a2,a3,a4,a5]++-- | +-- Codes a signal into the ambisonic B format.+--+-- Codes a signal into the ambisonic B format+--+-- > aw, ax, ay, az  bformenc1  asig, kalpha, kbeta+-- > aw, ax, ay, az, ar, as, at, au, av  bformenc1  asig, kalpha, kbeta+-- > aw, ax, ay, az, ar, as, at, au, av, ak, al, am, an, ao, ap, aq  bformenc1  \+-- >           asig, kalpha, kbeta+-- > aarray[]  bformenc1  asig, kalpha, kbeta+--+-- csound doc: <https://csound.com/docs/manual/bformenc1.html>+bformenc1 :: forall a . Tuple a => Sig -> Sig -> Sig -> a+bformenc1 b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "bformenc1" ([Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ar]+                                   ,[Ar,Kr,Kr]) [a1,a2,a3]++-- | +-- Generates 3D binaural audio with high-fidelity early reflections in a parametric room using a Phase Truncation algorithm.+--+-- This opcode essentially nests the hrtfmove opcode in an image model for a user-definable shoebox-shaped room. A default room can be selected, or advanced room parameters can be used. Room surfaces can be controlled with high and low-frequency absorption coefficients and gain factors of a three-band equaliser.+--+-- > aleft, aright, irt60low, irt60high, imfp  hrtfearly  asrc, ksrcx, ksrcy, ksrcz, klstnrx, klstnry, klstnrz, \+-- >           ifilel, ifiler, idefroom [,ifade, isr, iorder, ithreed, kheadrot, iroomx, iroomy, iroomz, iwallhigh, \+-- >           iwalllow, iwallgain1, iwallgain2, iwallgain3, ifloorhigh, ifloorlow, ifloorgain1, ifloorgain2, \+-- >           ifloorgain3, iceilinghigh, iceilinglow, iceilinggain1, iceilinggain2, iceilinggain3]+--+-- csound doc: <https://csound.com/docs/manual/hrtfearly.html>+hrtfearly :: forall a . Tuple a => Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> a+hrtfearly b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unD b8 <*> unD b9 <*> unD b10+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = mopcs "hrtfearly" ([Ar,Ar,Ir,Ir,Ir]+                                                         ,[Ar+                                                          ,Kr+                                                          ,Kr+                                                          ,Kr+                                                          ,Kr+                                                          ,Kr+                                                          ,Kr+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Kr+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir+                                                          ,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10]++-- | +-- Generates dynamic 3d binaural audio for headphones using magnitude interpolation and phase truncation.+--+-- This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener+--       by convolving the source with stored head related transfer function (HRTF) based filters.+--+-- > aleft, aright  hrtfmove  asrc, kAz, kElev, ifilel, ifiler [, imode, ifade, isr]+--+-- csound doc: <https://csound.com/docs/manual/hrtfmove.html>+hrtfmove ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)+hrtfmove b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "hrtfmove" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Generates dynamic 3d binaural audio for headphones using a Woodworth based spherical head model+--       with improved low frequency phase accuracy.+--+-- This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener+--       using head related transfer function (HRTF) based filters.+--+-- > aleft, aright  hrtfmove2  asrc, kAz, kElev, ifilel, ifiler [,ioverlap, iradius, isr]+--+-- csound doc: <https://csound.com/docs/manual/hrtfmove2.html>+hrtfmove2 ::  Sig -> Sig -> Sig -> D -> D -> (Sig,Sig)+hrtfmove2 b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "hrtfmove2" ([Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- A binaural, dynamic FDN based diffuse-field reverberator. The opcode works independently as an efficient, flexible reverberator.+--+-- A frequency-dependent, efficient reverberant field is created based on low and high frequency desired reverb times. The opcode is designed to work with hrtfearly, ideally using its outputs as inputs. However, hrtfreverb can be used as a standalone tool. Stability is enforced.+--+-- > aleft, aright, idel  hrtfreverb  asrc, ilowrt60, ihighrt60, ifilel, ifiler [,isr, imfp, iorder]+--+-- csound doc: <https://csound.com/docs/manual/hrtfreverb.html>+hrtfreverb ::  Sig -> D -> D -> D -> D -> (Sig,Sig,D)+hrtfreverb b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "hrtfreverb" ([Ar,Ar,Ir],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Generates static 3d binaural audio for headphones using a+--       Woodworth based spherical head model with improved low frequency+--       phase accuracy.+--+-- This opcode takes a source signal and spatialises it in the 3 dimensional space around a listener using head related transfer function (HRTF) based filters. It produces a static output (azimuth and elevation parameters are i-rate), because a static source allows much more efficient processing than hrtfmove and hrtfmove2,.+--+-- >       aleft, aright  hrtfstat  asrc, iAz, iElev, ifilel, ifiler [,iradius, isr]+-- >         +--+-- csound doc: <https://csound.com/docs/manual/hrtfstat.html>+hrtfstat ::  Sig -> D -> D -> D -> D -> (Sig,Sig)+hrtfstat b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "hrtfstat" ([Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Distributes the audio signals of a previous locsig opcode.+--+-- locsend depends upon the existence of a previously defined locsig. The number of output signals must match the number in the previous locsig. The output signals from locsend are derived from the values given for distance and reverb in the locsig and are ready to be sent to local or global reverb units (see example below). The reverb amount and the balance between the 2 or 4 channels are calculated in the same way as described in the Dodge book (an essential text!).+--+-- > a1, a2  locsend +-- > a1, a2,  a3, a4  locsend +--+-- csound doc: <https://csound.com/docs/manual/locsend.html>+locsend ::   (Sig,Sig,Sig,Sig)+locsend  =+  pureTuple $ return $ f +  where+    f  = mopcs "locsend" ([Ar,Ar,Ar,Ar],[]) []++-- | +-- Takes an input signal and distributes between 2 or 4 channels.+--+-- locsig takes an input signal and distributes it among 2 or 4 channels using values in degrees to calculate the balance between adjacent channels. It also takes arguments for distance (used to attenuate signals that are to sound as if they are some distance further than the loudspeaker itself), and for the amount the signal that will be sent to reverberators. This unit is based upon the example in the Charles Dodge/Thomas Jerse book, Computer Music, page 320.+--+-- > a1, a2  locsig  asig, kdegree, kdistance, kreverbsend+-- > a1, a2,  a3, a4  locsig  asig, kdegree, kdistance, kreverbsend+--+-- csound doc: <https://csound.com/docs/manual/locsig.html>+locsig ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)+locsig b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "locsig" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2,a3,a4]++-- | +-- Distribute an audio signal amongst four channels.+--+-- Distribute an audio signal amongst four channels with localization control.+--+-- > a1, a2, a3, a4  pan  asig, kx, ky, ifn [, imode] [, ioffset]+--+-- csound doc: <https://csound.com/docs/manual/pan.html>+pan ::  Sig -> Sig -> Sig -> Tab -> (Sig,Sig,Sig,Sig)+pan b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4+  where+    f a1 a2 a3 a4 = mopcs "pan" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Distribute an audio signal across two channels.+--+-- Distribute an audio signal across two channels with a choice of methods.+--+-- > a1, a2  pan2  asig, xp [, imode]+--+-- csound doc: <https://csound.com/docs/manual/pan2.html>+pan2 ::  Sig -> Sig -> (Sig,Sig)+pan2 b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "pan2" ([Ar,Ar],[Ar,Xr,Ir]) [a1,a2]++-- | +-- Distributes an input signal among 4 channels using cartesian coordinates.+--+-- space takes an input signal and distributes it among 4 channels using Cartesian xy coordinates to calculate the balance of the outputs. The xy coordinates can be defined in a separate text file and accessed through a Function statement in the score using Gen28, or they can be specified using the optional kx, ky arguments. The advantages to the former are:+--+-- > a1, a2, a3, a4   space  asig, ifn, ktime, kreverbsend, kx, ky+--+-- csound doc: <https://csound.com/docs/manual/space.html>+space ::  Sig -> Tab -> Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)+space b1 b2 b3 b4 b5 b6 =+  pureTuple $ f <$> unSig b1 <*> unTab b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = mopcs "space" ([Ar,Ar,Ar,Ar],[Ar,Ir,Kr,Kr,Kr,Kr]) [a1,a2,a3,a4,a5,a6]++-- | +-- Positions the input sound in a 3D space and allows moving the sound at k-rate.+--+-- This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3d allows moving the sound at k-rate (this movement is interpolated internally to eliminate "zipper noise" if sr not equal to kr).+--+-- > aW, aX, aY, aZ  spat3d  ain, kX, kY, kZ, idist, ift, imode, imdel, iovr [, istor]+--+-- csound doc: <https://csound.com/docs/manual/spat3d.html>+spat3d ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)+spat3d b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8 <*> unD b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = mopcs "spat3d" ([Ar,Ar,Ar,Ar]+                                                  ,[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8,a9]++-- | +-- Positions the input sound in a 3D space with the sound source position set at i-time.+--+-- This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. With spat3di, sound source position is set at i-time.+--+-- > aW, aX, aY, aZ  spat3di  ain, iX, iY, iZ, idist, ift, imode [, istor]+--+-- csound doc: <https://csound.com/docs/manual/spat3di.html>+spat3di ::  Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig,Sig,Sig)+spat3di b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "spat3di" ([Ar,Ar,Ar,Ar],[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7]++-- | +-- Can be used to render an impulse response for a 3D space at i-time.+--+-- This opcode positions the input sound in a 3D space, with optional simulation of room acoustics, in various output formats. spat3dt can be used to render the impulse response at i-time, storing output in a function table, suitable for convolution.+--+-- >  spat3dt  ioutft, iX, iY, iZ, idist, ift, imode, irlen [, iftnocl]+--+-- csound doc: <https://csound.com/docs/manual/spat3dt.html>+spat3dt ::  D -> D -> D -> D -> D -> D -> D -> D -> SE ()+spat3dt b1 b2 b3 b4 b5 b6 b7 b8 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcsDep_ "spat3dt" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7+                                                                                       ,a8]++-- | +-- Calculates distance values from xy coordinates.+--+-- spdist uses the same xy data as space, also either from a text file using Gen28 or from x and y arguments given to the unit directly. The purpose of this unit is to make available the values for distance that are calculated from the xy coordinates.+--+-- > k1  spdist  ifn, ktime, kx, ky+--+-- csound doc: <https://csound.com/docs/manual/spdist.html>+spdist ::  Tab -> Sig -> Sig -> Sig -> Sig+spdist b1 b2 b3 b4 =+  Sig $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "spdist" [(Kr,[Ir,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Generates output signals based on a previously defined space opcode.+--+-- spsend depends upon the existence of a previously defined space. The output signals from spsend are derived from the values given for xy and reverb in the space and are ready to be sent to local or global reverb units (see example below).+--+-- > a1, a2, a3, a4  spsend +--+-- csound doc: <https://csound.com/docs/manual/spsend.html>+spsend ::   (Sig,Sig,Sig,Sig)+spsend  =+  pureTuple $ return $ f +  where+    f  = mopcs "spsend" ([Ar,Ar,Ar,Ar],[]) []++-- | +-- Distributes an audio signal among many channels.+--+-- Distributes an audio signal amongmany channels, up to 64 in the+--       first form, arbitrary in the second.+--+-- > ar1[, ar2...]  vbap  asig, kazim [,+-- >         kelev] [, kspread] [, ilayout]+-- > array[]  vbap  asig, kazim [,+-- >         kelev] [, kspread] [, ilayout]+--+-- csound doc: <https://csound.com/docs/manual/vbap.html>+vbap :: forall a . Tuple a => Sig -> Sig -> a+vbap b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "vbap" ((repeat Ar),[Ar,Kr,Kr,Kr,Ir]) [a1,a2]++-- | +-- Distributes an audio signal among 16 channels.+--+-- > ar1, ..., ar16  vbap16  asig, kazim [, kelev] [, kspread]+--+-- csound doc: <https://csound.com/docs/manual/vbap16.html>+vbap16 :: forall a . Tuple a => Sig -> Sig -> a+vbap16 b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "vbap16" ((repeat Ar),[Ar,Kr,Kr,Kr]) [a1,a2]++-- | +-- Distribute an audio signal among 16 channels with moving virtual sources.+--+-- > ar1, ..., ar16  vbap16move  asig, idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+--+-- csound doc: <https://csound.com/docs/manual/vbap16move.html>+vbap16move :: forall a . Tuple a => Sig -> D -> D -> D -> [D] -> a+vbap16move b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vbap16move" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1,a2,a3,a4] ++ a5)++-- | +-- Distributes an audio signal among 4 channels.+--+-- > ar1, ar2, ar3, ar4  vbap4  asig, kazim [, kelev] [, kspread]+--+-- csound doc: <https://csound.com/docs/manual/vbap4.html>+vbap4 ::  Sig -> Sig -> (Sig,Sig,Sig,Sig)+vbap4 b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "vbap4" ([Ar,Ar,Ar,Ar],[Ar,Kr,Kr,Kr]) [a1,a2]++-- | +-- Distributes an audio signal among 4 channels with moving virtual sources.+--+-- > ar1, ar2, ar3, ar4  vbap4move  asig, idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+--+-- csound doc: <https://csound.com/docs/manual/vbap4move.html>+vbap4move :: forall a . Tuple a => Sig -> D -> D -> D -> [D] -> a+vbap4move b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vbap4move" ([Ar,Ar,Ar,Ar],[Ar] ++ (repeat Ir)) ([a1,a2,a3,a4] ++ a5)++-- | +-- Distributes an audio signal among 8 channels.+--+-- > ar1, ..., ar8  vbap8  asig, kazim [, kelev] [, kspread]+--+-- csound doc: <https://csound.com/docs/manual/vbap8.html>+vbap8 :: forall a . Tuple a => Sig -> Sig -> a+vbap8 b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "vbap8" ((repeat Ar),[Ar,Kr,Kr,Kr]) [a1,a2]++-- | +-- Distributes an audio signal among 8 channels with moving virtual sources.+--+-- > ar1, ..., ar8  vbap8move  asig, idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+--+-- csound doc: <https://csound.com/docs/manual/vbap8move.html>+vbap8move :: forall a . Tuple a => Sig -> D -> D -> D -> [D] -> a+vbap8move b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vbap8move" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1,a2,a3,a4] ++ a5)++-- | +-- Calculates the gains for a sound location between multiple channels.+--+-- Calculates the gains for a sound location for up to 64.+--+-- > k1[, k2...]  vbapg  kazim [,kelev] [, kspread] [, ilayout]+-- > karray[]  vbapg  kazim [,kelev] [, kspread] [, ilayout]+--+-- csound doc: <https://csound.com/docs/manual/vbapg.html>+vbapg :: forall a . Tuple a => Sig -> a+vbapg b1 =+  pureTuple $ f <$> unSig b1+  where+    f a1 = mopcs "vbapg" ((repeat Kr),[Kr,Kr,Kr,Ir]) [a1]++-- | +-- Calculates the gains for a sound location between multiple+--       channels with moving virtual sources.+--+-- > kr1[, kr2...]  vbapgmove  idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+-- > karray[]  vbapgmove  idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+--+-- csound doc: <https://csound.com/docs/manual/vbapgmove.html>+vbapgmove :: forall a . Tuple a => D -> D -> D -> D -> a+vbapgmove b1 b2 b3 b4 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = mopcs "vbapgmove" ((repeat Kr),(repeat Ir)) [a1,a2,a3,a4]++-- | +-- Configures VBAP output according to loudspeaker parameters.+--+-- >  vbaplsinit  idim, ilsnum [, idir1] [, idir2] [...] [, idir32]+-- >  vbaplsinit  idim, ilsnum, ilsarray+--+-- csound doc: <https://csound.com/docs/manual/vbaplsinit.html>+vbaplsinit ::  D -> D -> SE ()+vbaplsinit b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "vbaplsinit" [(Xr,(repeat Ir))] [a1,a2]++-- | +-- Distributes an audio signal among many channels with moving virtual sources.+--+-- Distributes an audio signal among upto 64 channels with moving+--       virtual sources.+--+-- > ar1[, ar2...]  vbapmove  asig, idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+-- > aarray[]  vbapmove  asig, idur, ispread, ifldnum, ifld1 \+-- >           [, ifld2] [...]+--+-- csound doc: <https://csound.com/docs/manual/vbapmove.html>+vbapmove :: forall a . Tuple a => Sig -> D -> D -> D -> [D] -> a+vbapmove b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> mapM unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "vbapmove" ((repeat Ar),[Ar] ++ (repeat Ir)) ([a1,a2,a3,a4] ++ a5)++-- | +-- Writes a multi-channel audio signal to a ZAK array.+--+-- >  vbapz  inumchnls, istartndx, asig, kazim [, kelev] [, kspread]+--+-- csound doc: <https://csound.com/docs/manual/vbapz.html>+vbapz ::  D -> D -> Sig -> Sig -> SE ()+vbapz b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vbapz" [(Xr,[Ir,Ir,Ar,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Writes a multi-channel audio signal to a ZAK array with moving virtual sources.+--+-- >  vbapzmove  inumchnls, istartndx, asig, idur, ispread, ifldnum, ifld1, \+-- >           ifld2, [...]+--+-- csound doc: <https://csound.com/docs/manual/vbapzmove.html>+vbapzmove ::  Sig -> D -> D -> D -> [D] -> SE ()+vbapzmove b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> mapM (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vbapzmove" [(Xr,[Ir,Ir,Ar] ++ (repeat Ir))] ([a1,a2,a3,a4] ++ a5)++-- Reverberation.++-- | +-- Reverberates an input signal with a flat frequency response.+--+-- > ares  alpass  asig, xrvt, ilpt [, iskip] [, insmps]+--+-- csound doc: <https://csound.com/docs/manual/alpass.html>+alpass ::  Sig -> Sig -> D -> Sig+alpass b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "alpass" [(Ar,[Ar,Xr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- A physical model reverberator.+--+-- babo  stands  for  ball-within-the-box.   It is a physical model reverberator based on the paper by Davide  Rocchesso "The  Ball  within  the Box: a sound-processing metaphor", Computer Music Journal,  Vol  19,  N.4,  pp.45-47,  Winter 1995.+--+-- > a1, a2  babo  asig, ksrcx, ksrcy, ksrcz, irx, iry, irz [, idiff] [, ifno]+--+-- csound doc: <https://csound.com/docs/manual/babo.html>+babo ::  Sig -> Sig -> Sig -> Sig -> D -> D -> D -> (Sig,Sig)+babo b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "babo" ([Ar,Ar],[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir]) [a1+                                                                                 ,a2+                                                                                 ,a3+                                                                                 ,a4+                                                                                 ,a5+                                                                                 ,a6+                                                                                 ,a7]++-- | +-- Reverberates an input signal with a “colored” frequency response.+--+-- > ares  comb  asig, krvt, ilpt [, iskip] [, insmps]+--+-- csound doc: <https://csound.com/docs/manual/comb.html>+comb ::  Sig -> Sig -> D -> Sig+comb b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "comb" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Reverberates an input signal with a “colored” frequency response.+--+-- Reverberates an input signal with a “colored”+--       frequency response with a FIR filter.+--+-- > ares  combinv  asig, krvt, ilpt [, iskip] [, insmps]+--+-- csound doc: <https://csound.com/docs/manual/combinv.html>+combinv ::  Sig -> Sig -> D -> Sig+combinv b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "combinv" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Opcode version of Jezar's Freeverb+--+-- freeverb is a stereo reverb unit based on Jezar's public domain+-- 		C++ sources, composed of eight parallel comb filters on both+-- 		channels, followed by four allpass units in series. The filters+-- 		on the right channel are slightly detuned compared to the left+-- 		channel in order to create a stereo effect.+--+-- > aoutL, aoutR  freeverb  ainL, ainR, kRoomSize, kHFDamp[, iSRate[, iSkip]] +--+-- csound doc: <https://csound.com/docs/manual/freeverb.html>+freeverb ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)+freeverb b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "freeverb" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Three different nested all-pass filters.+--+-- Three different nested all-pass filters, useful for implementing reverbs.+--+-- > ares  nestedap  asig, imode, imaxdel, idel1, igain1 [, idel2] [, igain2] \+-- >           [, idel3] [, igain3] [, istor]+--+-- csound doc: <https://csound.com/docs/manual/nestedap.html>+nestedap ::  Sig -> D -> D -> D -> D -> Sig+nestedap b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "nestedap" [(Ar,[Ar,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- A reverberator consisting of 6 parallel comb-lowpass filters.+--+-- This is a reverberator consisting of 6 parallel comb-lowpass filters being fed into a series of 5 allpass filters. nreverb replaces reverb2 (version 3.48) and so both opcodes are identical.+--+-- > ares  nreverb  asig, ktime, khdif [, iskip] [,inumCombs] [, ifnCombs] \+-- >           [, inumAlpas] [, ifnAlpas]+--+-- csound doc: <https://csound.com/docs/manual/nreverb.html>+nreverb ::  Sig -> Sig -> Sig -> Sig+nreverb b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "nreverb" [(Ar,[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Models the reverberation of a metal plate.+--+-- Models the reverberation of a rectangular metal plate with+--       settable physical characteristics when excited by audio signal(s).+--+-- > a1[, a2, ...]  platerev  itabexcite. itabouts, kbndry, iaspect, istiff, idecay, iloss, aexcite1[, aexcite2, ...]+--+-- csound doc: <https://csound.com/docs/manual/platerev.html>+platerev :: forall a . Tuple a => D -> D -> Sig -> D -> D -> D -> D -> [Sig] -> a+platerev b1 b2 b3 b4 b5 b6 b7 b8 =+  pureTuple $ f <$> unD b1 <*> unD b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> mapM unSig b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "platerev" ((repeat Ar)+                                                 ,[Ir,Ir,Kr,Ir,Ir,Ir,Ir] ++ (repeat Ar)) ([a1,a2,a3,a4,a5,a6,a7] ++ a8)++-- | +-- Reverberates an input signal with a “natural room” frequency response.+--+-- > ares  reverb  asig, krvt [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/reverb.html>+reverb ::  Sig -> Sig -> Sig+reverb b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "reverb" [(Ar,[Ar,Kr,Ir])] [a1,a2]++-- | +-- Same as the nreverb opcode.+--+-- > ares  reverb2  asig, ktime, khdif [, iskip] [,inumCombs] \+-- >           [, ifnCombs] [, inumAlpas] [, ifnAlpas]+--+-- csound doc: <https://csound.com/docs/manual/reverb2.html>+reverb2 ::  Sig -> Sig -> Sig -> Sig+reverb2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "reverb2" [(Ar,[Ar,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- 8 delay line stereo FDN reverb, based on work by Sean Costello+--+-- 8 delay line stereo FDN reverb, with feedback matrix based upon physical+-- 		modeling scattering junction of 8 lossless waveguides of equal characteristic+-- 		impedance. Based on Csound orchestra version by Sean Costello.+--+-- > aoutL, aoutR  reverbsc  ainL, ainR, kfblvl, kfco[, israte[, ipitchm[, iskip]]] +--+-- csound doc: <https://csound.com/docs/manual/reverbsc.html>+reverbsc ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig)+reverbsc b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "reverbsc" ([Ar,Ar],[Ar,Ar,Kr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Variably reverberates an input signal with a flat frequency response.+--+-- > ares  valpass  asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]+--+-- csound doc: <https://csound.com/docs/manual/valpass.html>+valpass ::  Sig -> Sig -> Sig -> D -> Sig+valpass b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "valpass" [(Ar,[Ar,Kr,Xr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Variably reverberates an input signal with a “colored” frequency response.+--+-- > ares  vcomb  asig, krvt, xlpt, imaxlpt [, iskip] [, insmps]+--+-- csound doc: <https://csound.com/docs/manual/vcomb.html>+vcomb ::  Sig -> Sig -> Sig -> D -> Sig+vcomb b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "vcomb" [(Ar,[Ar,Kr,Xr,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- Sample Level Operators.++-- | +-- Mixes low level noise to a list of a-rate signals+--+-- 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.+--+-- >  denorm  a1[, a2[, a3[, ... ]]]+--+-- csound doc: <https://csound.com/docs/manual/denorm.html>+denorm ::  [Sig] -> SE ()+denorm b1 =+  SE $ join $ f <$> mapM (lift . unSig) b1+  where+    f a1 = opcsDep_ "denorm" [(Xr,(repeat Ar))] a1++-- | +-- Modify a signal by differentiation.+--+-- > ares  diff  asig [, iskip]+-- > kres  diff  ksig [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/diff.html>+diff ::  Sig -> Sig+diff b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "diff" [(Ar,[Ar,Ir]),(Kr,[Kr,Ir])] [a1]++-- | +-- Modify a signal by down-sampling.+--+-- > kres  downsamp  asig [, iwlen]+--+-- csound doc: <https://csound.com/docs/manual/downsamp.html>+downsamp ::  Sig -> Sig+downsamp b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "downsamp" [(Kr,[Ar,Ir])] [a1]++-- | +-- Adds artificial foldover to an audio signal.+--+-- > ares  fold  asig, kincr+--+-- csound doc: <https://csound.com/docs/manual/fold.html>+fold ::  Sig -> Sig -> Sig+fold b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "fold" [(Ar,[Ar,Kr])] [a1,a2]++-- | +-- Modify a signal by integration.+--+-- > ares  integ  asig [, iskip]+-- > kres  integ  ksig [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/integ.html>+integ ::  Sig -> Sig+integ b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "integ" [(Ar,[Ar,Ir]),(Kr,[Kr,Ir])] [a1]++-- | +-- Converts a control signal to an audio signal using linear interpolation.+--+-- > ares  interp  ksig [, iskip] [, imode]+-- >         [, ivalue]+--+-- csound doc: <https://csound.com/docs/manual/interp.html>+interp ::  Sig -> Sig+interp b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "interp" [(Ar,[Kr,Ir,Ir,Ir])] [a1]++-- | +-- Calculates the weighted mean value of two input signals.+--+-- Calculates the weighted mean value (i.e. linear interpolation) of two input signals+--+-- > ares  ntrpol  asig1, asig2, kpoint [, imin] [, imax]+-- > ires  ntrpol  isig1, isig2, ipoint [, imin] [, imax]+-- > kres  ntrpol  ksig1, ksig2, kpoint [, imin] [, imax]+--+-- csound doc: <https://csound.com/docs/manual/ntrpol.html>+ntrpol ::  Sig -> Sig -> Sig -> Sig+ntrpol b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "ntrpol" [(Ar,[Ar,Ar,Kr,Ir,Ir])+                               ,(Ir,[Ir,Ir,Ir,Ir,Ir])+                               ,(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Performs a sample-and-hold operation on its input.+--+-- > ares  samphold  asig, agate [, ival] [, ivstor]+-- > kres  samphold  ksig, kgate [, ival] [, ivstor]+--+-- csound doc: <https://csound.com/docs/manual/samphold.html>+samphold ::  Sig -> Sig -> Sig+samphold b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "samphold" [(Ar,[Ar,Ar,Ir,Ir]),(Kr,[Kr,Kr,Ir,Ir])] [a1,a2]++-- | +-- Modify a signal by up-sampling.+--+-- > ares  upsamp  ksig+--+-- csound doc: <https://csound.com/docs/manual/upsamp.html>+upsamp ::  Sig -> Sig+upsamp b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "upsamp" [(Ar,[Kr])] [a1]++-- | +-- Access values of the current buffer of an a-rate variable by indexing.+--+-- 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.+--+-- > kval  vaget  kndx, avar+--+-- csound doc: <https://csound.com/docs/manual/vaget.html>+vaget ::  Sig -> Sig -> Sig+vaget b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "vaget" [(Kr,[Kr,Ar])] [a1,a2]++-- | +-- Write value of into the current buffer of an a-rate variable by index.+--+-- 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.+--+-- >  vaset  kval, kndx, avar+--+-- csound doc: <https://csound.com/docs/manual/vaset.html>+vaset ::  Sig -> Sig -> Sig -> SE ()+vaset b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vaset" [(Xr,[Kr,Kr,Ar])] [a1,a2,a3]++-- Signal Limiters.++-- | +-- Sets the lower and upper limits of the value it processes.+--+-- > ares  limit  asig, klow, khigh+-- > ires  limit  isig, ilow, ihigh+-- > kres  limit  ksig, klow, khigh+-- > ires[]  limit  isig[], ilow, ihigh+-- > kres[]  limit  ksig[], klow, khigh+--+-- csound doc: <https://csound.com/docs/manual/limit.html>+limit ::  Sig -> Sig -> Sig -> Sig+limit b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "limit" [(Ar,[Ar,Kr,Kr])+                              ,(Ir,[Ir,Ir,Ir])+                              ,(Kr,[Kr,Kr,Kr])+                              ,(Ir,[Ir,Ir,Ir])+                              ,(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Reflects the signal that exceeds the low and high thresholds.+--+-- > ares  mirror  asig, klow, khigh+-- > ires  mirror  isig, ilow, ihigh+-- > kres  mirror  ksig, klow, khigh+--+-- csound doc: <https://csound.com/docs/manual/mirror.html>+mirror ::  Sig -> Sig -> Sig -> Sig+mirror b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "mirror" [(Ar,[Ar,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Wraps-around the signal that exceeds the low and high thresholds.+--+-- > ares  wrap  asig, klow, khigh+-- > ires  wrap  isig, ilow, ihigh+-- > kres  wrap  ksig, klow, khigh+--+-- csound doc: <https://csound.com/docs/manual/wrap.html>+wrap ::  Sig -> Sig -> Sig -> Sig+wrap b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "wrap" [(Ar,[Ar,Kr,Kr]),(Ir,[Ir,Ir,Ir]),(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- Special Effects.++-- | +-- Distort an audio signal via waveshaping and optional clipping.+--+-- > ar  distort  asig, kdist, ifn[, ihp, istor]+--+-- csound doc: <https://csound.com/docs/manual/distort.html>+distort ::  Sig -> Sig -> Tab -> Sig+distort b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "distort" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Modified hyperbolic tangent distortion.+--+-- Implementation of modified hyperbolic tangent distortion. distort1 can be used to generate wave shaping distortion based on a modification of the tanh function.+--+-- > ares  distort1  asig, kpregain, kpostgain, kshape1, kshape2[, imode]+--+-- csound doc: <https://csound.com/docs/manual/distort1.html>+distort1 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+distort1 b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "distort1" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- A user controlled flanger.+--+-- > ares  flanger  asig, adel, kfeedback [, imaxd]+--+-- csound doc: <https://csound.com/docs/manual/flanger.html>+flanger ::  Sig -> Sig -> Sig -> Sig+flanger b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "flanger" [(Ar,[Ar,Ar,Kr,Ir])] [a1,a2,a3]++-- | +-- Analyze an audio input and generate harmonizing voices in synchrony.+--+-- > ares  harmon  asig, kestfrq, kmaxvar, kgenfreq1, kgenfreq2, imode, \+-- >           iminfrq, iprd+--+-- csound doc: <https://csound.com/docs/manual/harmon.html>+harmon ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> D -> Sig+harmon b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "harmon" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1+                                                                               ,a2+                                                                               ,a3+                                                                               ,a4+                                                                               ,a5+                                                                               ,a6+                                                                               ,a7+                                                                               ,a8]++-- | +-- Analyze an audio input and generate harmonizing voices in+--       synchrony with formants preserved.+--+-- Generate harmonizing voices with formants preserved.+--+-- > ares  harmon2  asig, koct, kfrq1, kfrq2, icpsmode, ilowest[, ipolarity]+--+-- csound doc: <https://csound.com/docs/manual/harmon2.html>+harmon2 ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+harmon2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "harmon2" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Analyze an audio input and generate harmonizing voices in+--       synchrony with formants preserved.+--+-- Generate harmonizing voices with formants preserved.+--+-- > ares  harmon3  asig, koct, kfrq1, \+-- >         kfrq2, kfrq3, icpsmode, ilowest[, ipolarity]+--+-- csound doc: <https://csound.com/docs/manual/harmon2.html>+harmon3 ::  Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+harmon3 b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "harmon3" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- Analyze an audio input and generate harmonizing voices in+--       synchrony with formants preserved.+--+-- Generate harmonizing voices with formants preserved.+--+-- > ares  harmon4  asig, koct, kfrq1, \+-- >         kfrq2, kfrq3, kfrq4, icpsmode, ilowest[, ipolarity]+--+-- csound doc: <https://csound.com/docs/manual/harmon2.html>+harmon4 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+harmon4 b1 b2 b3 b4 b5 b6 b7 b8 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = opcs "harmon4" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1+                                                                                   ,a2+                                                                                   ,a3+                                                                                   ,a4+                                                                                   ,a5+                                                                                   ,a6+                                                                                   ,a7+                                                                                   ,a8]++-- | +-- First-order allpass filters arranged in a series.+--+-- An implementation of iord number of first-order allpass filters in series.+--+-- > ares  phaser1  asig, kfreq, kord, kfeedback [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/phaser1.html>+phaser1 ::  Sig -> Sig -> Sig -> Sig -> Sig+phaser1 b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "phaser1" [(Ar,[Ar,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4]++-- | +-- Second-order allpass filters arranged in a series.+--+-- An implementation of iord number of second-order allpass filters in series.+--+-- > ares  phaser2  asig, kfreq, kq, kord, kmode, ksep, kfeedback+--+-- csound doc: <https://csound.com/docs/manual/phaser2.html>+phaser2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+phaser2 b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "phaser2" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6,a7]++-- Standard Filters.++-- | +-- A hi-pass filter whose transfer functions are the complements of the tone opcode.+--+-- > ares  atone  asig, khp [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/atone.html>+atone ::  Sig -> Sig -> Sig+atone b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "atone" [(Ar,[Ar,Kr,Ir])] [a1,a2]++-- | +-- Emulates a stack of filters using the atone opcode.+--+-- atonex is equivalent to a filter consisting of more layers of atone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.+--+-- > ares  atonex  asig, khp [, inumlayer] [, iskip]+-- > ares  atonex  asig, ahp [, inumlayer] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/atonex.html>+atonex ::  Sig -> Sig -> Sig+atonex b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "atonex" [(Ar,[Ar,Kr,Ir,Ir]),(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]++-- | +-- A sweepable general purpose biquadratic digital filter.+--+-- > ares  biquad  asig, kb0, kb1, kb2, ka0, ka1, ka2 [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/biquad.html>+biquad ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+biquad b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "biquad" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | +-- A sweepable general purpose biquadratic digital filter with a-rate parameters.+--+-- A sweepable general purpose biquadratic digital filter.+--+-- > ares  biquada  asig, ab0, ab1, ab2, aa0, aa1, aa2 [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/biquada.html>+biquada ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+biquada b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "biquada" [(Ar,[Ar,Ar,Ar,Ar,Ar,Ar,Ar,Ir])] [a1,a2,a3,a4,a5,a6,a7]++-- | ++--+-- > asig  bob  ain, xcf, xres, xsat [, iosamps, istor]+--+-- csound doc: <https://csound.com/docs/manual/bob.html>+bob ::  Sig -> Sig -> Sig -> Sig -> Sig+bob b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "bob" [(Ar,[Ar,Xr,Xr,Xr,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Same as the butterbp opcode.+--+-- > ares  butbp  asig, kfreq, kband [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butbp.html>+butbp ::  Sig -> Sig -> Sig -> Sig+butbp b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "butbp" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Same as the butterbr opcode.+--+-- > ares  butbr  asig, kfreq, kband [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butbr.html>+butbr ::  Sig -> Sig -> Sig -> Sig+butbr b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "butbr" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Same as the butterhp opcode.+--+-- > ares  buthp  asig, kfreq [, iskip]+-- > ares  buthp  asig, afreq [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/buthp.html>+buthp ::  Sig -> Sig -> Sig+buthp b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "buthp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]++-- | +-- Same as the butterlp opcode.+--+-- > ares  butlp  asig, kfreq [, iskip]+-- > ares  butlp  asig, afreq [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butlp.html>+butlp ::  Sig -> Sig -> Sig+butlp b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "butlp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]++-- | +-- A band-pass Butterworth filter.+--+-- Implementation of a second-order band-pass Butterworth filter. This opcode can also be written as butbp.+--+-- > ares  butterbp  asig, xfreq, xband [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butterbp.html>+butterbp ::  Sig -> Sig -> Sig -> Sig+butterbp b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "butterbp" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- A band-reject Butterworth filter.+--+-- Implementation of a second-order band-reject Butterworth filter. This opcode can also be written as butbr.+--+-- > ares  butterbr  asig, xfreq, xband [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butterbr.html>+butterbr ::  Sig -> Sig -> Sig -> Sig+butterbr b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "butterbr" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- A high-pass Butterworth filter.+--+-- Implementation of second-order high-pass Butterworth filter. This opcode can also be written as buthp.+--+-- > ares  butterhp  asig, kfreq [, iskip]+-- > ares  butterhp  asig, afreq [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butterhp.html>+butterhp ::  Sig -> Sig -> Sig+butterhp b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "butterhp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]++-- | +-- A low-pass Butterworth filter.+--+-- Implementation of a second-order low-pass Butterworth filter. This opcode can also be written as butlp.+--+-- > ares  butterlp  asig, kfreq [, iskip]+-- > ares  butterlp  asig, afreq [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/butterlp.html>+butterlp ::  Sig -> Sig -> Sig+butterlp b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "butterlp" [(Ar,[Ar,Kr,Ir]),(Ar,[Ar,Ar,Ir])] [a1,a2]++-- | +-- Implements low-pass and high-pass filters of different styles.+--+-- Implements the classical standard analog filter types: low-pass and high-pass. They are implemented with the four classical kinds of filters: Butterworth, Chebyshev Type I, Chebyshev Type II, and Elliptical.  The number of poles may be any even number from 2 to 80.+--+-- > ares  clfilt  asig, kfreq, itype, inpol [, ikind] [, ipbr] [, isba] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/clfilt.html>+clfilt ::  Sig -> Sig -> D -> D -> Sig+clfilt b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "clfilt" [(Ar,[Ar,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Zero-delay feedback implementation of 4 pole diode ladder filter.+--+-- Zero-delay feedback implementation of a 4 pole (24 dB/oct) diode low-pass filter. This filter design was originally used in the EMS VCS3 and was the resonant filter in the Roland TB-303.+--+-- > asig  diode_ladder  ain, xcf, xk [, inlp, isaturation, istor]+--+-- csound doc: <https://csound.com/docs/manual/diode_ladder.html>+diode_ladder ::  Sig -> Sig -> Sig -> Sig+diode_ladder b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "diode_ladder" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations.+--+-- A fast and robust method for approximating sound propagation, achieving convincing Doppler shifts without having to solve equations. The method computes frequency shifts based on reading an input delay line at a delay time computed from the distance between source and mic and the speed of sound. One instance of the opcode is required for each dimension of space through which the sound source moves. If the source sound moves at a constant speed from in front of the microphone, through the microphone, to behind the microphone, then the output will be frequency shifted above the source frequency at a constant frequency while the source approaches, then discontinuously will be shifted below the source frequency at a constant frequency as the source recedes from the microphone. If the source sound moves at a constant speed through a point to one side of the microphone, then the rate of change of position will not be constant, and the familiar Doppler frequency shift typical of a siren or engine approaching and receding along a road beside a listener will be heard.+--+-- > ashifted  doppler  asource, ksourceposition, kmicposition [, isoundspeed, ifiltercutoff]+--+-- csound doc: <https://csound.com/docs/manual/doppler.html>+doppler ::  Sig -> Sig -> Sig -> Sig+doppler b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "doppler" [(Ar,[Ar,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Zero-delay feedback implementation of Korg35 resonant high-pass filter.+--+-- Zero-delay feedback implementation of Korg35 resonant high-pass filter. This filter design is found in the Korg MS10 early MS20.+--+-- > asig  K35_hpf  ain, xcf, xQ [, inlp, isaturation, istor]+--+-- csound doc: <https://csound.com/docs/manual/k35_hpf.html>+k35_hpf ::  Sig -> Sig -> Sig -> Sig+k35_hpf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "K35_hpf" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Zero-delay feedback implementation of Korg35 resonant low-pass filter.+--+-- Zero-delay feedback implementation of Korg35 resonant low-pass filter. This filter design is found in the Korg MS10, early MS20, and Monotron series.+--+-- > asig  K35_lpf  ain, xcf, xQ [, inlp, isaturation, istor]+--+-- csound doc: <https://csound.com/docs/manual/k35_lpf.html>+k35_lpf ::  Sig -> Sig -> Sig -> Sig+k35_lpf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "K35_lpf" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- A median filter, a variant FIR lowpass filter.+--+-- Implementation of a median filter.+--+-- > ares  median  asig, ksize, imaxsize [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/median.html>+median ::  Sig -> Sig -> D -> Sig+median b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "median" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A median filter, a variant FIR lowpass filter.+--+-- Implementation of a median filter.+--+-- > kres  mediank  kin, ksize, imaxsize [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/mediank.html>+mediank ::  Sig -> Sig -> D -> Sig+mediank b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "mediank" [(Kr,[Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A first-order recursive low-pass filter with variable frequency response.+--+-- > ares  tone  asig, khp [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/tone.html>+tone ::  Sig -> Sig -> Sig+tone b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "tone" [(Ar,[Ar,Kr,Ir])] [a1,a2]++-- | +-- Emulates a stack of filters using the tone opcode.+--+-- tonex is equivalent to a filter consisting of more layers of tone with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.+--+-- > ares  tonex   asig, khp [, inumlayer] [, iskip]+-- > ares  tonex   asig, ahp [, inumlayer] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/tonex.html>+tonex ::  Sig -> Sig -> Sig+tonex b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "tonex" [(Ar,[Ar,Kr,Ir,Ir]),(Ar,[Ar,Ar,Ir,Ir])] [a1,a2]++-- | +-- Zero-delay feedback implementation of 1 pole filter.+--+-- Zero-delay feedback implementation of a 1 pole (6 dB/oct) filter. Offers low-pass (default), high-pass, and allpass output modes.+--+-- > asig  zdf_1pole  ain, xcf [, kmode, istor]+--+-- csound doc: <https://csound.com/docs/manual/zdf_1pole.html>+zdf_1pole ::  Sig -> Sig -> Sig+zdf_1pole b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "zdf_1pole" [(Ar,[Ar,Xr,Kr,Ir])] [a1,a2]++-- | +-- Zero-delay feedback implementation of 1 pole filter with multimode output.+--+-- Zero-delay feedback implementation of a 1 pole (6 dB/oct) filter. Offers low-pass and high-pass output.+--+-- > alp, ahp  zdf_1pole_mode  ain, xcf [, istor]+--+-- csound doc: <https://csound.com/docs/manual/zdf_1pole_mode.html>+zdf_1pole_mode ::  Sig -> Sig -> (Sig,Sig)+zdf_1pole_mode b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "zdf_1pole_mode" ([Ar,Ar],[Ar,Xr,Ir]) [a1,a2]++-- | +-- Zero-delay feedback implementation of 2 pole filter.+--+-- Zero-delay feedback implementation of a 2 pole (12 dB/oct) filter. Offers low-pass (default), high-pass, and allpass output modes.+--+-- > asig  zdf_2pole  ain, xcf, xQ [, kmode, istor]+--+-- csound doc: <https://csound.com/docs/manual/zdf_2pole.html>+zdf_2pole ::  Sig -> Sig -> Sig -> Sig+zdf_2pole b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "zdf_2pole" [(Ar,[Ar,Xr,Xr,Kr,Ir])] [a1,a2,a3]++-- | +-- Zero-delay feedback implementation of 2 pole filter with multimode output.+--+-- Zero-delay feedback implementation of a 2 pole (12 dB/oct) filter. Offers low-pass,+--       band-pass, and high-pass output.+--+-- > alp, abp, ahp  zdf_2pole_mode  ain, xcf, Q [, istor]+--+-- csound doc: <https://csound.com/docs/manual/zdf_2pole_mode.html>+zdf_2pole_mode ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig)+zdf_2pole_mode b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "zdf_2pole_mode" ([Ar,Ar,Ar],[Ar,Xr,Xr,Ir]) [a1,a2,a3]++-- | +-- Zero-delay feedback implementation of 4 pole ladder filter.+--+-- Zero-delay feedback implementation of a 4 pole (24 dB/oct) low-pass filter based on the Moog ladder filter.+--+-- > asig  zdf_ladder  ain, xcf, xQ [, istor]+--+-- csound doc: <https://csound.com/docs/manual/zdf_ladder.html>+zdf_ladder ::  Sig -> Sig -> Sig -> Sig+zdf_ladder b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "zdf_ladder" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- Standard Filters:Resonant.++-- | +-- A notch filter whose transfer functions are the complements of+--       the reson opcode.+--+-- > ares  areson  asig, kcf, kbw [, iscl] [, iskip]+-- > ares  areson  asig, acf, kbw [, iscl] [, iskip]+-- > ares  areson  asig, kcf, abw [, iscl] [, iskip]+-- > ares  areson  asig, acf, abw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/areson.html>+areson ::  Sig -> Sig -> Sig -> Sig+areson b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "areson" [(Ar,[Ar,Kr,Kr,Ir,Ir])+                               ,(Ar,[Ar,Ar,Kr,Ir,Ir])+                               ,(Ar,[Ar,Kr,Ar,Ir,Ir])+                               ,(Ar,[Ar,Ar,Ar,Ir,Ir])] [a1,a2,a3]++-- | +-- A second-order multi-mode filter.+--+-- > ares  bqrez  asig, xfco, xres [, imode] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/bqrez.html>+bqrez ::  Sig -> Sig -> Sig -> Sig+bqrez b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "bqrez" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- A resonant lowpass filter.+--+-- Implementation of a resonant second-order lowpass filter.+--+-- > ares  lowpass2  asig, kcf, kq [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/lowpass2.html>+lowpass2 ::  Sig -> Sig -> Sig -> Sig+lowpass2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "lowpass2" [(Ar,[Ar,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Another resonant lowpass filter.+--+-- lowres is a resonant lowpass filter.+--+-- > ares  lowres  asig, xcutoff, xresonance [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/lowres.html>+lowres ::  Sig -> Sig -> Sig -> Sig+lowres b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "lowres" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- Simulates layers of serially connected resonant lowpass filters.+--+-- lowresx is equivalent to more layers of lowres with the same arguments serially connected.+--+-- > ares  lowresx  asig, xcutoff, xresonance [, inumlayer] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/lowresx.html>+lowresx ::  Sig -> Sig -> Sig -> Sig+lowresx b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "lowresx" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- A 3-pole sweepable resonant lowpass filter.+--+-- Implementation of a 3 pole sweepable resonant lowpass filter.+--+-- > ares  lpf18  asig, xfco, xres, xdist [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/lpf18.html>+lpf18 ::  Sig -> Sig -> Sig -> Sig -> Sig+lpf18 b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "lpf18" [(Ar,[Ar,Xr,Xr,Xr,Ir])] [a1,a2,a3,a4]++-- | +-- Moog ladder lowpass filter.+--+-- Moogladder is an new digital implementation of the Moog ladder filter based on +-- the work of Antti Huovilainen, described in the paper "Non-Linear Digital +-- Implementation of the Moog Ladder Filter" (Proceedings of DaFX04, Univ of Napoli). +-- This implementation is probably a more accurate digital representation of +-- the original analogue filter.+--+-- > asig  moogladder  ain, kcf, kres[, istor]+-- > asig  moogladder  ain, acf, kres[, istor]+-- > asig  moogladder  ain, kcf, ares[, istor]+-- > asig  moogladder  ain, acf, ares[, istor]+--+-- csound doc: <https://csound.com/docs/manual/moogladder.html>+moogladder ::  Sig -> Sig -> Sig -> Sig+moogladder b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "moogladder" [(Ar,[Ar,Kr,Kr,Ir])+                                   ,(Ar,[Ar,Ar,Kr,Ir])+                                   ,(Ar,[Ar,Kr,Ar,Ir])+                                   ,(Ar,[Ar,Ar,Ar,Ir])] [a1,a2,a3]++-- | +-- Moog ladder lowpass filter.+--+-- Moogladder2 is an new digital implementation of the Moog ladder filter based on +-- the work of Antti Huovilainen, described in the paper "Non-Linear Digital +-- Implementation of the Moog Ladder Filter" (Proceedings of DaFX04, Univ of Napoli). +-- This implementation uses approximations to the tanh function and so is+-- faster but less accurate than moogladder.+--+-- > asig  moogladder2  ain, kcf, kres[, istor]+-- > asig  moogladder2  ain, acf, kres[, istor]+-- > asig  moogladder2  ain, kcf, ares[, istor]+-- > asig  moogladder2  ain, acf, ares[, istor]+--+-- csound doc: <https://csound.com/docs/manual/moogladder2.html>+moogladder2 ::  Sig -> Sig -> Sig -> Sig+moogladder2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "moogladder2" [(Ar,[Ar,Kr,Kr,Ir])+                                    ,(Ar,[Ar,Ar,Kr,Ir])+                                    ,(Ar,[Ar,Kr,Ar,Ir])+                                    ,(Ar,[Ar,Ar,Ar,Ir])] [a1,a2,a3]++-- | +-- A digital emulation of the Moog diode ladder filter configuration.+--+-- > ares  moogvcf  asig, xfco, xres [,iscale, iskip]+--+-- csound doc: <https://csound.com/docs/manual/moogvcf.html>+moogvcf ::  Sig -> Sig -> Sig -> Sig+moogvcf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "moogvcf" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- A digital emulation of the Moog diode ladder filter configuration.+--+-- > ares  moogvcf2  asig, xfco, xres [,iscale, iskip]+--+-- csound doc: <https://csound.com/docs/manual/moogvcf2.html>+moogvcf2 ::  Sig -> Sig -> Sig -> Sig+moogvcf2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "moogvcf2" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- Moog voltage-controlled highpass filter emulation.+--+-- Mvchpf is an digital implementation of the 4th-order (24 dB/oct)  Moog+-- high-pass filter, originally written by Fons Andriaensen. According to the author,+-- mvchpf "...is based on the voltage controlled highpass filter by Robert Moog.+-- again with some attention to the nonlinear effects."+--+-- > asig  mvchpf  ain, xcf[, istor]+--+-- csound doc: <https://csound.com/docs/manual/mvchpf.html>+mvchpf ::  Sig -> Sig -> Sig+mvchpf b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "mvchpf" [(Ar,[Ar,Xr,Ir])] [a1,a2]++-- | +-- Moog voltage-controlled lowpass filter emulation.+--+-- Mvclpf1 is an digital implementation of the 4th-order (24 dB/oct)  Moog ladder filter+-- originally written by Fons Andriaensen. According to the author,+-- mvclpf1 "is a fairly simple design, and it does not even pretend to come+-- close the 'real thing'. It uses a very crude approximation of the non-linear+-- resistor in the first filter section only. [...] [I]t's [a] cheap (in+-- terms of CPU usage) general purpose 24 dB/oct lowpass+-- filter that could be useful".+--+-- > asig  mvclpf1  ain, xcf, xres[,istor]+--+-- csound doc: <https://csound.com/docs/manual/mvclpf1.html>+mvclpf1 ::  Sig -> Sig -> Sig -> Sig+mvclpf1 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "mvclpf1" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- Moog voltage-controlled lowpass filter emulation.+--+-- Mvclpf2 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter+-- originally written by Fons Andriaensen. According to the author,+-- mvclpf2 "uses five non-linear elements, in the input and in all four filter+-- sections. It works by using the derivative of the nonlinearity (for which+-- 1 / (1 + x * x) is reasonable approximation). The main advantage of this is+-- that only one evaluation of the non-linear function is required for each+-- section".+--+-- > asig  mvclpf2  ain, xcf, xres[, istor]+--+-- csound doc: <https://csound.com/docs/manual/mvclpf2.html>+mvclpf2 ::  Sig -> Sig -> Sig -> Sig+mvclpf2 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "mvclpf2" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- Moog voltage-controlled lowpass filter emulation.+--+-- Mvclpf3 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter+-- originally written by Fons Andriaensen. According to the author,+-- mvclpf3 "is based on mvclpf2 , with two differences. It uses the+-- the technique described by Stilson and Smith to extend the constant-Q+-- range, and the internal sample frequency is doubled, giving a better+-- approximation to the non-linear behaviour at high freqencies.+-- This version has high Q over the entire frequency range and will+-- oscillate up to above 10 kHz, while the two others show a decreasing+-- Q at high frequencies. Mvclpf3  is reasonably well tuned, and can be+-- 'played' as a VCO up to at least 5 kHz".+--+-- > asig  mvclpf3  ain, xcf, xres[, istor]+--+-- csound doc: <https://csound.com/docs/manual/mvclpf3.html>+mvclpf3 ::  Sig -> Sig -> Sig -> Sig+mvclpf3 b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "mvclpf3" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- Moog voltage-controlled lowpass filter emulation.+--+-- Mvclpf4 is an digital implementation of the 4th-order (24 dB/oct) Moog ladder filter+-- originally written by Fons Andriaensen. It is a version of the+-- mvclpf3 opcode with four outputs, for 6dB, 12dB, 18dB, and+-- 24 dB/octave responses.+--+-- > asig1,asig2,asig3,asig4  mvclpf4  ain, xcf, xres[, istor]+--+-- csound doc: <https://csound.com/docs/manual/mvclpf4.html>+mvclpf4 ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)+mvclpf4 b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "mvclpf4" ([Ar,Ar,Ar,Ar],[Ar,Xr,Xr,Ir]) [a1,a2,a3]++-- | +-- A second-order resonant filter.+--+-- > ares  reson  asig, xcf, xbw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/reson.html>+reson ::  Sig -> Sig -> Sig -> Sig+reson b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "reson" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- A bandpass filter with variable frequency response.+--+-- Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.+--+-- > ares  resonr  asig, xcf, xbw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/resonr.html>+resonr ::  Sig -> Sig -> Sig -> Sig+resonr b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "resonr" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- Emulates a stack of filters using the reson opcode.+--+-- resonx is equivalent to a filters consisting of more layers of reson with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff. They are faster than using a larger number instances in a Csound orchestra of the old opcodes, because only one initialization and k- cycle are needed at time and the audio loop falls entirely inside the cache memory of processor.+--+-- > ares  resonx  asig, xcf, xbw [, inumlayer] [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/resonx.html>+resonx ::  Sig -> Sig -> Sig -> Sig+resonx b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "resonx" [(Ar,[Ar,Xr,Xr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- A bank of second-order bandpass filters, connected in parallel.+--+-- > ares  resony  asig, kbf, kbw, inum, ksep [, isepmode] [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/resony.html>+resony ::  Sig -> Sig -> Sig -> D -> Sig -> Sig+resony b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "resony" [(Ar,[Ar,Kr,Kr,Ir,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- A bandpass filter with variable frequency response.+--+-- Implementations of a second-order, two-pole two-zero bandpass filter with variable frequency response.+--+-- > ares  resonz  asig, xcf, xbw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/resonz.html>+resonz ::  Sig -> Sig -> Sig -> Sig+resonz b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "resonz" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | +-- A resonant low-pass filter.+--+-- > ares  rezzy  asig, xfco, xres [, imode, iskip]+--+-- csound doc: <https://csound.com/docs/manual/rezzy.html>+rezzy ::  Sig -> Sig -> Sig -> Sig+rezzy b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "rezzy" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- > asig  skf  asig, xcf, xK[, ihp, istor]+--+-- csound doc: <https://csound.com/docs/manual/skf.html>+skf ::  Sig -> Sig -> Sig -> Sig+skf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "skf" [(Ar,[Ar,Xr,Xr,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- > asig  spf  alp,ahp,abp, xcf, xR[, istor]+--+-- csound doc: <https://csound.com/docs/manual/spf.html>+spf ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+spf b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "spf" [(Ar,[Ar,Ar,Ar,Xr,Xr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- State-variable filter.+--+-- Statevar is a new digital implementation of the analogue state-variable filter. +-- This filter has four simultaneous outputs: high-pass, low-pass,+-- band-pass and band-reject. This filter uses oversampling for sharper+-- resonance (default: 3 times oversampling). It includes a+-- resonance limiter that prevents the filter from getting unstable.+--+-- > ahp,alp,abp,abr  statevar  ain, xcf, xq [, iosamps, istor]+--+-- csound doc: <https://csound.com/docs/manual/statevar.html>+statevar ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)+statevar b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "statevar" ([Ar,Ar,Ar,Ar],[Ar,Xr,Xr,Ir,Ir]) [a1,a2,a3]++-- | +-- A resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.+--+-- Implementation of a resonant second order filter, with simultaneous lowpass, highpass and bandpass outputs.+--+-- > alow, ahigh, aband  svfilter   asig, kcf, kq [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/svfilter.html>+svfilter ::  Sig -> Sig -> Sig -> (Sig,Sig,Sig)+svfilter b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = mopcs "svfilter" ([Ar,Ar,Ar],[Ar,Kr,Kr,Ir,Ir]) [a1,a2,a3]++-- | ++--+-- > ahp,alp,abp,abr  svn  asig, xcf, xQ,+-- >         kdrive[, ifn,inm,imx, istor]+--+-- csound doc: <https://csound.com/docs/manual/svn.html>+svn ::  Sig -> Sig -> Sig -> Sig -> (Sig,Sig,Sig,Sig)+svn b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "svn" ([Ar,Ar,Ar,Ar],[Ar,Xr,Xr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Models some of the filter characteristics of a Roland TB303 voltage-controlled filter.+--+-- This opcode attempts to model some of the filter characteristics of a Roland TB303 voltage-controlled filter. Euler's method is used to approximate the system, rather than traditional filter methods. Cutoff frequency, Q, and distortion are all coupled. Empirical methods were used to try to unentwine,  but frequency is only approximate as a result. Future fixes for some problems with this opcode may break existing orchestras relying on this version of tbvcf.+--+-- > ares  tbvcf  asig, xfco, xres, kdist, kasym [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/tbvcf.html>+tbvcf ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+tbvcf b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "tbvcf" [(Ar,[Ar,Xr,Xr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | ++--+-- > asig  vclpf  ain, xcf, xres[, istor]+--+-- csound doc: <https://csound.com/docs/manual/vclpf.html>+vclpf ::  Sig -> Sig -> Sig -> Sig+vclpf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "vclpf" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- A bank of filters in which the cutoff frequency can be separated under user control.+--+-- A bank of filters in which the cutoff frequency can be separated under user control+--+-- > ares  vlowres  asig, kfco, kres, iord, ksep+--+-- csound doc: <https://csound.com/docs/manual/vlowres.html>+vlowres ::  Sig -> Sig -> Sig -> D -> Sig -> Sig+vlowres b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "vlowres" [(Ar,[Ar,Kr,Kr,Ir,Kr])] [a1,a2,a3,a4,a5]++-- Standard Filters:Control.++-- | +-- A notch filter whose transfer functions are the complements of the reson opcode.+--+-- > kres  aresonk  ksig, kcf, kbw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/aresonk.html>+aresonk ::  Sig -> Sig -> Sig -> Sig+aresonk b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "aresonk" [(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- A hi-pass filter whose transfer functions are the complements of the tonek opcode.+--+-- > kres  atonek  ksig, khp [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/atonek.html>+atonek ::  Sig -> Sig -> Sig+atonek b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "atonek" [(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | ++--+-- > aout  lag  ain, klagtime [, initialvalue]+-- > kout  lag  kin, klagtime [, initialvalue]+--+-- csound doc: <https://csound.com/docs/manual/lag.html>+lag ::  Sig -> Sig -> Sig+lag b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "lag" [(Ar,[Ar,Kr,Ir]),(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | ++--+-- > aout  lagud  ain, klagup, klagdown [, initialvalue]+-- > kout  lagud  kin, klagup, klagdown [, initialvalue]+--+-- csound doc: <https://csound.com/docs/manual/lagud.html>+lagud ::  Sig -> Sig -> Sig -> Sig+lagud b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "lagud" [(Ar,[Ar,Kr,Kr,Ir]),(Kr,[Kr,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Generate glissandos starting from a control signal.+--+-- > kres  lineto  ksig, ktime+--+-- csound doc: <https://csound.com/docs/manual/lineto.html>+lineto ::  Sig -> Sig -> Sig+lineto b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "lineto" [(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Applies portamento to a step-valued control signal.+--+-- > kres  port  ksig, ihtim [, isig]+--+-- csound doc: <https://csound.com/docs/manual/port.html>+port ::  Sig -> D -> Sig+port b1 b2 =+  Sig $ f <$> unSig b1 <*> unD b2+  where+    f a1 a2 = opcs "port" [(Kr,[Kr,Ir,Ir])] [a1,a2]++-- | +-- Applies portamento to a step-valued control signal.+--+-- > kres  portk  ksig, khtim [, isig]+--+-- csound doc: <https://csound.com/docs/manual/portk.html>+portk ::  Sig -> Sig -> Sig+portk b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "portk" [(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | +-- A second-order resonant filter.+--+-- > kres  resonk  ksig, kcf, kbw [, iscl] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/resonk.html>+resonk ::  Sig -> Sig -> Sig -> Sig+resonk b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "resonk" [(Kr,[Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Control signal resonant filter stack.+--+-- resonxk is equivalent to a group of resonk filters, with the same arguments, serially connected. Using a stack of a larger number of filters allows a sharper cutoff.+--+-- > kres  resonxk  ksig, kcf, kbw[, inumlayer, iscl, istor]+--+-- csound doc: <https://csound.com/docs/manual/resonxk.html>+resonxk ::  Sig -> Sig -> Sig -> Sig+resonxk b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "resonxk" [(Kr,[Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Exponential Lag+--+-- Exponential lag with 60dB lag time. Port of Supercollider's Lag+--+-- > aout  sc_lag  ain, klagtime [, initialvalue]+-- > kout  sc_lag  kin, klagtime [, initialvalue]+--+-- csound doc: <https://csound.com/docs/manual/sc_lag.html>+sc_lag ::  Sig -> Sig -> Sig+sc_lag b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "sc_lag" [(Ar,[Ar,Kr,Ir]),(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | +-- Exponential Lag+--+-- Exponential lag with different smoothing time for up- and+-- 	  downgoing signals. Port of Supercollider's LagUD+--+-- > aout  sc_lagud  ain, klagup, klagdown [, initialvalue]+-- > kout  sc_lagud  kin, klagup, klagdown [, initialvalue]+--+-- csound doc: <https://csound.com/docs/manual/sc_lagud.html>+sc_lagud ::  Sig -> Sig -> Sig -> Sig+sc_lagud b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "sc_lagud" [(Ar,[Ar,Kr,Kr,Ir]),(Kr,[Kr,Kr,Kr,Ir])] [a1,a2,a3]++-- | +-- Timed trigger+--+-- Timed trigger. Port of Supercollider's Trig ugen+--+-- > aout  sc_trig  ain, kdur+-- > kout  sc_trig  kin, kdur+--+-- csound doc: <https://csound.com/docs/manual/sc_trig.html>+sc_trig ::  Sig -> Sig -> Sig+sc_trig b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "sc_trig" [(Ar,[Ar,Kr]),(Kr,[Kr,Kr])] [a1,a2]++-- | +-- Generate glissandos starting from a control signal.+--+-- Generate glissandos starting from a control signal with a trigger.+--+-- > kres  tlineto  ksig, ktime, ktrig+--+-- csound doc: <https://csound.com/docs/manual/tlineto.html>+tlineto ::  Sig -> Sig -> Sig -> Sig+tlineto b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "tlineto" [(Kr,[Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- A first-order recursive low-pass filter with variable frequency response.+--+-- > kres  tonek  ksig, khp [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/tonek.html>+tonek ::  Sig -> Sig -> Sig+tonek b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "tonek" [(Kr,[Kr,Kr,Ir])] [a1,a2]++-- | ++--+-- > aout  trighold  ain, kdur+-- > kout  trighold  kin, kdur+--+-- csound doc: <https://csound.com/docs/manual/trighold.html>+trighold ::  Sig -> Sig -> Sig+trighold b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "trighold" [(Ar,[Ar,Kr]),(Kr,[Kr,Kr])] [a1,a2]++-- Specialized Filters.++-- | +-- A DC blocking filter.+--+-- Implements the DC blocking filter+--+-- > ares  dcblock  ain [, igain]+--+-- csound doc: <https://csound.com/docs/manual/dcblock.html>+dcblock ::  Sig -> Sig+dcblock b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "dcblock" [(Ar,[Ar,Ir])] [a1]++-- | +-- A DC blocking filter.+--+-- Implements a DC blocking filter with improved DC attenuation.+--+-- > ares  dcblock2  ain [, iorder] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/dcblock2.html>+dcblock2 ::  Sig -> Sig+dcblock2 b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "dcblock2" [(Ar,[Ar,Ir,Ir])] [a1]++-- | +-- Equalizer filter+--+-- The opcode eqfil is a 2nd order tunable equalisation filter based on Regalia and Mitra+--       design ("Tunable Digital Frequency Response Equalization Filters", IEEE Trans.+--       on Ac., Sp. and Sig Proc., 35 (1), 1987). It provides a peak/notch filter for+--       building parametric/graphic equalisers.+--+-- > asig  eqfil  ain, kcf, kbw, kgain[, istor]+--+-- csound doc: <https://csound.com/docs/manual/eqfil.html>+eqfil ::  Sig -> Sig -> Sig -> Sig -> Sig+eqfil b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "eqfil" [(Ar,[Ar,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > ares  exciter  asig, kfreq, kceil, kharmonics, kblend+--+-- csound doc: <https://csound.com/docs/manual/exciter.html>+exciter ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+exciter b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "exciter" [(Ar,[Ar,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5]++-- | +-- Performs filtering using a transposed form-II digital filter lattice with no time-varying control.+--+-- General purpose custom filter with no time-varying pole control. The filter coefficients implement the following difference equation:+--+-- > ares  filter2  asig, ibcoefs, iacoefs, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN+-- > kres  filter2  ksig, ibcoefs, iacoefs, ib0, ib1, ..., ibM, ia1, ia2, ..., iaN+--+-- csound doc: <https://csound.com/docs/manual/filter2.html>+filter2 ::  Sig -> D -> D -> [D] -> Sig+filter2 b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> mapM unD b4+  where+    f a1 a2 a3 a4 = opcs "filter2" [(Ar,[Ar] ++ (repeat Ir)),(Kr,[Kr] ++ (repeat Ir))] ([a1+                                                                                        ,a2+                                                                                        ,a3] ++ a4)++-- | +-- AM/FM analysis from quadrature signal.+--+-- This opcode attempts to extract the AM and FM signals off a+--       quadrature signal (e.g. from a Hilbert transform).+--+-- > am, af  fmanal  are, aim+--+-- csound doc: <https://csound.com/docs/manual/fmanal.html>+fmanal ::  Sig -> Sig -> (Sig,Sig)+fmanal b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = mopcs "fmanal" ([Ar,Ar],[Ar,Ar]) [a1,a2]++-- | +-- Formant filter.+--+-- Fofilter generates a stream of overlapping sinewave grains, when fed with +-- a pulse train. Each grain is the impulse response of a combination of +-- two BP filters. The grains are defined by their attack time (determining +-- the skirtwidth of the formant region at -60dB) and decay time +-- (-6dB bandwidth). Overlapping will occur when 1/freq < decay, but, +-- unlike FOF, there is no upper limit on the number of overlaps. +-- The original idea for this opcode came from J McCartney's formlet class +-- in SuperCollider, but this is possibly implemented differently(?).+--+-- > asig  fofilter  ain, xcf, xris, xdec[, istor]+--+-- csound doc: <https://csound.com/docs/manual/fofilter.html>+fofilter ::  Sig -> Sig -> Sig -> Sig -> Sig+fofilter b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "fofilter" [(Ar,[Ar,Xr,Xr,Xr,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > aout  gtf  ain, kfreq, idecay[, iorder, iphase]+--+-- csound doc: <https://csound.com/docs/manual/gtf.html>+gtf ::  Sig -> Sig -> D -> Sig+gtf b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "gtf" [(Ar,[Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- A Hilbert transformer.+--+-- An IIR implementation of a Hilbert transformer.+--+-- > ar1, ar2  hilbert  asig+--+-- csound doc: <https://csound.com/docs/manual/hilbert.html>+hilbert ::  Sig -> (Sig,Sig)+hilbert b1 =+  pureTuple $ f <$> unSig b1+  where+    f a1 = mopcs "hilbert" ([Ar,Ar],[Ar]) [a1]++-- | +-- A Hilbert rransformer.+--+-- A DFT-based implementation of a Hilbert transformer.+--+-- > ar1, ar2  hilbert2  asig, ifftsize, ihopsize+--+-- csound doc: <https://csound.com/docs/manual/hilbert2.html>+hilbert2 ::  Sig -> D -> D -> (Sig,Sig)+hilbert2 b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "hilbert2" ([Ar,Ar],[Ar,Ir,Ir]) [a1,a2,a3]++-- | ++--+-- > aout  mvmfilter  ain, xfreq, xTau [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/mvmfilter.html>+mvmfilter ::  Sig -> Sig -> Sig -> Sig+mvmfilter b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "mvmfilter" [(Ar,[Ar,Xr,Xr,Ir])] [a1,a2,a3]++-- | +-- A filter with a non-linear effect.+--+-- Implements the filter:+--+-- > ares  nlfilt  ain, ka, kb, kd, kC, kL+--+-- csound doc: <https://csound.com/docs/manual/nlfilt.html>+nlfilt ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+nlfilt b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "nlfilt" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]++-- | +-- A filter with a non-linear effect and blowup protection.+--+-- Implements the filter:+--+-- > ares  nlfilt2  ain, ka, kb, kd, kC, kL+--+-- csound doc: <https://csound.com/docs/manual/nlfilt2.html>+nlfilt2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+nlfilt2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "nlfilt2" [(Ar,[Ar,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]++-- | +-- Implementation of Zoelzer's parametric equalizer filters.+--+-- Implementation of Zoelzer's parametric equalizer filters, with some modifications by the author.+--+-- > ares  pareq  asig, kc, kv, kq [, imode] [, iskip]+--+-- csound doc: <https://csound.com/docs/manual/pareq.html>+pareq ::  Sig -> Sig -> Sig -> Sig -> Sig+pareq b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "pareq" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Parametric equalizer and filter opcode with 7 filter types, based+--       on algorithm by Robert Bristow-Johnson.+--+-- Parametric equalizer and filter opcode with 7 filter types,+--     	based on algorithm by Robert Bristow-Johnson.+--+-- > ar  rbjeq  asig, kfco, klvl, kQ, kS[, imode]+--+-- csound doc: <https://csound.com/docs/manual/rbjeq.html>+rbjeq ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig+rbjeq b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "rbjeq" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Performs filtering using a transposed form-II digital filter lattice with radial pole-shearing and angular pole-warping.+--+-- General purpose custom filter with time-varying pole control. The filter coefficients implement the following difference equation:+--+-- > ares  zfilter2  asig, kdamp, kfreq, iM, iN, ib0, ib1, ..., ibM, \+-- >           ia1,ia2, ..., iaN+--+-- csound doc: <https://csound.com/docs/manual/zfilter2.html>+zfilter2 ::  Sig -> Sig -> Sig -> D -> D -> [D] -> Sig+zfilter2 b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> mapM unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "zfilter2" [(Ar,[Ar,Kr,Kr] ++ (repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)++-- Waveguides.++-- | +-- A simple waveguide model consisting of one delay-line and one first-order lowpass filter.+--+-- > ares  wguide1  asig, xfreq, kcutoff, kfeedback+--+-- csound doc: <https://csound.com/docs/manual/wguide1.html>+wguide1 ::  Sig -> Sig -> Sig -> Sig -> Sig+wguide1 b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "wguide1" [(Ar,[Ar,Xr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- A model of beaten plate consisting of two parallel delay-lines and two first-order lowpass filters.+--+-- > ares  wguide2  asig, xfreq1, xfreq2, kcutoff1, kcutoff2, \+-- >           kfeedback1, kfeedback2+--+-- csound doc: <https://csound.com/docs/manual/wguide2.html>+wguide2 ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+wguide2 b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "wguide2" [(Ar,[Ar,Xr,Xr,Kr,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6,a7]++-- Waveshaping.++-- | +-- Efficiently evaluates the sum of Chebyshev polynomials of arbitrary order.+--+-- The chebyshevpoly opcode calculates the value of a polynomial expression with a single a-rate input variable that is made up of a linear combination of the first N Chebyshev polynomials of the first kind.  Each Chebyshev polynomial, Tn(x), is weighted by a k-rate coefficient, kn, so that the opcode is calculating a sum of any number of terms in the form kn*Tn(x).  Thus, the chebyshevpoly opcode allows for the waveshaping of an audio signal with a dynamic transfer function that gives precise control over the harmonic content of the output.+--+-- > aout  chebyshevpoly  ain, k0 [, k1 [, k2 [...]]]+--+-- csound doc: <https://csound.com/docs/manual/chebyshevpoly.html>+chebyshevpoly ::  Sig -> [Sig] -> Sig+chebyshevpoly b1 b2 =+  Sig $ f <$> unSig b1 <*> mapM unSig b2+  where+    f a1 a2 = opcs "chebyshevpoly" [(Ar,[Ar] ++ (repeat Kr))] ([a1] ++ a2)++-- | +-- Performs linear clipping on an audio signal or a phasor.+--+-- The pdclip opcode allows a percentage of the input range of a signal to be clipped to fullscale. It is similar to simply multiplying the signal and limiting the range of the result, but pdclip allows you to think about how much of the signal range is being distorted instead of the scalar factor and has a offset parameter for assymetric clipping of the signal range. pdclip is also useful for remapping phasors for phase distortion synthesis.+--+-- > aout  pdclip  ain, kWidth, kCenter [, ibipolar [, ifullscale]]+--+-- csound doc: <https://csound.com/docs/manual/pdclip.html>+pdclip ::  Sig -> Sig -> Sig -> Sig+pdclip b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pdclip" [(Ar,[Ar,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Distorts a phasor for reading the two halves of a table at different rates.+--+-- The pdhalf opcode is designed to emulate the "classic" phase distortion synthesis method of the Casio CZ-series of synthesizers from the mid-1980's.  This technique reads the first and second halves of a function table at different rates in order to warp the waveform.  For example, pdhalf can smoothly transform a sine wave into something approximating the shape of a saw wave.+--+-- > aout  pdhalf  ain, kShapeAmount [, ibipolar [, ifullscale]]+--+-- csound doc: <https://csound.com/docs/manual/pdhalf.html>+pdhalf ::  Sig -> Sig -> Sig+pdhalf b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "pdhalf" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]++-- | +-- Distorts a phasor for reading two unequal portions of a table in equal periods.+--+-- The pdhalfy opcode is a variation on the phase distortion synthesis method of the pdhalf opcode.  It is useful for distorting a phasor in order to read two unequal portions of a table in the same number of samples.+--+-- > aout  pdhalfy  ain, kShapeAmount [, ibipolar [, ifullscale]]+--+-- csound doc: <https://csound.com/docs/manual/pdhalfy.html>+pdhalfy ::  Sig -> Sig -> Sig+pdhalfy b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "pdhalfy" [(Ar,[Ar,Kr,Ir,Ir])] [a1,a2]++-- | +-- Waveshapes a signal by raising it to a variable exponent.+--+-- The powershape opcode raises an input signal to a power with pre- and post-scaling of the signal so that the output will be in a predictable range.  It also processes negative inputs in a symmetrical way to positive inputs, calculating a dynamic transfer function that is useful for waveshaping.+--+-- > aout  powershape  ain, kShapeAmount [, ifullscale]+--+-- csound doc: <https://csound.com/docs/manual/powershape.html>+powershape ::  Sig -> Sig -> Sig+powershape b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "powershape" [(Ar,[Ar,Kr,Ir])] [a1,a2]++-- Comparators and Accumulators.++-- | +-- Compares two audio signals+--+-- Compares two audio signals using the standard math operators+--+-- > aout  cmp  a1, S_operator, a2+-- > aout  cmp  a1, S_operator, kb+-- > kOut[]  cmp  kA[], S_operator, kb+-- > kOut[]  cmp  kA[], S_operator, kB[]+-- > kOut[]  cmp  k1, S_operator1, kIn[], S_operator2, k2+--+-- csound doc: <https://csound.com/docs/manual/cmp.html>+cmp ::  Sig -> Str -> Sig -> Sig+cmp b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unStr b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "cmp" [(Ar,[Ar,Sr,Ar])+                            ,(Ar,[Ar,Sr,Kr])+                            ,(Kr,[Kr,Sr,Kr])+                            ,(Kr,[Kr,Sr,Kr])+                            ,(Kr,[Kr,Sr,Kr,Sr,Kr])] [a1,a2,a3]++-- | +-- Produces a signal that is the maximum of any number of input signals.+--+-- The max opcode takes any number of a-rate,+--       k-rate or i-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs.  For a-rate signals, the inputs are compared one sample at a time (i.e. max does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).+--+-- > amax  max  ain1, ain2 [, ain3] [, ain4] [...]+-- > kmax  max  kin1, kin2 [, kin3] [, kin4] [...]+-- > imax  max  iin1, iin2 [, iin3] [, iin4] [...]+--+-- csound doc: <https://csound.com/docs/manual/max.html>+max' ::  [Sig] -> Sig+max' b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "max" [(Ar,(repeat Ar)),(Kr,(repeat Kr)),(Ir,(repeat Ir))] a1++-- | +-- Local maximum (or minimum) value of an incoming asig signal+--+-- max_k outputs the local maximum (or minimum) value of  the incoming asig signal, checked in the time interval between ktrig has become true twice.+--+-- > knumkout  max_k  asig, ktrig, itype+--+-- csound doc: <https://csound.com/docs/manual/max_k.html>+max_k ::  Sig -> Sig -> D -> Sig+max_k b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "max_k" [(Kr,[Ar,Kr,Ir])] [a1,a2,a3]++-- | +-- Produces a signal that is the maximum of the absolute values of any number of input signals.+--+-- The maxabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the maximum of all of the inputs.  It is identical to the max opcode except that it takes the absolute value of each input before comparing them.  Therefore, the output is always non-negative.  For a-rate signals, the inputs are compared one sample at a time (i.e. maxabs does not scan an entire ksmps period of a signal for its local maximum as the max_k opcode does).+--+-- > amax  maxabs  ain1, ain2 [, ain3] [, ain4] [...]+-- > kmax  maxabs  kin1, kin2 [, kin3] [, kin4] [...]+--+-- csound doc: <https://csound.com/docs/manual/maxabs.html>+maxabs ::  [Sig] -> Sig+maxabs b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "maxabs" [(Ar,(repeat Ar)),(Kr,(repeat Kr))] a1++-- | +-- Accumulates the maximum of the absolute values of audio signals.+--+-- maxabsaccum compares two audio-rate variables and stores the maximum of their absolute values into the first.+--+-- >  maxabsaccum  aAccumulator, aInput+--+-- csound doc: <https://csound.com/docs/manual/maxabsaccum.html>+maxabsaccum ::  Sig -> Sig -> SE ()+maxabsaccum b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "maxabsaccum" [(Xr,[Ar,Ar])] [a1,a2]++-- | +-- Accumulates the maximum value of audio signals.+--+-- maxaccum compares two audio-rate variables and stores the maximum value between them into the first.+--+-- >  maxaccum  aAccumulator, aInput+--+-- csound doc: <https://csound.com/docs/manual/maxaccum.html>+maxaccum ::  Sig -> Sig -> SE ()+maxaccum b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "maxaccum" [(Xr,[Ar,Ar])] [a1,a2]++-- | +-- Produces a signal that is the minimum of any number of input signals.+--+-- The min opcode takes any number of a-rate,+--       k-rate or i-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs.  For a-rate signals, the inputs are compared one sample at a time (i.e. min does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).+--+-- > amin  min  ain1, ain2 [, ain3] [, ain4] [...]+-- > kmin  min  kin1, kin2 [, kin3] [, kin4] [...]+-- > imin  min  iin1, iin2 [, iin3] [, iin4] [...]+--+-- csound doc: <https://csound.com/docs/manual/min.html>+min' ::  [Sig] -> Sig+min' b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "min" [(Ar,(repeat Ar)),(Kr,(repeat Kr)),(Ir,(repeat Ir))] a1++-- | +-- Produces a signal that is the minimum of the absolute values of any number of input signals.+--+-- The minabs opcode takes any number of a-rate or k-rate signals as input (all of the same rate), and outputs a signal at the same rate that is the minimum of all of the inputs.  It is identical to the min opcode except that it takes the absolute value of each input before comparing them.  Therefore, the output is always non-negative.    For a-rate signals, the inputs are compared one sample at a time (i.e. minabs does not scan an entire ksmps period of a signal for its local minimum as the max_k opcode does).+--+-- > amin  minabs  ain1, ain2 [, ain3] [, ain4] [...]+-- > kmin  minabs  kin1, kin2 [, kin3] [, kin4] [...]+--+-- csound doc: <https://csound.com/docs/manual/minabs.html>+minabs ::  [Sig] -> Sig+minabs b1 =+  Sig $ f <$> mapM unSig b1+  where+    f a1 = opcs "minabs" [(Ar,(repeat Ar)),(Kr,(repeat Kr))] a1++-- | +-- Accumulates the minimum of the absolute values of audio signals.+--+-- minabsaccum compares two audio-rate variables and stores the minimum of their absolute values into the first.+--+-- >  minabsaccum  aAccumulator, aInput+--+-- csound doc: <https://csound.com/docs/manual/minabsaccum.html>+minabsaccum ::  Sig -> Sig -> SE ()+minabsaccum b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "minabsaccum" [(Xr,[Ar,Ar])] [a1,a2]++-- | +-- Accumulates the minimum value of audio signals.+--+-- minaccum compares two audio-rate variables and stores the minimum value between them into the first.+--+-- >  minaccum  aAccumulator, aInput+--+-- csound doc: <https://csound.com/docs/manual/minaccum.html>+minaccum ::  Sig -> Sig -> SE ()+minaccum b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "minaccum" [(Xr,[Ar,Ar])] [a1,a2]
src/Csound/Typed/Opcode/SpectralProcessing.hs view
@@ -5,1439 +5,1756 @@     ktableseg, pvadd, pvbufread, pvcross, pvinterp, pvoc, pvread, tableseg, tablexseg, vpvoc,          -- * LPC.-    lpfreson, lpinterp, lpread, lpreson, lpslot,-    -    -- * Non-Standard.-    specaddm, specdiff, specdisp, specfilt, spechist, specptrk, specscal, specsum, spectrum,-    -    -- * Streaming.-    binit, cudanal, cudasliding, cudasynth, partials, pvsadsyn, pvsanal, pvsarp, pvsbandp, pvsbandr, pvsbin, pvsblur, pvsbuffer, pvsbufread, pvsbufread2, pvscale, pvscent, pvsceps, pvscross, pvsdemix, pvsdiskin, pvsdisp, pvsfilter, pvsfread, pvsfreeze, pvsftr, pvsftw, pvsfwrite, pvsgain, pvshift, pvsifd, pvsin, pvsinfo, pvsinit, pvslock, pvsmaska, pvsmix, pvsmooth, pvsmorph, pvsosc, pvsout, pvspitch, pvstanal, pvstencil, pvstrace, pvsvoc, pvswarp, pvsynth, resyn, sinsyn, tabifd, tradsyn, trcross, trfilter, trhighest, trlowest, trmix, trscale, trshift, trsplit,-    -    -- * ATS.-    atsAdd, atsAddnz, atsBufread, atsCross, atsInfo, atsInterpread, atsPartialtap, atsRead, atsReadnz, atsSinnoi,-    -    -- * Loris.-    lorismorph, lorisplay, lorisread,-    -    -- * Other.-    centroid, filescal, mincer, mp3scal, paulstretch, temposcal) where--import Control.Monad.Trans.Class-import Csound.Dynamic-import Csound.Typed---- STFT.---- | --- Deprecated.------ Deprecated. Use the tableseg opcode instead.------ >  ktableseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]------ csound doc: <http://csound.com/docs/manual/ktableseg.html>-ktableseg ::  Tab -> D -> Tab -> SE ()-ktableseg b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "ktableseg" [(Xr,(repeat Ir))] [a1,a2,a3]---- | --- Reads from a pvoc file and uses the data to perform additive synthesis.------ pvadd reads from a pvoc file and uses the data to perform additive synthesis using an internal array of interpolating oscillators. The user supplies the wave table (usually one period of a sine wave), and can choose which analysis bins will be used in the re-synthesis.------ > ares  pvadd  ktimpnt, kfmod, ifilcod, ifn, ibins [, ibinoffset] \--- >           [, ibinincr] [, iextractmode] [, ifreqlim] [, igatefn]------ csound doc: <http://csound.com/docs/manual/pvadd.html>-pvadd ::  Sig -> Sig -> Str -> Tab -> D -> Sig-pvadd b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unTab b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "pvadd" [(Ar,[Kr,Kr,Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Reads from a phase vocoder analysis file and makes the retrieved data available.------ pvbufread reads from a pvoc file and makes the retrieved data available to any following pvinterp and pvcross units that appear in an instrument before a subsequent pvbufread (just as lpread and lpreson work together). The data is passed internally and the unit has no output of its own.------ >  pvbufread  ktimpnt, ifile------ csound doc: <http://csound.com/docs/manual/pvbufread.html>-pvbufread ::  Sig -> Str -> SE ()-pvbufread b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = opcs "pvbufread" [(Xr,[Kr,Sr])] [a1,a2]---- | --- Applies the amplitudes from one phase vocoder analysis file to the data from a second file.------ pvcross applies the amplitudes from one phase vocoder analysis file to the data from a second file and then performs the resynthesis. The data is passed, as described above, from a previously called pvbufread unit. The two k-rate amplitude arguments are used to scale the amplitudes of each files separately before they are added together and used in the resynthesis (see below for further explanation). The frequencies of the first file are not used at all in this process. This unit simply allows for cross-synthesis through the application of the amplitudes of the spectra of one signal to the frequencies of a second signal. Unlike pvinterp, pvcross does allow for the use of the ispecwp as in pvoc and vpvoc.------ > ares  pvcross  ktimpnt, kfmod, ifile, kampscale1, kampscale2 [, ispecwp]------ csound doc: <http://csound.com/docs/manual/pvcross.html>-pvcross ::  Sig -> Sig -> Str -> Sig -> Sig -> Sig-pvcross b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "pvcross" [(Ar,[Kr,Kr,Sr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Interpolates between the amplitudes and frequencies of two phase vocoder analysis files.------ pvinterp interpolates between the amplitudes and frequencies, on a bin by bin basis, of two phase vocoder analysis files (one from a previously called pvbufread unit and the other from within its own argument list), allowing for user defined transitions between analyzed sounds. It also allows for general scaling of the amplitudes and frequencies of each file separately before the interpolated values are calculated and sent to the resynthesis routines. The kfmod argument in pvinterp performs its frequency scaling on the frequency values after their derivation from the separate scaling and subsequent interpolation is performed so that this acts as an overall scaling value of the new frequency components.------ > ares  pvinterp  ktimpnt, kfmod, ifile, kfreqscale1, kfreqscale2, \--- >           kampscale1, kampscale2, kfreqinterp, kampinterp------ csound doc: <http://csound.com/docs/manual/pvinterp.html>-pvinterp ::  Sig -> Sig -> Str -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig-pvinterp b1 b2 b3 b4 b5 b6 b7 b8 b9 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9-    where f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "pvinterp" [(Ar,[Kr,Kr,Sr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1-                                                                                             ,a2-                                                                                             ,a3-                                                                                             ,a4-                                                                                             ,a5-                                                                                             ,a6-                                                                                             ,a7-                                                                                             ,a8-                                                                                             ,a9]---- | --- Implements signal reconstruction using an fft-based phase vocoder.------ > ares  pvoc  ktimpnt, kfmod, ifilcod [, ispecwp] [, iextractmode] \--- >           [, ifreqlim] [, igatefn]------ csound doc: <http://csound.com/docs/manual/pvoc.html>-pvoc ::  Sig -> Sig -> Str -> Sig-pvoc b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3-    where f a1 a2 a3 = opcs "pvoc" [(Ar,[Kr,Kr,Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Reads from a phase vocoder analysis file and returns the frequency and amplitude from a single analysis channel or bin.------ pvread reads from a pvoc file and returns the frequency and amplitude from a single analysis channel or bin. The returned values can be used anywhere else in the Csound instrument. For example, one can use them as arguments to an oscillator to synthesize a single component from an analyzed signal or a bank of pvreads can be used to resynthesize the analyzed sound using additive synthesis by passing the frequency and magnitude values to a bank of oscillators.------ > kfreq, kamp  pvread  ktimpnt, ifile, ibin------ csound doc: <http://csound.com/docs/manual/pvread.html>-pvread ::  Sig -> Str -> D -> (Sig,Sig)-pvread b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unStr b2 <*> unD b3-    where f a1 a2 a3 = mopcs "pvread" ([Kr,Kr],[Kr,Sr,Ir]) [a1,a2,a3]---- | --- Creates a new function table by making linear segments between values in stored function tables.------ tableseg is like linseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tableseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.------ >  tableseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]------ csound doc: <http://csound.com/docs/manual/tableseg.html>-tableseg ::  Tab -> D -> Tab -> SE ()-tableseg b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "tableseg" [(Xr,(repeat Ir))] [a1,a2,a3]---- | --- Creates a new function table by making exponential segments between values in stored function tables.------ tablexseg is like expseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tablexseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.------ >  tablexseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]------ csound doc: <http://csound.com/docs/manual/tablexseg.html>-tablexseg ::  Tab -> D -> Tab -> SE ()-tablexseg b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unTab b3-    where f a1 a2 a3 = opcs "tablexseg" [(Xr,(repeat Ir))] [a1,a2,a3]---- | --- Implements signal reconstruction using an fft-based phase vocoder and an extra envelope.------ > ares  vpvoc  ktimpnt, kfmod, ifile [, ispecwp] [, ifn]------ csound doc: <http://csound.com/docs/manual/vpvoc.html>-vpvoc ::  Sig -> Sig -> Str -> Sig-vpvoc b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3-    where f a1 a2 a3 = opcs "vpvoc" [(Ar,[Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3]---- LPC.---- | --- Resynthesises a signal from the data passed internally by a previous lpread, applying formant shifting.------ > ares  lpfreson  asig, kfrqratio------ csound doc: <http://csound.com/docs/manual/lpfreson.html>-lpfreson ::  Sig -> Sig -> Sig-lpfreson b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "lpfreson" [(Ar,[Ar,Kr])] [a1,a2]---- | --- Computes a new set of poles from the interpolation between two analysis.------ >  lpinterp  islot1, islot2, kmix------ csound doc: <http://csound.com/docs/manual/lpinterp.html>-lpinterp ::  D -> D -> Sig -> SE ()-lpinterp b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unSig b3-    where f a1 a2 a3 = opcs "lpinterp" [(Xr,[Ir,Ir,Kr])] [a1,a2,a3]---- | --- Reads a control file of time-ordered information frames.------ > krmsr, krmso, kerr, kcps  lpread  ktimpnt, ifilcod [, inpoles] [, ifrmrate]------ csound doc: <http://csound.com/docs/manual/lpread.html>-lpread ::  Sig -> Str -> (Sig,Sig,Sig,Sig)-lpread b1 b2 = pureTuple $ f <$> unSig b1 <*> unStr b2-    where f a1 a2 = mopcs "lpread" ([Kr,Kr,Kr,Kr],[Kr,Sr,Ir,Ir]) [a1,a2]---- | --- Resynthesises a signal from the data passed internally by a previous lpread.------ > ares  lpreson  asig------ csound doc: <http://csound.com/docs/manual/lpreson.html>-lpreson ::  Sig -> Sig-lpreson b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "lpreson" [(Ar,[Ar])] [a1]---- | --- Selects the slot to be use by further lp opcodes.------ >  lpslot  islot------ csound doc: <http://csound.com/docs/manual/lpslot.html>-lpslot ::  D -> SE ()-lpslot b1 = SE $ (depT_ =<<) $ lift $ f <$> unD b1-    where f a1 = opcs "lpslot" [(Xr,[Ir])] [a1]---- Non-Standard.---- | --- Perform a weighted add of two input spectra.------ > wsig  specaddm  wsig1, wsig2 [, imul2]------ csound doc: <http://csound.com/docs/manual/specaddm.html>-specaddm ::  Wspec -> Wspec -> Wspec-specaddm b1 b2 = Wspec $ f <$> unWspec b1 <*> unWspec b2-    where f a1 a2 = opcs "specaddm" [(Wr,[Wr,Wr,Ir])] [a1,a2]---- | --- Finds the positive difference values between consecutive spectral frames.------ > wsig  specdiff  wsigin------ csound doc: <http://csound.com/docs/manual/specdiff.html>-specdiff ::  Wspec -> Wspec-specdiff b1 = Wspec $ f <$> unWspec b1-    where f a1 = opcs "specdiff" [(Wr,[Wr])] [a1]---- | --- Displays the magnitude values of the spectrum.------ >  specdisp  wsig, iprd [, iwtflg]------ csound doc: <http://csound.com/docs/manual/specdisp.html>-specdisp ::  Wspec -> D -> SE ()-specdisp b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unWspec b1 <*> unD b2-    where f a1 a2 = opcs "specdisp" [(Xr,[Wr,Ir,Ir])] [a1,a2]---- | --- Filters each channel of an input spectrum.------ > wsig  specfilt  wsigin, ifhtim------ csound doc: <http://csound.com/docs/manual/specfilt.html>-specfilt ::  Wspec -> D -> Wspec-specfilt b1 b2 = Wspec $ f <$> unWspec b1 <*> unD b2-    where f a1 a2 = opcs "specfilt" [(Wr,[Wr,Ir])] [a1,a2]---- | --- Accumulates the values of successive spectral frames.------ > wsig  spechist  wsigin------ csound doc: <http://csound.com/docs/manual/spechist.html>-spechist ::  Wspec -> Wspec-spechist b1 = Wspec $ f <$> unWspec b1-    where f a1 = opcs "spechist" [(Wr,[Wr])] [a1]---- | --- Estimates the pitch of the most prominent complex tone in the spectrum.------ Estimate the pitch of the most prominent complex tone in the spectrum.------ > koct, kamp  specptrk  wsig, kvar, ilo, ihi, istr, idbthresh, inptls, \--- >           irolloff [, iodd] [, iconfs] [, interp] [, ifprd] [, iwtflg]------ csound doc: <http://csound.com/docs/manual/specptrk.html>-specptrk ::  Wspec -> Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig)-specptrk b1 b2 b3 b4 b5 b6 b7 b8 = pureTuple $ f <$> unWspec b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8-    where f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "specptrk" ([Kr,Kr]-                                                       ,[Wr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]---- | --- Scales an input spectral datablock with spectral envelopes.------ > wsig  specscal  wsigin, ifscale, ifthresh------ csound doc: <http://csound.com/docs/manual/specscal.html>-specscal ::  Wspec -> D -> D -> Wspec-specscal b1 b2 b3 = Wspec $ f <$> unWspec b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "specscal" [(Wr,[Wr,Ir,Ir])] [a1,a2,a3]---- | --- Sums the magnitudes across all channels of the spectrum.------ > ksum  specsum  wsig [, interp]------ csound doc: <http://csound.com/docs/manual/specsum.html>-specsum ::  Wspec -> Sig-specsum b1 = Sig $ f <$> unWspec b1-    where f a1 = opcs "specsum" [(Kr,[Wr,Ir])] [a1]---- | --- Generate a constant-Q, exponentially-spaced DFT.------ Generate a constant-Q, exponentially-spaced DFT across all octaves of a multiply-downsampled control or audio input signal.------ > wsig  spectrum  xsig, iprd, iocts, ifrqa [, iq] [, ihann] [, idbout] \--- >           [, idsprd] [, idsinrs]------ csound doc: <http://csound.com/docs/manual/spectrum.html>-spectrum ::  Sig -> D -> D -> D -> Wspec-spectrum b1 b2 b3 b4 = Wspec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "spectrum" [(Wr,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- Streaming.---- | --- PVS tracks to amplitude+frequency conversion.------ The binit opcode takes an input containg a TRACKS pv streaming signal (as generated,---   for instance by partials) and converts it into a equal-bandwidth bin-frame containing amplitude---   and frequency pairs (PVS_AMP_FREQ), suitable for overlap-add resynthesis (such as performed by ---   pvsynth) or further PVS streaming phase vocoder signal transformations. For each frequency bin,---   it will look for a suitable track signal to fill it; if not found, the bin will be empty (0 amplitude).---   If more than one track fits a certain bin, the one with highest amplitude will be chosen. This---   means that not all of the input signal is actually 'binned', the operation is lossy. However, in---   many situations this loss is not perceptually relevant.------ > fsig  binit  fin, isize------ csound doc: <http://csound.com/docs/manual/binit.html>-binit ::  Spec -> D -> Spec-binit b1 b2 = Spec $ f <$> unSpec b1 <*> unD b2-    where f a1 a2 = opcs "binit" [(Fr,[Fr,Ir])] [a1,a2]---- | --- Generate an fsig from a mono audio source ain, using phase---       vocoder overlap-add analysis and GPU hardware. Experimental and---       only available as source code at the moment.------ Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis and GPU hardware.------ > fsig  cudanal  ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit]------ csound doc: <http://csound.com/docs/manual/cudanal.html>-cudanal ::  Sig -> D -> D -> D -> D -> Spec-cudanal b1 b2 b3 b4 b5 = Spec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "cudanal" [(Fr,[Ar,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Perform sliding phase vocoder algorithm with simplified---       transformational FM using GPU hardware. Experimental and---       only available as source code at the moment.------ Perform sliding phase vocoder algorithm with simplified---       transformational FM using GPU hardware.------ > asig  cudasliding  ain, amod, iwinsize------ csound doc: <http://csound.com/docs/manual/cudasliding.html>-cudasliding ::  Sig -> Sig -> D -> Sig-cudasliding b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "cudasliding" [(Ar,[Ar,Ar,Ir])] [a1,a2,a3]---- | --- Synthesis by additive synthesis and inverse FFT. Experimental and---       only available as source code at the moment.------ Synthesis by additive synthesis and inverse FFT.------ > asig  cudasynth  kamp, kfreq, itab, iftab, iatab[, inum]--- > asig  cudasynth  fsig, kamp, kfreq[, inum]--- > asig  cudasynth  fsig------ csound doc: <http://csound.com/docs/manual/cudasynth.html>-cudasynth ::  Sig -> Sig -> Tab -> D -> D -> Sig-cudasynth b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "cudasynth" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir])-                                              ,(Ar,[Fr,Kr,Kr,Ir])-                                              ,(Ar,[Fr])] [a1,a2,a3,a4,a5]---- | --- Partial track spectral analysis.------ The partials opcode takes two input PV streaming signals containg AMP_FREQ and AMP_PHASE signals (as generated---   for instance by pvsifd or in the first case, by pvsanal) and performs partial track analysis,---   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial---   Tracking", Proc.of ICMC05, Barcelona. It generates a TRACKS PV streaming signal, containing amplitude, frequency, ---   phase and track ID for each output track. This type of signal will contain a variable number of output tracks,---   up to the total number of analysis bins contained in the inputs (fftsize/2 + 1 bins). The second input (AMP_PHASE) ---   is optional, as it can take the same signal as the first input. In this case, however, all phase information will ---   be NULL and resynthesis using phase information cannot be performed.------ > ftrks  partials  ffr, fphs, kthresh, kminpts, kmaxgap, imaxtracks------ csound doc: <http://csound.com/docs/manual/partials.html>-partials ::  Spec -> Spec -> Sig -> Sig -> Sig -> D -> Spec-partials b1 b2 b3 b4 b5 b6 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "partials" [(Fr,[Fr,Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]---- | --- Resynthesize using a fast oscillator-bank.------ > ares  pvsadsyn  fsrc, inoscs, kfmod [, ibinoffset] [, ibinincr] [, iinit]------ csound doc: <http://csound.com/docs/manual/pvsadsyn.html>-pvsadsyn ::  Spec -> D -> Sig -> Sig-pvsadsyn b1 b2 b3 = Sig $ f <$> unSpec b1 <*> unD b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsadsyn" [(Ar,[Fr,Ir,Kr,Ir,Ir,Ir])] [a1,a2,a3]---- | --- Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis.------ > fsig  pvsanal  ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit]------ csound doc: <http://csound.com/docs/manual/pvsanal.html>-pvsanal ::  Sig -> D -> D -> D -> D -> Spec-pvsanal b1 b2 b3 b4 b5 = Spec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "pvsanal" [(Fr,[Ar,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Arpeggiate the spectral components of a streaming pv signal.------ This opcode arpeggiates spectral components, by amplifying one bin and attenuating---     all the others around it. Used with an LFO it will provide a spectral arpeggiator similar to Trevor Wishart's---     CDP program specarp.------ > fsig  pvsarp  fsigin, kbin, kdepth, kgain------ csound doc: <http://csound.com/docs/manual/pvsarp.html>-pvsarp ::  Spec -> Sig -> Sig -> Sig -> Spec-pvsarp b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "pvsarp" [(Fr,[Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- A band pass filter working in the spectral domain.------ Filter the pvoc frames, passing bins whose frequency is within a---       band, and with linear interpolation for transitional bands.------ > fsig  pvsbandp  fsigin, xlowcut, xlowfull, \--- >           xhighfull, xhighcut[, ktype]------ csound doc: <http://csound.com/docs/manual/pvsbandp.html>-pvsbandp ::  Spec -> Sig -> Sig -> Sig -> Sig -> Spec-pvsbandp b1 b2 b3 b4 b5 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "pvsbandp" [(Fr,[Fr,Xr,Xr,Xr,Xr,Kr])] [a1,a2,a3,a4,a5]---- | --- A band reject filter working in the spectral domain.------ Filter the pvoc frames, rejecting bins whose frequency is within a---       band, and with linear interpolation for transitional bands.------ > fsig  pvsbandr  fsigin, xlowcut, xlowfull, \--- >           xhighfull, xhighcut[, ktype]------ csound doc: <http://csound.com/docs/manual/pvsbandr.html>-pvsbandr ::  Spec -> Sig -> Sig -> Sig -> Sig -> Spec-pvsbandr b1 b2 b3 b4 b5 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "pvsbandr" [(Fr,[Fr,Xr,Xr,Xr,Xr,Kr])] [a1,a2,a3,a4,a5]---- | --- Obtain the amp and freq values off a PVS signal bin.------ Obtain the amp and freq values off a PVS signal bin as k-rate variables.------ > kamp, kfr  pvsbin  fsig, kbin------ csound doc: <http://csound.com/docs/manual/pvsbin.html>-pvsbin ::  Spec -> Sig -> (Sig,Sig)-pvsbin b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = mopcs "pvsbin" ([Kr,Kr],[Fr,Kr]) [a1,a2]---- | --- Average the amp/freq time functions of each analysis channel for---     a specified time.------ Average the amp/freq time functions of each analysis channel for---     a specified time (truncated to number of frames). As a side-effect---     the input pvoc stream will be delayed by that amount.------ > fsig  pvsblur  fsigin, kblurtime, imaxdel------ csound doc: <http://csound.com/docs/manual/pvsblur.html>-pvsblur ::  Spec -> Sig -> D -> Spec-pvsblur b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "pvsblur" [(Fr,[Fr,Kr,Ir])] [a1,a2,a3]---- | --- This opcode creates and writes to a circular buffer for f-signals (streaming PV signals).------ This opcode sets up and writes to a circular buffer of length ilen (secs),---         giving a handle for the buffer and a time pointer, which holds the---         current write position (also in seconds). It can be used with one or ---         more pvsbufread opcodes. Writing is circular, wrapping around at the---         end of the buffer.------ > ihandle, ktime   pvsbuffer  fsig, ilen ------ csound doc: <http://csound.com/docs/manual/pvsbuffer.html>-pvsbuffer ::  Spec -> D -> (D,Sig)-pvsbuffer b1 b2 = pureTuple $ f <$> unSpec b1 <*> unD b2-    where f a1 a2 = mopcs "pvsbuffer" ([Ir,Kr],[Fr,Ir]) [a1,a2]---- | --- This opcode reads a circular buffer of f-signals (streaming PV signals).------ This opcode reads from a circular buffer of length ilen (secs),---       taking a handle for the buffer and a time pointer, which holds the---       current read position (also in seconds). It is used in conjunction with a---       pvsbuffer opocde. ---       Reading is circular, wrapping around at the end of the buffer.------ > fsig  pvsbufread   ktime, khandle[, ilo, ihi, iclear] ------ csound doc: <http://csound.com/docs/manual/pvsbufread.html>-pvsbufread ::  Sig -> Sig -> Spec-pvsbufread b1 b2 = Spec $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "pvsbufread" [(Fr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]---- | --- This opcode reads a circular buffer of f-signals (streaming PV signals), with binwise additional delays.------ This opcode reads from a circular buffer of length ilen (secs),---       taking a handle for the buffer and a time pointer, which holds the---       current read position (also in seconds). It is used in conjunction with a pvsbuffer opocde. ---       Reading is circular, wrapping around at the end of the buffer. Extra delay times are taken from---       a function table, with each point on it defining a delay time in seconds affecting the corresponding bin.------ > fsig  pvsbufread2   ktime, khandle, ift1, ift2 ------ csound doc: <http://csound.com/docs/manual/pvsbufread2.html>-pvsbufread2 ::  Sig -> Sig -> D -> D -> Spec-pvsbufread2 b1 b2 b3 b4 = Spec $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "pvsbufread2" [(Fr,[Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]---- | --- Scale the frequency components of a pv stream.------ Scale the frequency components of a pv stream, resulting---       in pitch shift. Output amplitudes can be optionally modified in order---       to attempt formant preservation.------ > fsig  pvscale  fsigin, kscal[, kkeepform, kgain, kcoefs]------ csound doc: <http://csound.com/docs/manual/pvscale.html>-pvscale ::  Spec -> Sig -> Spec-pvscale b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "pvscale" [(Fr,[Fr,Kr,Kr,Kr,Kr])] [a1,a2]---- | --- Calculate the spectral centroid of a signal.------ Calculate the spectral centroid of a signal from its discrete Fourier transform.------ > kcent  pvscent  fsig------ csound doc: <http://csound.com/docs/manual/pvscent.html>-pvscent ::  Spec -> Sig-pvscent b1 = Sig $ f <$> unSpec b1-    where f a1 = opcs "pvscent" [(Kr,[Fr])] [a1]---- | --- Calculate the cepstrum of a pvs input, optionally liftering coefficients.---------- > keps[]  pvsceps  fsig[, icoefs]------ csound doc: <http://csound.com/docs/manual/pvsceps.html>-pvsceps ::  Spec -> Sig-pvsceps b1 = Sig $ f <$> unSpec b1-    where f a1 = opcs "pvsceps" [(Kr,[Fr,Ir])] [a1]---- | --- Performs cross-synthesis between two source fsigs.------ > fsig  pvscross  fsrc, fdest, kamp1, kamp2------ csound doc: <http://csound.com/docs/manual/pvscross.html>-pvscross ::  Spec -> Spec -> Sig -> Sig -> Spec-pvscross b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "pvscross" [(Fr,[Fr,Fr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Spectral azimuth-based de-mixing of stereo sources.------ Spectral azimuth-based de-mixing of stereo sources, with a reverse-panning result. This---       opcode implements the Azimuth Discrimination and Resynthesis (ADRess) algorithm, developed by---       Dan Barry (Barry et Al. "Sound Source Separation Azimuth Discrimination and Resynthesis". DAFx'04, ---       Univ. of Napoli). The source separation, or de-mixing, is controlled by two parameters: an azimuth---       position (kpos) and a subspace width (kwidth). The first one is used to locate the spectral peaks of ---       individual sources on a stereo mix, whereas the second widens the 'search space', including/exclufing ---       the peaks around kpos. These two parameters can be used interactively to extract source sounds from---       a stereo mix. The algorithm is particularly successful with studio recordings where individual instruments---       occupy individual panning positions; it is, in fact, a reverse-panning algorithm.------ > fsig  pvsdemix  fleft, fright, kpos, kwidth, ipoints------ csound doc: <http://csound.com/docs/manual/pvsdemix.html>-pvsdemix ::  Spec -> Spec -> Sig -> Sig -> D -> Spec-pvsdemix b1 b2 b3 b4 b5 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "pvsdemix" [(Fr,[Fr,Fr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Read a selected channel from a PVOC-EX analysis file.------ Create an fsig stream by reading a selected channel from a PVOC-EX analysis file, with frame interpolation.------ > fsig  pvsdiskin  SFname,ktscal,kgain[,ioffset, ichan]------ csound doc: <http://csound.com/docs/manual/pvsdiskin.html>-pvsdiskin ::  Str -> Sig -> Sig -> Spec-pvsdiskin b1 b2 b3 = Spec $ f <$> unStr b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsdiskin" [(Fr,[Sr,Kr,Kr,Ir,Ir])] [a1,a2,a3]---- | --- Displays a PVS signal as an amplitude vs. freq graph.------ This opcode will display a PVS signal fsig. Uses X11 or  FLTK windows if enabled, else --- 	  (or if -g flag is set) --- 	  displays are approximated in ASCII characters.------ >  pvsdisp  fsig[, ibins, iwtflg] ------ csound doc: <http://csound.com/docs/manual/pvsdisp.html>-pvsdisp ::  Spec -> SE ()-pvsdisp b1 = SE $ (depT_ =<<) $ lift $ f <$> unSpec b1-    where f a1 = opcs "pvsdisp" [(Xr,[Fr,Ir,Ir])] [a1]---- | --- Multiply amplitudes of a pvoc stream by those of a second--- pvoc stream, with dynamic scaling.------ > fsig  pvsfilter  fsigin, fsigfil, kdepth[, igain]------ csound doc: <http://csound.com/docs/manual/pvsfilter.html>-pvsfilter ::  Spec -> Spec -> Sig -> Spec-pvsfilter b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsfilter" [(Fr,[Fr,Fr,Kr,Ir])] [a1,a2,a3]---- | --- Read a selected channel from a PVOC-EX analysis file.------ Create an fsig stream by reading a selected channel from a PVOC-EX analysis file loaded into memory, with frame interpolation. Only format 0 files (amplitude+frequency) are currently supported. The operation of this opcode mirrors that of pvoc, but outputs an fsig instead of a resynthesized signal.------ > fsig  pvsfread  ktimpt, ifn [, ichan]------ csound doc: <http://csound.com/docs/manual/pvsfread.html>-pvsfread ::  Sig -> Tab -> Spec-pvsfread b1 b2 = Spec $ f <$> unSig b1 <*> unTab b2-    where f a1 a2 = opcs "pvsfread" [(Fr,[Kr,Ir,Ir])] [a1,a2]---- | --- Freeze the amplitude and frequency time functions of a pv stream according to a control-rate---       trigger.------ This opcodes 'freezes' the evolution of pvs stream by locking into steady amplitude and/or---       frequency values for each bin. The freezing is controlled, independently for amplitudes and---       frequencies, by a control-rate trigger, which switches the freezing 'on' if equal to or above---       1 and 'off' if below 1.------ > fsig  pvsfreeze  fsigin, kfreeza, kfreezf------ csound doc: <http://csound.com/docs/manual/pvsfreeze.html>-pvsfreeze ::  Spec -> Sig -> Sig -> Spec-pvsfreeze b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsfreeze" [(Fr,[Fr,Kr,Kr])] [a1,a2,a3]---- | --- Reads amplitude and/or frequency data from function tables.------ >  pvsftr  fsrc, ifna [, ifnf]------ csound doc: <http://csound.com/docs/manual/pvsftr.html>-pvsftr ::  Spec -> Tab -> SE ()-pvsftr b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSpec b1 <*> unTab b2-    where f a1 a2 = opcs "pvsftr" [(Xr,[Fr,Ir,Ir])] [a1,a2]---- | --- Writes amplitude and/or frequency data to function tables.------ > kflag  pvsftw  fsrc, ifna [, ifnf]------ csound doc: <http://csound.com/docs/manual/pvsftw.html>-pvsftw ::  Spec -> Tab -> Sig-pvsftw b1 b2 = Sig $ f <$> unSpec b1 <*> unTab b2-    where f a1 a2 = opcs "pvsftw" [(Kr,[Fr,Ir,Ir])] [a1,a2]---- | --- Write a fsig to a PVOCEX file.------ This opcode writes a fsig to a PVOCEX file (which in turn can be read by pvsfread or other programs that support PVOCEX file input).------ >  pvsfwrite  fsig, ifile------ csound doc: <http://csound.com/docs/manual/pvsfwrite.html>-pvsfwrite ::  Spec -> Str -> SE ()-pvsfwrite b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSpec b1 <*> unStr b2-    where f a1 a2 = opcs "pvsfwrite" [(Xr,[Fr,Sr])] [a1,a2]---- | --- Scale the amplitude of a pv stream.------ > fsig  pvsgain  fsigin, kgain ------ csound doc: <http://csound.com/docs/manual/pvsgain.html>-pvsgain ::  Spec -> Sig -> Spec-pvsgain b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "pvsgain" [(Fr,[Fr,Kr])] [a1,a2]---- | --- Shift the frequency components of a pv stream, stretching/compressing---       its spectrum.------ > fsig  pvshift  fsigin, kshift, klowest[, kkeepform, igain, kcoefs]------ csound doc: <http://csound.com/docs/manual/pvshift.html>-pvshift ::  Spec -> Sig -> Sig -> Spec-pvshift b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvshift" [(Fr,[Fr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3]---- | --- Instantaneous Frequency Distribution, magnitude and phase analysis.------ The pvsifd opcode takes an input a-rate signal and performs an Instantaneous Frequency,---   magnitude and phase analysis, using the STFT and pvsifd (Instantaneous Frequency Distribution),---   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial---   Tracking", Proc.of ICMC05, Barcelona. It generates two PV streaming signals, one containing the---   amplitudes and frequencies (a similar output to pvsanal) and another containing amplitudes and ---   unwrapped phases.------ > ffr,fphs  pvsifd  ain, ifftsize, ihopsize, iwintype[,iscal]------ csound doc: <http://csound.com/docs/manual/pvsifd.html>-pvsifd ::  Sig -> D -> D -> D -> (Spec,Spec)-pvsifd b1 b2 b3 b4 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = mopcs "pvsifd" ([Fr,Fr],[Ar,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]---- | --- Retrieve an fsig from the input software bus; a pvs equivalent to chani.------ This opcode retrieves an f-sig from the pvs in software bus, which can be---       used to get data from an external source, using the Csound 5 API. A channel---       is created if not already existing. The fsig channel is in that case initialised with---       the given parameters. It is important to note that the pvs input---       and output (pvsout opcode) busses are independent and data is not shared between them.------ > fsig  pvsin  kchan[, isize, iolap, iwinsize, iwintype, iformat]------ csound doc: <http://csound.com/docs/manual/pvsin.html>-pvsin ::  Sig -> Spec-pvsin b1 = Spec $ f <$> unSig b1-    where f a1 = opcs "pvsin" [(Fr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1]---- | --- Get information from a PVOC-EX formatted source.------ Get format information about fsrc, whether created by an opcode such as pvsanal, or obtained from a PVOCEX file by pvsfread. This information is available at init time, and can be used to set parameters for other pvs opcodes, and in particular for creating function tables (e.g. for pvsftw), or setting the number of oscillators for pvsadsyn.------ > ioverlap, inumbins, iwinsize, iformat  pvsinfo  fsrc------ csound doc: <http://csound.com/docs/manual/pvsinfo.html>-pvsinfo ::  Spec -> (D,D,D,D)-pvsinfo b1 = pureTuple $ f <$> unSpec b1-    where f a1 = mopcs "pvsinfo" ([Ir,Ir,Ir,Ir],[Fr]) [a1]---- | --- Initialise a spectral (f) variable to zero.------ Performs the equivalent to an init operation on an f-variable.------ > fsig  pvsinit  isize[, iolap, iwinsize, iwintype, iformat]------ csound doc: <http://csound.com/docs/manual/pvsinit.html>-pvsinit ::  D -> Spec-pvsinit b1 = Spec $ f <$> unD b1-    where f a1 = opcs "pvsinit" [(Fr,[Ir,Ir,Ir,Ir,Ir])] [a1]---- | --- Frequency lock an input fsig------ This opcode searches for spectral peaks and then locks the frequencies around those peaks. This is similar to---       phase-locking in non-streaming PV processing. It can be used to improve timestretching and pitch-shifting quality in---       PV processing.------ > fsig  pvslock  fsigin, klock------ csound doc: <http://csound.com/docs/manual/pvslock.html>-pvslock ::  Spec -> Sig -> Spec-pvslock b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "pvslock" [(Fr,[Fr,Kr])] [a1,a2]---- | --- Modify amplitudes using a function table, with dynamic scaling.------ Modify amplitudes of fsrc using  function table, with dynamic scaling.------ > fsig  pvsmaska  fsrc, ifn, kdepth------ csound doc: <http://csound.com/docs/manual/pvsmaska.html>-pvsmaska ::  Spec -> Tab -> Sig -> Spec-pvsmaska b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsmaska" [(Fr,[Fr,Ir,Kr])] [a1,a2,a3]---- | --- Mix 'seamlessly' two pv signals.------ Mix 'seamlessly' two pv signals.  This opcode combines the---       most prominent components of two pvoc streams into a single---       mixed stream.------ > fsig  pvsmix  fsigin1, fsigin2------ csound doc: <http://csound.com/docs/manual/pvsmix.html>-pvsmix ::  Spec -> Spec -> Spec-pvsmix b1 b2 = Spec $ f <$> unSpec b1 <*> unSpec b2-    where f a1 a2 = opcs "pvsmix" [(Fr,[Fr,Fr])] [a1,a2]---- | --- Smooth the amplitude and frequency time functions of a pv stream using parallel 1st order---       lowpass IIR filters with time-varying cutoff frequency.------ Smooth the amplitude and frequency time functions of a pv stream using a 1st order---       lowpass IIR with time-varying cutoff frequency. This opcode uses the same filter ---       as the tone opcode, but this time acting separately on the amplitude and frequency---       time functions that make up a pv stream. The cutoff frequency parameter runs at the---       control-rate, but unlike tone and tonek, it is not specified in Hz, but as fractions---       of 1/2 frame-rate (actually the pv stream sampling rate), which is easier to---       understand. This means that the highest cutoff frequency is 1 and the lowest 0; the lower---       the frequency the smoother the functions and more pronounced the effect will be.------ > fsig  pvsmooth  fsigin, kacf, kfcf------ csound doc: <http://csound.com/docs/manual/pvsmooth.html>-pvsmooth ::  Spec -> Sig -> Sig -> Spec-pvsmooth b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvsmooth" [(Fr,[Fr,Kr,Kr])] [a1,a2,a3]---- | --- Performs morphing (or interpolation) between two source fsigs.------ Performs morphing (or interpolation)  between two source fsigs.------ > fsig  pvsmorph  fsig1, fsig2, kampint, kfrqint------ csound doc: <http://csound.com/docs/manual/pvsmorph.html>-pvsmorph ::  Spec -> Spec -> Sig -> Sig -> Spec-pvsmorph b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "pvsmorph" [(Fr,[Fr,Fr,Kr,Kr])] [a1,a2,a3,a4]---- | --- PVS-based oscillator simulator.------ Generates periodic signal spectra in AMP-FREQ format, with the option of four wave types:------ > fsig  pvsosc  kamp, kfreq, ktype, isize [,ioverlap] [, iwinsize] [, iwintype] [, iformat]------ csound doc: <http://csound.com/docs/manual/pvsosc.html>-pvsosc ::  Sig -> Sig -> Sig -> D -> Spec-pvsosc b1 b2 b3 b4 = Spec $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "pvsosc" [(Fr,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Write a fsig to the pvs output bus.------ This opcode writes a fsig to a channel of the pvs output bus. Note that the pvs out bus and--- 	    the pvs in bus are separate and independent. A new channel is created if non-existent.------ >  pvsout  fsig, kchan------ csound doc: <http://csound.com/docs/manual/pvsout.html>-pvsout ::  Spec -> Sig -> SE ()-pvsout b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "pvsout" [(Xr,[Fr,Kr])] [a1,a2]---- | --- Track the pitch and amplitude of a PVS signal.------ Track the pitch and amplitude of a PVS signal as k-rate variables.------ > kfr, kamp  pvspitch  fsig, kthresh------ csound doc: <http://csound.com/docs/manual/pvspitch.html>-pvspitch ::  Spec -> Sig -> (Sig,Sig)-pvspitch b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = mopcs "pvspitch" ([Kr,Kr],[Fr,Kr]) [a1,a2]---- | --- Phase vocoder analysis processing with onset detection/processing.------ pvstanal implements phase vocoder analysis by reading function tables--- containing sampled-sound sources, with GEN01, and--- pvstanal will accept deferred allocation tables.------ > fsig  pvstanal  ktimescal, kamp, kpitch, ktab, [kdetect, kwrap, ioffset,ifftsize, ihop, idbthresh]--- >           ------ csound doc: <http://csound.com/docs/manual/pvstanal.html>-pvstanal ::  Sig -> Sig -> Sig -> Tab -> Spec-pvstanal b1 b2 b3 b4 = Spec $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4-    where f a1 a2 a3 a4 = opcs "pvstanal" [(Fr,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- Transforms a pvoc stream according to a masking function table.------ Transforms a pvoc stream according to a masking function table;---       if the pvoc stream amplitude falls below the value of the function---       for a specific pvoc channel, it applies a gain to that channel.------ > fsig  pvstencil  fsigin, kgain, klevel, iftable------ csound doc: <http://csound.com/docs/manual/pvstencil.html>-pvstencil ::  Spec -> Sig -> Sig -> D -> Spec-pvstencil b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "pvstencil" [(Fr,[Fr,Kr,Kr,Ir])] [a1,a2,a3,a4]---- | --- Retain only the N loudest bins.------ Process a PV stream by retaining only the N bins with the---       highest amplitude, zeroing the others.------ > fsig  pvstrace  fsigin, kn ------ csound doc: <http://csound.com/docs/manual/pvstrace.html>-pvstrace ::  Spec -> Sig -> Spec-pvstrace b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "pvstrace" [(Fr,[Fr,Kr])] [a1,a2]---- | --- Combine the spectral envelope of one fsig with the excitation (frequencies) of another.------ This opcode provides support for cross-synthesis of amplitudes and frequencies. It takes---     the amplitudes of one input fsig and combines with frequencies from another. It is a spectral---     version of the well-known channel vocoder.------ > fsig  pvsvoc  famp, fexc, kdepth, kgain [,kcoefs]------ csound doc: <http://csound.com/docs/manual/pvsvoc.html>-pvsvoc ::  Spec -> Spec -> Sig -> Sig -> Spec-pvsvoc b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "pvsvoc" [(Fr,[Fr,Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Warp the spectral envelope of a PVS signal------ Warp the spectral envelope of a PVS signal by means of shifting and scaling.------ > fsig  pvswarp  fsigin, kscal, kshift[, klowest, kmeth, kgain, kcoefs]------ csound doc: <http://csound.com/docs/manual/pvswarp.html>-pvswarp ::  Spec -> Sig -> Sig -> Spec-pvswarp b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "pvswarp" [(Fr,[Fr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3]---- | --- Resynthesise using a FFT overlap-add.------ Resynthesise phase vocoder data (f-signal) using a FFT overlap-add.------ > ares  pvsynth  fsrc, [iinit]------ csound doc: <http://csound.com/docs/manual/pvsynth.html>-pvsynth ::  Spec -> Sig-pvsynth b1 = Sig $ f <$> unSpec b1-    where f a1 = opcs "pvsynth" [(Ar,[Fr,Ir])] [a1]---- | --- Streaming partial track additive synthesis with cubic phase interpolation with--- pitch control and support for timescale-modified input------ The resyn opcode takes an input containg a TRACKS pv streaming signal (as generated,---   for instance by partials). It resynthesises the signal using linear amplitude and cubic phase---   interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls. Resyn is---   a modified version of sinsyn, allowing for the resynthesis of data with pitch and timescale changes.------ > asig  resyn  fin, kscal, kpitch, kmaxtracks, ifn------ csound doc: <http://csound.com/docs/manual/resyn.html>-resyn ::  Spec -> Sig -> Sig -> Sig -> Tab -> Sig-resyn b1 b2 b3 b4 b5 = Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "resyn" [(Ar,[Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Streaming partial track additive synthesis with cubic phase interpolation------ The sinsyn opcode takes an input containg a TRACKS pv streaming signal (as generated,---   for instance by the partials opcode). It resynthesises the signal using linear amplitude and cubic phase---   interpolation to drive a bank of interpolating oscillators with amplitude scaling control. sinsyn ---   attempts to preserve the phase of the partials in the original signal and in so doing it does not allow for---   pitch or timescale modifications of the signal.------ > asig  sinsyn  fin, kscal, kmaxtracks, ifn------ csound doc: <http://csound.com/docs/manual/sinsyn.html>-sinsyn ::  Spec -> Sig -> Sig -> Tab -> Sig-sinsyn b1 b2 b3 b4 = Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unTab b4-    where f a1 a2 a3 a4 = opcs "sinsyn" [(Ar,[Fr,Kr,Kr,Ir])] [a1,a2,a3,a4]---- | --- Instantaneous Frequency Distribution, magnitude and phase analysis.------ The tabifd opcode takes an input function table and performs an Instantaneous Frequency,---   magnitude and phase analysis, using the STFT and tabifd (Instantaneous Frequency Distribution),---   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial---   Tracking", Proc.of ICMC05, Barcelona. It generates two PV streaming signals, one containing the---   amplitudes and frequencies (a similar output to pvsanal) and another containing amplitudes and ---   unwrapped phases.------ > ffr,fphs  tabifd  ktimpt, kamp, kpitch, ifftsize, ihopsize, iwintype,ifn------ csound doc: <http://csound.com/docs/manual/tabifd.html>-tabifd ::  Sig -> Sig -> Sig -> D -> D -> D -> Tab -> (Spec,Spec)-tabifd b1 b2 b3 b4 b5 b6 b7 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unTab b7-    where f a1 a2 a3 a4 a5 a6 a7 = mopcs "tabifd" ([Fr,Fr],[Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1-                                                                                   ,a2-                                                                                   ,a3-                                                                                   ,a4-                                                                                   ,a5-                                                                                   ,a6-                                                                                   ,a7]---- | --- Streaming partial track additive synthesis------ The tradsyn opcode takes an input containg a TRACKS pv streaming signal (as generated,---       for instance by partials),as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial---       Tracking", Proc.of ICMC05, Barcelona. It resynthesises the signal using linear amplitude and frequency---       interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls.------ > asig  tradsyn  fin, kscal, kpitch, kmaxtracks, ifn------ csound doc: <http://csound.com/docs/manual/tradsyn.html>-tradsyn ::  Spec -> Sig -> Sig -> Sig -> Tab -> Sig-tradsyn b1 b2 b3 b4 b5 = Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "tradsyn" [(Ar,[Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]---- | --- Streaming partial track cross-synthesis.------ The trcross opcode takes two inputs containg TRACKS pv streaming signals (as generated,---       for instance by partials) and cross-synthesises them into a single TRACKS stream. Two---       different modes of operation are used: mode 0, cross-synthesis by multiplication of---       the amplitudes of the two inputs and mode 1, cross-synthesis by the substititution of---       the amplitudes of input 1 by the input 2. Frequencies and phases of input 1 are preserved---       in the output. The cross-synthesis is done by matching tracks between the two inputs using---       a 'search interval'. The matching algorithm will look for tracks in the second input that ---       are within the search interval around each track in the first input. This interval can be changed---       at the control rate. Wider search intervals will find more matches.------ > fsig  trcross  fin1, fin2, ksearch, kdepth [, kmode] ------ csound doc: <http://csound.com/docs/manual/trcross.html>-trcross ::  Spec -> Spec -> Sig -> Sig -> Spec-trcross b1 b2 b3 b4 = Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "trcross" [(Fr,[Fr,Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Streaming partial track filtering.------ The trfilter opcode takes an input containg a TRACKS pv streaming signal (as generated,---       for instance by partials) and filters it using an amplitude response curve stored in---       a function table. The function table can have any size (no restriction to powers-of-two).---       The table lookup is done by linear-interpolation. It is possible to create time-varying---       filter curves by updating the amlitude response table with a table-writing opcode.------ > fsig  trfilter  fin, kamnt, ifn------ csound doc: <http://csound.com/docs/manual/trfilter.html>-trfilter ::  Spec -> Sig -> Tab -> Spec-trfilter b1 b2 b3 = Spec $ f <$> unSpec b1 <*> unSig b2 <*> unTab b3-    where f a1 a2 a3 = opcs "trfilter" [(Fr,[Fr,Kr,Ir])] [a1,a2,a3]---- | --- Extracts the highest-frequency track from a streaming track input signal.------ The trhighest opcode takes an input containg TRACKS pv streaming signals (as generated,---       for instance by partials) and outputs only the highest track. In addition it outputs---       two k-rate signals, corresponding to the frequency and amplitude of the highest track---       signal.------ > fsig, kfr, kamp  trhighest  fin1, kscal------ csound doc: <http://csound.com/docs/manual/trhighest.html>-trhighest ::  Spec -> Sig -> (Spec,Sig,Sig)-trhighest b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = mopcs "trhighest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]---- | --- Extracts the lowest-frequency track from a streaming track input signal.------ The trlowest opcode takes an input containg TRACKS pv streaming signals (as generated,---       for instance by partials) and outputs only the lowest track. In addition it outputs---       two k-rate signals, corresponding to the frequency and amplitude of the lowest track---       signal.------ > fsig, kfr, kamp  trlowest  fin1, kscal------ csound doc: <http://csound.com/docs/manual/trlowest.html>-trlowest ::  Spec -> Sig -> (Spec,Sig,Sig)-trlowest b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = mopcs "trlowest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]---- | --- Streaming partial track mixing.------ The trmix opcode takes two inputs containg TRACKS pv streaming signals (as generated,---       for instance by partials) and mixes them into a single TRACKS stream. Tracks will be---       mixed up to the available space (defined by the original number of FFT bins in ---       the analysed signals). If the sum of the input tracks exceeds this space, the higher-ordered---       tracks in the second input will be pruned.------ > fsig  trmix  fin1, fin2 ------ csound doc: <http://csound.com/docs/manual/trmix.html>-trmix ::  Spec -> Spec -> Spec-trmix b1 b2 = Spec $ f <$> unSpec b1 <*> unSpec b2-    where f a1 a2 = opcs "trmix" [(Fr,[Fr,Fr])] [a1,a2]---- | --- Streaming partial track frequency scaling.------ The trscale opcode takes an input containg a TRACKS pv streaming signal (as generated,---       for instance by partials) and scales all frequencies by a k-rate amount. It can also, optionally,---       scale the gain of the signal by a k-rate amount (default 1). The result is pitch shifting of---       the input tracks.------ > fsig  trscale  fin, kpitch[, kgain]------ csound doc: <http://csound.com/docs/manual/trscale.html>-trscale ::  Spec -> Sig -> Spec-trscale b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "trscale" [(Fr,[Fr,Kr,Kr])] [a1,a2]---- | --- Streaming partial track frequency scaling.------ The trshift opcode takes an input containg a TRACKS pv streaming signal (as generated,---       for instance by partials) and shifts all frequencies by a k-rate frequency. It can also, optionally,---       scale the gain of the signal by a k-rate amount (default 1). The result is frequency shifting of---       the input tracks.------ > fsig  trshift  fin, kpshift[, kgain]------ csound doc: <http://csound.com/docs/manual/trshift.html>-trshift ::  Spec -> Sig -> Spec-trshift b1 b2 = Spec $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = opcs "trshift" [(Fr,[Fr,Kr,Kr])] [a1,a2]---- | --- Streaming partial track frequency splitting.------ The trsplit opcode takes an input containg a TRACKS pv streaming signal (as generated,---       for instance by partials) and splits it into two signals according to a k-rate frequency 'split point'. ---       The first output will contain all tracks up from 0Hz to the split frequency and the second will ---       contain the tracks from the split frequency up to the Nyquist.---       It can also, optionally, scale the gain of the output signals by a k-rate amount (default 1). ---       The result is two output signals containing only part of the original spectrum.------ > fsiglow, fsighi  trsplit  fin, ksplit[, kgainlow, kgainhigh]------ csound doc: <http://csound.com/docs/manual/trsplit.html>-trsplit ::  Spec -> Sig -> (Spec,Spec)-trsplit b1 b2 = pureTuple $ f <$> unSpec b1 <*> unSig b2-    where f a1 a2 = mopcs "trsplit" ([Fr,Fr],[Fr,Kr,Kr,Kr]) [a1,a2]---- ATS.---- | --- uses the data from an ATS analysis file to perform additive synthesis.------ ATSadd reads from an ATS analysis file and uses the data to perform additive synthesis using an internal array of interpolating oscillators.------ > ar  ATSadd  ktimepnt, kfmod, iatsfile, ifn, ipartials[, ipartialoffset, \--- >             ipartialincr, igatefn]------ csound doc: <http://csound.com/docs/manual/ATSadd.html>-atsAdd ::  Sig -> Sig -> D -> Tab -> D -> Sig-atsAdd b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "ATSadd" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- uses the data from an ATS analysis file to perform noise resynthesis.------ ATSaddnz reads from an ATS analysis file and uses the data to perform additive synthesis using a modified randi function.------ > ar  ATSaddnz  ktimepnt, iatsfile, ibands[, ibandoffset, ibandincr]------ csound doc: <http://csound.com/docs/manual/ATSaddnz.html>-atsAddnz ::  Sig -> D -> D -> Sig-atsAddnz b1 b2 b3 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "ATSaddnz" [(Ar,[Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3]---- | --- reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.------ ATSbufread reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.------ >  ATSbufread  ktimepnt, kfmod, iatsfile, ipartials[, ipartialoffset, \--- >               ipartialincr]------ csound doc: <http://csound.com/docs/manual/ATSbufread.html>-atsBufread ::  Sig -> Sig -> D -> D -> SE ()-atsBufread b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "ATSbufread" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]---- | --- perform cross synthesis from ATS analysis files.------ ATScross uses data from an ATS analysis file and data from an ATSbufread to perform cross synthesis.------ > ar  ATScross  ktimepnt, kfmod, iatsfile, ifn, kmylev, kbuflev, ipartials \--- >               [, ipartialoffset, ipartialincr]------ csound doc: <http://csound.com/docs/manual/ATScross.html>-atsCross ::  Sig -> Sig -> D -> Tab -> Sig -> Sig -> D -> Sig-atsCross b1 b2 b3 b4 b5 b6 b7 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unSig b5 <*> unSig b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "ATScross" [(Ar,[Kr,Kr,Ir,Ir,Kr,Kr,Ir,Ir,Ir])] [a1-                                                                                       ,a2-                                                                                       ,a3-                                                                                       ,a4-                                                                                       ,a5-                                                                                       ,a6-                                                                                       ,a7]---- | --- reads data out of the header of an ATS file.------ atsinfo reads data out of the header of an ATS file.------ > idata  ATSinfo  iatsfile, ilocation------ csound doc: <http://csound.com/docs/manual/ATSinfo.html>-atsInfo ::  D -> D -> D-atsInfo b1 b2 = D $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "ATSinfo" [(Ir,[Ir,Ir])] [a1,a2]---- | --- allows a user to determine the frequency envelope of any ATSbufread.------ ATSinterpread allows a user to determine the frequency envelope of any ATSbufread.------ > kamp  ATSinterpread  kfreq------ csound doc: <http://csound.com/docs/manual/ATSinterpread.html>-atsInterpread ::  Sig -> Sig-atsInterpread b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "ATSinterpread" [(Kr,[Kr])] [a1]---- | --- returns a frequency, amplitude pair from an ATSbufread opcode.------ ATSpartialtap takes a partial number and returns a frequency, amplitude pair. The frequency and amplitude data comes from an ATSbufread opcode.------ > kfrq, kamp  ATSpartialtap  ipartialnum------ csound doc: <http://csound.com/docs/manual/ATSpartialtap.html>-atsPartialtap ::  D -> (Sig,Sig)-atsPartialtap b1 = pureTuple $ f <$> unD b1-    where f a1 = mopcs "ATSpartialtap" ([Kr,Kr],[Ir]) [a1]---- | --- reads data from an ATS file.------ ATSread returns the amplitude (kamp) and frequency (kfreq) information of a user specified partial contained in the ATS analysis file at the time indicated by the time pointer ktimepnt.------ > kfreq, kamp  ATSread  ktimepnt, iatsfile, ipartial------ csound doc: <http://csound.com/docs/manual/ATSread.html>-atsRead ::  Sig -> D -> D -> (Sig,Sig)-atsRead b1 b2 b3 = pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = mopcs "ATSread" ([Kr,Kr],[Kr,Ir,Ir]) [a1,a2,a3]---- | --- reads data from an ATS file.------ ATSreadnz returns the energy (kenergy) of a user specified noise band (1-25 bands) at the time indicated by the time pointer ktimepnt.------ > kenergy  ATSreadnz  ktimepnt, iatsfile, iband------ csound doc: <http://csound.com/docs/manual/ATSreadnz.html>-atsReadnz ::  Sig -> D -> D -> Sig-atsReadnz b1 b2 b3 = Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "ATSreadnz" [(Kr,[Kr,Ir,Ir])] [a1,a2,a3]---- | --- uses the data from an ATS analysis file to perform resynthesis.------ ATSsinnoi reads data from an ATS data file and uses the information to synthesize sines and noise together.------ > ar  ATSsinnoi  ktimepnt, ksinlev, knzlev, kfmod, iatsfile, ipartials \--- >               [, ipartialoffset, ipartialincr]------ csound doc: <http://csound.com/docs/manual/ATSsinnoi.html>-atsSinnoi ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig-atsSinnoi b1 b2 b3 b4 b5 b6 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "ATSsinnoi" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6]---- Loris.---- | --- Morphs two stored sets of bandwidth-enhanced partials---     and stores a new set of partials representing the morphed---     sound. The morph is performed by linearly interpolating the---     parameter envelopes (frequency, amplitude, and bandwidth, or---     noisiness) of the bandwidth-enhanced partials according to---     control-rate frequency, amplitude, and bandwidth morphing---     functions.------ lorismorph morphs two stored sets of bandwidth-enhanced---     partials and stores a new set of partials representing the morphed---     sound. The morph is performed by linearly interpolating the---     parameter envelopes (frequency, amplitude, and bandwidth, or---     noisiness) of the bandwidth-enhanced partials according to---     control-rate frequency, amplitude, and bandwidth morphing---     functions.------ >  lorismorph  isrcidx, itgtidx, istoreidx, kfreqmorphenv, kampmorphenv, kbwmorphenv------ csound doc: <http://csound.com/docs/manual/lorismorph.html>-lorismorph ::  D -> D -> D -> Sig -> Sig -> Sig -> SE ()-lorismorph b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "lorismorph" [(Xr,[Ir,Ir,Ir,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]---- | --- renders a stored set of bandwidth-enhanced partials using the method of Bandwidth-Enhanced Additive Synthesis implemented in the Loris software, applying control-rate frequency, amplitude, and bandwidth scaling envelopes.------ lorisplay renders a stored set of---     bandwidth-enhanced partials using the method of Bandwidth-Enhanced---     Additive Synthesis implemented in the Loris software, applying---     control-rate frequency, amplitude, and bandwidth scaling---     envelopes.------ > ar  lorisplay  ireadidx, kfreqenv, kampenv, kbwenv------ csound doc: <http://csound.com/docs/manual/lorisplay.html>-lorisplay ::  D -> Sig -> Sig -> Sig -> Sig-lorisplay b1 b2 b3 b4 = Sig $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "lorisplay" [(Ar,[Ir,Kr,Kr,Kr])] [a1,a2,a3,a4]---- | --- Imports a set of bandwidth-enhanced partials from a SDIF-format---     data file, applying control-rate frequency, amplitude, and---     bandwidth scaling envelopes, and stores the modified partials in---     memory.------ lorisread imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying control-rate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory.------ >  lorisread  ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]------ csound doc: <http://csound.com/docs/manual/lorisread.html>-lorisread ::  Sig -> Str -> D -> Sig -> Sig -> Sig -> SE ()-lorisread b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unStr b2 <*> unD b3 <*> unSig b4 <*> unSig b5 <*> unSig b6-    where f a1 a2 a3 a4 a5 a6 = opcs "lorisread" [(Xr,[Kr,Sr,Ir,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]---- Other.---- | --- Calculate the spectral centroid of a signal.------ Calculate the spectral centroid of an audio signal on a given trigger.------ > kcent  centroid  asig, ktrig, ifftsize------ csound doc: <http://csound.com/docs/manual/centroid.html>-centroid ::  Sig -> Sig -> D -> Sig-centroid b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "centroid" [(Kr,[Ar,Kr,Ir])] [a1,a2,a3]---- | --- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.------ filescal implements phase-locked vocoder---       processing from disk files, resampling if necessary.------ > asig[,asig2]  filescal  ktimescal, kamp, kpitch, Sfile, klock [,ifftsize, idecim, ithresh]--- >           ------ csound doc: <http://csound.com/docs/manual/filescal.html>-filescal :: Tuple a => Sig -> Sig -> Sig -> Str -> Sig -> a-filescal b1 b2 b3 b4 b5 = pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = mopcs "filescal" ([Ar,Ar],[Kr,Kr,Kr,Sr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]---- | --- Phase-locked vocoder processing.------ mincer implements phase-locked vocoder processing using function tables--- containing sampled-sound sources, with GEN01, and--- mincer will accept deferred allocation tables.------ > asig  mincer  atimpt, kamp, kpitch, ktab, klock[,ifftsize,idecim]--- >           ------ csound doc: <http://csound.com/docs/manual/mincer.html>-mincer ::  Sig -> Sig -> Sig -> Tab -> Sig -> Sig-mincer b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "mincer" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]---- | --- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.------ mp3scal implements phase-locked vocoder---       processing from mp3-format  disk files, resampling if necessary.------ > asig, asig2, ktime  mp3scal  Sfile, ktimescal, kpitch, kamp[, iskip, ifftsize, idecim, ilock]--- >           ------ csound doc: <http://csound.com/docs/manual/mp3scal.html>-mp3scal ::  Str -> Sig -> Sig -> Sig -> (Sig,Sig,Sig)-mp3scal b1 b2 b3 b4 = pureTuple $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4-    where f a1 a2 a3 a4 = mopcs "mp3scal" ([Ar,Ar,Kr],[Sr,Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]---- | --- Extreme time-stretching algorithm by Nasca Octavian Paul.------ The paulstretch opcode is a lightweight---       implementation of the PaulStretch time-stretching algorithm by---       Nasca Octavian Paul. It is ideal for timestretching a signal by---       very large amounts.------ > asig  paulstretch  istretch, iwindowsize, ift--- >         ------ csound doc: <http://csound.com/docs/manual/paulstretch.html>-paulstretch ::  D -> D -> D -> Sig-paulstretch b1 b2 b3 = Sig $ f <$> unD b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "paulstretch" [(Ar,[Ir,Ir,Ir])] [a1,a2,a3]---- | --- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.------ temposcal implements phase-locked vocoder processing using function tables---       containing sampled-sound sources, with GEN01, and---       temposcal will accept deferred allocation tables.------ > asig  temposcal  ktimescal, kamp, kpitch, ktab, klock [,ifftsize, idecim, ithresh]--- >           ------ csound doc: <http://csound.com/docs/manual/temposcal.html>-temposcal ::  Sig -> Sig -> Sig -> Tab -> Sig -> Sig-temposcal b1 b2 b3 b4 b5 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "temposcal" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+    allpole, apoleparams, lpcanal, lpcfilter, lpfreson, lpinterp, lpread, lpreson, lpslot, pvslpc, resonbnk,+    +    -- * Non-Standard.+    specaddm, specdiff, specdisp, specfilt, spechist, specptrk, specscal, specsum, spectrum,+    +    -- * Streaming.+    binit, cudanal, cudasliding, cudasynth, part2txt, partials, pvs2array, pvsadsyn, pvsanal, pvsarp, pvsbandp, pvsbandr, pvsbandwidth, pvsbin, pvsblur, pvsbuffer, pvsbufread, pvsbufread2, pvscale, pvscent, pvsceps, pvscross, pvsdemix, pvsdiskin, pvsdisp, pvsfilter, pvsfread, pvsfreeze, pvsfromarray, pvsftr, pvsftw, pvsfwrite, pvsgain, pvshift, pvsifd, pvsin, pvsinfo, pvsinit, pvsmaska, pvsmix, pvsmooth, pvsmorph, pvsosc, pvsout, pvspitch, pvstanal, pvstencil, pvstrace, pvsvoc, pvswarp, pvsynth, resyn, sinsyn, tabifd, tradsyn, trcross, trfilter, trhighest, trlowest, trmix, trscale, trshift, trsplit,+    +    -- * ATS.+    atsAdd, atsAddnz, atsBufread, atsCross, atsInfo, atsInterpread, atsPartialtap, atsRead, atsReadnz, atsSinnoi,+    +    -- * Loris.+    lorismorph, lorisplay, lorisread,+    +    -- * Other.+    centroid, filescal, mincer, mp3scal, paulstretch, temposcal) where++import Control.Monad.Trans.Class+import Control.Monad+import Csound.Dynamic+import Csound.Typed++-- STFT.++-- | +-- Deprecated.+--+-- Deprecated. Use the tableseg opcode instead.+--+-- >  ktableseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]+--+-- csound doc: <https://csound.com/docs/manual/ktableseg.html>+ktableseg ::  Tab -> D -> Tab -> SE ()+ktableseg b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "ktableseg" [(Xr,(repeat Ir))] [a1,a2,a3]++-- | +-- Reads from a pvoc file and uses the data to perform additive synthesis.+--+-- pvadd reads from a pvoc file and uses the data to perform additive synthesis using an internal array of interpolating oscillators. The user supplies the wave table (usually one period of a sine wave), and can choose which analysis bins will be used in the re-synthesis.+--+-- > ares  pvadd  ktimpnt, kfmod, ifilcod, ifn, ibins [, ibinoffset] \+-- >           [, ibinincr] [, iextractmode] [, ifreqlim] [, igatefn]+--+-- csound doc: <https://csound.com/docs/manual/pvadd.html>+pvadd ::  Sig -> Sig -> Str -> Tab -> D -> Sig+pvadd b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unTab b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvadd" [(Ar,[Kr,Kr,Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Reads from a phase vocoder analysis file and makes the retrieved data available.+--+-- pvbufread reads from a pvoc file and makes the retrieved data available to any following pvinterp and pvcross units that appear in an instrument before a subsequent pvbufread (just as lpread and lpreson work together). The data is passed internally and the unit has no output of its own.+--+-- >  pvbufread  ktimpnt, ifile+--+-- csound doc: <https://csound.com/docs/manual/pvbufread.html>+pvbufread ::  Sig -> Str -> SE ()+pvbufread b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "pvbufread" [(Xr,[Kr,Sr])] [a1,a2]++-- | +-- Applies the amplitudes from one phase vocoder analysis file to the data from a second file.+--+-- pvcross applies the amplitudes from one phase vocoder analysis file to the data from a second file and then performs the resynthesis. The data is passed, as described above, from a previously called pvbufread unit. The two k-rate amplitude arguments are used to scale the amplitudes of each files separately before they are added together and used in the resynthesis (see below for further explanation). The frequencies of the first file are not used at all in this process. This unit simply allows for cross-synthesis through the application of the amplitudes of the spectra of one signal to the frequencies of a second signal. Unlike pvinterp, pvcross does allow for the use of the ispecwp as in pvoc and vpvoc.+--+-- > ares  pvcross  ktimpnt, kfmod, ifile, kampscale1, kampscale2 [, ispecwp]+--+-- csound doc: <https://csound.com/docs/manual/pvcross.html>+pvcross ::  Sig -> Sig -> Str -> Sig -> Sig -> Sig+pvcross b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvcross" [(Ar,[Kr,Kr,Sr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Interpolates between the amplitudes and frequencies of two phase vocoder analysis files.+--+-- pvinterp interpolates between the amplitudes and frequencies, on a bin by bin basis, of two phase vocoder analysis files (one from a previously called pvbufread unit and the other from within its own argument list), allowing for user defined transitions between analyzed sounds. It also allows for general scaling of the amplitudes and frequencies of each file separately before the interpolated values are calculated and sent to the resynthesis routines. The kfmod argument in pvinterp performs its frequency scaling on the frequency values after their derivation from the separate scaling and subsequent interpolation is performed so that this acts as an overall scaling value of the new frequency components.+--+-- > ares  pvinterp  ktimpnt, kfmod, ifile, kfreqscale1, kfreqscale2, \+-- >           kampscale1, kampscale2, kfreqinterp, kampinterp+--+-- csound doc: <https://csound.com/docs/manual/pvinterp.html>+pvinterp ::  Sig -> Sig -> Str -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig+pvinterp b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3 <*> unSig b4 <*> unSig b5 <*> unSig b6 <*> unSig b7 <*> unSig b8 <*> unSig b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcs "pvinterp" [(Ar,[Kr,Kr,Sr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1+                                                                                       ,a2+                                                                                       ,a3+                                                                                       ,a4+                                                                                       ,a5+                                                                                       ,a6+                                                                                       ,a7+                                                                                       ,a8+                                                                                       ,a9]++-- | +-- Implements signal reconstruction using an fft-based phase vocoder.+--+-- > ares  pvoc  ktimpnt, kfmod, ifilcod [, ispecwp] [, iextractmode] \+-- >           [, ifreqlim] [, igatefn]+--+-- csound doc: <https://csound.com/docs/manual/pvoc.html>+pvoc ::  Sig -> Sig -> Str -> Sig+pvoc b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3+  where+    f a1 a2 a3 = opcs "pvoc" [(Ar,[Kr,Kr,Sr,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Reads from a phase vocoder analysis file and returns the frequency and amplitude from a single analysis channel or bin.+--+-- pvread reads from a pvoc file and returns the frequency and amplitude from a single analysis channel or bin. The returned values can be used anywhere else in the Csound instrument. For example, one can use them as arguments to an oscillator to synthesize a single component from an analyzed signal or a bank of pvreads can be used to resynthesize the analyzed sound using additive synthesis by passing the frequency and magnitude values to a bank of oscillators.+--+-- > kfreq, kamp  pvread  ktimpnt, ifile, ibin+--+-- csound doc: <https://csound.com/docs/manual/pvread.html>+pvread ::  Sig -> Str -> D -> (Sig,Sig)+pvread b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unStr b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "pvread" ([Kr,Kr],[Kr,Sr,Ir]) [a1,a2,a3]++-- | +-- Creates a new function table by making linear segments between values in stored function tables.+--+-- tableseg is like linseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tableseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.+--+-- >  tableseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]+--+-- csound doc: <https://csound.com/docs/manual/tableseg.html>+tableseg ::  Tab -> D -> Tab -> SE ()+tableseg b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tableseg" [(Xr,(repeat Ir))] [a1,a2,a3]++-- | +-- Creates a new function table by making exponential segments between values in stored function tables.+--+-- tablexseg is like expseg but interpolate between values in a stored function tables. The result is a new function table passed internally to any following vpvoc which occurs before a subsequent tablexseg (much like lpread/lpreson pairs work). The uses of these are described below under vpvoc.+--+-- >  tablexseg  ifn1, idur1, ifn2 [, idur2] [, ifn3] [...]+--+-- csound doc: <https://csound.com/docs/manual/tablexseg.html>+tablexseg ::  Tab -> D -> Tab -> SE ()+tablexseg b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tablexseg" [(Xr,(repeat Ir))] [a1,a2,a3]++-- | +-- Implements signal reconstruction using an fft-based phase vocoder and an extra envelope.+--+-- > ares  vpvoc  ktimpnt, kfmod, ifile [, ispecwp] [, ifn]+--+-- csound doc: <https://csound.com/docs/manual/vpvoc.html>+vpvoc ::  Sig -> Sig -> Str -> Sig+vpvoc b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unStr b3+  where+    f a1 a2 a3 = opcs "vpvoc" [(Ar,[Kr,Kr,Sr,Ir,Ir])] [a1,a2,a3]++-- LPC.++-- | ++--+-- > ares  allpole  asig, kCoef[]+--+-- csound doc: <https://csound.com/docs/manual/allpole.html>+allpole ::  Sig -> Sig -> Sig+allpole b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "allpole" [(Ar,[Ar,Kr])] [a1,a2]++-- | ++--+-- > kPar[] apoleparams  kCoef[] +--+-- csound doc: <https://csound.com/docs/manual/apoleparams.html>+apoleparams ::  Sig -> Sig+apoleparams b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "apoleparams" [(Kr,[Kr])] [a1]++-- | ++--+-- > kCoef[],krms,kerr,kcps  lpcanal  asrc, kflg,+-- >         kprd, isiz, iord[,iwin] +-- > kCoef[],krms,kerr,kcps  lpcanal  koff, kflg,+-- >         ifn, isiz, iord[,iwin] +-- > iCoef[],irms,ierr,icps  lpcanal  ioff, iflg,+-- >         ifn, isiz, iord[,iwin] +--+-- csound doc: <https://csound.com/docs/manual/lpcanal.html>+lpcanal :: forall a . Tuple a => Sig -> Sig -> Sig -> D -> D -> a+lpcanal b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = mopcs "lpcanal" ([Ir,Ir,Ir,Ir],[Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | ++--+-- > ares  lpcfilter  asig, asrc, kflg,+-- >         kprd, isiz, iord[,iwin] +-- > ares  lpcfilter  asig, koff, kflg,+-- >         ifn, isiz, iord[,iwin] +--+-- csound doc: <https://csound.com/docs/manual/lpcfilter.html>+lpcfilter ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+lpcfilter b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "lpcfilter" [(Ar,[Ar,Ar,Kr,Kr,Ir,Ir,Ir])+                                           ,(Ar,[Ar,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- | +-- Resynthesises a signal from the data passed internally by a previous lpread, applying formant shifting.+--+-- > ares  lpfreson  asig, kfrqratio+--+-- csound doc: <https://csound.com/docs/manual/lpfreson.html>+lpfreson ::  Sig -> Sig -> Sig+lpfreson b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "lpfreson" [(Ar,[Ar,Kr])] [a1,a2]++-- | +-- Computes a new set of poles from the interpolation between two analysis.+--+-- >  lpinterp  islot1, islot2, kmix+--+-- csound doc: <https://csound.com/docs/manual/lpinterp.html>+lpinterp ::  D -> D -> Sig -> SE ()+lpinterp b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "lpinterp" [(Xr,[Ir,Ir,Kr])] [a1,a2,a3]++-- | +-- Reads a control file of time-ordered information frames.+--+-- > krmsr, krmso, kerr, kcps  lpread  ktimpnt, ifilcod [, inpoles] [, ifrmrate]+--+-- csound doc: <https://csound.com/docs/manual/lpread.html>+lpread ::  Sig -> Str -> (Sig,Sig,Sig,Sig)+lpread b1 b2 =+  pureTuple $ f <$> unSig b1 <*> unStr b2+  where+    f a1 a2 = mopcs "lpread" ([Kr,Kr,Kr,Kr],[Kr,Sr,Ir,Ir]) [a1,a2]++-- | +-- Resynthesises a signal from the data passed internally by a previous lpread.+--+-- > ares  lpreson  asig+--+-- csound doc: <https://csound.com/docs/manual/lpreson.html>+lpreson ::  Sig -> Sig+lpreson b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "lpreson" [(Ar,[Ar])] [a1]++-- | +-- Selects the slot to be use by further lp opcodes.+--+-- >  lpslot  islot+--+-- csound doc: <https://csound.com/docs/manual/lpslot.html>+lpslot ::  D -> SE ()+lpslot b1 =+  SE $ join $ f <$> (lift . unD) b1+  where+    f a1 = opcsDep_ "lpslot" [(Xr,[Ir])] [a1]++-- | ++--+-- > fsig  pvslpc  asrc, idftsiz, ihop, iord[,iwin] +--+-- csound doc: <https://csound.com/docs/manual/pvslpc.html>+pvslpc ::  Sig -> D -> D -> D -> Spec+pvslpc b1 b2 b3 b4 =+  Spec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "pvslpc" [(Fr,[Ar,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | ++--+-- > asig resonbnk  ain,+-- >         kPar[],kmin,kmax,iper[,imode,iscal,iskip] +--+-- csound doc: <https://csound.com/docs/manual/resonbnk.html>+resonbnk ::  Sig -> Sig -> Sig+resonbnk b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "resonbnk" [(Ar,[Ar,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2]++-- Non-Standard.++-- | +-- Perform a weighted add of two input spectra.+--+-- > wsig  specaddm  wsig1, wsig2 [, imul2]+--+-- csound doc: <https://csound.com/docs/manual/specaddm.html>+specaddm ::  Wspec -> Wspec -> Wspec+specaddm b1 b2 =+  Wspec $ f <$> unWspec b1 <*> unWspec b2+  where+    f a1 a2 = opcs "specaddm" [(Wr,[Wr,Wr,Ir])] [a1,a2]++-- | +-- Finds the positive difference values between consecutive spectral frames.+--+-- > wsig  specdiff  wsigin+--+-- csound doc: <https://csound.com/docs/manual/specdiff.html>+specdiff ::  Wspec -> Wspec+specdiff b1 =+  Wspec $ f <$> unWspec b1+  where+    f a1 = opcs "specdiff" [(Wr,[Wr])] [a1]++-- | +-- Displays the magnitude values of the spectrum.+--+-- >  specdisp  wsig, iprd [, iwtflg]+--+-- csound doc: <https://csound.com/docs/manual/specdisp.html>+specdisp ::  Wspec -> D -> SE ()+specdisp b1 b2 =+  SE $ join $ f <$> (lift . unWspec) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "specdisp" [(Xr,[Wr,Ir,Ir])] [a1,a2]++-- | +-- Filters each channel of an input spectrum.+--+-- > wsig  specfilt  wsigin, ifhtim+--+-- csound doc: <https://csound.com/docs/manual/specfilt.html>+specfilt ::  Wspec -> D -> Wspec+specfilt b1 b2 =+  Wspec $ f <$> unWspec b1 <*> unD b2+  where+    f a1 a2 = opcs "specfilt" [(Wr,[Wr,Ir])] [a1,a2]++-- | +-- Accumulates the values of successive spectral frames.+--+-- > wsig  spechist  wsigin+--+-- csound doc: <https://csound.com/docs/manual/spechist.html>+spechist ::  Wspec -> Wspec+spechist b1 =+  Wspec $ f <$> unWspec b1+  where+    f a1 = opcs "spechist" [(Wr,[Wr])] [a1]++-- | +-- Estimates the pitch of the most prominent complex tone in the spectrum.+--+-- Estimate the pitch of the most prominent complex tone in the spectrum.+--+-- > koct, kamp  specptrk  wsig, kvar, ilo, ihi, istr, idbthresh, inptls, \+-- >           irolloff [, iodd] [, iconfs] [, interp] [, ifprd] [, iwtflg]+--+-- csound doc: <https://csound.com/docs/manual/specptrk.html>+specptrk ::  Wspec -> Sig -> D -> D -> D -> D -> D -> D -> (Sig,Sig)+specptrk b1 b2 b3 b4 b5 b6 b7 b8 =+  pureTuple $ f <$> unWspec b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7 <*> unD b8+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 = mopcs "specptrk" ([Kr,Kr]+                                                 ,[Wr,Kr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7,a8]++-- | +-- Scales an input spectral datablock with spectral envelopes.+--+-- > wsig  specscal  wsigin, ifscale, ifthresh+--+-- csound doc: <https://csound.com/docs/manual/specscal.html>+specscal ::  Wspec -> D -> D -> Wspec+specscal b1 b2 b3 =+  Wspec $ f <$> unWspec b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "specscal" [(Wr,[Wr,Ir,Ir])] [a1,a2,a3]++-- | +-- Sums the magnitudes across all channels of the spectrum.+--+-- > ksum  specsum  wsig [, interp]+--+-- csound doc: <https://csound.com/docs/manual/specsum.html>+specsum ::  Wspec -> Sig+specsum b1 =+  Sig $ f <$> unWspec b1+  where+    f a1 = opcs "specsum" [(Kr,[Wr,Ir])] [a1]++-- | +-- Generate a constant-Q, exponentially-spaced DFT.+--+-- Generate a constant-Q, exponentially-spaced DFT across all octaves of a multiply-downsampled control or audio input signal.+--+-- > wsig  spectrum  xsig, iprd, iocts, ifrqa [, iq] [, ihann] [, idbout] \+-- >           [, idsprd] [, idsinrs]+--+-- csound doc: <https://csound.com/docs/manual/spectrum.html>+spectrum ::  Sig -> D -> D -> D -> Wspec+spectrum b1 b2 b3 b4 =+  Wspec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "spectrum" [(Wr,[Xr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- Streaming.++-- | +-- PVS tracks to amplitude+frequency conversion.+--+-- The binit opcode takes an input containg a TRACKS pv streaming signal (as generated,+--   for instance by partials) and converts it into a equal-bandwidth bin-frame containing amplitude+--   and frequency pairs (PVS_AMP_FREQ), suitable for overlap-add resynthesis (such as performed by +--   pvsynth) or further PVS streaming phase vocoder signal transformations. For each frequency bin,+--   it will look for a suitable track signal to fill it; if not found, the bin will be empty (0 amplitude).+--   If more than one track fits a certain bin, the one with highest amplitude will be chosen. This+--   means that not all of the input signal is actually 'binned', the operation is lossy. However, in+--   many situations this loss is not perceptually relevant.+--+-- > fsig  binit  fin, isize+--+-- csound doc: <https://csound.com/docs/manual/binit.html>+binit ::  Spec -> D -> Spec+binit b1 b2 =+  Spec $ f <$> unSpec b1 <*> unD b2+  where+    f a1 a2 = opcs "binit" [(Fr,[Fr,Ir])] [a1,a2]++-- | +-- Generate an fsig from a mono audio source ain, using phase+--       vocoder overlap-add analysis and GPU hardware. Experimental and+--       only available as source code at the moment.+--+-- Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis and GPU hardware.+--+-- > fsig  cudanal  ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit]+--+-- csound doc: <https://csound.com/docs/manual/cudanal.html>+cudanal ::  Sig -> D -> D -> D -> D -> Spec+cudanal b1 b2 b3 b4 b5 =+  Spec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "cudanal" [(Fr,[Ar,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Perform sliding phase vocoder algorithm with simplified+--       transformational FM using GPU hardware. Experimental and+--       only available as source code at the moment.+--+-- Perform sliding phase vocoder algorithm with simplified+--       transformational FM using GPU hardware.+--+-- > asig  cudasliding  ain, amod, iwinsize+--+-- csound doc: <https://csound.com/docs/manual/cudasliding.html>+cudasliding ::  Sig -> Sig -> D -> Sig+cudasliding b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "cudasliding" [(Ar,[Ar,Ar,Ir])] [a1,a2,a3]++-- | +-- Synthesis by additive synthesis and inverse FFT. Experimental and+--       only available as source code at the moment.+--+-- Synthesis by additive synthesis and inverse FFT.+--+-- > asig  cudasynth  kamp, kfreq, itab, iftab, iatab[, inum]+-- > asig  cudasynth  fsig, kamp, kfreq[, inum]+-- > asig  cudasynth  fsig+--+-- csound doc: <https://csound.com/docs/manual/cudasynth.html>+cudasynth ::  Sig -> Sig -> Tab -> D -> D -> Sig+cudasynth b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unTab b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "cudasynth" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir]),(Ar,[Fr,Kr,Kr,Ir]),(Ar,[Fr])] [a1+                                                                                                ,a2+                                                                                                ,a3+                                                                                                ,a4+                                                                                                ,a5]++-- | ++--+-- >  part2txt  SFile,ftrks+--+-- csound doc: <https://csound.com/docs/manual/part2txt.html>+part2txt ::  Str -> Spec -> SE ()+part2txt b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSpec) b2+  where+    f a1 a2 = opcsDep_ "part2txt" [(Xr,[Sr,Fr])] [a1,a2]++-- | +-- Partial track spectral analysis.+--+-- The partials opcode takes two input PV streaming signals containg AMP_FREQ and AMP_PHASE signals (as generated+--   for instance by pvsifd or in the first case, by pvsanal) and performs partial track analysis,+--   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial+--   Tracking", Proc.of ICMC05, Barcelona. It generates a TRACKS PV streaming signal, containing amplitude, frequency, +--   phase and track ID for each output track. This type of signal will contain a variable number of output tracks,+--   up to the total number of analysis bins contained in the inputs (fftsize/2 + 1 bins). The second input (AMP_PHASE) +--   is optional, as it can take the same signal as the first input. In this case, however, all phase information will +--   be NULL and resynthesis using phase information cannot be performed.+--+-- > ftrks  partials  ffr, fphs, kthresh, kminpts, kmaxgap, imaxtracks+--+-- csound doc: <https://csound.com/docs/manual/partials.html>+partials ::  Spec -> Spec -> Sig -> Sig -> Sig -> D -> Spec+partials b1 b2 b3 b4 b5 b6 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4 <*> unSig b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "partials" [(Fr,[Fr,Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- > kframe  pvs2array  kvar[], fsig+-- > kframe  pvs2array  kmags[], kfreqs[], fsig+--+-- csound doc: <https://csound.com/docs/manual/pvs2array.html>+pvs2array ::  Sig -> Sig+pvs2array b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "pvs2array" [(Kr,[Kr,Fr]),(Kr,[Kr,Kr,Fr])] [a1]++-- | +-- Resynthesize using a fast oscillator-bank.+--+-- > ares  pvsadsyn  fsrc, inoscs, kfmod [, ibinoffset] [, ibinincr] [, iinit]+--+-- csound doc: <https://csound.com/docs/manual/pvsadsyn.html>+pvsadsyn ::  Spec -> D -> Sig -> Sig+pvsadsyn b1 b2 b3 =+  Sig $ f <$> unSpec b1 <*> unD b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsadsyn" [(Ar,[Fr,Ir,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Generate an fsig from a mono audio source ain, using phase vocoder overlap-add analysis.+--+-- > fsig  pvsanal  ain, ifftsize, ioverlap, iwinsize, iwintype [, iformat] [, iinit]+--+-- csound doc: <https://csound.com/docs/manual/pvsanal.html>+pvsanal ::  Sig -> D -> D -> D -> D -> Spec+pvsanal b1 b2 b3 b4 b5 =+  Spec $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvsanal" [(Fr,[Ar,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Arpeggiate the spectral components of a streaming pv signal.+--+-- This opcode arpeggiates spectral components, by amplifying one bin and attenuating+--     all the others around it. Used with an LFO it will provide a spectral arpeggiator similar to Trevor Wishart's+--     CDP program specarp.+--+-- > fsig  pvsarp  fsigin, kbin, kdepth, kgain+--+-- csound doc: <https://csound.com/docs/manual/pvsarp.html>+pvsarp ::  Spec -> Sig -> Sig -> Sig -> Spec+pvsarp b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "pvsarp" [(Fr,[Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- A band pass filter working in the spectral domain.+--+-- Filter the pvoc frames, passing bins whose frequency is within a+--       band, and with linear interpolation for transitional bands.+--+-- > fsig  pvsbandp  fsigin, xlowcut, xlowfull, \+-- >           xhighfull, xhighcut[, ktype]+--+-- csound doc: <https://csound.com/docs/manual/pvsbandp.html>+pvsbandp ::  Spec -> Sig -> Sig -> Sig -> Sig -> Spec+pvsbandp b1 b2 b3 b4 b5 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvsbandp" [(Fr,[Fr,Xr,Xr,Xr,Xr,Kr])] [a1,a2,a3,a4,a5]++-- | +-- A band reject filter working in the spectral domain.+--+-- Filter the pvoc frames, rejecting bins whose frequency is within a+--       band, and with linear interpolation for transitional bands.+--+-- > fsig  pvsbandr  fsigin, xlowcut, xlowfull, \+-- >           xhighfull, xhighcut[, ktype]+--+-- csound doc: <https://csound.com/docs/manual/pvsbandr.html>+pvsbandr ::  Spec -> Sig -> Sig -> Sig -> Sig -> Spec+pvsbandr b1 b2 b3 b4 b5 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvsbandr" [(Fr,[Fr,Xr,Xr,Xr,Xr,Kr])] [a1,a2,a3,a4,a5]++-- | ++--+-- > kbnd  pvsbandwidth  fsig+--+-- csound doc: <https://csound.com/docs/manual/pvsbandwidth.html>+pvsbandwidth ::  Spec -> Sig+pvsbandwidth b1 =+  Sig $ f <$> unSpec b1+  where+    f a1 = opcs "pvsbandwidth" [(Kr,[Fr])] [a1]++-- | +-- Obtain the amp and freq values off a PVS signal bin.+--+-- Obtain the amp and freq values off a PVS signal bin as k-rate variables.+--+-- > kamp, kfr  pvsbin  fsig, kbin+--+-- csound doc: <https://csound.com/docs/manual/pvsbin.html>+pvsbin ::  Spec -> Sig -> (Sig,Sig)+pvsbin b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "pvsbin" ([Kr,Kr],[Fr,Kr]) [a1,a2]++-- | +-- Average the amp/freq time functions of each analysis channel for+--     a specified time.+--+-- Average the amp/freq time functions of each analysis channel for+--     a specified time (truncated to number of frames). As a side-effect+--     the input pvoc stream will be delayed by that amount.+--+-- > fsig  pvsblur  fsigin, kblurtime, imaxdel+--+-- csound doc: <https://csound.com/docs/manual/pvsblur.html>+pvsblur ::  Spec -> Sig -> D -> Spec+pvsblur b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "pvsblur" [(Fr,[Fr,Kr,Ir])] [a1,a2,a3]++-- | +-- This opcode creates and writes to a circular buffer for f-signals (streaming PV signals).+--+-- This opcode sets up and writes to a circular buffer of length ilen (secs),+--         giving a handle for the buffer and a time pointer, which holds the+--         current write position (also in seconds). It can be used with one or +--         more pvsbufread opcodes. Writing is circular, wrapping around at the+--         end of the buffer.+--+-- > ihandle, ktime   pvsbuffer  fsig, ilen +--+-- csound doc: <https://csound.com/docs/manual/pvsbuffer.html>+pvsbuffer ::  Spec -> D -> (D,Sig)+pvsbuffer b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unD b2+  where+    f a1 a2 = mopcs "pvsbuffer" ([Ir,Kr],[Fr,Ir]) [a1,a2]++-- | +-- This opcode reads a circular buffer of f-signals (streaming PV signals).+--+-- This opcode reads from a circular buffer of length ilen (secs),+--       taking a handle for the buffer and a time pointer, which holds the+--       current read position (also in seconds). It is used in conjunction with a+--       pvsbuffer opocde. +--       Reading is circular, wrapping around at the end of the buffer.+--+-- > fsig  pvsbufread   ktime, khandle[, ilo, ihi, iclear] +--+-- csound doc: <https://csound.com/docs/manual/pvsbufread.html>+pvsbufread ::  Sig -> Sig -> Spec+pvsbufread b1 b2 =+  Spec $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "pvsbufread" [(Fr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2]++-- | +-- This opcode reads a circular buffer of f-signals (streaming PV signals), with binwise additional delays.+--+-- This opcode reads from a circular buffer of length ilen (secs),+--       taking a handle for the buffer and a time pointer, which holds the+--       current read position (also in seconds). It is used in conjunction with a pvsbuffer opocde. +--       Reading is circular, wrapping around at the end of the buffer. Extra delay times are taken from+--       a function table, with each point on it defining a delay time in seconds affecting the corresponding bin.+--+-- > fsig  pvsbufread2   ktime, khandle, ift1, ift2 +--+-- csound doc: <https://csound.com/docs/manual/pvsbufread2.html>+pvsbufread2 ::  Sig -> Sig -> D -> D -> Spec+pvsbufread2 b1 b2 b3 b4 =+  Spec $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "pvsbufread2" [(Fr,[Kr,Kr,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Scale the frequency components of a pv stream.+--+-- Scale the frequency components of a pv stream, resulting+--       in pitch shift. Output amplitudes can be optionally modified in order+--       to attempt formant preservation.+--+-- > fsig  pvscale  fsigin, kscal[, kkeepform, kgain, kcoefs]+--+-- csound doc: <https://csound.com/docs/manual/pvscale.html>+pvscale ::  Spec -> Sig -> Spec+pvscale b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = opcs "pvscale" [(Fr,[Fr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | +-- Calculate the spectral centroid of a signal.+--+-- Calculate the spectral centroid of a signal from its discrete Fourier transform.+--+-- > kcent  pvscent  fsig+-- > acent  pvscent  fsig+--+-- csound doc: <https://csound.com/docs/manual/pvscent.html>+pvscent ::  Spec -> Sig+pvscent b1 =+  Sig $ f <$> unSpec b1+  where+    f a1 = opcs "pvscent" [(Kr,[Fr]),(Ar,[Fr])] [a1]++-- | +-- Calculate the cepstrum of a pvs input, optionally liftering coefficients.+--++--+-- > keps[]  pvsceps  fsig[, icoefs]+--+-- csound doc: <https://csound.com/docs/manual/pvsceps.html>+pvsceps ::  Spec -> Sig+pvsceps b1 =+  Sig $ f <$> unSpec b1+  where+    f a1 = opcs "pvsceps" [(Kr,[Fr,Ir])] [a1]++-- | +-- Performs cross-synthesis between two source fsigs.+--+-- > fsig  pvscross  fsrc, fdest, kamp1, kamp2+--+-- csound doc: <https://csound.com/docs/manual/pvscross.html>+pvscross ::  Spec -> Spec -> Sig -> Sig -> Spec+pvscross b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "pvscross" [(Fr,[Fr,Fr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Spectral azimuth-based de-mixing of stereo sources.+--+-- Spectral azimuth-based de-mixing of stereo sources, with a reverse-panning result. This+--       opcode implements the Azimuth Discrimination and Resynthesis (ADRess) algorithm, developed by+--       Dan Barry (Barry et Al. "Sound Source Separation Azimuth Discrimination and Resynthesis". DAFx'04, +--       Univ. of Napoli). The source separation, or de-mixing, is controlled by two parameters: an azimuth+--       position (kpos) and a subspace width (kwidth). The first one is used to locate the spectral peaks of +--       individual sources on a stereo mix, whereas the second widens the 'search space', including/exclufing +--       the peaks around kpos. These two parameters can be used interactively to extract source sounds from+--       a stereo mix. The algorithm is particularly successful with studio recordings where individual instruments+--       occupy individual panning positions; it is, in fact, a reverse-panning algorithm.+--+-- > fsig  pvsdemix  fleft, fright, kpos, kwidth, ipoints+--+-- csound doc: <https://csound.com/docs/manual/pvsdemix.html>+pvsdemix ::  Spec -> Spec -> Sig -> Sig -> D -> Spec+pvsdemix b1 b2 b3 b4 b5 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "pvsdemix" [(Fr,[Fr,Fr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Read a selected channel from a PVOC-EX analysis file.+--+-- Create an fsig stream by reading a selected channel from a PVOC-EX analysis file, with frame interpolation.+--+-- > fsig  pvsdiskin  SFname,ktscal,kgain[,ioffset, ichan]+--+-- csound doc: <https://csound.com/docs/manual/pvsdiskin.html>+pvsdiskin ::  Str -> Sig -> Sig -> Spec+pvsdiskin b1 b2 b3 =+  Spec $ f <$> unStr b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsdiskin" [(Fr,[Sr,Kr,Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- Displays a PVS signal as an amplitude vs. freq graph.+--+-- This opcode will display a PVS signal fsig. Uses X11 or  FLTK windows if enabled, else +-- 	  (or if -g flag is set) +-- 	  displays are approximated in ASCII characters.+--+-- >  pvsdisp  fsig[, ibins, iwtflg] +--+-- csound doc: <https://csound.com/docs/manual/pvsdisp.html>+pvsdisp ::  Spec -> SE ()+pvsdisp b1 =+  SE $ join $ f <$> (lift . unSpec) b1+  where+    f a1 = opcsDep_ "pvsdisp" [(Xr,[Fr,Ir,Ir])] [a1]++-- | +-- Multiply amplitudes of a pvoc stream by those of a second+-- pvoc stream, with dynamic scaling.+--+-- > fsig  pvsfilter  fsigin, fsigfil, kdepth[, igain]+--+-- csound doc: <https://csound.com/docs/manual/pvsfilter.html>+pvsfilter ::  Spec -> Spec -> Sig -> Spec+pvsfilter b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsfilter" [(Fr,[Fr,Fr,Kr,Ir])] [a1,a2,a3]++-- | +-- Read a selected channel from a PVOC-EX analysis file.+--+-- Create an fsig stream by reading a selected channel from a PVOC-EX analysis file loaded into memory, with frame interpolation. Only format 0 files (amplitude+frequency) are currently supported. The operation of this opcode mirrors that of pvoc, but outputs an fsig instead of a resynthesized signal.+--+-- > fsig  pvsfread  ktimpt, ifn [, ichan]+--+-- csound doc: <https://csound.com/docs/manual/pvsfread.html>+pvsfread ::  Sig -> Tab -> Spec+pvsfread b1 b2 =+  Spec $ f <$> unSig b1 <*> unTab b2+  where+    f a1 a2 = opcs "pvsfread" [(Fr,[Kr,Ir,Ir])] [a1,a2]++-- | +-- Freeze the amplitude and frequency time functions of a pv stream according to a control-rate+--       trigger.+--+-- This opcodes 'freezes' the evolution of pvs stream by locking into steady amplitude and/or+--       frequency values for each bin. The freezing is controlled, independently for amplitudes and+--       frequencies, by a control-rate trigger, which switches the freezing 'on' if equal to or above+--       1 and 'off' if below 1.+--+-- > fsig  pvsfreeze  fsigin, kfreeza, kfreezf+--+-- csound doc: <https://csound.com/docs/manual/pvsfreeze.html>+pvsfreeze ::  Spec -> Sig -> Sig -> Spec+pvsfreeze b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsfreeze" [(Fr,[Fr,Kr,Kr])] [a1,a2,a3]++-- | ++--+-- > fsig  pvsfromarray  karr[][,ihopsize, iwinsize, iwintype]+-- > fsig  pvsfromarray  kmags[], kfreqs[][,ihopsize, iwinsize, iwintype]+--+-- csound doc: <https://csound.com/docs/manual/pvsfromarray.html>+pvsfromarray ::  Sig -> Spec+pvsfromarray b1 =+  Spec $ f <$> unSig b1+  where+    f a1 = opcs "pvsfromarray" [(Fr,[Kr,Ir,Ir,Ir]),(Fr,[Kr,Kr,Ir,Ir,Ir])] [a1]++-- | +-- Reads amplitude and/or frequency data from function tables.+--+-- >  pvsftr  fsrc, ifna [, ifnf]+--+-- csound doc: <https://csound.com/docs/manual/pvsftr.html>+pvsftr ::  Spec -> Tab -> SE ()+pvsftr b1 b2 =+  SE $ join $ f <$> (lift . unSpec) b1 <*> (lift . unTab) b2+  where+    f a1 a2 = opcsDep_ "pvsftr" [(Xr,[Fr,Ir,Ir])] [a1,a2]++-- | +-- Writes amplitude and/or frequency data to function tables.+--+-- > kflag  pvsftw  fsrc, ifna [, ifnf]+--+-- csound doc: <https://csound.com/docs/manual/pvsftw.html>+pvsftw ::  Spec -> Tab -> Sig+pvsftw b1 b2 =+  Sig $ f <$> unSpec b1 <*> unTab b2+  where+    f a1 a2 = opcs "pvsftw" [(Kr,[Fr,Ir,Ir])] [a1,a2]++-- | +-- Write a fsig to a PVOCEX file.+--+-- This opcode writes a fsig to a PVOCEX file (which in turn can be read by pvsfread or other programs that support PVOCEX file input).+--+-- >  pvsfwrite  fsig, ifile+--+-- csound doc: <https://csound.com/docs/manual/pvsfwrite.html>+pvsfwrite ::  Spec -> Str -> SE ()+pvsfwrite b1 b2 =+  SE $ join $ f <$> (lift . unSpec) b1 <*> (lift . unStr) b2+  where+    f a1 a2 = opcsDep_ "pvsfwrite" [(Xr,[Fr,Sr])] [a1,a2]++-- | +-- Scale the amplitude of a pv stream.+--+-- > fsig  pvsgain  fsigin, kgain +--+-- csound doc: <https://csound.com/docs/manual/pvsgain.html>+pvsgain ::  Spec -> Sig -> Spec+pvsgain b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = opcs "pvsgain" [(Fr,[Fr,Kr])] [a1,a2]++-- | +-- Shift the frequency components of a pv stream, stretching/compressing+--       its spectrum.+--+-- > fsig  pvshift  fsigin, kshift, klowest[, kkeepform, igain, kcoefs]+--+-- csound doc: <https://csound.com/docs/manual/pvshift.html>+pvshift ::  Spec -> Sig -> Sig -> Spec+pvshift b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvshift" [(Fr,[Fr,Kr,Kr,Kr,Ir,Kr])] [a1,a2,a3]++-- | +-- Instantaneous Frequency Distribution, magnitude and phase analysis.+--+-- The pvsifd opcode takes an input a-rate signal and performs an Instantaneous Frequency,+--   magnitude and phase analysis, using the STFT and pvsifd (Instantaneous Frequency Distribution),+--   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial+--   Tracking", Proc.of ICMC05, Barcelona. It generates two PV streaming signals, one containing the+--   amplitudes and frequencies (a similar output to pvsanal) and another containing amplitudes and +--   unwrapped phases.+--+-- > ffr,fphs  pvsifd  ain, ifftsize, ihopsize, iwintype[,iscal]+--+-- csound doc: <https://csound.com/docs/manual/pvsifd.html>+pvsifd ::  Sig -> D -> D -> D -> (Spec,Spec)+pvsifd b1 b2 b3 b4 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = mopcs "pvsifd" ([Fr,Fr],[Ar,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Retrieve an fsig from the input software bus; a pvs equivalent to chani.+--+-- This opcode retrieves an f-sig from the pvs in software bus, which can be+--       used to get data from an external source, using the Csound 5 API. A channel+--       is created if not already existing. The fsig channel is in that case initialised with+--       the given parameters. It is important to note that the pvs input+--       and output (pvsout opcode) busses are independent and data is not shared between them.+--+-- > fsig  pvsin  kchan[, isize, iolap, iwinsize, iwintype, iformat]+--+-- csound doc: <https://csound.com/docs/manual/pvsin.html>+pvsin ::  Sig -> Spec+pvsin b1 =+  Spec $ f <$> unSig b1+  where+    f a1 = opcs "pvsin" [(Fr,[Kr,Ir,Ir,Ir,Ir,Ir])] [a1]++-- | +-- Get information from a PVOC-EX formatted source.+--+-- Get format information about fsrc, whether created by an opcode such as pvsanal, or obtained from a PVOCEX file by pvsfread. This information is available at init time, and can be used to set parameters for other pvs opcodes, and in particular for creating function tables (e.g. for pvsftw), or setting the number of oscillators for pvsadsyn.+--+-- > ioverlap, inumbins, iwinsize, iformat  pvsinfo  fsrc+--+-- csound doc: <https://csound.com/docs/manual/pvsinfo.html>+pvsinfo ::  Spec -> (D,D,D,D)+pvsinfo b1 =+  pureTuple $ f <$> unSpec b1+  where+    f a1 = mopcs "pvsinfo" ([Ir,Ir,Ir,Ir],[Fr]) [a1]++-- | +-- Initialise a spectral (f) variable to zero.+--+-- Performs the equivalent to an init operation on an f-variable.+--+-- > fsig  pvsinit  isize[, iolap, iwinsize, iwintype, iformat]+--+-- csound doc: <https://csound.com/docs/manual/pvsinit.html>+pvsinit ::  D -> Spec+pvsinit b1 =+  Spec $ f <$> unD b1+  where+    f a1 = opcs "pvsinit" [(Fr,[Ir,Ir,Ir,Ir,Ir])] [a1]++-- | +-- Modify amplitudes using a function table, with dynamic scaling.+--+-- Modify amplitudes of fsrc using  function table, with dynamic scaling.+--+-- > fsig  pvsmaska  fsrc, ifn, kdepth+--+-- csound doc: <https://csound.com/docs/manual/pvsmaska.html>+pvsmaska ::  Spec -> Tab -> Sig -> Spec+pvsmaska b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unTab b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsmaska" [(Fr,[Fr,Ir,Kr])] [a1,a2,a3]++-- | +-- Mix 'seamlessly' two pv signals.+--+-- Mix 'seamlessly' two pv signals.  This opcode combines the+--       most prominent components of two pvoc streams into a single+--       mixed stream.+--+-- > fsig  pvsmix  fsigin1, fsigin2+--+-- csound doc: <https://csound.com/docs/manual/pvsmix.html>+pvsmix ::  Spec -> Spec -> Spec+pvsmix b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSpec b2+  where+    f a1 a2 = opcs "pvsmix" [(Fr,[Fr,Fr])] [a1,a2]++-- | +-- Smooth the amplitude and frequency time functions of a pv stream using parallel 1st order+--       lowpass IIR filters with time-varying cutoff frequency.+--+-- Smooth the amplitude and frequency time functions of a pv stream using a 1st order+--       lowpass IIR with time-varying cutoff frequency. This opcode uses the same filter +--       as the tone opcode, but this time acting separately on the amplitude and frequency+--       time functions that make up a pv stream. The cutoff frequency parameter runs at the+--       control-rate, but unlike tone and tonek, it is not specified in Hz, but as fractions+--       of 1/2 frame-rate (actually the pv stream sampling rate), which is easier to+--       understand. This means that the highest cutoff frequency is 1 and the lowest 0; the lower+--       the frequency the smoother the functions and more pronounced the effect will be.+--+-- > fsig  pvsmooth  fsigin, kacf, kfcf+--+-- csound doc: <https://csound.com/docs/manual/pvsmooth.html>+pvsmooth ::  Spec -> Sig -> Sig -> Spec+pvsmooth b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvsmooth" [(Fr,[Fr,Kr,Kr])] [a1,a2,a3]++-- | +-- Performs morphing (or interpolation) between two source fsigs.+--+-- Performs morphing (or interpolation)  between two source fsigs.+--+-- > fsig  pvsmorph  fsig1, fsig2, kampint, kfrqint+--+-- csound doc: <https://csound.com/docs/manual/pvsmorph.html>+pvsmorph ::  Spec -> Spec -> Sig -> Sig -> Spec+pvsmorph b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "pvsmorph" [(Fr,[Fr,Fr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- PVS-based oscillator simulator.+--+-- Generates periodic signal spectra in AMP-FREQ format, with the option of four wave types:+--+-- > fsig  pvsosc  kamp, kfreq, ktype, isize [,ioverlap] [, iwinsize] [, iwintype] [, iformat]+--+-- csound doc: <https://csound.com/docs/manual/pvsosc.html>+pvsosc ::  Sig -> Sig -> Sig -> D -> Spec+pvsosc b1 b2 b3 b4 =+  Spec $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "pvsosc" [(Fr,[Kr,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Write a fsig to the pvs output bus.+--+-- This opcode writes a fsig to a channel of the pvs output bus. Note that the pvs out bus and+-- 	    the pvs in bus are separate and independent. A new channel is created if non-existent.+--+-- >  pvsout  fsig, kchan+--+-- csound doc: <https://csound.com/docs/manual/pvsout.html>+pvsout ::  Spec -> Sig -> SE ()+pvsout b1 b2 =+  SE $ join $ f <$> (lift . unSpec) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "pvsout" [(Xr,[Fr,Kr])] [a1,a2]++-- | +-- Track the pitch and amplitude of a PVS signal.+--+-- Track the pitch and amplitude of a PVS signal as k-rate variables.+--+-- > kfr, kamp  pvspitch  fsig, kthresh+--+-- csound doc: <https://csound.com/docs/manual/pvspitch.html>+pvspitch ::  Spec -> Sig -> (Sig,Sig)+pvspitch b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "pvspitch" ([Kr,Kr],[Fr,Kr]) [a1,a2]++-- | +-- Phase vocoder analysis processing with onset detection/processing.+--+-- pvstanal implements phase vocoder analysis by reading function tables+-- containing sampled-sound sources, with GEN01, and+-- pvstanal will accept deferred allocation tables.+--+-- > fsig  pvstanal  ktimescal, kamp, kpitch, ktab, [kdetect, kwrap, ioffset,ifftsize, ihop, idbthresh]+-- >           +--+-- csound doc: <https://csound.com/docs/manual/pvstanal.html>+pvstanal ::  Sig -> Sig -> Sig -> Tab -> Spec+pvstanal b1 b2 b3 b4 =+  Spec $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4+  where+    f a1 a2 a3 a4 = opcs "pvstanal" [(Fr,[Kr,Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- Transforms a pvoc stream according to a masking function table.+--+-- Transforms a pvoc stream according to a masking function table;+--       if the pvoc stream amplitude falls below the value of the function+--       for a specific pvoc channel, it applies a gain to that channel.+--+-- > fsig  pvstencil  fsigin, kgain, klevel, iftable+--+-- csound doc: <https://csound.com/docs/manual/pvstencil.html>+pvstencil ::  Spec -> Sig -> Sig -> D -> Spec+pvstencil b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "pvstencil" [(Fr,[Fr,Kr,Kr,Ir])] [a1,a2,a3,a4]++-- | +-- Retain only the N loudest bins.+--+-- Process a PV stream by retaining only the N bins with the+--       highest amplitude, zeroing the others.+--+-- > fsig  pvstrace  fsigin, kn +-- > fsig, kBins[]  pvstrace  fsigin, kn[,+-- >          isort, imin, imax] +--+-- csound doc: <https://csound.com/docs/manual/pvstrace.html>+pvstrace :: forall a . Tuple a => Spec -> Sig -> a+pvstrace b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "pvstrace" ([Fr,Kr],[Fr,Kr,Ir,Ir,Ir]) [a1,a2]++-- | +-- Combine the spectral envelope of one fsig with the excitation (frequencies) of another.+--+-- This opcode provides support for cross-synthesis of amplitudes and frequencies. It takes+--     the amplitudes of one input fsig and combines with frequencies from another. It is a spectral+--     version of the well-known channel vocoder.+--+-- > fsig  pvsvoc  famp, fexc, kdepth, kgain [,kcoefs]+--+-- csound doc: <https://csound.com/docs/manual/pvsvoc.html>+pvsvoc ::  Spec -> Spec -> Sig -> Sig -> Spec+pvsvoc b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "pvsvoc" [(Fr,[Fr,Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Warp the spectral envelope of a PVS signal+--+-- Warp the spectral envelope of a PVS signal by means of shifting and scaling.+--+-- > fsig  pvswarp  fsigin, kscal, kshift[, klowest, kmeth, kgain, kcoefs]+--+-- csound doc: <https://csound.com/docs/manual/pvswarp.html>+pvswarp ::  Spec -> Sig -> Sig -> Spec+pvswarp b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "pvswarp" [(Fr,[Fr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1,a2,a3]++-- | +-- Resynthesise using a FFT overlap-add.+--+-- Resynthesise phase vocoder data (f-signal) using a FFT overlap-add.+--+-- > ares  pvsynth  fsrc, [iinit]+--+-- csound doc: <https://csound.com/docs/manual/pvsynth.html>+pvsynth ::  Spec -> Sig+pvsynth b1 =+  Sig $ f <$> unSpec b1+  where+    f a1 = opcs "pvsynth" [(Ar,[Fr,Ir])] [a1]++-- | +-- Streaming partial track additive synthesis with cubic phase interpolation with+-- pitch control and support for timescale-modified input+--+-- The resyn opcode takes an input containg a TRACKS pv streaming signal (as generated,+--   for instance by partials). It resynthesises the signal using linear amplitude and cubic phase+--   interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls. Resyn is+--   a modified version of sinsyn, allowing for the resynthesis of data with pitch and timescale changes.+--+-- > asig  resyn  fin, kscal, kpitch, kmaxtracks, ifn+--+-- csound doc: <https://csound.com/docs/manual/resyn.html>+resyn ::  Spec -> Sig -> Sig -> Sig -> Tab -> Sig+resyn b1 b2 b3 b4 b5 =+  Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5+  where+    f a1 a2 a3 a4 a5 = opcs "resyn" [(Ar,[Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Streaming partial track additive synthesis with cubic phase interpolation+--+-- The sinsyn opcode takes an input containg a TRACKS pv streaming signal (as generated,+--   for instance by the partials opcode). It resynthesises the signal using linear amplitude and cubic phase+--   interpolation to drive a bank of interpolating oscillators with amplitude scaling control. sinsyn +--   attempts to preserve the phase of the partials in the original signal and in so doing it does not allow for+--   pitch or timescale modifications of the signal.+--+-- > asig  sinsyn  fin, kscal, kmaxtracks, ifn+--+-- csound doc: <https://csound.com/docs/manual/sinsyn.html>+sinsyn ::  Spec -> Sig -> Sig -> Tab -> Sig+sinsyn b1 b2 b3 b4 =+  Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unTab b4+  where+    f a1 a2 a3 a4 = opcs "sinsyn" [(Ar,[Fr,Kr,Kr,Ir])] [a1,a2,a3,a4]++-- | +-- Instantaneous Frequency Distribution, magnitude and phase analysis.+--+-- The tabifd opcode takes an input function table and performs an Instantaneous Frequency,+--   magnitude and phase analysis, using the STFT and tabifd (Instantaneous Frequency Distribution),+--   as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial+--   Tracking", Proc.of ICMC05, Barcelona. It generates two PV streaming signals, one containing the+--   amplitudes and frequencies (a similar output to pvsanal) and another containing amplitudes and +--   unwrapped phases.+--+-- > ffr,fphs  tabifd  ktimpt, kamp, kpitch, ifftsize, ihopsize, iwintype,ifn+--+-- csound doc: <https://csound.com/docs/manual/tabifd.html>+tabifd ::  Sig -> Sig -> Sig -> D -> D -> D -> Tab -> (Spec,Spec)+tabifd b1 b2 b3 b4 b5 b6 b7 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unTab b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = mopcs "tabifd" ([Fr,Fr],[Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4,a5,a6,a7]++-- | +-- Streaming partial track additive synthesis+--+-- The tradsyn opcode takes an input containg a TRACKS pv streaming signal (as generated,+--       for instance by partials),as described in Lazzarini et al, "Time-stretching using the Instantaneous Frequency Distribution and Partial+--       Tracking", Proc.of ICMC05, Barcelona. It resynthesises the signal using linear amplitude and frequency+--       interpolation to drive a bank of interpolating oscillators with amplitude and pitch scaling controls.+--+-- > asig  tradsyn  fin, kscal, kpitch, kmaxtracks, ifn+--+-- csound doc: <https://csound.com/docs/manual/tradsyn.html>+tradsyn ::  Spec -> Sig -> Sig -> Sig -> Tab -> Sig+tradsyn b1 b2 b3 b4 b5 =+  Sig $ f <$> unSpec b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5+  where+    f a1 a2 a3 a4 a5 = opcs "tradsyn" [(Ar,[Fr,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Streaming partial track cross-synthesis.+--+-- The trcross opcode takes two inputs containg TRACKS pv streaming signals (as generated,+--       for instance by partials) and cross-synthesises them into a single TRACKS stream. Two+--       different modes of operation are used: mode 0, cross-synthesis by multiplication of+--       the amplitudes of the two inputs and mode 1, cross-synthesis by the substititution of+--       the amplitudes of input 1 by the input 2. Frequencies and phases of input 1 are preserved+--       in the output. The cross-synthesis is done by matching tracks between the two inputs using+--       a 'search interval'. The matching algorithm will look for tracks in the second input that +--       are within the search interval around each track in the first input. This interval can be changed+--       at the control rate. Wider search intervals will find more matches.+--+-- > fsig  trcross  fin1, fin2, ksearch, kdepth [, kmode] +--+-- csound doc: <https://csound.com/docs/manual/trcross.html>+trcross ::  Spec -> Spec -> Sig -> Sig -> Spec+trcross b1 b2 b3 b4 =+  Spec $ f <$> unSpec b1 <*> unSpec b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "trcross" [(Fr,[Fr,Fr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Streaming partial track filtering.+--+-- The trfilter opcode takes an input containg a TRACKS pv streaming signal (as generated,+--       for instance by partials) and filters it using an amplitude response curve stored in+--       a function table. The function table can have any size (no restriction to powers-of-two).+--       The table lookup is done by linear-interpolation. It is possible to create time-varying+--       filter curves by updating the amlitude response table with a table-writing opcode.+--+-- > fsig  trfilter  fin, kamnt, ifn+--+-- csound doc: <https://csound.com/docs/manual/trfilter.html>+trfilter ::  Spec -> Sig -> Tab -> Spec+trfilter b1 b2 b3 =+  Spec $ f <$> unSpec b1 <*> unSig b2 <*> unTab b3+  where+    f a1 a2 a3 = opcs "trfilter" [(Fr,[Fr,Kr,Ir])] [a1,a2,a3]++-- | +-- Extracts the highest-frequency track from a streaming track input signal.+--+-- The trhighest opcode takes an input containg TRACKS pv streaming signals (as generated,+--       for instance by partials) and outputs only the highest track. In addition it outputs+--       two k-rate signals, corresponding to the frequency and amplitude of the highest track+--       signal.+--+-- > fsig, kfr, kamp  trhighest  fin1, kscal+--+-- csound doc: <https://csound.com/docs/manual/trhighest.html>+trhighest ::  Spec -> Sig -> (Spec,Sig,Sig)+trhighest b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "trhighest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]++-- | +-- Extracts the lowest-frequency track from a streaming track input signal.+--+-- The trlowest opcode takes an input containg TRACKS pv streaming signals (as generated,+--       for instance by partials) and outputs only the lowest track. In addition it outputs+--       two k-rate signals, corresponding to the frequency and amplitude of the lowest track+--       signal.+--+-- > fsig, kfr, kamp  trlowest  fin1, kscal+--+-- csound doc: <https://csound.com/docs/manual/trlowest.html>+trlowest ::  Spec -> Sig -> (Spec,Sig,Sig)+trlowest b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "trlowest" ([Fr,Kr,Kr],[Fr,Kr]) [a1,a2]++-- | +-- Streaming partial track mixing.+--+-- The trmix opcode takes two inputs containg TRACKS pv streaming signals (as generated,+--       for instance by partials) and mixes them into a single TRACKS stream. Tracks will be+--       mixed up to the available space (defined by the original number of FFT bins in +--       the analysed signals). If the sum of the input tracks exceeds this space, the higher-ordered+--       tracks in the second input will be pruned.+--+-- > fsig  trmix  fin1, fin2 +--+-- csound doc: <https://csound.com/docs/manual/trmix.html>+trmix ::  Spec -> Spec -> Spec+trmix b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSpec b2+  where+    f a1 a2 = opcs "trmix" [(Fr,[Fr,Fr])] [a1,a2]++-- | +-- Streaming partial track frequency scaling.+--+-- The trscale opcode takes an input containg a TRACKS pv streaming signal (as generated,+--       for instance by partials) and scales all frequencies by a k-rate amount. It can also, optionally,+--       scale the gain of the signal by a k-rate amount (default 1). The result is pitch shifting of+--       the input tracks.+--+-- > fsig  trscale  fin, kpitch[, kgain]+--+-- csound doc: <https://csound.com/docs/manual/trscale.html>+trscale ::  Spec -> Sig -> Spec+trscale b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = opcs "trscale" [(Fr,[Fr,Kr,Kr])] [a1,a2]++-- | +-- Streaming partial track frequency scaling.+--+-- The trshift opcode takes an input containg a TRACKS pv streaming signal (as generated,+--       for instance by partials) and shifts all frequencies by a k-rate frequency. It can also, optionally,+--       scale the gain of the signal by a k-rate amount (default 1). The result is frequency shifting of+--       the input tracks.+--+-- > fsig  trshift  fin, kpshift[, kgain]+--+-- csound doc: <https://csound.com/docs/manual/trshift.html>+trshift ::  Spec -> Sig -> Spec+trshift b1 b2 =+  Spec $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = opcs "trshift" [(Fr,[Fr,Kr,Kr])] [a1,a2]++-- | +-- Streaming partial track frequency splitting.+--+-- The trsplit opcode takes an input containg a TRACKS pv streaming signal (as generated,+--       for instance by partials) and splits it into two signals according to a k-rate frequency 'split point'. +--       The first output will contain all tracks up from 0Hz to the split frequency and the second will +--       contain the tracks from the split frequency up to the Nyquist.+--       It can also, optionally, scale the gain of the output signals by a k-rate amount (default 1). +--       The result is two output signals containing only part of the original spectrum.+--+-- > fsiglow, fsighi  trsplit  fin, ksplit[, kgainlow, kgainhigh]+--+-- csound doc: <https://csound.com/docs/manual/trsplit.html>+trsplit ::  Spec -> Sig -> (Spec,Spec)+trsplit b1 b2 =+  pureTuple $ f <$> unSpec b1 <*> unSig b2+  where+    f a1 a2 = mopcs "trsplit" ([Fr,Fr],[Fr,Kr,Kr,Kr]) [a1,a2]++-- ATS.++-- | +-- uses the data from an ATS analysis file to perform additive synthesis.+--+-- ATSadd reads from an ATS analysis file and uses the data to perform additive synthesis using an internal array of interpolating oscillators.+--+-- > ar  ATSadd  ktimepnt, kfmod, iatsfile, ifn, ipartials[, ipartialoffset, \+-- >             ipartialincr, igatefn]+--+-- csound doc: <https://csound.com/docs/manual/ATSadd.html>+atsAdd ::  Sig -> Sig -> D -> Tab -> D -> Sig+atsAdd b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "ATSadd" [(Ar,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- uses the data from an ATS analysis file to perform noise resynthesis.+--+-- ATSaddnz reads from an ATS analysis file and uses the data to perform additive synthesis using a modified randi function.+--+-- > ar  ATSaddnz  ktimepnt, iatsfile, ibands[, ibandoffset, ibandincr]+--+-- csound doc: <https://csound.com/docs/manual/ATSaddnz.html>+atsAddnz ::  Sig -> D -> D -> Sig+atsAddnz b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "ATSaddnz" [(Ar,[Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.+--+-- ATSbufread reads data from and ATS data file and stores it in an internal data table of frequency, amplitude pairs.+--+-- >  ATSbufread  ktimepnt, kfmod, iatsfile, ipartials[, ipartialoffset, \+-- >               ipartialincr]+--+-- csound doc: <https://csound.com/docs/manual/ATSbufread.html>+atsBufread ::  Sig -> Sig -> D -> D -> SE ()+atsBufread b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "ATSbufread" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | +-- perform cross synthesis from ATS analysis files.+--+-- ATScross uses data from an ATS analysis file and data from an ATSbufread to perform cross synthesis.+--+-- > ar  ATScross  ktimepnt, kfmod, iatsfile, ifn, kmylev, kbuflev, ipartials \+-- >               [, ipartialoffset, ipartialincr]+--+-- csound doc: <https://csound.com/docs/manual/ATScross.html>+atsCross ::  Sig -> Sig -> D -> Tab -> Sig -> Sig -> D -> Sig+atsCross b1 b2 b3 b4 b5 b6 b7 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unTab b4 <*> unSig b5 <*> unSig b6 <*> unD b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcs "ATScross" [(Ar,[Kr,Kr,Ir,Ir,Kr,Kr,Ir,Ir,Ir])] [a1+                                                                                 ,a2+                                                                                 ,a3+                                                                                 ,a4+                                                                                 ,a5+                                                                                 ,a6+                                                                                 ,a7]++-- | +-- reads data out of the header of an ATS file.+--+-- atsinfo reads data out of the header of an ATS file.+--+-- > idata  ATSinfo  iatsfile, ilocation+--+-- csound doc: <https://csound.com/docs/manual/ATSinfo.html>+atsInfo ::  D -> D -> D+atsInfo b1 b2 =+  D $ f <$> unD b1 <*> unD b2+  where+    f a1 a2 = opcs "ATSinfo" [(Ir,[Ir,Ir])] [a1,a2]++-- | +-- allows a user to determine the frequency envelope of any ATSbufread.+--+-- ATSinterpread allows a user to determine the frequency envelope of any ATSbufread.+--+-- > kamp  ATSinterpread  kfreq+--+-- csound doc: <https://csound.com/docs/manual/ATSinterpread.html>+atsInterpread ::  Sig -> Sig+atsInterpread b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "ATSinterpread" [(Kr,[Kr])] [a1]++-- | +-- returns a frequency, amplitude pair from an ATSbufread opcode.+--+-- ATSpartialtap takes a partial number and returns a frequency, amplitude pair. The frequency and amplitude data comes from an ATSbufread opcode.+--+-- > kfrq, kamp  ATSpartialtap  ipartialnum+--+-- csound doc: <https://csound.com/docs/manual/ATSpartialtap.html>+atsPartialtap ::  D -> (Sig,Sig)+atsPartialtap b1 =+  pureTuple $ f <$> unD b1+  where+    f a1 = mopcs "ATSpartialtap" ([Kr,Kr],[Ir]) [a1]++-- | +-- reads data from an ATS file.+--+-- ATSread returns the amplitude (kamp) and frequency (kfreq) information of a user specified partial contained in the ATS analysis file at the time indicated by the time pointer ktimepnt.+--+-- > kfreq, kamp  ATSread  ktimepnt, iatsfile, ipartial+--+-- csound doc: <https://csound.com/docs/manual/ATSread.html>+atsRead ::  Sig -> D -> D -> (Sig,Sig)+atsRead b1 b2 b3 =+  pureTuple $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = mopcs "ATSread" ([Kr,Kr],[Kr,Ir,Ir]) [a1,a2,a3]++-- | +-- reads data from an ATS file.+--+-- ATSreadnz returns the energy (kenergy) of a user specified noise band (1-25 bands) at the time indicated by the time pointer ktimepnt.+--+-- > kenergy  ATSreadnz  ktimepnt, iatsfile, iband+--+-- csound doc: <https://csound.com/docs/manual/ATSreadnz.html>+atsReadnz ::  Sig -> D -> D -> Sig+atsReadnz b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "ATSreadnz" [(Kr,[Kr,Ir,Ir])] [a1,a2,a3]++-- | +-- uses the data from an ATS analysis file to perform resynthesis.+--+-- ATSsinnoi reads data from an ATS data file and uses the information to synthesize sines and noise together.+--+-- > ar  ATSsinnoi  ktimepnt, ksinlev, knzlev, kfmod, iatsfile, ipartials \+-- >               [, ipartialoffset, ipartialincr]+--+-- csound doc: <https://csound.com/docs/manual/ATSsinnoi.html>+atsSinnoi ::  Sig -> Sig -> Sig -> Sig -> D -> D -> Sig+atsSinnoi b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unD b5 <*> unD b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "ATSsinnoi" [(Ar,[Kr,Kr,Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]++-- Loris.++-- | +-- Morphs two stored sets of bandwidth-enhanced partials+--     and stores a new set of partials representing the morphed+--     sound. The morph is performed by linearly interpolating the+--     parameter envelopes (frequency, amplitude, and bandwidth, or+--     noisiness) of the bandwidth-enhanced partials according to+--     control-rate frequency, amplitude, and bandwidth morphing+--     functions.+--+-- lorismorph morphs two stored sets of bandwidth-enhanced+--     partials and stores a new set of partials representing the morphed+--     sound. The morph is performed by linearly interpolating the+--     parameter envelopes (frequency, amplitude, and bandwidth, or+--     noisiness) of the bandwidth-enhanced partials according to+--     control-rate frequency, amplitude, and bandwidth morphing+--     functions.+--+-- >  lorismorph  isrcidx, itgtidx, istoreidx, kfreqmorphenv, kampmorphenv, kbwmorphenv+--+-- csound doc: <https://csound.com/docs/manual/lorismorph.html>+lorismorph ::  D -> D -> D -> Sig -> Sig -> Sig -> SE ()+lorismorph b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "lorismorph" [(Xr,[Ir,Ir,Ir,Kr,Kr,Kr])] [a1,a2,a3,a4,a5,a6]++-- | +-- renders a stored set of bandwidth-enhanced partials using the method of Bandwidth-Enhanced Additive Synthesis implemented in the Loris software, applying control-rate frequency, amplitude, and bandwidth scaling envelopes.+--+-- lorisplay renders a stored set of+--     bandwidth-enhanced partials using the method of Bandwidth-Enhanced+--     Additive Synthesis implemented in the Loris software, applying+--     control-rate frequency, amplitude, and bandwidth scaling+--     envelopes.+--+-- > ar  lorisplay  ireadidx, kfreqenv, kampenv, kbwenv+--+-- csound doc: <https://csound.com/docs/manual/lorisplay.html>+lorisplay ::  D -> Sig -> Sig -> Sig -> Sig+lorisplay b1 b2 b3 b4 =+  Sig $ f <$> unD b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "lorisplay" [(Ar,[Ir,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | +-- Imports a set of bandwidth-enhanced partials from a SDIF-format+--     data file, applying control-rate frequency, amplitude, and+--     bandwidth scaling envelopes, and stores the modified partials in+--     memory.+--+-- lorisread imports a set of bandwidth-enhanced partials from a SDIF-format data file, applying control-rate frequency, amplitude, and bandwidth scaling envelopes, and stores the modified partials in memory.+--+-- >  lorisread  ktimpnt, ifilcod, istoreidx, kfreqenv, kampenv, kbwenv[, ifadetime]+--+-- csound doc: <https://csound.com/docs/manual/lorisread.html>+lorisread ::  Sig -> Str -> D -> Sig -> Sig -> Sig -> SE ()+lorisread b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unStr) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "lorisread" [(Xr,[Kr,Sr,Ir,Kr,Kr,Kr,Ir])] [a1,a2,a3,a4,a5,a6]++-- Other.++-- | +-- Calculate the spectral centroid of a signal.+--+-- Calculate the spectral centroid of an audio signal on a given trigger.+--+-- > kcent  centroid  asig, ktrig, ifftsize+--+-- csound doc: <https://csound.com/docs/manual/centroid.html>+centroid ::  Sig -> Sig -> D -> Sig+centroid b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "centroid" [(Kr,[Ar,Kr,Ir])] [a1,a2,a3]++-- | +-- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.+--+-- filescal implements phase-locked vocoder+--       processing from disk files, resampling if necessary.+--+-- > asig[,asig2]  filescal  ktimescal, kamp, kpitch, Sfile, klock [,ifftsize, idecim, ithresh]+-- >           +--+-- csound doc: <https://csound.com/docs/manual/filescal.html>+filescal :: forall a . Tuple a => Sig -> Sig -> Sig -> Str -> Sig -> a+filescal b1 b2 b3 b4 b5 =+  pureTuple $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unStr b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = mopcs "filescal" ([Ar,Ar],[Kr,Kr,Kr,Sr,Kr,Ir,Ir,Ir]) [a1,a2,a3,a4,a5]++-- | +-- Phase-locked vocoder processing.+--+-- mincer implements phase-locked vocoder processing using function tables+-- containing sampled-sound sources, with GEN01, and+-- mincer will accept deferred allocation tables.+--+-- > asig  mincer  atimpt, kamp, kpitch, ktab, klock[,ifftsize,idecim]+-- >           +--+-- csound doc: <https://csound.com/docs/manual/mincer.html>+mincer ::  Sig -> Sig -> Sig -> Tab -> Sig -> Sig+mincer b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "mincer" [(Ar,[Ar,Kr,Kr,Kr,Kr,Ir,Ir])] [a1,a2,a3,a4,a5]++-- | +-- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.+--+-- mp3scal implements phase-locked vocoder+--       processing from mp3-format  disk files, resampling if necessary.+--+-- > asig, asig2, ktime  mp3scal  Sfile, ktimescal, kpitch, kamp[, iskip, ifftsize, idecim, ilock]+-- >           +--+-- csound doc: <https://csound.com/docs/manual/mp3scal.html>+mp3scal ::  Str -> Sig -> Sig -> Sig -> (Sig,Sig,Sig)+mp3scal b1 b2 b3 b4 =+  pureTuple $ f <$> unStr b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = mopcs "mp3scal" ([Ar,Ar,Kr],[Sr,Kr,Kr,Kr,Ir,Ir,Ir,Ir]) [a1,a2,a3,a4]++-- | +-- Extreme time-stretching algorithm by Nasca Octavian Paul.+--+-- The paulstretch opcode is a lightweight+--       implementation of the PaulStretch time-stretching algorithm by+--       Nasca Octavian Paul. It is ideal for timestretching a signal by+--       very large amounts.+--+-- > asig  paulstretch  istretch, iwindowsize, ift+-- >         +--+-- csound doc: <https://csound.com/docs/manual/paulstretch.html>+paulstretch ::  D -> D -> D -> Sig+paulstretch b1 b2 b3 =+  Sig $ f <$> unD b1 <*> unD b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "paulstretch" [(Ar,[Ir,Ir,Ir])] [a1,a2,a3]++-- | +-- Phase-locked vocoder processing with onset detection/processing, 'tempo-scaling'.+--+-- temposcal implements phase-locked vocoder processing using function tables+--       containing sampled-sound sources, with GEN01, and+--       temposcal will accept deferred allocation tables.+--+-- > asig  temposcal  ktimescal, kamp, kpitch, ktab, klock [,ifftsize, idecim, ithresh]+-- >           +--+-- csound doc: <https://csound.com/docs/manual/temposcal.html>+temposcal ::  Sig -> Sig -> Sig -> Tab -> Sig -> Sig+temposcal b1 b2 b3 b4 b5 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unTab b4 <*> unSig b5+  where+    f a1 a2 a3 a4 a5 = opcs "temposcal" [(Ar,[Kr,Kr,Kr,Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]
src/Csound/Typed/Opcode/Strings.hs view
@@ -5,12 +5,13 @@     strfromurl, strget, strset,          -- * Manipulation.-    puts, sprintf, sprintfk, strcat, strcatk, strcmp, strcmpk, strcpy, strcpyk, strindex, strindexk, strlen, strlenk, strrindex, strrindexk, strsub, strsubk,+    puts, sprintf, sprintfk, strcat, strcatk, strcmp, strcmpk, strcpy, strcpyk, strindex, strindexk, strlen, strlenk, strrindex, strrindexk, strstrip, strsub, strsubk,          -- * Conversion.     strchar, strchark, strlower, strlowerk, strtod, strtodk, strtol, strtolk, strupper, strupperk) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -24,10 +25,12 @@ -- -- > Sdst  strfromurl  StringURL ----- csound doc: <http://csound.com/docs/manual/strfromurl.html>+-- csound doc: <https://csound.com/docs/manual/strfromurl.html> strfromurl ::  Str -> Str-strfromurl b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strfromurl" [(Sr,[Sr])] [a1]+strfromurl b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strfromurl" [(Sr,[Sr])] [a1]  -- |  -- Set string variable to value from strset table or string p-field@@ -36,20 +39,24 @@ -- -- > Sdst  strget  indx ----- csound doc: <http://csound.com/docs/manual/strget.html>+-- csound doc: <https://csound.com/docs/manual/strget.html> strget ::  D -> Str-strget b1 = Str $ f <$> unD b1-    where f a1 = opcs "strget" [(Sr,[Ir])] [a1]+strget b1 =+  Str $ f <$> unD b1+  where+    f a1 = opcs "strget" [(Sr,[Ir])] [a1]  -- |  -- Allows a string to be linked with a numeric value. -- -- >  strset  iarg, istring ----- csound doc: <http://csound.com/docs/manual/strset.html>+-- csound doc: <https://csound.com/docs/manual/strset.html> strset ::  D -> D -> SE ()-strset b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "strset" [(Xr,[Ir,Ir])] [a1,a2]+strset b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "strset" [(Xr,[Ir,Ir])] [a1,a2]  -- Manipulation. @@ -60,10 +67,12 @@ -- -- >  puts  Sstr, ktrig[, inonl] ----- csound doc: <http://csound.com/docs/manual/puts.html>+-- csound doc: <https://csound.com/docs/manual/puts.html> puts ::  Str -> Sig -> SE ()-puts b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "puts" [(Xr,[Sr,Kr,Ir])] [a1,a2]+puts b1 b2 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "puts" [(Xr,[Sr,Kr,Ir])] [a1,a2]  -- |  -- printf-style formatted output to a string variable.@@ -72,10 +81,12 @@ -- -- > Sdst  sprintf  Sfmt, xarg1[, xarg2[, ... ]] ----- csound doc: <http://csound.com/docs/manual/sprintf.html>+-- csound doc: <https://csound.com/docs/manual/sprintf.html> sprintf ::  Str -> Sig -> Str-sprintf b1 b2 = Str $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "sprintf" [(Sr,[Sr] ++ (repeat Xr))] [a1,a2]+sprintf b1 b2 =+  Str $ f <$> unStr b1 <*> unSig b2+  where+    f a1 a2 = opcs "sprintf" [(Sr,[Sr] ++ (repeat Xr))] [a1,a2]  -- |  -- printf-style formatted output to a string variable at k-rate.@@ -84,10 +95,12 @@ -- -- > Sdst  sprintfk  Sfmt, xarg1[, xarg2[, ... ]] ----- csound doc: <http://csound.com/docs/manual/sprintfk.html>+-- csound doc: <https://csound.com/docs/manual/sprintfk.html> sprintfk ::  Str -> Sig -> Str-sprintfk b1 b2 = Str $ f <$> unStr b1 <*> unSig b2-    where f a1 a2 = opcs "sprintfk" [(Sr,[Sr] ++ (repeat Xr))] [a1,a2]+sprintfk b1 b2 =+  Str $ f <$> unStr b1 <*> unSig b2+  where+    f a1 a2 = opcs "sprintfk" [(Sr,[Sr] ++ (repeat Xr))] [a1,a2]  -- |  -- Concatenate strings@@ -96,10 +109,12 @@ -- -- > Sdst  strcat  Ssrc1, Ssrc2 ----- csound doc: <http://csound.com/docs/manual/strcat.html>+-- csound doc: <https://csound.com/docs/manual/strcat.html> strcat ::  Str -> Str -> Str-strcat b1 b2 = Str $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strcat" [(Sr,[Sr,Sr])] [a1,a2]+strcat b1 b2 =+  Str $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strcat" [(Sr,[Sr,Sr])] [a1,a2]  -- |  -- Concatenate strings (k-rate)@@ -108,10 +123,12 @@ -- -- > Sdst  strcatk  Ssrc1, Ssrc2 ----- csound doc: <http://csound.com/docs/manual/strcatk.html>+-- csound doc: <https://csound.com/docs/manual/strcatk.html> strcatk ::  Str -> Str -> Str-strcatk b1 b2 = Str $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strcatk" [(Sr,[Sr,Sr])] [a1,a2]+strcatk b1 b2 =+  Str $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strcatk" [(Sr,[Sr,Sr])] [a1,a2]  -- |  -- Compare strings@@ -120,10 +137,12 @@ -- -- > ires  strcmp  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strcmp.html>+-- csound doc: <https://csound.com/docs/manual/strcmp.html> strcmp ::  Str -> Str -> D-strcmp b1 b2 = D $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strcmp" [(Ir,[Sr,Sr])] [a1,a2]+strcmp b1 b2 =+  D $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strcmp" [(Ir,[Sr,Sr])] [a1,a2]  -- |  -- Compare strings@@ -132,10 +151,12 @@ -- -- > kres  strcmpk  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strcmpk.html>+-- csound doc: <https://csound.com/docs/manual/strcmpk.html> strcmpk ::  Str -> Str -> Sig-strcmpk b1 b2 = Sig $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strcmpk" [(Kr,[Sr,Sr])] [a1,a2]+strcmpk b1 b2 =+  Sig $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strcmpk" [(Kr,[Sr,Sr])] [a1,a2]  -- |  -- Assign value to a string variable@@ -144,10 +165,12 @@ -- -- > Sdst  strcpy  Ssrc ----- csound doc: <http://csound.com/docs/manual/strcpy.html>+-- csound doc: <https://csound.com/docs/manual/strcpy.html> strcpy ::  Str -> Str-strcpy b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strcpy" [(Sr,[Sr])] [a1]+strcpy b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strcpy" [(Sr,[Sr])] [a1]  -- |  -- Assign value to a string variable (k-rate)@@ -156,10 +179,12 @@ -- -- > Sdst  strcpyk  Ssrc ----- csound doc: <http://csound.com/docs/manual/strcpyk.html>+-- csound doc: <https://csound.com/docs/manual/strcpyk.html> strcpyk ::  Str -> Str-strcpyk b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strcpyk" [(Sr,[Sr])] [a1]+strcpyk b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strcpyk" [(Sr,[Sr])] [a1]  -- |  -- Return the position of the first occurence of a string in another string@@ -169,10 +194,12 @@ -- -- > ipos  strindex  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strindex.html>+-- csound doc: <https://csound.com/docs/manual/strindex.html> strindex ::  Str -> Str -> D-strindex b1 b2 = D $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strindex" [(Ir,[Sr,Sr])] [a1,a2]+strindex b1 b2 =+  D $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strindex" [(Ir,[Sr,Sr])] [a1,a2]  -- |  -- Return the position of the first occurence of a string in another string@@ -183,10 +210,12 @@ -- -- > kpos  strindexk  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strindexk.html>+-- csound doc: <https://csound.com/docs/manual/strindexk.html> strindexk ::  Str -> Str -> Sig-strindexk b1 b2 = Sig $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strindexk" [(Kr,[Sr,Sr])] [a1,a2]+strindexk b1 b2 =+  Sig $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strindexk" [(Kr,[Sr,Sr])] [a1,a2]  -- |  -- Return the length of a string@@ -195,10 +224,12 @@ -- -- > ilen  strlen  Sstr ----- csound doc: <http://csound.com/docs/manual/strlen.html>+-- csound doc: <https://csound.com/docs/manual/strlen.html> strlen ::  Str -> D-strlen b1 = D $ f <$> unStr b1-    where f a1 = opcs "strlen" [(Ir,[Sr])] [a1]+strlen b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "strlen" [(Ir,[Sr])] [a1]  -- |  -- Return the length of a string@@ -207,10 +238,12 @@ -- -- > klen  strlenk  Sstr ----- csound doc: <http://csound.com/docs/manual/strlenk.html>+-- csound doc: <https://csound.com/docs/manual/strlenk.html> strlenk ::  Str -> Sig-strlenk b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "strlenk" [(Kr,[Sr])] [a1]+strlenk b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "strlenk" [(Kr,[Sr])] [a1]  -- |  -- Return the position of the last occurence of a string in another string@@ -221,10 +254,12 @@ -- -- > ipos  strrindex  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strrindex.html>+-- csound doc: <https://csound.com/docs/manual/strrindex.html> strrindex ::  Str -> Str -> D-strrindex b1 b2 = D $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strrindex" [(Ir,[Sr,Sr])] [a1,a2]+strrindex b1 b2 =+  D $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strrindex" [(Ir,[Sr,Sr])] [a1,a2]  -- |  -- Return the position of the last occurence of a string in another string@@ -235,22 +270,38 @@ -- -- > kpos  strrindexk  S1, S2 ----- csound doc: <http://csound.com/docs/manual/strrindexk.html>+-- csound doc: <https://csound.com/docs/manual/strrindexk.html> strrindexk ::  Str -> Str -> Sig-strrindexk b1 b2 = Sig $ f <$> unStr b1 <*> unStr b2-    where f a1 a2 = opcs "strrindexk" [(Kr,[Sr,Sr])] [a1,a2]+strrindexk b1 b2 =+  Sig $ f <$> unStr b1 <*> unStr b2+  where+    f a1 a2 = opcs "strrindexk" [(Kr,[Sr,Sr])] [a1,a2]  -- | ++--+-- > Sout  strstrip  Sin [, Smode]+--+-- csound doc: <https://csound.com/docs/manual/strstrip.html>+strstrip ::  Str -> Str+strstrip b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strstrip" [(Sr,[Sr,Sr])] [a1]++-- |  -- Extract a substring -- -- Return a substring of the source string. strsub runs at init time only. -- -- > Sdst  strsub  Ssrc[, istart[, iend]] ----- csound doc: <http://csound.com/docs/manual/strsub.html>+-- csound doc: <https://csound.com/docs/manual/strsub.html> strsub ::  Str -> Str-strsub b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strsub" [(Sr,[Sr,Ir,Ir])] [a1]+strsub b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strsub" [(Sr,[Sr,Ir,Ir])] [a1]  -- |  -- Extract a substring@@ -260,10 +311,12 @@ -- -- > Sdst  strsubk  Ssrc, kstart, kend ----- csound doc: <http://csound.com/docs/manual/strsubk.html>+-- csound doc: <https://csound.com/docs/manual/strsubk.html> strsubk ::  Str -> Sig -> Sig -> Str-strsubk b1 b2 b3 = Str $ f <$> unStr b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "strsubk" [(Sr,[Sr,Kr,Kr])] [a1,a2,a3]+strsubk b1 b2 b3 =+  Str $ f <$> unStr b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "strsubk" [(Sr,[Sr,Kr,Kr])] [a1,a2,a3]  -- Conversion. @@ -276,10 +329,12 @@ -- -- > ichr  strchar  Sstr[, ipos] ----- csound doc: <http://csound.com/docs/manual/strchar.html>+-- csound doc: <https://csound.com/docs/manual/strchar.html> strchar ::  Str -> D-strchar b1 = D $ f <$> unStr b1-    where f a1 = opcs "strchar" [(Ir,[Sr,Ir])] [a1]+strchar b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "strchar" [(Ir,[Sr,Ir])] [a1]  -- |  -- Return the ASCII code of a character in a string@@ -290,10 +345,12 @@ -- -- > kchr  strchark  Sstr[, kpos] ----- csound doc: <http://csound.com/docs/manual/strchark.html>+-- csound doc: <https://csound.com/docs/manual/strchark.html> strchark ::  Str -> Sig-strchark b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "strchark" [(Kr,[Sr,Kr])] [a1]+strchark b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "strchark" [(Kr,[Sr,Kr])] [a1]  -- |  -- Convert a string to lower case@@ -303,10 +360,12 @@ -- -- > Sdst  strlower  Ssrc ----- csound doc: <http://csound.com/docs/manual/strlower.html>+-- csound doc: <https://csound.com/docs/manual/strlower.html> strlower ::  Str -> Str-strlower b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strlower" [(Sr,[Sr])] [a1]+strlower b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strlower" [(Sr,[Sr])] [a1]  -- |  -- Convert a string to lower case@@ -316,10 +375,12 @@ -- -- > Sdst  strlowerk  Ssrc ----- csound doc: <http://csound.com/docs/manual/strlowerk.html>+-- csound doc: <https://csound.com/docs/manual/strlowerk.html> strlowerk ::  Str -> Str-strlowerk b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strlowerk" [(Sr,[Sr])] [a1]+strlowerk b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strlowerk" [(Sr,[Sr])] [a1]  -- |  -- Converts a string to a float (i-rate).@@ -331,10 +392,12 @@ -- > ir  strtod  Sstr -- > ir  strtod  indx ----- csound doc: <http://csound.com/docs/manual/strtod.html>+-- csound doc: <https://csound.com/docs/manual/strtod.html> strtod ::  Str -> D-strtod b1 = D $ f <$> unStr b1-    where f a1 = opcs "strtod" [(Ir,[Sr]),(Ir,[Ir])] [a1]+strtod b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "strtod" [(Ir,[Sr]),(Ir,[Ir])] [a1]  -- |  -- Converts a string to a float (k-rate).@@ -345,10 +408,12 @@ -- > kr  strtodk  Sstr -- > kr  strtodk  kndx ----- csound doc: <http://csound.com/docs/manual/strtodk.html>+-- csound doc: <https://csound.com/docs/manual/strtodk.html> strtodk ::  Str -> Sig-strtodk b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "strtodk" [(Kr,[Sr]),(Kr,[Kr])] [a1]+strtodk b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "strtodk" [(Kr,[Sr]),(Kr,[Kr])] [a1]  -- |  -- Converts a string to a signed integer (i-rate).@@ -360,10 +425,12 @@ -- > ir  strtol  Sstr -- > ir  strtol  indx ----- csound doc: <http://csound.com/docs/manual/strtol.html>+-- csound doc: <https://csound.com/docs/manual/strtol.html> strtol ::  Str -> D-strtol b1 = D $ f <$> unStr b1-    where f a1 = opcs "strtol" [(Ir,[Sr]),(Ir,[Ir])] [a1]+strtol b1 =+  D $ f <$> unStr b1+  where+    f a1 = opcs "strtol" [(Ir,[Sr]),(Ir,[Ir])] [a1]  -- |  -- Converts a string to a signed integer (k-rate).@@ -374,10 +441,12 @@ -- > kr  strtolk  Sstr -- > kr  strtolk  kndx ----- csound doc: <http://csound.com/docs/manual/strtolk.html>+-- csound doc: <https://csound.com/docs/manual/strtolk.html> strtolk ::  Str -> Sig-strtolk b1 = Sig $ f <$> unStr b1-    where f a1 = opcs "strtolk" [(Kr,[Sr]),(Kr,[Kr])] [a1]+strtolk b1 =+  Sig $ f <$> unStr b1+  where+    f a1 = opcs "strtolk" [(Kr,[Sr]),(Kr,[Kr])] [a1]  -- |  -- Convert a string to upper case@@ -387,10 +456,12 @@ -- -- > Sdst  strupper  Ssrc ----- csound doc: <http://csound.com/docs/manual/strupper.html>+-- csound doc: <https://csound.com/docs/manual/strupper.html> strupper ::  Str -> Str-strupper b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strupper" [(Sr,[Sr])] [a1]+strupper b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strupper" [(Sr,[Sr])] [a1]  -- |  -- Convert a string to upper case@@ -400,7 +471,9 @@ -- -- > Sdst  strupperk  Ssrc ----- csound doc: <http://csound.com/docs/manual/strupperk.html>+-- csound doc: <https://csound.com/docs/manual/strupperk.html> strupperk ::  Str -> Str-strupperk b1 = Str $ f <$> unStr b1-    where f a1 = opcs "strupperk" [(Sr,[Sr])] [a1]+strupperk b1 =+  Str $ f <$> unStr b1+  where+    f a1 = opcs "strupperk" [(Sr,[Sr])] [a1]
src/Csound/Typed/Opcode/TableControl.hs view
@@ -2,9 +2,13 @@               -    ftfree, ftgen, ftgentmp, getftargs, sndload) where+    ftfree, ftgen, ftgentmp, getftargs, sndload,+    +    -- * Read/Write Operations.+    ftaudio, ftload, ftloadk, ftprint, ftsamplebank, ftsave, ftsavek, ftset, ftslice, ftslicei, ptablew, tablecopy, tablefilter, tablefilteri, tablegpw, tableicopy, tableigpw, tableimix, tablemix, tablera, tablew, tablewa, tablewkt, tabmorph, tabmorpha, tabmorphak, tabmorphi, tabplay, tabrec) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -15,10 +19,12 @@ -- -- >  ftfree  ifno, iwhen ----- csound doc: <http://csound.com/docs/manual/ftfree.html>+-- csound doc: <https://csound.com/docs/manual/ftfree.html> ftfree ::  Tab -> D -> SE ()-ftfree b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2-    where f a1 a2 = opcs "ftfree" [(Xr,[Ir,Ir])] [a1,a2]+ftfree b1 b2 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "ftfree" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Generate a score function table from within the orchestra.@@ -26,10 +32,12 @@ -- > gir  ftgen  ifn, itime, isize, igen, iarga [, iargb ] [...] -- > gir  ftgen  ifn, itime, isize, igen, iarray ----- csound doc: <http://csound.com/docs/manual/ftgen.html>+-- csound doc: <https://csound.com/docs/manual/ftgen.html> ftgen ::  Tab -> D -> D -> D -> D -> SE D-ftgen b1 b2 b3 b4 b5 = fmap ( D . return) $ SE $ (depT =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "ftgen" [(Ir,(repeat Ir)),(Ir,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+ftgen b1 b2 b3 b4 b5 =+  fmap ( D . return) $ SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep "ftgen" [(Ir,(repeat Ir)),(Ir,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Generate a score function table from within the orchestra, which is deleted at the end of the note.@@ -39,10 +47,12 @@ -- -- > ifno  ftgentmp  ip1, ip2dummy, isize, igen, iarga, iargb, ... ----- csound doc: <http://csound.com/docs/manual/ftgentmp.html>+-- csound doc: <https://csound.com/docs/manual/ftgentmp.html> ftgentmp ::  D -> D -> D -> D -> D -> [D] -> SE Tab-ftgentmp b1 b2 b3 b4 b5 b6 = fmap ( Tab . return) $ SE $ (depT =<<) $ lift $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> mapM unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "ftgentmp" [(Ir,(repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)+ftgentmp b1 b2 b3 b4 b5 b6 =+  fmap ( Tab . return) $ SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> mapM (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep "ftgentmp" [(Ir,(repeat Ir))] ([a1,a2,a3,a4,a5] ++ a6)  -- |  -- Fill a string variable with the arguments used to create a function table at k-rate.@@ -51,10 +61,12 @@ -- -- > Sdst  getftargs  iftno, ktrig ----- csound doc: <http://csound.com/docs/manual/getftargs.html>+-- csound doc: <https://csound.com/docs/manual/getftargs.html> getftargs ::  D -> Sig -> Str-getftargs b1 b2 = Str $ f <$> unD b1 <*> unSig b2-    where f a1 a2 = opcs "getftargs" [(Sr,[Ir,Kr])] [a1,a2]+getftargs b1 b2 =+  Str $ f <$> unD b1 <*> unSig b2+  where+    f a1 a2 = opcs "getftargs" [(Sr,[Ir,Kr])] [a1,a2]  -- |  -- Loads a sound file into memory for use by loscilx@@ -64,7 +76,392 @@ -- >  sndload  Sfname[, ifmt[, ichns[, isr[, ibas[, iamp[, istrt   \ -- >           [, ilpmod[, ilps[, ilpe]]]]]]]]] ----- csound doc: <http://csound.com/docs/manual/sndload.html>+-- csound doc: <https://csound.com/docs/manual/sndload.html> sndload ::  Str -> SE ()-sndload b1 = SE $ (depT_ =<<) $ lift $ f <$> unStr b1-    where f a1 = opcs "sndload" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1]+sndload b1 =+  SE $ join $ f <$> (lift . unStr) b1+  where+    f a1 = opcsDep_ "sndload" [(Xr,[Sr,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1]++-- Read/Write Operations.++-- | ++--+-- > ians  ftaudio  ifn, "filename", iformat[, ibeg, iend]+-- > kans  ftaudio  ktrig, kfn, "filename", kformat [, isync, kbeg, kend]+--+-- csound doc: <https://csound.com/docs/manual/ftaudio.html>+ftaudio ::  Tab -> Str -> D -> Sig+ftaudio b1 b2 b3 =+  Sig $ f <$> unTab b1 <*> unStr b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "ftaudio" [(Ir,[Ir,Sr,Ir,Ir,Ir]),(Kr,[Kr,Kr,Sr,Kr,Ir,Kr,Kr])] [a1,a2,a3]++-- | ++--+-- >  ftload  Sfilename, iflag, ifn1 [, ifn2] [...]+--+-- csound doc: <https://csound.com/docs/manual/ftload.html>+ftload ::  Str -> D -> Tab -> SE ()+ftload b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "ftload" [(Xr,[Sr] ++ (repeat Ir))] [a1,a2,a3]++-- | ++--+-- >  ftloadk  Sfilename, ktrig, iflag, ifn1 [, ifn2] [...]+--+-- csound doc: <https://csound.com/docs/manual/ftloadk.html>+ftloadk ::  Str -> Sig -> D -> Tab -> SE ()+ftloadk b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unTab) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "ftloadk" [(Xr,[Sr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4]++-- | ++--+-- >  ftprint  ifn [, ktrig, kstart, kend, kstep, inumcols ]+--+-- csound doc: <https://csound.com/docs/manual/ftprint.html>+ftprint ::  Tab -> SE ()+ftprint b1 =+  SE $ join $ f <$> (lift . unTab) b1+  where+    f a1 = opcsDep_ "ftprint" [(Xr,[Ir,Kr,Kr,Kr,Kr,Ir])] [a1]++-- | ++--+-- > iNumberOfFile  ftsamplebank  SDirectory, iFirstTableNumber, iSkipTime, iFormat, iChannel,+-- > kNumberOfFile  ftsamplebank  SDirectory, kFirstTableNumber, kTrigger, kSkipTime, kFormat, kChannel,+--+-- csound doc: <https://csound.com/docs/manual/ftsamplebank.html>+ftsamplebank ::  Str -> D -> D -> D -> D -> Sig+ftsamplebank b1 b2 b3 b4 b5 =+  Sig $ f <$> unStr b1 <*> unD b2 <*> unD b3 <*> unD b4 <*> unD b5+  where+    f a1 a2 a3 a4 a5 = opcs "ftsamplebank" [(Ir,[Sr,Ir,Ir,Ir,Ir]),(Kr,[Sr,Kr,Kr,Kr,Kr,Kr])] [a1+                                                                                            ,a2+                                                                                            ,a3+                                                                                            ,a4+                                                                                            ,a5]++-- | ++--+-- >  ftsave  "filename", iflag, ifn1 [, ifn2] [...]+--+-- csound doc: <https://csound.com/docs/manual/ftsave.html>+ftsave ::  Str -> D -> Tab -> SE ()+ftsave b1 b2 b3 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "ftsave" [(Xr,[Sr] ++ (repeat Ir))] [a1,a2,a3]++-- | ++--+-- >  ftsavek  "filename", ktrig, iflag, ifn1 [, ifn2] [...]+--+-- csound doc: <https://csound.com/docs/manual/ftsavek.html>+ftsavek ::  Str -> Sig -> D -> Tab -> SE ()+ftsavek b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unStr) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unTab) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "ftsavek" [(Xr,[Sr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4]++-- | ++--+-- >  ftset  ktablenum, kvalue [, kstart=0, kend=0, kstep=1 ]+-- >  ftset  itablenum, ivalue [, istart=0, iend=0, istep=1 ]+--+-- csound doc: <https://csound.com/docs/manual/ftset.html>+ftset ::  Sig -> Sig -> SE ()+ftset b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "ftset" [(Xr,[Kr,Kr,Kr,Kr,Kr])] [a1,a2]++-- | ++--+-- >  ftslice  ifnsource, ifndest [, kstart, kend, kstep ]+-- >  ftslice  kfnsource, kfndest [, kstart, kend, kstep ]+--+-- csound doc: <https://csound.com/docs/manual/ftslice.html>+ftslice ::  Tab -> Tab -> SE ()+ftslice b1 b2 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2+  where+    f a1 a2 = opcsDep_ "ftslice" [(Xr,[Ir,Ir,Kr,Kr,Kr])] [a1,a2]++-- | ++--+-- >  ftslicei  ifnsource, ifndest [, istart, iend, istep ]+--+-- csound doc: <https://csound.com/docs/manual/ftslicei.html>+ftslicei ::  Tab -> Tab -> SE ()+ftslicei b1 b2 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2+  where+    f a1 a2 = opcsDep_ "ftslicei" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2]++-- | ++--+-- >  ptablew  asig, andx, ifn [, ixmode] [, ixoff] [, iwgmode]+-- >  ptablew  isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode]+-- >  ptablew  ksig, kndx, ifn [, ixmode] [, ixoff] [, iwgmode]+--+-- csound doc: <https://csound.com/docs/manual/ptablew.html>+ptablew ::  Sig -> Sig -> Tab -> SE ()+ptablew b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "ptablew" [(Xr,[Ar,Ar,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- >  tablecopy  kdft, ksft+--+-- csound doc: <https://csound.com/docs/manual/tablecopy.html>+tablecopy ::  Sig -> Sig -> SE ()+tablecopy b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "tablecopy" [(Xr,[Kr,Kr])] [a1,a2]++-- | ++--+-- > knumpassed  tablefilter  kouttable, kintatble, kmode, kparam+--+-- csound doc: <https://csound.com/docs/manual/tablefilter.html>+tablefilter ::  Sig -> Sig -> Sig -> Sig -> Sig+tablefilter b1 b2 b3 b4 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4+  where+    f a1 a2 a3 a4 = opcs "tablefilter" [(Kr,[Kr,Kr,Kr,Kr])] [a1,a2,a3,a4]++-- | ++--+-- > inumpassed  tablefilteri  iouttable, iintatble, imode, iparam+--+-- csound doc: <https://csound.com/docs/manual/tablefilteri.html>+tablefilteri ::  D -> D -> D -> D -> D+tablefilteri b1 b2 b3 b4 =+  D $ f <$> unD b1 <*> unD b2 <*> unD b3 <*> unD b4+  where+    f a1 a2 a3 a4 = opcs "tablefilteri" [(Ir,[Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]++-- | ++--+-- >  tablegpw  kfn+--+-- csound doc: <https://csound.com/docs/manual/tablegpw.html>+tablegpw ::  Tab -> SE ()+tablegpw b1 =+  SE $ join $ f <$> (lift . unTab) b1+  where+    f a1 = opcsDep_ "tablegpw" [(Xr,[Kr])] [a1]++-- | ++--+-- >  tableicopy  idft, isft+--+-- csound doc: <https://csound.com/docs/manual/tableicopy.html>+tableicopy ::  D -> D -> SE ()+tableicopy b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "tableicopy" [(Xr,[Ir,Ir])] [a1,a2]++-- | ++--+-- >  tableigpw  ifn+--+-- csound doc: <https://csound.com/docs/manual/tableigpw.html>+tableigpw ::  Tab -> SE ()+tableigpw b1 =+  SE $ join $ f <$> (lift . unTab) b1+  where+    f a1 = opcsDep_ "tableigpw" [(Xr,[Ir])] [a1]++-- | ++--+-- >  tableimix  idft, idoff, ilen, is1ft, is1off, is1g, is2ft, is2off, is2g+--+-- csound doc: <https://csound.com/docs/manual/tableimix.html>+tableimix ::  D -> D -> D -> D -> D -> D -> D -> D -> D -> SE ()+tableimix b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7 <*> (lift . unD) b8 <*> (lift . unD) b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcsDep_ "tableimix" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                            ,a2+                                                                                            ,a3+                                                                                            ,a4+                                                                                            ,a5+                                                                                            ,a6+                                                                                            ,a7+                                                                                            ,a8+                                                                                            ,a9]++-- | ++--+-- >  tablemix  kdft, kdoff, klen, ks1ft, ks1off, ks1g, ks2ft, ks2off, ks2g+--+-- csound doc: <https://csound.com/docs/manual/tablemix.html>+tablemix ::  Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> Sig -> SE ()+tablemix b1 b2 b3 b4 b5 b6 b7 b8 b9 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unSig) b4 <*> (lift . unSig) b5 <*> (lift . unSig) b6 <*> (lift . unSig) b7 <*> (lift . unSig) b8 <*> (lift . unSig) b9+  where+    f a1 a2 a3 a4 a5 a6 a7 a8 a9 = opcsDep_ "tablemix" [(Xr,[Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr,Kr])] [a1+                                                                                           ,a2+                                                                                           ,a3+                                                                                           ,a4+                                                                                           ,a5+                                                                                           ,a6+                                                                                           ,a7+                                                                                           ,a8+                                                                                           ,a9]++-- | ++--+-- > ares  tablera  kfn, kstart, koff+--+-- csound doc: <https://csound.com/docs/manual/tablera.html>+tablera ::  Tab -> Sig -> Sig -> Sig+tablera b1 b2 b3 =+  Sig $ f <$> unTab b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "tablera" [(Ar,[Kr,Kr,Kr])] [a1,a2,a3]++-- | ++--+-- >  tablew  asig, andx, ifn [, ixmode] [, ixoff] [, iwgmode]+-- >  tablew  isig, indx, ifn [, ixmode] [, ixoff] [, iwgmode]+-- >  tablew  ksig, kndx, ifn [, ixmode] [, ixoff] [, iwgmode]+--+-- csound doc: <https://csound.com/docs/manual/tablew.html>+tablew ::  Sig -> Sig -> Tab -> SE ()+tablew b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tablew" [(Xr,[Ar,Ar,Ir,Ir,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- > kstart  tablewa  kfn, asig, koff+--+-- csound doc: <https://csound.com/docs/manual/tablewa.html>+tablewa ::  Tab -> Sig -> Sig -> Sig+tablewa b1 b2 b3 =+  Sig $ f <$> unTab b1 <*> unSig b2 <*> unSig b3+  where+    f a1 a2 a3 = opcs "tablewa" [(Kr,[Kr,Ar,Kr])] [a1,a2,a3]++-- | ++--+-- >  tablewkt  asig, andx, kfn [, ixmode] [, ixoff] [, iwgmode]+-- >  tablewkt  ksig, kndx, kfn [, ixmode] [, ixoff] [, iwgmode]+--+-- csound doc: <https://csound.com/docs/manual/tablewkt.html>+tablewkt ::  Sig -> Sig -> Tab -> SE ()+tablewkt b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unTab) b3+  where+    f a1 a2 a3 = opcsDep_ "tablewkt" [(Xr,[Ar,Ar,Kr,Ir,Ir,Ir])] [a1,a2,a3]++-- | ++--+-- > kout  tabmorph  kindex, kweightpoint, ktabnum1, ktabnum2, \+-- >           ifn1, ifn2 [, ifn3, ifn4, ...,ifnN]+--+-- csound doc: <https://csound.com/docs/manual/tabmorph.html>+tabmorph ::  Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig+tabmorph b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "tabmorph" [(Kr,[Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- > aout  tabmorpha  aindex, aweightpoint, atabnum1, atabnum2, \+-- >           ifn1, ifn2 [, ifn3, ifn4, ... ifnN]+--+-- csound doc: <https://csound.com/docs/manual/tabmorpha.html>+tabmorpha ::  Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig+tabmorpha b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "tabmorpha" [(Ar,[Ar,Ar,Ar,Ar] ++ (repeat Ir))] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- > aout  tabmorphak  aindex, kweightpoint, ktabnum1, ktabnum2, \+-- >           ifn1, ifn2 [, ifn3, ifn4, ... ifnN]+--+-- csound doc: <https://csound.com/docs/manual/tabmorphak.html>+tabmorphak ::  Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig+tabmorphak b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "tabmorphak" [(Ar,[Ar,Kr,Kr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- > kout  tabmorphi  kindex, kweightpoint, ktabnum1, ktabnum2, \+-- >           ifn1, ifn2 [, ifn3, ifn4, ..., ifnN]+--+-- csound doc: <https://csound.com/docs/manual/tabmorphi.html>+tabmorphi ::  Sig -> Sig -> Sig -> Sig -> Tab -> Tab -> Sig+tabmorphi b1 b2 b3 b4 b5 b6 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unSig b3 <*> unSig b4 <*> unTab b5 <*> unTab b6+  where+    f a1 a2 a3 a4 a5 a6 = opcs "tabmorphi" [(Kr,[Kr,Kr,Kr,Kr] ++ (repeat Ir))] [a1,a2,a3,a4,a5,a6]++-- | ++--+-- >  tabplay   ktrig, knumtics, kfn, kout1 [,kout2,..., koutN]+--+-- csound doc: <https://csound.com/docs/manual/tabplay.html>+tabplay ::  Sig -> Sig -> Tab -> Sig -> SE ()+tabplay b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unTab) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "tabplay" [(Xr,(repeat Kr))] [a1,a2,a3,a4]++-- | ++--+-- >  tabrec    ktrig_start, ktrig_stop, knumtics, kfn, kin1 [,kin2,...,kinN]+--+-- csound doc: <https://csound.com/docs/manual/tabrec.html>+tabrec ::  Sig -> Sig -> Sig -> Tab -> Sig -> SE ()+tabrec b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unTab) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "tabrec" [(Xr,(repeat Kr))] [a1,a2,a3,a4,a5]
src/Csound/Typed/Opcode/Vectorial.hs view
@@ -26,6 +26,7 @@     cell, vcella) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -38,10 +39,12 @@ -- -- >  vtaba   andx, ifn, aout1 [, aout2, aout3, .... , aoutN ] ----- csound doc: <http://csound.com/docs/manual/vtaba.html>+-- csound doc: <https://csound.com/docs/manual/vtaba.html> vtaba ::  Sig -> Tab -> Sig -> SE ()-vtaba b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vtaba" [(Xr,[Ar,Ir] ++ (repeat Ar))] [a1,a2,a3]+vtaba b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vtaba" [(Xr,[Ar,Ir] ++ (repeat Ar))] [a1,a2,a3]  -- |  -- Read vectors (from tables -or arrays of vectors).@@ -50,10 +53,12 @@ -- -- >  vtabi   indx, ifn, iout1 [, iout2, iout3, .... , ioutN ] ----- csound doc: <http://csound.com/docs/manual/vtabi.html>+-- csound doc: <https://csound.com/docs/manual/vtabi.html> vtabi ::  D -> Tab -> D -> SE ()-vtabi b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vtabi" [(Xr,(repeat Ir))] [a1,a2,a3]+vtabi b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vtabi" [(Xr,(repeat Ir))] [a1,a2,a3]  -- |  -- Read vectors (from tables -or arrays of vectors).@@ -62,10 +67,12 @@ -- -- >  vtabk   kndx, ifn, kout1 [, kout2, kout3, .... , koutN ] ----- csound doc: <http://csound.com/docs/manual/vtabk.html>+-- csound doc: <https://csound.com/docs/manual/vtabk.html> vtabk ::  Sig -> Tab -> Sig -> SE ()-vtabk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vtabk" [(Xr,[Kr,Ir] ++ (repeat Kr))] [a1,a2,a3]+vtabk b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vtabk" [(Xr,[Kr,Ir] ++ (repeat Kr))] [a1,a2,a3]  -- |  -- Read a vector (several scalars simultaneously) from a table.@@ -74,10 +81,12 @@ -- -- >  vtable1k   kfn,kout1 [, kout2, kout3, .... , koutN ] ----- csound doc: <http://csound.com/docs/manual/vtable1k.html>+-- csound doc: <https://csound.com/docs/manual/vtable1k.html> vtable1k ::  Tab -> Sig -> SE ()-vtable1k b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2-    where f a1 a2 = opcs "vtable1k" [(Xr,(repeat Kr))] [a1,a2]+vtable1k b1 b2 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "vtable1k" [(Xr,(repeat Kr))] [a1,a2]  -- |  -- Read vectors (from tables -or arrays of vectors).@@ -86,10 +95,12 @@ -- -- >  vtablea   andx, kfn, kinterp, ixmode, aout1 [, aout2, aout3, .... , aoutN ] ----- csound doc: <http://csound.com/docs/manual/vtablea.html>+-- csound doc: <https://csound.com/docs/manual/vtablea.html> vtablea ::  Sig -> Tab -> Sig -> D -> Sig -> SE ()-vtablea b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3 <*> unD b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "vtablea" [(Xr,[Ar,Kr,Kr,Ir] ++ (repeat Ar))] [a1,a2,a3,a4,a5]+vtablea b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vtablea" [(Xr,[Ar,Kr,Kr,Ir] ++ (repeat Ar))] [a1,a2,a3,a4,a5]  -- |  -- Read vectors (from tables -or arrays of vectors).@@ -98,10 +109,12 @@ -- -- >  vtablei   indx, ifn, interp, ixmode, iout1 [, iout2, iout3, .... , ioutN ] ----- csound doc: <http://csound.com/docs/manual/vtablei.html>+-- csound doc: <https://csound.com/docs/manual/vtablei.html> vtablei ::  D -> Tab -> D -> D -> D -> SE ()-vtablei b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2 <*> unD b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "vtablei" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]+vtablei b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vtablei" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]  -- |  -- Read vectors (from tables -or arrays of vectors).@@ -110,10 +123,12 @@ -- -- >  vtablek   kndx, kfn, kinterp, ixmode, kout1 [, kout2, kout3, .... , koutN ] ----- csound doc: <http://csound.com/docs/manual/vtablek.html>+-- csound doc: <https://csound.com/docs/manual/vtablek.html> vtablek ::  Sig -> Tab -> Sig -> D -> Sig -> SE ()-vtablek b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3 <*> unD b4 <*> unSig b5-    where f a1 a2 a3 a4 a5 = opcs "vtablek" [(Xr,[Kr,Kr,Kr,Ir] ++ (repeat Kr))] [a1,a2,a3,a4,a5]+vtablek b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4 <*> (lift . unSig) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vtablek" [(Xr,[Kr,Kr,Kr,Ir] ++ (repeat Kr))] [a1,a2,a3,a4,a5]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -122,10 +137,12 @@ -- -- >  vtablewa   andx, kfn, ixmode, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ] ----- csound doc: <http://csound.com/docs/manual/vtablewa.html>+-- csound doc: <https://csound.com/docs/manual/vtablewa.html> vtablewa ::  Sig -> Tab -> D -> Sig -> SE ()-vtablewa b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unD b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "vtablewa" [(Xr,[Ar,Kr,Ir] ++ (repeat Ar))] [a1,a2,a3,a4]+vtablewa b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vtablewa" [(Xr,[Ar,Kr,Ir] ++ (repeat Ar))] [a1,a2,a3,a4]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -134,10 +151,12 @@ -- -- >  vtablewi   indx, ifn, ixmode, inarg1 [, inarg2, inarg3 , .... , inargN ] ----- csound doc: <http://csound.com/docs/manual/vtablewi.html>+-- csound doc: <https://csound.com/docs/manual/vtablewi.html> vtablewi ::  D -> Tab -> D -> D -> SE ()-vtablewi b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2 <*> unD b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vtablewi" [(Xr,(repeat Ir))] [a1,a2,a3,a4]+vtablewi b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vtablewi" [(Xr,(repeat Ir))] [a1,a2,a3,a4]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -146,10 +165,12 @@ -- -- >  vtablewk   kndx, kfn, ixmode, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ] ----- csound doc: <http://csound.com/docs/manual/vtablewk.html>+-- csound doc: <https://csound.com/docs/manual/vtablewk.html> vtablewk ::  Sig -> Tab -> D -> Sig -> SE ()-vtablewk b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unD b3 <*> unSig b4-    where f a1 a2 a3 a4 = opcs "vtablewk" [(Xr,[Kr,Kr,Ir] ++ (repeat Kr))] [a1,a2,a3,a4]+vtablewk b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3 <*> (lift . unSig) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vtablewk" [(Xr,[Kr,Kr,Ir] ++ (repeat Kr))] [a1,a2,a3,a4]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -158,10 +179,12 @@ -- -- >  vtabwa   andx, ifn, ainarg1 [, ainarg2, ainarg3 , .... , ainargN ] ----- csound doc: <http://csound.com/docs/manual/vtabwa.html>+-- csound doc: <https://csound.com/docs/manual/vtabwa.html> vtabwa ::  Sig -> Tab -> Sig -> SE ()-vtabwa b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vtabwa" [(Xr,[Ar,Ir] ++ (repeat Ar))] [a1,a2,a3]+vtabwa b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vtabwa" [(Xr,[Ar,Ir] ++ (repeat Ar))] [a1,a2,a3]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -170,10 +193,12 @@ -- -- >  vtabwi   indx, ifn, inarg1 [, inarg2, inarg3 , .... , inargN ] ----- csound doc: <http://csound.com/docs/manual/vtabwi.html>+-- csound doc: <https://csound.com/docs/manual/vtabwi.html> vtabwi ::  D -> Tab -> D -> SE ()-vtabwi b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vtabwi" [(Xr,(repeat Ir))] [a1,a2,a3]+vtabwi b1 b2 b3 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vtabwi" [(Xr,(repeat Ir))] [a1,a2,a3]  -- |  -- Write vectors (to tables -or arrays of vectors).@@ -182,10 +207,12 @@ -- -- >  vtabwk   kndx, ifn, kinarg1 [, kinarg2, kinarg3 , .... , kinargN ] ----- csound doc: <http://csound.com/docs/manual/vtabwk.html>+-- csound doc: <https://csound.com/docs/manual/vtabwk.html> vtabwk ::  Sig -> Tab -> Sig -> SE ()-vtabwk b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vtabwk" [(Xr,[Kr,Ir] ++ (repeat Kr))] [a1,a2,a3]+vtabwk b1 b2 b3 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vtabwk" [(Xr,[Kr,Ir] ++ (repeat Kr))] [a1,a2,a3]  -- Scalar operations. @@ -194,80 +221,96 @@ -- -- >  vadd   ifn, kval, kelements [, kdstoffset] [, kverbose] ----- csound doc: <http://csound.com/docs/manual/vadd.html>+-- csound doc: <https://csound.com/docs/manual/vadd.html> vadd ::  Tab -> Sig -> Sig -> SE ()-vadd b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vadd" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vadd b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vadd" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Adds a scalar value to a vector in a table. -- -- >  vadd_i   ifn, ival, ielements [, idstoffset] ----- csound doc: <http://csound.com/docs/manual/vadd_i.html>+-- csound doc: <https://csound.com/docs/manual/vadd_i.html> vadd_i ::  Tab -> D -> D -> SE ()-vadd_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "vadd_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]+vadd_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vadd_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs power-of operations between a vector and a scalar -- -- >  vexp   ifn, kval, kelements [, kdstoffset] [, kverbose] ----- csound doc: <http://csound.com/docs/manual/vexp.html>+-- csound doc: <https://csound.com/docs/manual/vexp.html> vexp ::  Tab -> Sig -> Sig -> SE ()-vexp b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vexp" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vexp b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vexp" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs power-of operations between a vector and a scalar -- -- >  vexp_i   ifn, ival, ielements[, idstoffset] ----- csound doc: <http://csound.com/docs/manual/vexp_i.html>+-- csound doc: <https://csound.com/docs/manual/vexp_i.html> vexp_i ::  Tab -> D -> D -> SE ()-vexp_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "vexp_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]+vexp_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vexp_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Multiplies a vector in a table by a scalar value. -- -- >  vmult   ifn, kval, kelements [, kdstoffset] [, kverbose] ----- csound doc: <http://csound.com/docs/manual/vmult.html>+-- csound doc: <https://csound.com/docs/manual/vmult.html> vmult ::  Tab -> Sig -> Sig -> SE ()-vmult b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vmult" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vmult b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vmult" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Multiplies a vector in a table by a scalar value. -- -- >  vmult_i   ifn, ival, ielements [, idstoffset] ----- csound doc: <http://csound.com/docs/manual/vmult_i.html>+-- csound doc: <https://csound.com/docs/manual/vmult_i.html> vmult_i ::  Tab -> D -> D -> SE ()-vmult_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "vmult_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]+vmult_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vmult_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Raises each element of a vector to a scalar power. -- -- >  vpow   ifn, kval, kelements [, kdstoffset] [, kverbose] ----- csound doc: <http://csound.com/docs/manual/vpow.html>+-- csound doc: <https://csound.com/docs/manual/vpow.html> vpow ::  Tab -> Sig -> Sig -> SE ()-vpow b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vpow" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vpow b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vpow" [(Xr,[Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Raises each element of a vector to a scalar power -- -- >  vpow_i   ifn, ival, ielements [, idstoffset] ----- csound doc: <http://csound.com/docs/manual/vpow_i.html>+-- csound doc: <https://csound.com/docs/manual/vpow_i.html> vpow_i ::  Tab -> D -> D -> SE ()-vpow_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unD b3-    where f a1 a2 a3 = opcs "vpow_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]+vpow_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vpow_i" [(Xr,[Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- Vectorial operations. @@ -276,80 +319,96 @@ -- -- >  vaddv   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vaddv.html>+-- csound doc: <https://csound.com/docs/manual/vaddv.html> vaddv ::  Tab -> Tab -> Sig -> SE ()-vaddv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vaddv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vaddv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vaddv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs addition between two vectorial control signals at init time. -- -- >  vaddv_i   ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vaddv_i.html>+-- csound doc: <https://csound.com/docs/manual/vaddv_i.html> vaddv_i ::  Tab -> Tab -> D -> SE ()-vaddv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vaddv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vaddv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vaddv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Copies between two vectorial control signals -- -- >  vcopy   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [, kverbose] ----- csound doc: <http://csound.com/docs/manual/vcopy.html>+-- csound doc: <https://csound.com/docs/manual/vcopy.html> vcopy ::  Tab -> Tab -> Sig -> SE ()-vcopy b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vcopy" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vcopy b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vcopy" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Copies a vector from one table to another. -- -- >  vcopy_i   ifn1, ifn2, ielements [,idstoffset, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vcopy_i.html>+-- csound doc: <https://csound.com/docs/manual/vcopy_i.html> vcopy_i ::  Tab -> Tab -> D -> SE ()-vcopy_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vcopy_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vcopy_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vcopy_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs division between two vectorial control signals -- -- >  vdivv   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vdivv.html>+-- csound doc: <https://csound.com/docs/manual/vdivv.html> vdivv ::  Tab -> Tab -> Sig -> SE ()-vdivv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vdivv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vdivv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vdivv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs division between two vectorial control signals at init time. -- -- >  vdivv_i   ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vdivv_i.html>+-- csound doc: <https://csound.com/docs/manual/vdivv_i.html> vdivv_i ::  Tab -> Tab -> D -> SE ()-vdivv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vdivv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vdivv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vdivv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs exponential operations between two vectorial control signals -- -- >  vexpv   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vexpv.html>+-- csound doc: <https://csound.com/docs/manual/vexpv.html> vexpv ::  Tab -> Tab -> Sig -> SE ()-vexpv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vexpv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vexpv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vexpv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs exponential operations between two vectorial control signals at init time. -- -- >  vexpv_i   ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vexpv_i.html>+-- csound doc: <https://csound.com/docs/manual/vexpv_i.html> vexpv_i ::  Tab -> Tab -> D -> SE ()-vexpv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vexpv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vexpv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vexpv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Maps elements from a vector according to indexes contained in another vector.@@ -358,70 +417,84 @@ -- -- >  vmap   ifn1, ifn2, ielements [,idstoffset, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vmap.html>+-- csound doc: <https://csound.com/docs/manual/vmap.html> vmap ::  Tab -> Tab -> D -> SE ()-vmap b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vmap" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vmap b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vmap" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs mutiplication between two vectorial control signals -- -- >  vmultv   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vmultv.html>+-- csound doc: <https://csound.com/docs/manual/vmultv.html> vmultv ::  Tab -> Tab -> Sig -> SE ()-vmultv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vmultv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vmultv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vmultv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs mutiplication between two vectorial control signals at init time. -- -- >  vmultv_i   ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vmultv_i.html>+-- csound doc: <https://csound.com/docs/manual/vmultv_i.html> vmultv_i ::  Tab -> Tab -> D -> SE ()-vmultv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vmultv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vmultv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vmultv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs power-of operations between two vectorial control signals -- -- >  vpowv  ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vpowv.html>+-- csound doc: <https://csound.com/docs/manual/vpowv.html> vpowv ::  Tab -> Tab -> Sig -> SE ()-vpowv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vpowv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vpowv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vpowv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs power-of operations between two vectorial control signals at init time. -- -- >  vpowv_i  ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vpowv_i.html>+-- csound doc: <https://csound.com/docs/manual/vpowv_i.html> vpowv_i ::  Tab -> Tab -> D -> SE ()-vpowv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vpowv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vpowv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vpowv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Performs subtraction between two vectorial control signals -- -- >  vsubv   ifn1, ifn2, kelements [, kdstoffset] [, ksrcoffset] [,kverbose] ----- csound doc: <http://csound.com/docs/manual/vsubv.html>+-- csound doc: <https://csound.com/docs/manual/vsubv.html> vsubv ::  Tab -> Tab -> Sig -> SE ()-vsubv b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unSig b3-    where f a1 a2 a3 = opcs "vsubv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]+vsubv b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unSig) b3+  where+    f a1 a2 a3 = opcsDep_ "vsubv" [(Xr,[Ir,Ir,Kr,Kr,Kr,Kr])] [a1,a2,a3]  -- |  -- Performs subtraction between two vectorial control signals at init time. -- -- >  vsubv_i   ifn1, ifn2, ielements [, idstoffset] [, isrcoffset] ----- csound doc: <http://csound.com/docs/manual/vsubv_i.html>+-- csound doc: <https://csound.com/docs/manual/vsubv_i.html> vsubv_i ::  Tab -> Tab -> D -> SE ()-vsubv_i b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unD b3-    where f a1 a2 a3 = opcs "vsubv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]+vsubv_i b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vsubv_i" [(Xr,[Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3]  -- Envelopes. @@ -432,10 +505,12 @@ -- -- >  vexpseg   ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]] ----- csound doc: <http://csound.com/docs/manual/vexpseg.html>+-- csound doc: <https://csound.com/docs/manual/vexpseg.html> vexpseg ::  Tab -> D -> Tab -> D -> Tab -> SE ()-vexpseg b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unTab b3 <*> unD b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "vexpseg" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]+vexpseg b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unD) b4 <*> (lift . unTab) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vexpseg" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]  -- |  -- Vectorial envelope generator@@ -444,10 +519,12 @@ -- -- >  vlinseg   ifnout, ielements, ifn1, idur1, ifn2 [, idur2, ifn3 [...]] ----- csound doc: <http://csound.com/docs/manual/vlinseg.html>+-- csound doc: <https://csound.com/docs/manual/vlinseg.html> vlinseg ::  Tab -> D -> Tab -> D -> Tab -> SE ()-vlinseg b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unD b2 <*> unTab b3 <*> unD b4 <*> unTab b5-    where f a1 a2 a3 a4 a5 = opcs "vlinseg" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]+vlinseg b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unD) b2 <*> (lift . unTab) b3 <*> (lift . unD) b4 <*> (lift . unTab) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vlinseg" [(Xr,(repeat Ir))] [a1,a2,a3,a4,a5]  -- Limiting and Wrapping. @@ -458,10 +535,12 @@ -- -- >  vlimit   ifn, kmin, kmax, ielements ----- csound doc: <http://csound.com/docs/manual/vlimit.html>+-- csound doc: <https://csound.com/docs/manual/vlimit.html> vlimit ::  Tab -> Sig -> Sig -> D -> SE ()-vlimit b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vlimit" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]+vlimit b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vlimit" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]  -- |  -- Limiting and Wrapping Vectorial Signals@@ -470,10 +549,12 @@ -- -- >  vmirror   ifn, kmin, kmax, ielements ----- csound doc: <http://csound.com/docs/manual/vmirror.html>+-- csound doc: <https://csound.com/docs/manual/vmirror.html> vmirror ::  Tab -> Sig -> Sig -> D -> SE ()-vmirror b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vmirror" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]+vmirror b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vmirror" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]  -- |  -- Limiting and Wrapping Vectorial Signals@@ -482,10 +563,12 @@ -- -- >  vwrap   ifn, kmin, kmax, ielements ----- csound doc: <http://csound.com/docs/manual/vwrap.html>+-- csound doc: <https://csound.com/docs/manual/vwrap.html> vwrap ::  Tab -> Sig -> Sig -> D -> SE ()-vwrap b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vwrap" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]+vwrap b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vwrap" [(Xr,[Ir,Kr,Kr,Ir])] [a1,a2,a3,a4]  -- Delay Paths. @@ -496,10 +579,12 @@ -- -- > kout  vdelayk   ksig, kdel, imaxdel [, iskip, imode] ----- csound doc: <http://csound.com/docs/manual/vdelayk.html>+-- csound doc: <https://csound.com/docs/manual/vdelayk.html> vdelayk ::  Sig -> Sig -> D -> Sig-vdelayk b1 b2 b3 = Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "vdelayk" [(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3]+vdelayk b1 b2 b3 =+  Sig $ f <$> unSig b1 <*> unSig b2 <*> unD b3+  where+    f a1 a2 a3 = opcs "vdelayk" [(Kr,[Kr,Kr,Ir,Ir,Ir])] [a1,a2,a3]  -- |  -- Vectorial Control-rate Delay Paths@@ -508,10 +593,12 @@ -- -- >  vecdelay   ifn, ifnIn, ifnDel, ielements, imaxdel [, iskip] ----- csound doc: <http://csound.com/docs/manual/vecdelay.html>+-- csound doc: <https://csound.com/docs/manual/vecdelay.html> vecdelay ::  Tab -> Tab -> Tab -> D -> D -> SE ()-vecdelay b1 b2 b3 b4 b5 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unTab b2 <*> unTab b3 <*> unD b4 <*> unD b5-    where f a1 a2 a3 a4 a5 = opcs "vecdelay" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]+vecdelay b1 b2 b3 b4 b5 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unTab) b2 <*> (lift . unTab) b3 <*> (lift . unD) b4 <*> (lift . unD) b5+  where+    f a1 a2 a3 a4 a5 = opcsDep_ "vecdelay" [(Xr,[Ir,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5]  -- |  -- Vectorial Control-rate Delay Paths@@ -520,10 +607,12 @@ -- -- >  vport  ifn, khtime, ielements [, ifnInit] ----- csound doc: <http://csound.com/docs/manual/vport.html>+-- csound doc: <https://csound.com/docs/manual/vport.html> vport ::  Tab -> Sig -> D -> SE ()-vport b1 b2 b3 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unD b3-    where f a1 a2 a3 = opcs "vport" [(Xr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]+vport b1 b2 b3 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3+  where+    f a1 a2 a3 = opcsDep_ "vport" [(Xr,[Ir,Kr,Ir,Ir])] [a1,a2,a3]  -- Random. @@ -535,10 +624,12 @@ -- >  vrandh   ifn,  krange, kcps, ielements [, idstoffset] [, iseed] \ -- >           [, isize] [, ioffset] ----- csound doc: <http://csound.com/docs/manual/vrandh.html>+-- csound doc: <https://csound.com/docs/manual/vrandh.html> vrandh ::  Tab -> Sig -> Sig -> D -> SE ()-vrandh b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vrandh" [(Xr,[Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+vrandh b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vrandh" [(Xr,[Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- |  -- Generate a sort of 'vectorial band-limited noise'@@ -546,10 +637,12 @@ -- >  vrandi   ifn,  krange, kcps, ielements [, idstoffset] [, iseed] \ -- >           [, isize] [, ioffset] ----- csound doc: <http://csound.com/docs/manual/vrandi.html>+-- csound doc: <https://csound.com/docs/manual/vrandi.html> vrandi ::  Tab -> Sig -> Sig -> D -> SE ()-vrandi b1 b2 b3 b4 = SE $ (depT_ =<<) $ lift $ f <$> unTab b1 <*> unSig b2 <*> unSig b3 <*> unD b4-    where f a1 a2 a3 a4 = opcs "vrandi" [(Xr,[Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]+vrandi b1 b2 b3 b4 =+  SE $ join $ f <$> (lift . unTab) b1 <*> (lift . unSig) b2 <*> (lift . unSig) b3 <*> (lift . unD) b4+  where+    f a1 a2 a3 a4 = opcsDep_ "vrandi" [(Xr,[Ir,Kr,Kr,Ir,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4]  -- Cellular Automata. @@ -561,10 +654,12 @@ -- -- >  cell  ktrig, kreinit, ioutFunc, initStateFunc, iRuleFunc, ielements ----- csound doc: <http://csound.com/docs/manual/cell.html>+-- csound doc: <https://csound.com/docs/manual/cell.html> cell ::  Sig -> Sig -> D -> D -> D -> D -> SE ()-cell b1 b2 b3 b4 b5 b6 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6-    where f a1 a2 a3 a4 a5 a6 = opcs "cell" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]+cell b1 b2 b3 b4 b5 b6 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6+  where+    f a1 a2 a3 a4 a5 a6 = opcsDep_ "cell" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir])] [a1,a2,a3,a4,a5,a6]  -- |  -- Cellular Automata@@ -574,13 +669,15 @@ -- >  vcella  ktrig, kreinit, ioutFunc, initStateFunc, \ -- >           iRuleFunc, ielements, irulelen [, iradius] ----- csound doc: <http://csound.com/docs/manual/vcella.html>+-- csound doc: <https://csound.com/docs/manual/vcella.html> vcella ::  Sig -> Sig -> D -> D -> D -> D -> D -> SE ()-vcella b1 b2 b3 b4 b5 b6 b7 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2 <*> unD b3 <*> unD b4 <*> unD b5 <*> unD b6 <*> unD b7-    where f a1 a2 a3 a4 a5 a6 a7 = opcs "vcella" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1-                                                                                  ,a2-                                                                                  ,a3-                                                                                  ,a4-                                                                                  ,a5-                                                                                  ,a6-                                                                                  ,a7]+vcella b1 b2 b3 b4 b5 b6 b7 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2 <*> (lift . unD) b3 <*> (lift . unD) b4 <*> (lift . unD) b5 <*> (lift . unD) b6 <*> (lift . unD) b7+  where+    f a1 a2 a3 a4 a5 a6 a7 = opcsDep_ "vcella" [(Xr,[Kr,Kr,Ir,Ir,Ir,Ir,Ir,Ir])] [a1+                                                                                ,a2+                                                                                ,a3+                                                                                ,a4+                                                                                ,a5+                                                                                ,a6+                                                                                ,a7]
src/Csound/Typed/Opcode/ZakPatchSystem.hs view
@@ -5,6 +5,7 @@     zacl, zakinit, zamod, zar, zarg, zaw, zawm, zir, ziw, ziwm, zkcl, zkmod, zkr, zkw, zkwm) where  import Control.Monad.Trans.Class+import Control.Monad import Csound.Dynamic import Csound.Typed @@ -13,12 +14,14 @@ -- |  -- Clears one or more variables in the za space. ----- >  zacl  kfirst, klast+-- >  zacl  kfirst [, klast] ----- csound doc: <http://csound.com/docs/manual/zacl.html>-zacl ::  Sig -> Sig -> SE ()-zacl b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zacl" [(Xr,[Kr,Kr])] [a1,a2]+-- csound doc: <https://csound.com/docs/manual/zacl.html>+zacl ::  Sig -> SE ()+zacl b1 =+  SE $ join $ f <$> (lift . unSig) b1+  where+    f a1 = opcsDep_ "zacl" [(Xr,[Kr,Kr])] [a1]  -- |  -- Establishes zak space.@@ -27,137 +30,165 @@ -- -- >  zakinit  isizea, isizek ----- csound doc: <http://csound.com/docs/manual/zakinit.html>+-- csound doc: <https://csound.com/docs/manual/zakinit.html> zakinit ::  D -> D -> SE ()-zakinit b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "zakinit" [(Xr,[Ir,Ir])] [a1,a2]+zakinit b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "zakinit" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Modulates one a-rate signal by a second one. -- -- > ares  zamod  asig, kzamod ----- csound doc: <http://csound.com/docs/manual/zamod.html>+-- csound doc: <https://csound.com/docs/manual/zamod.html> zamod ::  Sig -> Sig -> Sig-zamod b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zamod" [(Ar,[Ar,Kr])] [a1,a2]+zamod b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "zamod" [(Ar,[Ar,Kr])] [a1,a2]  -- |  -- Reads from a location in za space at a-rate. -- -- > ares  zar  kndx ----- csound doc: <http://csound.com/docs/manual/zar.html>+-- csound doc: <https://csound.com/docs/manual/zar.html> zar ::  Sig -> Sig-zar b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "zar" [(Ar,[Kr])] [a1]+zar b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "zar" [(Ar,[Kr])] [a1]  -- |  -- Reads from a location in za space at a-rate, adds some gain. -- -- > ares  zarg  kndx, kgain ----- csound doc: <http://csound.com/docs/manual/zarg.html>+-- csound doc: <https://csound.com/docs/manual/zarg.html> zarg ::  Sig -> Sig -> Sig-zarg b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zarg" [(Ar,[Kr,Kr])] [a1,a2]+zarg b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "zarg" [(Ar,[Kr,Kr])] [a1,a2]  -- |  -- Writes to a za variable at a-rate without mixing. -- -- >  zaw  asig, kndx ----- csound doc: <http://csound.com/docs/manual/zaw.html>+-- csound doc: <https://csound.com/docs/manual/zaw.html> zaw ::  Sig -> Sig -> SE ()-zaw b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zaw" [(Xr,[Ar,Kr])] [a1,a2]+zaw b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "zaw" [(Xr,[Ar,Kr])] [a1,a2]  -- |  -- Writes to a za variable at a-rate with mixing. -- -- >  zawm  asig, kndx [, imix] ----- csound doc: <http://csound.com/docs/manual/zawm.html>+-- csound doc: <https://csound.com/docs/manual/zawm.html> zawm ::  Sig -> Sig -> SE ()-zawm b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zawm" [(Xr,[Ar,Kr,Ir])] [a1,a2]+zawm b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "zawm" [(Xr,[Ar,Kr,Ir])] [a1,a2]  -- |  -- Reads from a location in zk space at i-rate. -- -- > ir  zir  indx ----- csound doc: <http://csound.com/docs/manual/zir.html>+-- csound doc: <https://csound.com/docs/manual/zir.html> zir ::  D -> D-zir b1 = D $ f <$> unD b1-    where f a1 = opcs "zir" [(Ir,[Ir])] [a1]+zir b1 =+  D $ f <$> unD b1+  where+    f a1 = opcs "zir" [(Ir,[Ir])] [a1]  -- |  -- Writes to a zk variable at i-rate without mixing. -- -- >  ziw  isig, indx ----- csound doc: <http://csound.com/docs/manual/ziw.html>+-- csound doc: <https://csound.com/docs/manual/ziw.html> ziw ::  D -> D -> SE ()-ziw b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "ziw" [(Xr,[Ir,Ir])] [a1,a2]+ziw b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "ziw" [(Xr,[Ir,Ir])] [a1,a2]  -- |  -- Writes to a zk variable to an i-rate variable with mixing. -- -- >  ziwm  isig, indx [, imix] ----- csound doc: <http://csound.com/docs/manual/ziwm.html>+-- csound doc: <https://csound.com/docs/manual/ziwm.html> ziwm ::  D -> D -> SE ()-ziwm b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unD b1 <*> unD b2-    where f a1 a2 = opcs "ziwm" [(Xr,[Ir,Ir,Ir])] [a1,a2]+ziwm b1 b2 =+  SE $ join $ f <$> (lift . unD) b1 <*> (lift . unD) b2+  where+    f a1 a2 = opcsDep_ "ziwm" [(Xr,[Ir,Ir,Ir])] [a1,a2]  -- |  -- Clears one or more variables in the zk space. -- -- >  zkcl  kfirst, klast ----- csound doc: <http://csound.com/docs/manual/zkcl.html>+-- csound doc: <https://csound.com/docs/manual/zkcl.html> zkcl ::  Sig -> Sig -> SE ()-zkcl b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zkcl" [(Xr,[Kr,Kr])] [a1,a2]+zkcl b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "zkcl" [(Xr,[Kr,Kr])] [a1,a2]  -- |  -- Facilitates the modulation of one signal by another. -- -- > kres  zkmod  ksig, kzkmod ----- csound doc: <http://csound.com/docs/manual/zkmod.html>+-- csound doc: <https://csound.com/docs/manual/zkmod.html> zkmod ::  Sig -> Sig -> Sig-zkmod b1 b2 = Sig $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zkmod" [(Kr,[Kr,Kr])] [a1,a2]+zkmod b1 b2 =+  Sig $ f <$> unSig b1 <*> unSig b2+  where+    f a1 a2 = opcs "zkmod" [(Kr,[Kr,Kr])] [a1,a2]  -- |  -- Reads from a location in zk space at k-rate. -- -- > kres  zkr  kndx ----- csound doc: <http://csound.com/docs/manual/zkr.html>+-- csound doc: <https://csound.com/docs/manual/zkr.html> zkr ::  Sig -> Sig-zkr b1 = Sig $ f <$> unSig b1-    where f a1 = opcs "zkr" [(Kr,[Kr])] [a1]+zkr b1 =+  Sig $ f <$> unSig b1+  where+    f a1 = opcs "zkr" [(Kr,[Kr])] [a1]  -- |  -- Writes to a zk variable at k-rate without mixing. ----- >  zkw  ksig, kndx+-- >  zkw  kval, kndx ----- csound doc: <http://csound.com/docs/manual/zkw.html>+-- csound doc: <https://csound.com/docs/manual/zkw.html> zkw ::  Sig -> Sig -> SE ()-zkw b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zkw" [(Xr,[Kr,Kr])] [a1,a2]+zkw b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "zkw" [(Xr,[Kr,Kr])] [a1,a2]  -- |  -- Writes to a zk variable at k-rate with mixing. -- -- >  zkwm  ksig, kndx [, imix] ----- csound doc: <http://csound.com/docs/manual/zkwm.html>+-- csound doc: <https://csound.com/docs/manual/zkwm.html> zkwm ::  Sig -> Sig -> SE ()-zkwm b1 b2 = SE $ (depT_ =<<) $ lift $ f <$> unSig b1 <*> unSig b2-    where f a1 a2 = opcs "zkwm" [(Xr,[Kr,Kr,Ir])] [a1,a2]+zkwm b1 b2 =+  SE $ join $ f <$> (lift . unSig) b1 <*> (lift . unSig) b2+  where+    f a1 a2 = opcsDep_ "zkwm" [(Xr,[Kr,Kr,Ir])] [a1,a2]