This article presents one of the most complex Csound devices I've evere designed, namely a multieffects with GUI capable of handling up to 8 simultaneous effects with flexible routing capabilities. The Csound code (for CsoundAV) is freely available at my website
Don't expect it to replace any commercial gear, it is pretty demanding and requires sr=kr, so most of the Csound speed benefits are lost.
Goals |
| Provide a GUI for any Csound processor |
| Provide a realtime multieffects with flexible routing and feedback capabilities |
|
Provide an attractive multieffects easy enough to be used by non-Csounders |
Yet to do |
| Add a menu to choose the input signal and allow stereo and multichannel input/output (mono by now) |
| Add much more effects! (just 8 by now) |
| Add snapshots for the whole machine |
| Add customizable automatisation, save a performance for later recall, add a timeline editor... |
This step by step tutorial will show you how easy is to work with the machine. In fact no Csound knowledge at all is necessary for that!
| first make sure all the files are in the Csound directory or in the path |
|
drag&drop MultiFx.csd onto the Csound icon, then select the audio driver if required |
| the main window apperars, nothing sounds by now |
![]() |
| to get any sound you must, at least, route the input (which is assumed to go to slot 1) to the output (taken from slot 8). The routing matrix works like in AudioMulch: files are inputs and columns outputs, so you must click on the [1,8] button (1). You must also activate the default empty effects (2,3). Notice the Vu-meters and the routing lights in each slot |
![]() |
| let's try something different...apply a bit reduction to the input with
the Cruncher effect. To do that first select the effect from the Fx1 box,
then activate it with the button on the right |
![]() |
| reroute the first slot to slots 2 and 3 in parallel and then route their outputs to slot 8. Now the actual signal routing is |
|
1(in)->2->8(out) and 1(in)->3->8(out) |
![]() |
| apply different comb filters to both slots and postprocess them with a parametric Eq in slot 8, for example with the following values |
![]() |
Much more complex configurations are possible of course, and once the MultiFx machine will be fully loaded with my expected 100 effects you can imagine its possibilities! Now it's up to you to experiment with it...
I'll briefly describe how the MultiFx works and what does it do when you activate a new effect for example. Some tricks were necessary, sometimes for convenience, I encourage you to study the source code.
Main data structures |
||||||||
|
||||||||
Program flow |
||||||||
|
Default |
|
|
|
Each empty box shows RMS input level and routed input channels (top left hand corner) and RMS output level and routed output channels (bottom right hand corner). There are also input and output gain faders calibrated from -144dB to about +6dB, and gain at 3/4 of 0dB (the defaul level). The button deactivates the effect, it works as a bypass, ie. it is no longer computed to save some Cpu. | |
Cruncher |
||
|
Cruncher is useful for extremely lo-fi effects. It performs bith depth reduction (16 to 4 bits) and adds artificial aliasing (downsampling up to a factor of 16). | |
Direct Convolver |
|
|
|
Direct Convolver is likely to be rewritten soon. It performs direct convolution of the input with a 16-point impulse response randomly modified with the IR mod knobs. | |
Feigenbaum Ringmod |
|
|
|
Another unconventional effect. The input is ring modulated with an indexed iterated function, the formula is ax = sin(ar * ax) iterated four times and scaled. Selecting different indexing frequencies, amplitudes and initial condicions a variety of effects is obtained, ranging from periodic or chaotic vibratos to richly harmonic or even chaotic distortion. The indexed area helps to find periodic windows. | |
Morpheable filter |
|
|
|
The morpheable filter crossfades between the lowpass, bandpass and highpass outputs of a two pole state variable filter. The Cutoff/Morph area allows simultaneous control of the cutoff frequency and the crossfade level. Resonance is adjusted separately. | |
variable Comb/Allpass |
|
|
|
Comb and allpass filters with dynamic control over the attenuation and the delay time. As the original opcodes are buggy it is implemented in orchestra code. The delay taps use cubic interpolation. Notice it consumes larges amounts of memory as each effect allocates 20 secs. | |
Zoelter's Parametric Equalizer |
|
|
|
Zoelter's equalizer is a frontend of the pareq opcode, with added tanh() soft saturation. | |
Rober Bristow Johnson's Parametric Equalizer |
|
|
|
A more sophisticated parametric equalizer with Lowpass, Highpass, Band, Notch, Low and High Shelf modes and frequency, gain, Q and slope factor controls. | |
BreakBeat Cutter |
|
|
|
BreakBeat Cutter is a frontend of the bbcutm opcode. Notice that the "apply changes" button must be pressed each time you want to reinitialize the opcode with new i-time parameters, ie. they cannot be continuously modified. |