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 +11/−4
- src/Csound/Typed/Opcode.hs +2/−0
- src/Csound/Typed/Opcode/AbletonLinkOpcodes.hs +51/−30
- src/Csound/Typed/Opcode/Deprecated.hs +24/−0
- src/Csound/Typed/Opcode/FLTK.hs +352/−219
- src/Csound/Typed/Opcode/FaustOpcodes.hs +6/−3
- src/Csound/Typed/Opcode/ImageProcessingOpcodes.hs +36/−21
- src/Csound/Typed/Opcode/InstrumentControl.hs +696/−286
- src/Csound/Typed/Opcode/JackoOpcodes.hs +56/−33
- src/Csound/Typed/Opcode/MathematicalOperations.hs +178/−56
- src/Csound/Typed/Opcode/Miscellaneous.hs +95/−37
- src/Csound/Typed/Opcode/MixerOpcodes.hs +31/−18
- src/Csound/Typed/Opcode/Network.hs +38/−23
- src/Csound/Typed/Opcode/OSC.hs +55/−24
- src/Csound/Typed/Opcode/PitchConverters.hs +120/−63
- src/Csound/Typed/Opcode/PluginHosting.hs +28/−165
- src/Csound/Typed/Opcode/RealtimeMIDI.hs +449/−217
- src/Csound/Typed/Opcode/RemoteOpcodes.hs +21/−12
- src/Csound/Typed/Opcode/SerialIO.hs +86/−22
- src/Csound/Typed/Opcode/SignalFlowGraphOpcodes.hs +56/−33
- src/Csound/Typed/Opcode/SignalGenerators.hs +4697/−3913
- src/Csound/Typed/Opcode/SignalIO.hs +1617/−1287
- src/Csound/Typed/Opcode/SignalModifiers.hs +3191/−2699
- src/Csound/Typed/Opcode/SpectralProcessing.hs +1753/−1436
- src/Csound/Typed/Opcode/Strings.hs +164/−91
- src/Csound/Typed/Opcode/TableControl.hs +413/−16
- src/Csound/Typed/Opcode/Vectorial.hs +247/−150
- src/Csound/Typed/Opcode/ZakPatchSystem.hs +79/−48
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]