The C* Audio Plugin Suite
This plugin aims to reduce undesirable background noise and hum in otherwise silent passages.
When the signal's instantaneous amplitude exceeds the opening threshold, a gate is opened allowing the input signal to pass through. The time it takes for the gate to open fully can be set with the attack control. As soon as the signal's RMS power level drops below the closing threshold, the gate closes. Closing the gate takes a fixed time of 20 ms; the closed gate attenuates the signal by 60 dB.
To cope with powerline hum as often present in signals from electric guitars, a notch filter can be activated by setting the mains frequency control to a non-zero value. The filter will prevent this frequency from contributing to the signal power measurement. While this by itself doesn't eliminate any hum in the signal, it allows the closing threshold to be lowered further without mains hum keeping the gate open unduly. The default mains setting is 50 Hz.
This compressor has been designed and tuned primarily to create natural-sounding sustain for the electric guitar while staying true to the percussive nature of the instrument's tone. However, it appears to apply well to a variety of other sound sources, and with Compress2x2 a stereo version is available as well.
When the input signal's power rises above the level determined by the threshold control, the compressor starts to attenuate the signal. The attenuation ratio is controlled through the strength knob, 0 effectively disabling compression, and 1 corresponding to a ratio of up to 16:1 (the actual ratio also depends to an extent on the threshold setting).
attack and release set the speed of the compressor's gain changes, with higher values corresponding to slower reactions.
The measure control selects different signal power measurement options. peak – instantaneous amplitude – measurement allows the unit to react very quickly, while rms – root mean square power – is of a gentler kind.
A common problem of compression set up to work unintrusively is the inability to cope with powerful transient phenomena in the input. To compress such spikes effectively, the compressor would have to be able to react so harshly that poorly controlled waveform distortion is unavoidable and, depending on its release setting, relaxing attenuation after the spike might become audible as "breathing" or even "pumping" instead of subtly escaping notice.
A pleasing solution has been found in setting the compressor up conservatively and allowing transient signal power to overdrive a soft saturation stage. Used in moderation, the additional harmonic content generated by powerful transients is not being perceived as distortion but as greater "edge" to the sound, probably due to the short-lived nature of the event.
Saturating operation is the default setting of the mode control, using an approximated atan saturation function to generate even harmonics only. In order to suppress aliasing and provide crisp sound quality at any setting, the saturation stage is oversampled. Three oversampling options are available, 2x with 32-tap filters and 4x with 64 and 128 taps. Sound quality gains at 4x over 2x are close to imperceptible unless the unit is used with heavy gain. At 44.1 or 48 kHz, the 128-tap filter will cause less attenuation of very high frequency content.
This stereo version of Compress applies uniform compression to both channels in proportion to their combined power.
This emulation of the tone stack of a traditional Fender-design instrument amplifier has been devised and implemented by David T. Yeh[yeh06] (the hard part), with subsequent expansion to include more amplifier models by Tim Goetze (the easy part).
Due to the nature of the original circuit, the bass, mid and treble controls are not operating independently as in a modern three-way equaliser.
All but the last model are using the procedural implementation with continuously updated direct form II filters and sample rate independency. It must be noted that the "DC 30" preset has been included despite the slight difference in layout between the British original and the Fender circuit.
The "5F6-A LT" model is using the lattice filter implementation mentioned in the paper, operating on precomputed simulation data for 44.1 kHz.
Tracing the stages of an idealised circuit, this plugin aims to recreate those features of traditional guitar amplification electronics that have proved musically useful, and to provide them with the most musical rather than the most authentic ranges of adjustment and character. CabinetIV provides matching recreations of loudspeaker cabinets.
The processor consists – with some interconnections – of a configurable low cut input filter, a ToneStack circuit of the procedural variant, a saturating 'preamp' stage with adjustable gain and variable distortion asymmetry followed by the bright filter, compression characteristics determined by the attack and squash controls and finally a 'power amp' stage with the amount of saturation depending on both gain and power settings.
Sound quality and computational load can be balanced with the over control affording a choice of 2x or 4x oversampling with 32-tap filters, or 8x with 64 taps. Lower quality settings will sound slightly grittier and less transparent, and at high gain aliasing may become audible.
|4.00||little wing 68|
Unlike the FIR or FFT convolution approaches usually employed to emulate instrument amplifier loudspeaker cabinets, the IIR filtering utilised by this plugin is latency-free and truly resonant at much lower computational cost, but it trades response fidelity for these advantages. Nonlinear effects arising in loudspeakers transmitting high power signals[yeh08] are not modeled.
Several classic amps and cabinets are implemented as 32nd order filters at sample rates of 44.1, 48, 88.2 and 96 kHz (the lower two being recommended because of their greater fidelity).
It has turned out that the approximation process used to generate these filters had a tendency to come to rest at local minima. Subsequently, a greatly improved successor has been implemented with CabinetIV.
This predecessor of CabinetIV offers three loudspeaker cabinet recreations, precomputed for a sample rate of 44.1 kHz and employing twice as many IIR filters.
|0.00||mega wookie 800|
|1.00||mega wookie 812|
|2.00||mega wookie 828|
|3.00||mega wookie 868|
|4.00||mega wookie 908|
|5.00||mega wookie 912|
|6.00||mega wookie 936|
|7.00||mega wookie 968|
|8.00||mega wookie 992|
|17.00||mini wookie A|
|18.00||mini wookie B|
This plugin improves on the cabinet modeling of CabinetII by applying the method described by Balázs Bank[bank07]. From several hundred response shapes automatically created in the likeness of classic guitar amplifier loudspeaker cabinets, a selection has been narrowed down to a handful of idealised tones. As with AmpVTS, which provides a matching recreation of traditional guitar amplification, the design and selection process has been ruled by musicality over fidelity.
The filter banks implemented are 64 2nd order IIR and one 128-tap FIR in parallel. Their parameter presets are designed for operation at 44.1 and 48 kHz and shared between these sample rates, so their tone will differ due to the shifted frequency response. In addition to these preset rates, higher sample rates up to 192 kHz are supported by down- and upsampling as needed. The rate conversion filters are 32-tap at 2x rate (88.2 and 96 kHz) and 64-tap at 4x, and add roughly as many samples of latency. Their stopband attenuation is > 96 dB at 2x and 80 dB at 4x.
Despite the complexity, computational load is very modest thanks to vectorised floating point arithmetic if a SIMD instruction set of reasonable performance is available – if not, the load will be easily an order of magnitude higher, and possibly found to be prohibitive.
Rather modest in terms of resource demands, this unit still manages to produce decent reverberation. Nevertheless, unless tight resource limits must be met, considering the Plate reverberator is recommended.
The plugin is an adaptation of a unit found in STK[stk] with minor tweaks, such as the addition of the input bandwidth control suppressing high-frequency content before it enters the reverberation stages.
The t60 control sets the time it takes for the reverb tail to decay to -60 dB.
This reverb processor is an adaptation of the design discussed by Jon Dattorro[dat97a] who attributes it to David Griesinger. In comparison with the simpler and faster JVRev, a smoother and more pleasing reverb response is achieved through a much larger network of delay lines, two of which are modulated very subtly, in a chorus-like fashion.
The bandwidth control reduces high-frequency content before it enters the 'tank', while damping controls how quickly the reverberating tail darkens.
This version of the Plate reverberator comes with stereo inputs.
A collection of popular saturating models, from simple digital clipping to diodes to tubes.
Odd-order harmonics generated through asymmetric waveform shaping can be added with the bias control. Towards higher settings sound will start to get scratchy and eventually starve away.
"rectify" is not a saturating mode, but a half-wave rectification function without gain application.
The plugin is 8x oversampled with 64-tap polyphase filters, effectively suppressing aliasing noise for most musical applications. In order to reduce the computational load incurred when evaluating transcendental functions at eight times the nominal sample rate, these are approximated roughly, using Chebyshev polynomials whose coefficients depend on the amplitude's floating point representation exponent.
A standard mono chorus with optional feedback. The parameter range suits subtle effects as well as all-out flanging. Modifying the delay time t when feedback is active will cause audible 'zipper' noise.
This unit simulates additional unison voices by adding delayed and pitch-modulated copies of the input signal. To reduce the effect's predictability, pitch modulation of the added voices is steered by a Roessler fractal.
A number of notch filters are swept across a wide frequency band. To reduce the effect's predictability, the sweep modulation is steered by a Lorenz fractal.
depth controls the strength of the filtering, spread the distance between the notch frequencies, and feedback can be used to add resonance to the effect. At high settings, this can turn into self-oscillation peaking in excess of 0 dB.
A selection of resonant ladder filters with inter-stage saturation. The cutoff frequency can be modulated by both the input signal envelope and by a Lorenz attractor. The default settings provide an automatic wah effect.
The extent of filter modulation is set through the range parameter. The shape of the modulation is mixed from the attractor and the envelope according to the lfo/env balance. The attractor signal itself changes with the x/z parameter (there are waveform plots shown with the Lorenz plugin).
Filter stage gain can be used to generate heavy saturating distortion. To prevent this from causing audible aliasing, the plugin can be run in oversampled mode, at ratios selectable through the over control.
Computational load varies greatly with the over and filter settings.
A stereo delay with resonant filters and fractally modulated panning.
The delay times are set through the bpm control and the divider adjustment. Triplet and sixteenth settings create a dotted rhythm. With every beat, the filter resonance frequencies are retuned to random steps on an equal-tempered chromatic scale, to the reference set through the tune control.
In addition to the basic panorama control, the Pan plugin creates a perception of stereo width by introducing frequency-dependent phase shift between the two output channels.
At center pan, the sum of the two output channels will equal the input.
The design of this plugin owes to the Orban 245F Stereo Synthesizer[orban93].
This plugin reduces the width of a stereophonic signal. Its primary use is for headphone listening to music that was panned very creatively.
Mid/side processing tends to sound more transparent for moderate strength settings. However, it will more strongly attenuate signals that are panned to the far sides of the stereo image (rarely encountered in contemporary music production anymore but quite common, for example, on early Beatles recordings).
Classic octave-band biquad-filter design, basically a direct digital translation of the analog original. There's also a stereo version (Eq2x2).
Suitable for all sample rates (bands centered above the Nyquist frequency are automatically disabled).
The controls of this stereo version of Eq apply to both channels.
The old friend, indispensable for testing and tuning.
Mostly white pseudonoise, mixed and filtered from the output of two Dattorro multibit generators[dat02].
The Lorenz attractor[lorenz63], derived from the Navier-Stokes equations, models deterministic chaos. Self-similar but not repeating, it is a useful modulation source.
The x, y and z controls set the amplitude of the respective variables of the system in the output audio signal.
The output signal varies with the sample rate.
A sample-accurate metronome. Two simplistic modal synthesis models are available for the click: box is a small wooden box struck with a soft wooden mallet, and stick is the recreation of a noisy stick hit. In addition, there's also a beep.
The click sound is synthesised once when the plugin is loaded and then played back from memory.
The Chief Executive Oscillator forever calls for more profit.
Sound data sourced from the flite[flite] application.
This plugin generates a sparse train of single-sample pulses. Its primary uses are testing, basic impulse response retrieval and filter excitation.
The number of pulses per minute is set through the ppm control.
The C* Audio Plugin Suite comes with no guarantees,
in particular no guarantee of fitness for a particular
purpose, including purposes advertised herein.
The library is available here under the terms of the
GNU Public License,
This page can be downloaded in a separate documentation package:
To build from source code, a modern UNIX environment with the GNU C++ compiler is required. CAPS itself has no external dependencies other than the standard C/C++ runtime libraries. Hardware IEEE floating point support is highly recommended.
$ tar xfj caps_0.9.7.tar.bz2 $ cd caps-0.9.7 $ ./configure.py $ make $ su # make install
configure.py enables the use of SSE3 SIMD instructions – crucial for the performance of the CabinetIV plugin – if /proc/cpuinfo indicates their availability. When building for a non-i686 platform, SIMD-enabling compiler flags should be set manually in defines.make or by patching configure.py.
0.9.7 * ChorusI is back * AutoFilter modulation range and default parameter updates 0.9.6 * Click fixed to compile by older g++ versions 0.9.5 * AmpVTS model port moved, renamed to the more apt 'tonestack' * documentation refinements * appreciable AmpVTS speedup by going back to sample_t for accumulator * NoiseRatio attack time control * sample rate dependencies in NoiseGate removed, time constants revised * Tonestacks reordered * Plugin::over_fs * AmpVTS model setting fixed to follow the correct input * CabinetIII resurrected * AmpVTS 'ratio' port renamed to 'over' * more filters for AutoFilter, ladder stage gain control * AutoFilter oversampling * AmpVTS bias in poweramp, dcblock before output * AutoFilter envelope calculation fixed for fs > 153.6 kHz * peak/rms selection for Compress * AmpVTS tuning 0.9.4 * AmpVTS bright mapping revised * Compress hi-pass removed * Compress saturation changed from tanh to atan * beep wave for Click * selectable oversampling ratio for Compress in saturating mode * fixed Compress to apply gain before saturation * replaced sample_func_t with the more apt yield_func_t * minor cosmetics * caps-doc is a separate package * selectable wave for Click, parfiltmodel added * further smoothened ChorusII modulation * selectable oversampling ratio for Amp * moved some compress setup calls from Amp's run() to activate() * rdf target prerequisite for dist * Eq Q fixed, flat response at 0 gain
Tim Goetze would like to express his gratitude for contributions, bug fixes and encouragement to David T. Yeh, Sampo Savolainen, Klaus Tenner, Paul Davis, Damon Chaplin, Paul Winkler, Pete Leigh and Niclas Wretström, and to:
"Direct Design of Parallel Second-Order Filters for Instrument Body Modeling",
Proc. of the Int. Computer Music Conference (ICMC07) Copenhagen, Denmark, Aug. 2007, vol. I., pp. 458-465.
Jon Dattorro, "Effect Design Part III: Oscillators: Sinusoidal and Pseudonoise",
J. Audio Eng. Society, vol. 50, No. 3 / March 2002.
Jon Dattorro, "Effect Design Part I: Reverberator and Other Filters",
J. Audio Eng. Society, vol. 45, No. 9 / September 1997.
Jon Dattorro, "Effect Design Part II: Delay-Line Modulation and Chorus",
J. Audio Eng. Society, vol. 45, No. 10 / October 1997.
"flite: a small simple speech synthesizer",
Carnegie Mellon University 2009,
Paul Davis and contributors,
The JACK Audio Connection Kit,
Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld,
"Linux Audio Developer's Simple Plugin API (LADSPA)" version 1.1,
Linux Audio Developers mailing list, 2002.
Edward N. Lorenz, "Deterministic Nonperiodic Flow",
Journal of the Atmospheric Sciences vol. 20, 1963, pp. 130-141.
Siegfried Linkwitz, "Active Crossover Networks for Noncoincident Drivers",
J. Audio Eng. Society, vol. 24, No. 1 / February 1976.
245F Manual, San Leandro, California, USA, 1993.
Robert Bristow-Johnson, "Cookbook formulae for audio EQ biquad filter coefficients"
O.E. Rössler, "An Equation for Continuous Chaos",
Physics Letters, vol. 57, Issue 5, 12 July 1976, pp. 397–398.
Sean Eron Anderson, "Bit Twiddling Hacks",
Laurence W. Nagel and D.O. Pederson,
"SPICE (Simulation Program with Integrated Circuit Emphasis)",
Memorandum No. ERL-M382, EECS Department, University of California, Berkeley, USA, April 1973.
Perry R. Cook and Gary P. Scavone,
The Synthesis ToolKit in C++ (STK)
Steve W. Harris,
D.T. Yeh and J.O. Smith,
"Discretization of the '59 Fender Bassman Tone Stack",
Proc. of the Int. Conf. on Digital Audio Effects (DAFx-06), Montreal, Quebec, Canada, Sept. 18–20, 2006, pp. 1-6.
D.T. Yeh, B. Bank, and M. Karjalainen,
"Nonlinear modeling of a guitar loudspeaker cabinet",
Proc. of the Int. Conf. on Digital Audio Effects (DAFx-08), Espoo, Finland, Sept. 1–4, 2008, pp. 89-96.