Steve Harris' LADSPA Plugin Docs

2002-12-06

steve@plugin.org.uk

Contents

1  Preamble
    1.1  What plugins?
    1.2  Where can I get them
2  The plugins
    2.1  Aliasing (alias, 1407)
    2.2  Simple amplifier (amp, 1181)
    2.3  AM pitchshifter (amPitchshift, 1433)
    2.4  Analogue Oscillator (analogueOsc, 1416)
    2.5  Bode frequency shifter (bodeShifter, 1431)
    2.6  Bode frequency shifter (CV) (bodeShifterCV, 1432)
    2.7  Chebyshev distortion (chebstortion, 1430)
    2.8  Comb Filter (comb, 1190)
    2.9  Comb Splitter (combSplitter, 1411)
    2.10  Crossover distortion (crossoverDist, 1404)
    2.11  DC Offset Remover (dcRemove, 1207)
    2.12  Debug Plugin (debug, 1184)
    2.13  Decimator (decimator, 1202)
    2.14  Declipper (declip, 1195)
    2.15  Delayorama (delayorama, 1402)
    2.16  Diode Processor (diode, 1185)
    2.17  Audio Divider (Suboctave Generator) (divider, 1186)
    2.18  Dyson compressor (dysonCompress, 1403)
    2.19  Fractionally Addressed Delay Line (fadDelay, 1192)
    2.20  Flanger (flanger, 1191)
    2.21  FM Oscillator (fmOsc, 1415)
    2.22  Foldover distortion (foldover, 1213)
    2.23  Fast overdrive (foverdrive, 1196)
    2.24  Frequency tracker (freqTracker, 1418)
    2.25  Gate (gate, 1410)
    2.26  Gong model (gong, 1424)
    2.27  GSM simulator (gsm, 1215)
    2.28  GVerb (gverb, 1216)
    2.29  Hard Limiter (hardLimiter, 1413)
    2.30  Harmonic generator (harmonicGen, 1220)
        What does it do?
        Known bugs
        Examples
    2.31  Hermes Filter (hermesFilter, 1200)
    2.32  Impulse convolver (imp, 1199)
    2.33  Inverter (inv, 1429)
    2.34  Karaoke (karaoke, 1409)
    2.35  Matrix: MS to Stereo (matrixMSSt, 1421)
    2.36  Matrix Spatialiser (matrixSpatialiser, 1422)
    2.37  Matrix: Stereo to MS (matrixStMS, 1420)
    2.38  Multiband EQ (mbeq, 1197)
    2.39  Modulatable delay (modDelay, 1419)
    2.40  Multivoice Chorus (multivoiceChorus, 1201)
    2.41  LFO Phaser (lfoPhaser, 1217)
    2.42  4 x 4 pole allpass (fourByFourPole, 1218)
    2.43  Auto phaser (autoPhaser, 1219)
    2.44  Pitch Scaler (pitchScale, 1193)
    2.45  Higher Quality Pitch Scaler (pitchScaleHQ, 1194)
    2.46  Plate reverb (plate, 1423)
    2.47  Rate shifter (rateShifter, 1417)
    2.48  Retro Flanger (retroFlange, 1208)
    2.49  Ringmod with two inputs (ringmod_2i1o, 1188)
    2.50  Ringmod with LFO (ringmod_1i1o1l, 1189)
    2.51  Barry's Satan Maximiser (satanMaximiser, 1408)
    2.52  SC1 (sc1, 1425)
    2.53  SC2 (sc2, 1426)
    2.54  SC3 (sc3, 1427)
    2.55  Wave shaper (shaper, 1187)
    2.56  Signal sifter (sifter, 1210)
    2.57  Single band parametric (singlePara, 1203)
    2.58  Sinus wavewrapper (sinusWavewrapper, 1198)
    2.59  Smooth Decimator (smoothDecimate, 1414)
    2.60  Mono to Stereo splitter (split, 1406)
    2.61  Step Demuxer (stepMuxer, 1212)
    2.62  Surround matrix encoder (surroundEncoder, 1401)
        What does it do?
        Caveats
        Legalese
    2.63  State Variable Filter (svf, 1214)
    2.64  Tape Delay Simulation (tapeDelay, 1211)
    2.65  Transient mangler (transient, 1206)
    2.66  Triple band parametric with shelves (triplePara, 1204)
    2.67  Valve saturation (valve, 1209)
    2.68  Valve rectifier (valveRect, 1405)
    2.69  Wave Terrain Oscillator (waveTerrain, 1412)
    2.70  z-1 (zm1, 1428)
3  Licensing

1  Preamble

1.1  What plugins?

This is the documentation for some plugins that I have written for the Linux Audio Developers Simple Plugin Architecture. It is a nice audio plugin architecture with a very easy learning curve.

1.2  Where can I get them

From the website at http://plugin.org.uk/.

2  The plugins

2.1  Aliasing (alias, 1407)

Simulates aliasing using nyquist frequency modulation. Produces wacky results if the blocks aren't even numbers of samples long.

Aliasing level

Controls the amount of simulated aliasing in the output.

2.2  Simple amplifier (amp, 1181)

CPU usage: 130 cycles/sample

Amps gain (dB)

Controls the gain of the input signal in dB's.

2.3  AM pitchshifter (amPitchshift, 1433)

This plugin works by running a single write pointer (monotonic) and two read pointers (pitchscaled) over a ringbuffer.The output is faded between the two readpointers according to the sine of the distance from the write pointer. The design is based on the mechanism of a mechanical pitchshifter I saw in the Gemeentemuseum in Den Haag, though I'm sure it is a common enough algorithm.

Pitch shift

The multiple of the output pitch, eg. 2.0 will increase the pitch by one octave.

Buffer size

The order of magnitude of the buffer size. Small buffers will sound fluttery, large buffers will have flangy sounding echos.I recommend a buffer size of 3 for a reasonable compromise, with wideband material at around 48KHz. For drums you might have to lower it, and for voiced background noises it can go higher.

2.4  Analogue Oscillator (analogueOsc, 1416)

This plugin simulates the output you get from an analogue synth's osciallators.You can get a reasonable emualtion of a 303's square (for exmaple) if you set the warmth to about 0.4 and the instability to about 0.05.The frequency is currently a control input, and there is no interpolation, so if your host is using large block sieze it will sound steppy.I'm unsure whether to convert this to an audio input or inpolate the control in.

Waveform (1=sin, 2=tri, 3=squ, 4=saw)

The basic shape of the waveform is selected using this control:

Value Waveform
1 Sine
2 Triangle
3 Square
4 Saw

Frequency (Hz)

The frequency of the output (Hz).

Warmth

The degree of softening that is applied to the generted waveform, reduces the number of harmonics in the output.

Instability

The degree of pitch instability of the output. Turning this too high with square and saw waves will produce an anoying jittery sound, I want to fix this but it is tricky.

2.5  Bode frequency shifter (bodeShifter, 1431)

A Bode/Moog Frequency Shifter is a popular analogue synth module, it works by shifting all the frequencies of an input signal up or down by a specified frequency. This version shifts in noth directions at the same time as its almost no extra work and its often useful to have both directions.It doesn't actually work in the same way as an analogue Bode/Moog, which use Dome filters as the core, it uses a Hilbert Transformer, which is much simpler to implemtent in digital systems. The output is very similar though, and people are familiar with the name Bode.The theory of operation is pretty simple, and uses some clever maths to cancel out the upper or lower sidebands of a ringmodulator applied to the input signal. Read the source if you want more information. The Hilbert Transformet coefficents came from mkfilter, the excellent filter calculator, available at http://www-users.cs.york.ac.uk/~fisher/mkfilter/.

Frequency shift

Controls the frequency shift applied to the input signal, in Hz. Note, this is not a pitch shift, so you not get natural sounding results out, it is an audio effect popular with modular synthesists.

2.6  Bode frequency shifter (CV) (bodeShifterCV, 1432)

See the non CV version for information.This is more or less a copy of the Doepfer A126, http://www.doepfer.de/a126.htm.

Shift CV

Controls the frequency shift applied to the input signal, in KHz.

2.7  Chebyshev distortion (chebstortion, 1430)

This is an interesting distortion effect that is seeded from incoming signal envelope. As the level of the signal rises more and more harmonics will for added to the output signal.The distortion control sets the sensitivity of the input.The effect eveolved from some experiments between Tim Goetze and myself, apptempting to emulate valve based guitar amp distortion. This was one of the failures, but it still makes an interesting noise.

2.8  Comb Filter (comb, 1190)

CPU usage: 86 cycles/sample

Band separation (Hz)

Controls the distance between the filters peaks.

Feedback

Feedback level, increases the distinctive wooshy phaser sound.

2.9  Comb Splitter (combSplitter, 1411)

Divides the input up into two parts with frequency peaks at f Hz intervals, skewed by f/2 Hz between the two outputs. Mixing the two outputs will get you exactly the input signal.I generally use this trick to divide up an input signal, process the two halves differently, then mix them again. It sounds pretty funky.

Band separation (Hz)

The distance between the frequency peaks.

Output 1

The sum output.

Output 2

The difference output.

2.10  Crossover distortion (crossoverDist, 1404)

This is a simulation of the distortion that happens in class B and AB power amps when the signal crosses 0.For class B simulations the smooth value should be set to about 0.3 +/- 0.2 and for AB it should be set to near 1.0.

Crossover amplitude

Controls the point at which the output signal becomes linear.

Smoothing

Controls degree of smoothing of the crossover point.

2.11  DC Offset Remover (dcRemove, 1207)

CPU usage: 10 cycles/sample

Simply removes the DC (0 Hz) component from an audio signal, uses a high pass filter, so has some side effects, but they should be minimal.

2.12  Debug Plugin (debug, 1184)

Prints some stats about the input stream to stdout. Not intended for general use.

2.13  Decimator (decimator, 1202)

CPU usage: 29 cycles/sample

Decimates (reduces the effective sample rate), and reduces the bit depth of the input signal, allows non integer values for smooth transitions between clean and lofi signals.

Bit depth

The bit depth that the signal will be reduced to.

Sample rate (Hz)

The sample rate that the signal will be resampled at.

2.14  Declipper (declip, 1195)

CPU usage: 11 cycles/sample

Removes nasty clicks from input signals, not very kind to them though.This code came from the music-dsp mailing list, but it was unattributed, if it's yours, please drop me a line and I'll credit you.

2.15  Delayorama (delayorama, 1402)

Random seed

Controls the random numbers that will be used to stagger the delays and amplitudes if random is turned up on them. Changing this forces the random values to be recalulated.

Input gain (dB)

Controls the gain of the input signal in dB's.

Feedback (%)

Controls the amount of output signal fed back into the input.

Number of taps

Controls the number of taps in the delay.

First delay (s)

The time of the first delay.

Delay range (s)

The time difference between the first and last delay.

Delay change

The scaling factor between one delay and the next.

Delay random (%)

The random factor applied to the delay.

Amplitude change

The scaling factor between one amplitude and the next.

Amplitude random (%)

The random factor applied to the amplitude.

Dry/wet mix

The level of delayed sound mixed into the output.

2.16  Diode Processor (diode, 1185)

CPU usage: 13 cycles/sample

Mangles the signal as if it had been passed through a diode rectifier network.You should probably follow this with a DC offset remover, unless you want the offset.

Mode (0 for none, 1 for half wave, 2 for full wave)

The mode parameter is continuously variable from thru to half-wave rectification to full-wave to silence.

2.17  Audio Divider (Suboctave Generator) (divider, 1186)

CPU usage: 55 cycles/sample

Reduces the period of the signal by the factor given, and makes it a square wave in the process. Has some amplitude tracking capability, but not really useful on complex signals.

Denominator

The factor the incoming frequency will be divided by.

2.18  Dyson compressor (dysonCompress, 1403)

Peak limit (dB)

Controls the desired limit of the output signal in dB's.

Release time (s)

Controls the time taken for the compressor to relax its gain control over the input signal.

Fast compression ratio

I have no clear idea what this controls.

Compression ratio

I have no clear idea what this controls.

2.19  Fractionally Addressed Delay Line (fadDelay, 1192)

CPU usage: 397 cycles/sample

A fixed ring buffer delay implementation. Has different dynamics to a normal delay, more suitable for certain things.Changes in delay length are generally more pleasing, but delays >2s long have reduced sound quality.

Delay (seconds)

The neutral delay time is 2 seconds. Times above 2 seconds will have reduced quality and times below will have increased CPU usage.

2.20  Flanger (flanger, 1191)

A digital flanger implementation. Uses a novel zero excursion, controlled bandwidth modulation function, which should make the modulation less repetitive and noticable.This effect is similar in character to a phaser (see section 2.41). The main difference is that a phaser sounds more regular and stable.

Delay base (ms)

This is the offset from the input time that the detune delay moves around.10 is probably a good starting value.

Max slowdown (ms)

This is the maximum delay that will be applied to the delayed signal, relative to the dry signal.

LFO frequency (Hz)

This is the core frequency that the 'LFO' will move at. The LFO isn't actually an oscillator, but it does vary periodically.

Feedback

Feedback applied from the output to the input, increases the depth of the effect, but makes it sound less like a real flanger.

2.21  FM Oscillator (fmOsc, 1415)

Waveform (1=sin, 2=tri, 3=squ, 4=saw)

The shape of the waveform.
Value Waveform
1 Sine
2 Triangle
3 Square
4 Saw

Frequency (Hz)

The frequency of the output (in Hertz).

2.22  Foldover distortion (foldover, 1213)

CPU usage: 11 cycles/sample

Uses a sinwave approximation to simulate valve style foldover distortion.Probably should have a DC offset remover on the output, but it's not always necessary.

Drive

Controls the degree of distortion.

Skew

Controls the asymmetry of the waveform.

2.23  Fast overdrive (foverdrive, 1196)

CPU usage: 21 cycles/sample

A simple overdrive. Compresses the extreme peaks to make a sound similar to an overdriven amplifier.

Drive level

Controls the point at which the signal starts to distort, and the degree of distortion.

2.24  Frequency tracker (freqTracker, 1418)

Tracking speed

This controls the level of damping applied to the output.High values will make the frequency output jump around, low values will make it a bit slow to respond.

2.25  Gate (gate, 1410)

The parameters are copied from the Drawmer DS-201, but I've never used one, so if someone out there has one, please tell me in what ways it behaves differently.

LF key filter (Hz)

Controls the cutoff of the low frequency filter (highpass).

HF key filter (Hz)

Controls the cutoff of the high frequency filter (lowpass).

Threshold (dB)

Controls the level at which the gate will open.

Attack (ms)

Controls the time the gate will take to open fully.

Hold (ms)

Controls the minimum time the gate will stay open for.

Decay (ms)

Controls the time the gate will take to close fully.

Range (dB)

Controls the difference between the gate's open and closed state.

Output select (-1 = key listen, 0 = gate, 1 = bypass)

Controls output monitor. -1 is the output of the key filters (so you can check what is being gated on). 0 is the normal, gated output. 1 is bypass mode.

2.26  Gong model (gong, 1424)

A physical model of a metal gong.Based on Josep Comajuncosas' gong explorer, which was built in Sync Modular, it uses 8 linear waveguides with nonlinear filters to model the gong surface.

Inner damping

Controls the degree of damping in the centre of the gong.

Outer damping

Controls the degree of damping on the edge of the gong.

Mic position

Controls the vertical position of the "microphone", 0 is the centre and 1 is the edge.

Inner size 1

The size of the upper, inner waveguide.

Inner stiffness 1 +

The stiffness of the gong against deflections in the positive direction.

Inner stiffness 1 -

The stiffness of the gong against deflections in the negative direction.

Inner size 2

The size of the right, inner waveguide.

Inner stiffness 2 +

The stiffness of the gong against deflections in the positive direction.

Inner stiffness 2 -

The stiffness of the gong against deflections in the negative direction.

Inner size 3

The size of the lower, inner waveguide.

Inner stiffness 3 +

The stiffness of the gong against deflections in the positive direction.

Inner stiffness 3 -

The stiffness of the gong against deflections in the negative direction.

Inner size 4

The size of the left, inner waveguide.

Inner stiffness 4 +

The stiffness of the gong against deflections in the positive direction.

Inner stiffness 4 -

The stiffness of the gong against deflections in the negative direction.

Outer size 1

The size of the upper right, outer waveguide.

Outer stiffness 1 +

The stiffness of the gong against deflections in the positive direction.

Outer stiffness 1 -

The stiffness of the gong against deflections in the negative direction.

Outer size 2

The size of the lower right, outer waveguide.

Outer stiffness 2 +

The stiffness of the gong against deflections in the positive direction.

Outer stiffness 2 -

The stiffness of the gong against deflections in the negative direction.

Outer size 3

The size of the lower left, outer waveguide.

Outer stiffness 3 +

The stiffness of the gong against deflections in the positive direction.

Outer stiffness 3 -

The stiffness of the gong against deflections in the negative direction.

Outer size 4

The size of the upper left, outer waveguide.

Outer stiffness 4 +

The stiffness of the gong against deflections in the positive direction.

Outer stiffness 4 -

The stiffness of the gong against deflections in the negative direction.

2.27  GSM simulator (gsm, 1215)

CPU usage: 377 cycles/sample

Encodes and decodes a signal using the GSM voice compression system. Has the effect of making the signal sound like it is being sent over a European mobile phone network.

Dry/wet mix

Controls the dry/wet mix, 0 will give you the dry signal (but with the appropriate amount of delay), 1 will give you a totally wet signal.

Number of passes

The number of times the signal is sent through the encode/decode process. Increases the CPU consumption almost linearly, and it will become more peaky so less friendly to realtime processing.

Error rate (bits/block)

The number of simulated bits that get changed during the transmission process.I really wanted to reduce the bandwidth to get that ßhouting down a drainpipe" effect, but I'm not sure how the reduced bandwidth is dealt with by real phones. I suspect it's heavily patented technology.

2.28  GVerb (gverb, 1216)

A mono in, stereo out reverb implementation by Juhana Sadeharju (kouhia at nic.funet.fi). I ported it to LADSPA and did some testing.Please contact Juhana directly regarding any bugs you find. Paul Winkler recommends a good starting point for a "large hall" as follows:

Parameter amp; Value
Roomsize amp; 200
Reverb time amp; 1.3
Damping amp; 0.4
Input bandwidth amp; 0.5
Dry signal level amp; 0
Early reflection level amp; -12
Tail level amp; 0

Roomsize (m)

The size of the room, in meters. Excessivly large, and excessivly small values will make it sound a bit unrealistic.Values of around 30 sound good.

Reverb time (s)

Reverb decay time, in seconds. 7 is a good place to start.

Damping

This controls the high frequency damping (a lowpass filter), values near 1 will make it sound very bright, values near 0 will make it sound very dark.

Input bandwidth

This is like a damping control for the input, it has a similar effect to the damping control, but is subtly different.

Dry signal level (dB)

The amount of dry signal to be mixed with the reverberated signal.

Early reflection level (dB)

The quantity of early reflections (scatter reflections directly from the source). Think of Lexicons ambiance patches.

Tail level (dB)

The level of the classic reverb tail reflections.

2.29  Hard Limiter (hardLimiter, 1413)

Brick hard limiter with residue mixer.

Wet level

Output level for limited signal.

Residue level

Output level for residue signal.

2.30  Harmonic generator (harmonicGen, 1220)

CPU usage: 45 cycles/sample

What does it do?

Allows you to add harmonics and remove the fundamental from any audio signal.

Known bugs

There is no bandwith limiting filter on the output, so it is easy to create excessively high frequency harmonics that could cause aliasing problems. In practive this doesn't seem to be a serious problem however.

Examples

There are many interesting effects you can achieve with sinewaves, one example is producing bandlimited squarewaves from sinewaves. To do this set the parameters to 1, 0, -0.3333, 0, 0.2, 0, -0.14285, 0, 0.11111.To get a triangle like signal use 1, 0, -0.3333, 0, -0.2, 0, -0.14285, 0, -0.11111.

Fundamental magnitude

The amplitude of the fundamental of the signal, reduce it to 0 to remove the base signal altogether, or -1 to phase invert it.

2nd harmonic magnitude

The 2nd harmonic, its frequency is twice the frequency of the harmonic.Even harmonics add a distorted feel to the sound, valve (tube) amplifiers introduce distortions at all the harmonics.

3rd harmonic magnitude

The 3rd harmonic, its frequency is three time the frequency of the fundamental.Transistor amplifiers only introduce distortion into the odd harmonics.

2.31  Hermes Filter (hermesFilter, 1200)

CPU usage: 1400 cycles/sample

This plugin is a simulation of a modern analogue synth called a Pro Tone, with some extra features bolted on, like a crossover. I tried to make it as comprehensive as possible, without requiring ludicrous amounts of CPU juice.N.B. as far as I know, noone has tried to use this (I certainly haven't), so it may be full of bugs and what not. The parameters are all undocumented, but there is a diagram of the routing on the website. Without a custom interface however it would be very hard to use.Historical note: the name is a bad pun, it comes from the name Hermes Trimegistus given to the Egyptian god Thoth by the greeks, it means Thrice Blessed, or something similar.

2.32  Impulse convolver (imp, 1199)

This is a convolver for a set of fairly short impulses.

The set of impulses has to be compiled in, they are:

Id Impulse
1 Unit impulse (identity)
2 My flat (light natural reverb)
3 Yamaha Marshall stack simulator
4 Fender 68 Vibrolux (SM57 on axis)
5 Fender 68 Vibrolux (SM57 off axis)
6 Fender 68 Vibrolux (Audio-technica AT4050)
7 Fender 68 Vibrolux (Neumann U87)
8 Fender Bassman (SM57 on axis)
9 Fender Bassman (SM57 off axis)
10 Fender Bassman (Audio-technica AT4050)
11 Fender Bassman (Neumann U87)
12 Fender Superchamp (SM57 on axis)
13 Fender Superchamp (SM57 off axis)
14 Fender Superchamp (Audio-technica AT4050)
15 Fender Superchamp (Neumann U87)
16 Marshall JCM2000 (SM57 on axis)
17 Marshall JCM2000 (SM57 off axis)
18 Marshall Plexi (SM57 on axis)
19 Marshall Plexi (SM57 off axis)
20 Matchless Chieftan (SM57 on axis)
21 Matchless Chieftan (SM57 off axis)

The first three were quickly grabbed by me using jack_impulse_grabber, and the others we collected by someone else, but unfortunately I've lost his email address and can't find him on the web :(

Impulse ID

Selects the impulse to convolve with. New impulses have to be compiled in.

High latency mode

If you are running with blocks that are not whole powers of two long, or you are hearing distortion, try changing this to 1.

Gain (dB)

Controls the gain of the output signal in dB's.

2.33  Inverter (inv, 1429)

A utility plugin that inverts the signal, also (wrongly) known as a 180 degree phase shift.

2.34  Karaoke (karaoke, 1409)

Attempts to strip the vocals from a stereo signal.

Vocal volume (dB)

Controls the attenuation of the vocal (centre channel) in dB's.The greater the attenuation the greater the loss of stereo field.

2.35  Matrix: MS to Stereo (matrixMSSt, 1421)

Width

The width of the dematrixed stereo field. 1 will give you normal width, 0 will make it completely mono, < 1 will make it narrower and > 1 will make it wider.

2.36  Matrix Spatialiser (matrixSpatialiser, 1422)

A simple spatializer that lets you control the width of a stereo signal.

We convert it into a MS (mid/side) signal, manipulate the gain coefficients with a constant-power panning function, and reconvert to left/right stereo.

mid = (i_left + i_right) / 2

side = (i_left - i_right) / 2

width = (-pi/4)..0..(pi/4)

o_left = mid * cos(width + pi/4) o_right = side * sin(width + pi/4)

shifted by pi/4, so that 0 is neutral.

Width

0 is neutral (unmodified signal) + 128 is side only (=very wide) - 128 is mid only (=mono)

2.37  Matrix: Stereo to MS (matrixStMS, 1420)

2.38  Multiband EQ (mbeq, 1197)

This is a fairly typical multiband graphical equalizer. It's implemented using a FFT, so it takes quite a lot of CPU power, but should have less phase effects than an equivalent filter implementation.If the input signal is at too low a sample rate then the top bands will be ignored, the highest useful band will always be a high shelf.

2.39  Modulatable delay (modDelay, 1419)

A delay whose tap can be modulated at audio rate.Requested by Matthias Nagorni at LinuxTag 2002, in order to make a Leslie simulator.

2.40  Multivoice Chorus (multivoiceChorus, 1201)

This is an implementation of a Multivoice (as opposed to Multiscale) chorus algorithm. Its uses a novel, sinc based noise interpolation method to produce a subtle modulation law which makes it possible to get away with larger numbers of voices without the metallic, artificial sound common in chorus effects.

Voice separation (ms)

The individual voices can either be running at the same base delay (set this to zero) or staggered.Setting this to non-zero values can make the output sound richer, but will make it sound grainy with some type of signal.

Detune (%)

The maximum amount that a voice will be detuned by. I recommend a value of 1, but you may be able to get away with higher values if the signal is less harmonic.

LFO frequency (Hz)

The frequency that the detune effect will be modulated at. A matter of taste, for most types of input lower will be more subtle.

Output attenuation (dB)

With large numbers of voices the output can become too high, so use this to trim the amplitude to a more helpful level.

2.41  LFO Phaser (lfoPhaser, 1217)

CPU usage: 197 cycles/sample

2.42  4 x 4 pole allpass (fourByFourPole, 1218)

CPU usage: 262 cycles/sample

2.43  Auto phaser (autoPhaser, 1219)

CPU usage: 121 cycles/sample

2.44  Pitch Scaler (pitchScale, 1193)

CPU usage: 1323 cycles/sample

A pitch shifter implementation that scales the harmonics appropriately with the base frequencies. It is an implementation of Stephen M. Sprengler's pitch scaler design. It gives reasonable, general purpose results for small changes, but won't give Antares or Eventide anything to worry about.The FFT block size and oversampling has been kept at a minimum to keep the CPU usage low.

2.45  Higher Quality Pitch Scaler (pitchScaleHQ, 1194)

A pitch shifter implementation that scales the harmonics appropriately with the base frequencies. It is an implementation of Stephen M. Sprengler's pitch scaler design. It gives reasonable, general purpose results for small changes, but won't give Antares or Eventide anything to worry about.The FFT block size and oversampling has been kept at reasonable levels to keep the CPU usage low, but it is smoother than the other Pitch Scaler.

Pitch co-efficient

The pitch scaling factor, a value of 2.0 will increase the pitch by one octave, etc.

2.46  Plate reverb (plate, 1423)

A physical model of a steel plate reverb.Based on Josep Comajuncosas' gong model, it uses 8 linear waveguides to model the plate.

Reverb time

Controls the RT60 time of the reverb. Actually controls the size of the plate. The mapping betwwen plate size and RT60 time is just a heuristic, so it's not very accurate.

Damping

Controls the degree that the surface of the plate is damped.

Dry/wet mix

Controls the balance between the dry and wet signals.

2.47  Rate shifter (rateShifter, 1417)

Stretches or compresses the input with a ringbuffer.Because of the ringbuffer you will get stretches of silence or clicks when the read pointer passes the write pointer.The ringbuffer is about 2.7-3.0s long, depending on the sample rate.Versions with variable buffer sizes or declicking code would be easy (but a bit less efficient); shout if you would find them useful.

Rate

The rate of the output signal; eg. 2.0 will double the speed. Negative numbers will play backwards.Pretty much any value will work, but the ranges give what most people are going to want to use. You can get some interesting sounds with very high numbers (e.g. 2000).

2.48  Retro Flanger (retroFlange, 1208)

A model of someone flanging the input.Models the tape saturation effects, and frequency smear. The smear could probably be done better.

Average stall (ms)

The average time difference between the two tapes, per stall

Flange frequency (Hz)

The rate the tape is stalled at.

2.49  Ringmod with two inputs (ringmod_2i1o, 1188)

This is a simple 2 input ring modulator.It is important that the modulator input is bounded to (-1, +1), otherwise you will get rubbish on the output.

Input

This is the audio input.

Modulator

This is the modulator input.

2.50  Ringmod with LFO (ringmod_1i1o1l, 1189)

CPU usage: 102 cycles/sample

This is a simple ring modulator and LFO.

2.51  Barry's Satan Maximiser (satanMaximiser, 1408)

Formerly Stupid Compressor. Thanks to Matt Yee-King for the name.Compresses signals with a stupidly short attack and decay, infinite ratio and hard knee. Not really as a compressor, but good harsh distortion.

Decay time (samples)

Controls the envelope decay time.

Knee point (dB)

Controls the knee roll-off point, ie. the point above which the compression kicks in. 0 will have no effect, -90 will remove virtually all dynamic range.

2.52  SC1 (sc1, 1425)

An high quality, reasonably low CPU cost RMS compressor designed for musical work.It has controls for the compression point, compression ratio and knee softness.

Attack time (ms)

The attack time in milliseconds.

Release time (ms)

The release time in milliseconds.

Threshold level (dB)

The point at which the compressor will start to kick in.

Ratio (1:n)

The gain reduction ratio used when the signal level exceeds the threshold.

Knee radius (dB)

The distance from the threshold where the knee curve starts.

Makeup gain (dB)

Controls the gain of the makeup input signal in dB's.

2.53  SC2 (sc2, 1426)

A compressor with sidechain. Based on the code for SC1.

Attack time (ms)

The attack time in milliseconds.

Release time (ms)

The release time in milliseconds.

Threshold level (dB)

The point at which the compressor will start to kick in.

Ratio (1:n)

The gain reduction ratio used when the signal level exceeds the threshold.

Knee radius (dB)

The distance from the threshold where the knee curve starts.

Makeup gain (dB)

Controls the gain of the makeup input signal in dB's.

2.54  SC3 (sc3, 1427)

A stereo compressor with sidechain input. Based on the code for SC1.

Attack time (ms)

The attack time in milliseconds.

Release time (ms)

The release time in milliseconds.

Threshold level (dB)

The point at which the compressor will start to kick in.

Ratio (1:n)

The gain reduction ratio used when the signal level exceeds the threshold.

Knee radius (dB)

The distance from the threshold where the knee curve starts.

Makeup gain (dB)

Controls the gain of the makeup input signal in dB's.

Chain balance

Controls the chain signal used, 0 = Left+right in, 1 = Sidechain.

2.55  Wave shaper (shaper, 1187)

CPU usage: 200 cycles/sample

This plugin reshapes the wave by an exponential function, inspiration was taken from the Nord module of the same name.If you are getting rubbish out then it's probably because the host isn't using the input/output range hints, which are very important for this plugin.

Waveshape

Positive values have an expanding effect, and negative values have a compressing effect.

2.56  Signal sifter (sifter, 1210)

Sorts and mixes blocks of the input signal to give a "bumpy ramp" effect.Certain types of input will produce silence on the output (mostly ones with only low frequency components).This is a very odd effect, and doesn't really have any music applications, but can produce some interesting noises.

2.57  Single band parametric (singlePara, 1203)

A single band of a parametric filter.

Gain (dB)

The attenuation/gain of the eq.

Frequency (Hz)

The centre frequency (ie. point of most/least attenuation).Beware of high values for Frequency and Bandwidth, if the high pitch (Frequency * 2Bandwidth) goes over half the sample rate you will get very nasty aliasing.Note: if your host offers you a frequency range between 0 and 0.4 then it's not rendering the input parameter correctly, the input frequency will actually be that number multiplied by the sample rate (e.g. 44.1kHz).

Bandwidth (octaves)

The pitch difference from the centre before the attenuation has reached half the gain.

2.58  Sinus wavewrapper (sinusWavewrapper, 1198)

Produces an unusual distortion effect, for a more amp like tone, see the valve saturation plugin (section 2.67).

2.59  Smooth Decimator (smoothDecimate, 1414)

Resample rate

The rate at which the output signal will be resampled

Smoothing

The amount of smoothing on the output signal.

2.60  Mono to Stereo splitter (split, 1406)

Takes a mono input signal, and outputs it to both left and right channel, thus ßtereophizing" it.

2.61  Step Demuxer (stepMuxer, 1212)

Inputs up to 8 signals and switches between them on the output when then signal on the clock input goes high.This plugin is untested, and may not work.

2.62  Surround matrix encoder (surroundEncoder, 1401)

I haven't been able to test this plugin, so there may be bugs. I have successfully tested the algorithm, but the implementation is suspect.

What does it do?

It allows you to encode four channels of sound into a stereo compatible stream that will be decoded by a Dolby1 Surround/Pro-Logic decoder into Left, Right, Center and Surround signals.This is not a proper implementation of Pro-logic, there is no Dolby B processing done on the surround channel, which would help, but would be using Dolby intellectual property.

Caveats

Obviously you can't wedge four channels into two without loss, so something has to give. You will probably notice significant cross-talk between the channels, but the decoder should do cross-talk correction, which will help a lot. A side effect of this is that it will make left-right panning unusual, the sources will dwell near the left and right speakers and zip across the centre channel. Because of this it is only really possible to master surround recordings through a pre-logic decoder. Do not attempt to use a conventional 5 point surround multichannel setup, it behaves very differently.In addition to this, output from this process is not entirly mono compatible, in mono output the L, C and R will be preserved as per a stereo recording (centre will be mixed equally), but the surround channel will be totally lost.Careful gain control on the output is required, as the level of the output will be greater than the L and R inputs, but different to the sum amplitude of the input signals.Widely panned reverb fed to the L and R channels will often leak into the S channel, if this is not desired (often it is) reduce the width of the stereo image.The encoding will survive some processes (eg. copying to CD, MD etc.), but may not survive conversion to MP3 or recoding to tape with azimuth errors.

Legalese

This is a four channel matrix encoder, it happens to be compatible with Dolby Surround Pro-Logic.This implementation does not convey a license nor imply a right under any patent, or any other industrial or intellectual property right of Dolby Laboratories.

L

Left channel input. Can be treated as per normal stereo recoding, except that the speaker should be at -22.5°, rather than the normal stereo -30°.

R

Right channel input. As per left channel.

C

Center channel input. Will be directly in front of the listener, stereo and mono compatible.

S

Surround channel. Should sound from the rear speakers, may also leak into the left and right. Has slight delay and bandwidth reduction (cut below 100 Hz, and above 7 KHz) for leakage and noise reduction and enhanced psychoacoustic effects.Not mono compatible.

2.63  State Variable Filter (svf, 1214)

An oversampled state variable filter with a few tweaksQuite a nice State Variable Filter, tends to be unstable with high resonance and Q values, but good when kept under control.

Filter type (0=none, 1=LP, 2=HP, 3=BP, 4=BR, 5=AP)

Select between no filtering, low-pass, high-pass, band-pass, band-reject and all-pass.

Filter freq

Cutoff frequency, beware of high values with low sample rates.

Filter Q

The filters Q, or cutoff slope.

Filter resonance

The filter's resonance, sort of separate from Q but very related (implemented with feedback).Do not use with the bandpass mode.

2.64  Tape Delay Simulation (tapeDelay, 1211)

CPU usage: 405 cycles/sample

Correctly models the tape motion and some of the smear effect, there is no simulation fo the head saturation yet, as I don't have a good model of it. When I get one I will add it.The way the tape accelerates and decelerates gives a nicer delay effect for many purposes.

2.65  Transient mangler (transient, 1206)

2.66  Triple band parametric with shelves (triplePara, 1204)

Actually five bands of eq, but the first and last are locked to shelving filters.For details see the single band parametric (section 2.57).

2.67  Valve saturation (valve, 1209)

CPU usage: 317 cycles/sample

A model of valve (tube) distortion, lacking some of the harmonics you would get in a real tube amp, but sounds good nonetheless.Taken from Ragnar Bendiksen's thesis: http://www.notam02.no/~rbendiks/Diplom/Innhold.html.

Distortion level

How hard the signal is driven against the limit of the amplifier.

Distortion character

The hardness of the sound, low for soft, high for hard.

2.68  Valve rectifier (valveRect, 1405)

Sag level

The level of power supply sag that will be caused by attacks.

Distortion

How harsh the distortion caused by the sag will be.

2.69  Wave Terrain Oscillator (waveTerrain, 1412)

A Wave Terrain oscillator, taken from Curtis Roads' example in The Computer Music Tutorial.Inputs x and y move the cursor around on a 2D landscape "wavetable" that is used to generate the output. The function used is z = (x - y) * (x - 1) * (x + 1) * (y - 1) * (y + 1).

2.70  z-1 (zm1, 1428)

A plugin that implements the z-1 function (a single sample delay).

3  Licensing

All this code is available under the GNU Public Licence, see the file ''COPYING'' included with the source for more detials.


Footnotes:

1 "Dolby" is a trademark of Dolby Laboratories.


File translated from TEX by TTH, version 2.51.
On 6 Dec 2002, 18:18.