## The CAPS Audio Plugin Suite

Release 0.4.1 | http://quitte.de/dsp/caps.html | Tim Goetze
June 19, 2007 | tim@quitte.de

- Front Matter
- Download
- Installation
- What You Should Know
- Give me a Guitar Setup Already!
- The Plugins
  - Generic
  - Eq – classic ten-band equalizer
  - Eq2x2 – stereo version of Eq
  - Compress – a compressor suitable for single instruments
  - Pan – pan and optional width
  - Emulation
  - PreampIII – simplistic tube preamp circuit
  - PreampIV – simplistic tube preamp with tone controls
  - ToneStack – tube preamp tone controls
  - ToneStackLT – tube preamp tone controls 44.1
  - AmpIII – tube amp
  - AmpIV – tube amp with tone controls
  - AmpV – tube amp with power supply modulation
  - AmpVTS – tube amp with a ToneStack circuit
  - CabinetI – emulation of classical speaker cabinets
  - CabinetII – refined version of CabinetI
  - Clip – hard 'transistor' clipping
  - Effects
  - ChorusI – a versatile classic
  - StereoChorusI – when one channel is not enough
  - ChorusII – variant with fractal modulation
  - StereoChorusII – stereo variant with fractal modulation
  - PhaserI – another classic
  - PhaserII – variant with fractal modulation
  - SweepVFI – resonant filter modulated by a fractal
  - SweepVFII – resonant filter modulated by a fractal
  - AutoWah – resonant envelope-following filter
  - Scape – stereo delay plus resonant filters, fractal modulation
  - Generators
  - VCOs – sawtooth / triangle / square wave generator
  - VCOd – double VCO with detune and hard sync
  - CEO – chief executive oscillator
  - Sin – testing and tuning helper
  - White – white noisz
  - Lorenz – a fractal singing in a broken voice
  - Roessler – a roaring fractal
  - Reverb
  - JVRev – a digital reverb technology classic
  - Plate – versatile refined digital reverb
  - Plate2x2 – 2-in, 2-out version of Plate
  - Others
  - Click – practice, practice, practice!
  - Dirac – one-sample impulse generator
  - HRTF – head-related transfer function
- Appendix

- Plugin Data Sheets
- Changelog

### Front Matter

CAPS, the C* Audio Plugin Suite, is a collection of refined LADSPA audio plugins capable of (and mainly intended for) realtime operation. The suite includes DSP units emulating instrument amplifiers, stomp-box classics, versatile 'virtual analogue' oscillators, fractal oscillation, reverb, equalization and more.

My favourite user's quote: “... if your amps beat your plugins, they are *very good* amps.. ;-)” – Thanks, Pete!

Most of the suite is of my own invention, while some plugins are rewrites of existing designs, included for excellence or interest. Inspiring code was authored by (in no particular order): Andrew Simper, Perry Cook, Gary Scavone, Steve Harris, Richard Dobson, Bram de Jong, Robert Bristow-Johnson and others.

The ToneStack plugins and the tone controls of the AmpVTS unit have been designed and implemented by David Yeh at CCRMA.

All of CAPS is free software and distributed in source code.

##### * What's with the C?

So what does the C in the name stand for? Honestly, I don't know.

Complete? Not yet.
C as in the programming language? The source is C++.
Crap? Heaven forbid!
Cute? Why not ...
Common? Not bad either.
C, the latin numeral for one-hundred? Some more to go, but I like the idea.

I've got it! C as in The Caps Audio Plugin Suite! A classic.

### Download

CAPS is distributed under the GNU General Public License. Other licensing terms can be arranged if you wish, please feel free to contact me.

##### No Guarantee

While I have bred all the plugins in the suite with the greatest care, there is no guarantee that they will all retain perfect manners under all possible circumstances. Take, for example, the Lorenz plugin, which models a fractal system. How am I to guarantee its output will never go out of range, if people far more knowledgeable about this fractal than me assert its unpredictable behaviour?

This collection is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Download the latest release from the CAPS homepage.

### Installation

Provided you run Linux, installation is simply:

    $ tar xvfz caps_0.4.1.tar.gz
    $ cd caps-0.4.1
    $ ./configure.py
    $ make
    $ su
    # make install

(The `configure.py` step is optional but recommended.)

You should now be able use the plugins from the collection in any LADSPA-aware host program, like the wonderful pd with the `plugin~` external, the inimitable jack-rack, the impressive ardour, the versatile ecasound, the classic snd, and numerous other applications large and small.

You don't run Linux? Why not downgrade now?

PPC and other non-x86 users may have to edit the Makefile. CAPS should compile on OSX but I haven't been able to test it.

##### Troubleshooting

With no external dependencies, compiling CAPS should rarely fail. If it does on your machine, please send the output of the `make` command so we can try and fix the problem.

##### Bugs

If any of the plugins in the suite do not work with your host program of choice, or don't work as advertised, please send a bug report.

### What You Should Know

##### Parameter Smoothing

To prevent zipper noise, many plugin control inputs are subject to internal parameter smoothing where the effort seems justified. This is achieved by sweeping parameters internal to the plugin. The duration of this sweep will vary with the audio system setup. For realtime use and most known LADSPA hosts it is equal to the audio block size (in `jackd` terms: the "frames per period").

##### Sample Rate

The CAPS plugins are designed to be used at sample rates of 44.1 kHz or higher. Operation at lower sample rates is generally possible but untested. Especially the resonant filters in the SweepVFI, SweepVFII, AutoWah and Scape plugins can self-oscillate out of bounds at low sample rates and high filter cutoff frequency settings. It is a wise idea to do some silent test runs testing the entire parameter range to see if the plugin works as expected before relying on its operation at sample rates below 44.1 kHz.

In the plugin listing, for every unit you'll see a note like All sample rates. This means that the plugin should sound the same no matter what sample rate it is run at. If it doesn't, holler at me. A note like 44.1 kHz only means you can still run the plugin at other sample rates without having to fear for your life, but the sonic experience may differ from what is advertised.

##### Realtime Use

All of the plugins in the suite are hard-realtime capable. In some cases, parameter smoothing will take a marginal number of extra CPU cycles when a control value is changed, as well as when the plugin is starting or resuming operation.

##### In-Place and Mixing/Replacing Operation

All of the plugins in the suite support any combination of in-place, mixing and replacing operation.

##### Denormals

Denormal numbers (wikipedia) are the bane of DSP on common computer systems because they seriously slow down computing speed. In CAPS, various approaches are employed to prevent this problem from arising. Most of the plugins add an inaudible signal (-266 dB) at the Nyquist (wikipedia) or at a fixed lower frequency which keeps calculations out of the critical zone around zero. In addition, if you run `configure.py` prior to building CAPS, SSE extensions will be employed to aid in this task if they are available on the build system.

##### I'd love to hear from you. Really!

You like something about CAPS? Don't like it? Either way, tell me – otherwise I'll never be able to improve it!

##### Known Bugs and Limitations

- CPU usage figures, if given, may be inaccurate or even off by an order of magnitude.
- 8x oversampling consumes a lot of CPU power.
- Since version 0.4.0, CAPS cannot be compiled with gcc 2.95 any more.
- Processing blocks larger than 231 - 1 aren't supported.

### Give me a Guitar Setup Already!

Start your guitar signal chain with an AmpVTS, followed by a CabinetII and finish with a Plate reverb. Season to taste, done.

Additional effects like chorus, phaser or auto wah would drop in right before or right after the Cabinet (I usually prefer the latter).

### The Plugins

### Generic

#### Eq

A ten-band, octave-spread equalizer. Based on a traditional analogue design and about as faithful as digital IIR filtering allows. Individual band filters are 6 dB / octave.

All sample rates (bands beyond Nyquist are disabled).

- 31 Hz, 63 Hz, 125 Hz, 250 Hz, 500 Hz, 1 kHz, 2 kHz, 4 kHz, 8 kHz, 16 kHz
control the gain in dB for the respective band.

#### Eq2x2

By popular demand, a stereo-in, stereo-out version of the Eq unit. Same controls as Eq.

#### Compress

A mono compressor, based on the SC1 design by Steve Harris (in other words, a ripoff) with minor tweaks. Be careful with the gain and ratio controls, the output signal can easily exceed 0 dB.

All sample rates.

- gain (dB)

  controls the maximum gain applied by the unit.

- ratio (1:n)

  controls the overall gain.

- attack (s)

  controls the speed at which the circuit acts on a rising input signal envelope.

- release (s)

  controls the speed at which the circuit acts on a decaying input signal envelope.

- threshold (dB)

  sets the envelope level that the compressor starts acting at.

- knee radius (dB)

  controls the softness of the transition between unaltered and compressed signal.

#### Pan

Places a monaural source in the stereo field. For some extra spicing, the unit can also add a low-pass filtered echo at the far ends of the stereo field to make the signal sound 'wider' (recreating the old doubling effect with a twist). You can (and should!) control the loudness and timing of the echo; what's best depends largely on the source signal.

No parameter smoothing.

All sample rates.

- pan

  position

- width

  echo volume

- t

  delay in milliseconds

- mono

  if non-zero, causes the unit to mix the stereo output back down to mono and output that (on both outbound ports). The purpose is to check for mono compatibility of the output.

### Emulation

#### PreampIII

One further step in the evolution of my tube preamplifier emulation. This one uses conventional polyphase FIR filters for 8x oversampling, which helps make the unit sound a good deal cleaner than the IIR-based predecessor.

The first steps towards this unit were based on a `spice` model of the preamplifier circuit in a Fender 5F4 design ('Super' tube amp, a close relative of the famed 'Bassman', which is the ancestor of the Marshall lineage). Further evolution was based on measurements of my 'Super 60' (mid-1980s) amp and, of course, personal preference. The plugin offers a softer kind of preamp clipping than the actual circuit, though it can be made to clip as harsh as the original thing if given enough gain.

A word of caution: at high 'temperature' settings, an input signal peaking above 0 dB can drive the first 'tube' stage into hard clipping. Since this stage of the circuit is run at the nominal sample rate, aliasing and thus sound quality degradation will occur. Do not overdrive the input, instead use the 'gain' knob for harsh distortion, it offers more than enough of it. This applies to all Preamp and Amp units.

All sample rates.

- gain

  controls the level of saturation. For a balanced (0 dB max.) input signal, hard clipping will not occur below a gain value of 1.

- temperature

  emulates the level of the input signal, thus how much the first preamplifier tube will colour the signal. The effect is very subtle.

#### PreampIV

A variation on PreampIII with added tone controls before the clipping stage. The tone controls have the same flaws as their analog counterparts (phase cancellation at high band gains). But exactly because they are not linear-phase, they are quite useful in altering the distortion characteristics of the circuit.

All sample rates.

Same parameters as PreampIII, plus the following (all in dB units):

- bass

  80 Hz band

- mid

  300 Hz band

- treble

  1200 Hz band

- hi

  4800 Hz band

#### ToneStack

A close model of the tone stack of a traditional instrument amplifier (of Fender origin), designed and implemented by David Yeh, discussed in [2] (see his project page at CCRMA).

This is the 'procedural' implementation which uses a direct form II filter, adapts to the actual sample rate and offers the choice of model from a selection of several classic tone stacks. (The AC-30 is a crude approximation for which David isn't to blame. I simply dropped in the parameters although the circuit doesn't match the one David modeled.)

All sample rates.

- model

  0 - '59 Bassman
  1 - '69 Twin Reverb
  2 - '64 Princeton
  3 - '59/'81 JCM 800
  4 - '78 Club & Country
  5 - '59/'86 AC-30 of sorts

- bass
- mid
- treble

#### ToneStackLT

This version of David Yeh's ToneStack replaces the procedural approach and direct form II filter with a lattice filter and operation on precalculated simulation data. It's a fixed implementation of the '59 Bassman model.

44.1 kHz

- bass
- mid
- treble

#### AmpIII

A PreampIII circuit plus a tube power amplifier emulation giving that smooth drive.

We recommend you use AmpVTS instead.

All sample rates.

Same controls as PreampIII, plus:

- drive

  controls the 'master volume' of the circuit, i.e. how much coloring and compression the emulated power amplifier produces.

#### AmpIV

A PreampIV with the same output amp stage emulation that AmpIII employs. Controls are the same as on PreampIV, plus the 'drive' inherited from AmpIII.

We recommend you use AmpVTS instead.

All sample rates.

#### AmpV

This circuit is loosely based on the AmpIII design. The preamplifier stage has been augmented and tuned to provide a warmer frequency response as well as slightly different clipping characteristics. But more significantly, AmpV emulates the shortcomings of an unregulated power supply and their effect on the total gain of the circuit, the operating point of the tubes and the clipping response.

AmpV's forte is a mellow sound at the transition from clean to rough, at lowish 'gain' settings and moderate 'watts'.

We recommend you use AmpVTS instead.

All sample rates.

- gain

  controls the amount of edge added in the preamplifier stage. The parameter mapping has been optimized for fine control in the clean to medium-rough range.

- bass

  controls the attenuation or amplification of low frequencies before the preamp tube (the value is expressed in dB). Technically, a low-shelving equalizer filter.

- tone

  controls post-preamplifier circuit filtering. At the zero setting, the effect is turned off. At its maximum, there is some resonance quite high in the spectrum.

- drive

  controls power-amplification stage saturation, which gives a fair bit of warmth and some compression.

- watts

  controls how capable the emulated power supply is. At its minimum setting, the effects of supply voltage modulation are the most pronounced. At the maximum setting, they are effectively removed (which is recommended for high-'gain' setups).

#### AmpVTS

An AmpV with the tone controls replaced with the fine ToneStack by David Yeh. And a ton of other modifications (most notably the availability of an extra 28 dB of gain).

All sample rates.

#### CabinetI

A collection of filters emulating the frequency response of various guitar combo amps or speaker cabinets, using the method outlined here.

You'll find a more exact, but also a lot more cycle-hungry and latency-inflicting rendering of these responses in Steve Harris' collection, from which they were borrowed.

We recommend you use the successor unit CabinetII instead.

44.1 kHz (48 kHz gives a slightly different, but still usable frequency response.)

- model

  0 - identity filter (what goes in, goes out).
  1 - 'unmatched', as I still like to call it. A Matchless Chieftain.
  2 - the same, but the recording was taken with the microphone on-axis.
  3 - Superchamp (a Fender, isn't it?)
  4 - Fender Vibrolux 68
  5 - Marshall 'Plexi'

- gain (dB)

  volume control.

#### CabinetII

A refined version of CabinetI. This version offers a much more faithful rendering of the original speaker cabinet frequency responses due to a modified filter approximation, double the filter order and (limited) adaptability to sample rate.

Unlike conventional impulse response emulators who rely on brute-force convolution, FFT-based algorithms or the patent-encumbered zero-latency variant of the latter, the Cabinet units employ IIR filters for truly resonant behaviour. As a result, their sound is more lively.

Same controls as CabinetI.

44.1, 48, 88.2 and 96 kHz (nearest match chosen at runtime)

#### Clip

A spin-off of the PreampIII effort. 8x oversampled hard clipping (sometimes called 'diode' or 'transistor' clipping). The clip threshold is fixed at -1 dB (overshoot from the up- and downsampling filters could exceed 0 dB were the threshold higher).

All sample rates.

- gain (dB)

  controls pre-clipping amplification.

### Effects

#### ChorusI

Mono version, with a feedback circuit. The parameter range suits more subtle effects as well as all-out flanging. Modifying the 't' parameter when 'feedback' is non-zero will cause zipper noise.

All sample rates.

- t (ms)

  delay time.

- width (ms)

  controls the amount of pitch change.

- rate (Hz)

  the speed of the pitch modulation.

- blend

  the amount of dry and fed-back signal in the output.

- feedforward

  amount of modulated signal in the output.

- feedback

  amount of signal with fixed delay in the modulation input.

#### StereoChorusI

Two ChorusI circuits in parallel, sharing the same input (and delay line). Same parameters as the mono version, plus one.

All sample rates.

- phase

controls the relation of the two LFOs. 0 means in-phase, 0.5 is quadrature, and 1 is anti-phase.

#### ChorusII

A variation on the ChorusI unit; this one employs a Roessler fractal to steer the signal modulation, resulting in less predictable and thus more interesting sound.

All sample rates.

- t (ms)

  delay time.

- width (ms)

  controls the amount of pitch change.

- rate

  the speed of the pitch modulation.

- blend

  the amount of dry and fed-back signal in the output.

- feedforward

  amount of modulated signal in the output.

- feedback

  amount of signal with fixed delay in the modulation input.

#### StereoChorusII

Two ChorusII circuits in parallel, sharing the same input (and delay line). Same parameters as the mono version.

All sample rates.

#### PhaserI

Nothing out of the ordinary, just a phaser like I like to have them. A phaser unit works by sweeping notches in the frequency response; this one has six comb filters, for six notches.

All sample rates.

- rate (Hz)

  controls the speed of the modulation.

- depth

  the strength of the effect.

- spread

  the distance of the notched frequency bands.

- feedback

  controls the amount of resonance.

#### PhaserII

A variation of the PhaserI circuit which relies on a Lorenz fractal for the modulation source, improving hugely on output sound variation.

All sample rates.

- rate

  controls the speed of the modulation.

- depth

  the strength of the effect.

- spread

  the distance of the notched frequency bands.

- feedback

  controls the amount of resonance.

#### SweepVFI

A resonant filter whose cutoff frequency is swept by a Lorenz fractal. With the default parameters (moderate Q, cutoff around 800 Hz and band pass mode) it makes a nice Wah effect if you lower the 'h' parameter by a fair amount.

Another idea is to set it to very high Q and frequency in low pass mode and filter some noise, for synthetic bird chirping (high h value) or theremin-like sounds (low h, lower frequency).

Please note that the most useful settings for the 'h' parameter are very low, around 0.01 - 0.09. Unfortunately there's no way to provide a default setting as low as this without compromising the range of the control.

And be careful, high Q resonance can peak at up to +18 dB.

All sample rates (modulation rate and character are sample rate dependent).

- f

  cutoff frequency (band center for band pass filtering).

- Q

  filter resonance.

- mode

  0 - low pass
  1 - band pass

- depth:x
- depth:y
- depth:z

  control how the modulation is mixed from the state of the attractor.

- h

  step size of the fractal.

#### SweepVFII

A variation on SweepVFI, with the filter Q (bandwidth/resonance) modulated by a second Lorenz fractal.

Please note that the most useful settings for the 'h' parameter are very low, around 0.01 - 0.09. Unfortunately there's no way to provide a default setting as low as this without compromising the range of the control.

And be careful, high Q resonance can peak at up to +18 dB.

All sample rates (modulation rate and character are sample rate dependent).

- f

  cutoff frequency (band center for band pass filtering).

- Q

  filter resonance.

- mode

  0 - low pass
  1 - band pass

- f:depth:x
- f:depth:y
- f:depth:z

  control how the filter cutoff modulation is mixed from the state of the attractor.

- f:h

  step size of the fractal modulating the cutoff.

- Q:depth:x
- Q:depth:y
- Q:depth:z

  control how the filter Q modulation is mixed from the state of the attractor.

- Q:h

  step size of the fractal modulating filter Q.

#### AutoWah

The same resonant filter as used by the SweepVFI and SweepVFII units, the difference being that the filter is hard-wired for bandpass operation and the band centre frequency is modulated by an envelope-following circuit. In short, an effect commonly estimated and known as an automatic wah, or AutoWah. Probably most useful with instruments allowing fine control over dynamics at all times.

Be careful with the Q parameter, high esonance can peak at up to +18 dB.

All sample rates (modulation rate and character may be sample rate dependent).

- f

  filter band centre frequency.

- Q

  resonance.

- depth

  strength of the modulation.

#### Scape

This plugin will generate quite expansive soundscapes from even the most modest input signals.

Technically, 'Scape' is a stereo delay, with the panning of the echo modulated by a pair of fractals. The delay times are adjustable through a 'bpm' knob, augmented by a beat division parameter. The input as well as the delayed signals are processed by a collection of resonant filters, with frequency and cutoff modulated in sync to the current tempo.

All sample rates.

- bpm

  beats per minute.

- divider

  controls whether the groove is ternary or binary.

- feedback

  controls the length of the delay tail.

- dry

  the amount of dry signal mixed to the outputs.

- blend

  the amount of wet signal mixed to the outputs.

### Generators

#### VCOs

An oscillator capable of producing the standard triangle, sawtooth and square waveforms of analog fame, and almost any conceivable blend thereof. 8x oversampled, thus needs a lot of cycles. Sorry about that, but you don't get the flexibility and fat sound for free.

About the morphing controls:

- For a triangle wave, set both tri .. saw and ~ .. square to 0 (this is the default setting).
- To morph into a sawtooth, pull up tri .. saw.
- For a square wave instead, pull up ~ .. square. When the value reaches 1, tri .. saw fully controls the pulse width.

For a more intuitive approach, thinking of both controls in terms of 'dull .. sharp' for a start can't hurt.

All sample rates.

- f

  the frequency.

- tri .. saw

  controls the morph between triangle and sawtooth, and the pulse width of square oscillation.

- ~ .. square

  controls the morph between triangle/sawtooth and square wave.

- volume

#### VCOd

A combination of two VCOs units. The second oscillator offers a separate tuning knob. It can also be made to 'hard sync' to the first unit, which means that when the first has completed a wave cycle, the second is forced to restart its wave cycle together with the first.

All sample rates.

- f

  the frequency.

- 1: tri .. saw
- 1: ~ .. square

  waveform morph controls for the first oscillator.

- 2: tri .. saw
- 2: ~ .. square

  waveform morph controls for the second oscillator.

- 2: tune

  controls the interval between the two oscillator frequencies, in units of (fractional) semitones.

- sync

  if non-zero, puts the second oscillator into 'hard sync' mode, and determines the forced-restart offset into its wave cycle.

- blend

  controls how the waveforms from the two oscillators are mixed. A value of 0 means only oscillator one is heard, a value of either 1 or -1 tilts the balance fully towards oscillator two. The sign of the blend value determines if the signals are added or subtracted.

- volume

#### CEO

The Chief Executive Oscillator forever repeats the word 'money'.

44.1 kHz.

- mpm

  moneys per minute.

- volume
- damping

  moderates the CEO.

#### Sin

The old friend, indispensable for testing and tuning.

All sample rates.

- f

  the frequency.

- volume

#### White

White noise.

All sample rates.

- volume

#### Lorenz

A Lorenz attractor is a fractal system. It produces a very own character of noisz that will hardly repeat in the course of your lifetime.

Sound varies with sample rate.

- h controls the step size of the state progression, and, indirectly, the perceived frequency of the sound.
- x
- y
- z

  control how the signal is mixed from the state of the attractor.

- volume

For more information on the Lorenz and Roessler attractors, visit Paul Bourke's resourceful site.

#### Roessler

Another fractal system. This one lends itself particularly well to sweeping the 'h' parameter.

Sound varies with sample rate.

- h controls the step size of the state progression.
- x
- y
- z

  control how the signal is mixed from the state of the attractor.

- volume

For more information on the Lorenz and Roessler attractors, visit Paul Bourke's resourceful site.

### Reverb

#### JVRev

A traditional Chowning/Moorer/Schroeder reverb. It sounds quite good for a reverberation unit with such a comparatively small footprint (I still remember the times when your average personal computer wasn't even capable of computing this in realtime). A quite straight-forward rewrite of a unit found in CCRMA's STK (Synthesis Toolkit), with minor tweaks.

All sample rates.

- t60 (s) controls the time until the reverb tail is supposed to fade to -60 dB.
- blend controls dry/wet mixing ratio.

#### Plate

A reverberation unit based on the design discussed in [1]. Unlike the reference, the unit employs cubic instead of allpass interpolation to modulate the reverb 'tank' delay lines.

All sample rates.

- bandwidth

  controls damping of the input signal before it enters the delay circuits.

- tail

  controls the length of the reverb tail.

- damping

  controls attenuation of high frequency components within the reverb 'tank' (decay stage).

- blend

  dry/wet mixing ratio (default should be 1/8, not 1/4).

#### Plate2x2

By popular demand, a stereo-in, stereo-out version of the Plate reverb unit. Same controls, same sound.

All sample rates.

### Others

#### Click

A sample-accurate metronome. Timing is exact at any sample rate, but the pitch of the click (being a recorded sample) will vary. (The click also lends well for testing reverb plugins.)

44.1 kHz.

- bpm

  beats per minute.

- volume
- damping

  controls the softness of the click sound.

#### Dirac

This plugin produces periodic impulses of exactly one sample width (as long as the 'damping' control is left at the default 0 setting). It's probably only useful for testing and basic impulse response retrieval; don't use this plugin if you don't know what you're doing, your amplification hardware and speakers will thank you. The 'volume' control defaults to silent output to spare you nasty surprises.

All sample rates.

- ppm

  pulses per minute.

- volume
- damping

#### HRTF

Applying the head-related transfer function to a signal makes it appear to come from a specific direction in space. This plugin applies the HRTF with custom-shaped IIR filters. Tell me how it works for you (you should have pretty good headphones to get the full effect).

The HRTF impulse response data has been collected and prepared by MIT's Media Lab.

This unit only utilizes the 0-elevation set (sound source is level with the listener).

44.1 kHz.

- pan

  The position, in integer steps. Some noteworthy settings:

  - 0 = in front
  - +18 = left,
  - -18 = right, and
  - -36 = +36 = behind the listener.

### Appendix

#### Plugin Data Sheets

The CAPS data sheets collect the following information from the plugins:

- the plugin ID
- normalized sample output from the plugin with default parameter settings (in the filter case, this is an impulse response)
- a frequency magnitude plot for the sample output
- estimated CPU usage on my box (usually wildly inaccurate)
- latency information if applicable
- audio routing information
- the control inputs on the plugin

You can fetch the data sheet compilation from the CAPS homepage.

#### Changelog

    0.4.2
      * fixed the 'model' port index for AmpVTS in the RDF generator

    0.4.1
      * cleaned up Eq.h and Eq.cc (many g++ versions choke on the unused code
        there)
      * changed -O3 to -O2 in the g++ invocation

    0.4.0
      * ToneStack plugins, by David Yeh
      * AmpV + Tone stack plugin, employing David Yeh's fine work
      * comment cosmetics
      * Amp* denormal protection fixed (or is it, Dave? ;)
      * minor code cleanup in Amp.cc
      * caps.rdf updated with plugin categories (thanks to Paul Winkler)
      * caps.rdf Cabinet* RDF preset labels renamed
      * AutoWah plugin
      * DSP::RMS reworked, may affect Compress plugin
      * DSP::Eq reworked for double precision and denormal protection
      * ./configure.py checks SSE availability
      * in case of SSE math denormal flush to zero activated for all plugins
      * all plugins renamed C* .. instead of CAPS: ..
      * Eq modified to play nice with ardour
      * Eq2x2
      * introduced the Plugin base class, collecting common traits (normal etc)
      * getport() -- read access to control ports which is clamped to port bounds
        and maps inf and nan to 0 as well
      * all LADSPA_HINT_SAMPLE_RATE ports changed to *_LOGARITHMIC because
        of broken implementations (no surprise given the vagueness of ladspa.h
        regarding this matter) -- this means changed default parameters of the
        affected ports, too
      * VCO* "latency" output ports removed
      * actual activate() call is deferred to first run() after activate()
        in order to prevent inadvertent parameter smoothing sweeps during the first
        block  of audio after activation, this should fix all problems with ardour
        (except those caused by denormals or invalid audio input)
      * caps.rdf installed by 'make install'
      * fixed a bug in tools/make-ps.py that caused the spectrum plots to
        be inaccurate for multi-channel plugins

    0.3.0
      * TwelveAX7_3 changed to clip slightly early in the upper lobe
      * Scape plugin added
      * plugin names rewritten, prefixed with "CAPS:"
      * new ChorusII, StereoChorusII plugins
      * Chorus, StereoChorus relabeled, appended 'I' suffix
      * new PhaserII plugin (great stuff if I may say so)
      * Phaser relabeled, appended 'I' suffix
      * new AmpV plugin, based on AmpIII, emulates compression and distortion
        modulation through power supply shortcomings, plus lots of fine-tuning
        and an additional biquad. We're getting there!
      * all Preamp and Amp models fitted with a new 12AX7 model, linear
        interpolation of a sample table obtained from spice simulation

    0.2.4
      * feedback default reverted to 0 for the Chorus units
      * fixed Cabinet to switch to correct gain at 'model' control change
      * fixed 'model' control in Cabinet to work with a broader range of hosts
      * Cabinet name changed to CabinetI
      * CabinetII plugin: Cabinet with 32nd order IIR filters, more fidelity
        to the original frequency responses, supplied coefficients for 4 of the
        most used sample rates
      * applied the gcc-4 enabling patch
      * SweepVF renamed to SweepVFI
      * new SweepVFII plugin, variant of SweepVFI with Q modulated by a
        second Lorenz fractal
      * dsp/exp2 dumped in favour of libm's exp2(3)

    0.2.3
      * StereoChorus denormal protection made functional
        (Thanks again to S. Savolainen)
      * Phaser denormal protected

    0.2.2
      * Build was _not_ fixed for g++-4.0.
      * AmpIV gain control restored to operate as expected
      * Chorus/StereoChorus denormal protection (thanks to S. Savolainen)
      * a few cosmetic changes elsewhere

    0.2.1
      * Build fixed for g++-4.0, PPC and AMD64
        (Thanks to Niklas Werner, Andreas Jochens and Mario Lang)
      * Reverb.* cosmetics
      * AmpIV tone controls moved to after initial tube transfer

    0.2.0
      * denormal protection for Preamp*, Amp*
      * Capitalized plugin Names
      * PDF now lists audio in- and outputs as well as control inputs, only
        gives average CPU rating
      * AmpIV: PreampIV + power amp stage
      * Plate2x2: Plate with 2-in, 2-out audio routing
      * Plate damping and bandwidth controls changed to map to filter fc, fixes
        behaviour in hosts that handle the log hint incorrectly

    0.1.13
      * AmpIII activate() resets the boost filter

    0.1.12
      * PreampIV band controls fixed to operate as expected

    0.1.11
      * amps changed back to old tube model :) but new temp & gain behaviour stays
      * SweepVF, AmpIII default value adjustments

    0.1.10
      * HRTF recursion runs in doubles
      * Cabinet recursion runs in doubles for much clearer sound
      * all amps fitted with a common tube voltage mapping, dsp/TwelveAX7.h
      * all amps: temperature and gain controls changed slightly
      * all amps declared in one common Amp.h
      * Pan echo fixed to be filtered independent of sample rate
      * Cabinet cosmetics and activate() from port values fix
      * SweepVF fixed to activate() from the current control settings
      * rid all *amp* plugins of the initial hi-pass, not needed anymore
      * PreampIII and AmpIII more authentic with an rbj lo-shelve, +6 dB > 1.2 kHz
        as hinted by circuit analysis
      * something_random() removed, stdlib for random generation

    0.1.9
      * Pan plugin
      * 'make depend' instead of 'make dep', uses $(CC) -MM instead of 'makedepend'
      * *Chorus, AmpIII, Plate defaults changed
      * *Chorus optimizations, reintroduces funny zipper noise when 'feedback' is
        non-zero and 't' is changed
      * experimental HRTF plugin
      * Plate 'blend' goes all the way to wet output only
      * dsp/White offers a get_31() method for reduced number of bitshifts needed
      * *Chorus delay line tapping changed to employ cubic interpolation, sounds
        better
      * SweepVF modulation mix algorithm changed to clamp if over-fed, makes
        for wider sweeps

    0.1.8
      * all oversampling plugins use Kaiser windows instead of Blackman-Harris,
        for much better performance
      * SweepVF modulation range slightly increased
      * Cabinet filter loop cosmetics (slight speedup)
      * new AmpIII Plugin: Preamp plus power amp emulation
      * lowered NOISE_FLOOR (equals 'renormal' number)

    0.1.7
      * connect ports to lower bound on instantiate()
      * Plate delay line lengths raised, sound changed
      * Eq activate() fixed to initialize from the current settings
      * Preamp* cutoff reverted to 0.1.3 setting, thanks to Ben Saylor for
        testing
      * old IIR-based Preamp cleaned from the sources
      * zipper-noise in *Chorus units for t changes with feedback > 0 eliminated
      * all plugin constructor code moved to init() calls

    0.1.6
      * SweepVF modulation mix algorithm changed to maintain proportion, not
        absolute value if x + y + z > 1, for better control
      * create $(DEST) directory on make install, pointed out by Daniel James

    0.1.5
      * fixed delay line length miscalculation in ModLattice

    0.1.4
      * SweepVF modulation source can be mixed now
      * latency port for VCO*
      * Lorenz and Roessler get x, y, z mixing knobs
      * PreampIV eq bands slightly tuned and coefficients moved into common struct
      * Preamp*, VCO* downsampler filter cutoff lowered
      * Clip downsampler filter cutoff lowered
      * nonsensical audio output bounds removed
      * simplified VCO* implementation
      * JVRev rewritten for code clarity (funny enough, it also got quicker)
      * fixed JVRev to reset its history on activate()
      * added purpose, copyright and licensing information to all (i think) files.
      * HACKING file
      * CHANGES file

    0.1.3
      * fixed all compilation problems with gcc 3.3, with the patient help
        of the lad mailing list community
      * dsp/Eq.h SSE assembler code had to go (gcc > 3 doesn't like multi-line
        asm, and efficiency and even reliability go down if we allow gcc to
        intersperse its 'optimization' code with our asm)

    0.1.2
      * fixed more compilation problems with gcc >= 3.0

    0.1.1
      * tried to (but didn't really) fix compilation problem with ladspa.h

    0.1.0
      * initial release

[1] J. Dattorro, "Effect Design Part 1: Reverberator and Other Filters", J. Audio Eng. Society, vol. 45, No. 9 (1997 September).
[2]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.

tim@quitte.de, June 19 2007.