TAP-plugins
Tom's Audio Processing plugins
for audio engineering on the Linux platform


Hosted by
SourceForge.net Logo

SourceForce project page

Web-based CVS browser


Table of contents

Releases
About TAP-plugins
License and Disclaimer
Announcements and Feedback
Installation
A few words about signal routing
About CPU usage metrics
Plugin manuals
         TAP AutoPanner
         TAP DeEsser
         TAP Equalizer
         TAP Reverberator
         TAP Scaling Limiter
         TAP Stereo Echo
         TAP Tremolo


Releases

NOTE: This section is at the top of the page so people seeking for newer versions will quickly find what they are searching for. If you are new to TAP-plugins, please read through the rest of this page to gain some basic understanding of these plugins. Some plugin settings can be rather tricky and you may not achieve the desired effect easily if you have not at least skimmed through the plugin manuals below, or you are not an experienced audio engineer. You have been warned.

Available versions

Please go to the SourceForge project page to download tarball releases listed here.

versiondatecomment
0.3.0 2004-02-04 Added new plugins TAP AutoPanner and TAP DeEsser.
Changed TAP Tremolo code to compute and store the cosine table only once on library loading, not for every instance.
Changes were made to the memory management of TAP Limiter.
0.2.0 2004-01-28 Added new plugin TAP Scaling Limiter.
Added Bode diagram to the TAP Equalizer manual.
Changed versioning from x.y-z to x.y.z to fit better in Debian, Gentoo and such distributions.
Moved project to SourceForge.net on 2004-01-29. Minor changes to HTML page. Changed name from TAP to TAP-plugins.
0.1-1 2004-01-25 Added RDF support in the form of an .rdf file describing the plugins. Hosts that obey RDF metadata should have less difficulties displaying plugin GUIs. [1]
0.1-0 2004-01-24 Initial release. Available plugins: TAP Equalizer, TAP Reverberator, TAP Stereo Echo and TAP Tremolo. [1]

[1] These versions are no more available since they were released before this project moved to SourceForge, and the author sees no point in keeping outdated versions around.

This page (which acts both as a homepage and as a manual for the TAP-plugins) is included in the tarball releases, so you don't have to save it separately if you download the latest tarball. However, because the online version may be updated between releases, you may want to check that if you feel something is outdated or plain wrong in the version included in the latest tarball.


About TAP-plugins

TAP-plugins is short for Tom's Audio Processing plugins. It is a bunch of LADSPA plugins for digital audio processing, intended for use in a professional DAW environment such as Ardour. These plugins should compile and run on any recent (that is, not seriously outdated) Linux system. They don't require any special libraries besides the standard GNU C and math libraries, which are expected to be provided on the machine used for compiling. Check the LADSPA homepage for links to other great plugins available on the Linux platform.

The plugins have been developed with Ardour as a primary host in mind, but they should be usable within any LADSPA-capable host. The main issue here is that LADSPA plugins don't generate their own GUIs, but the GUIs are generated by the host. Therefore the arrangement and appearance of the controls may vary using another host. When longer texts are required to be displayed to the user (see the list of presets in the TAP Reverberator plugin for an example), the strings have been optimized to be good-looking in Ardour. On other hosts, these strings may look crappy because the amount of padding spaces will be incorrect using another font (to mention one possible defect). However, no audio processing ability is involved, so the plugins should perform the same way even with a somewhat crappy GUI.

To support easy spotting/selection of the TAP-plugins in a plugin selection dialog loaded with lots of other available plugins (and to achieve consistency), every plugin's name starts with the letters "TAP". The actual name of the plugin follows after a space.

The audio processing algorithms done by TAP-plugins are coded to be independent of the actual sample rate. The sample rate is always a parameter during computations. The plugins have been tested with sample rates 44.1 kHz and 96 kHz, as the author uses these values in his studio. Please note that although all plugins should be essentially functional at virtually any sample rate, the audio fidelity depends slightly on the actual sample rate used. Higher sample rate is better, of course. This means that an equalizer or reverberator plugin will produce higher quality output, and will sound a bit smoother at 96 kHz compared to, say, 44.1 kHz. This is a natural effect that results from the fundamental properties of digital signal processing, but you should be aware of it nevertheless.


License and Disclaimer

TAP-plugins are released under the GNU General Public License, version 2. See the file COPYING (included in the tarball release) for details.

DISCLAIMER: The plugins described here are available to you free of charge, and you are free to examine their internal workings, modify and re-distribute them. But keep in mind that TAP-plugins is provided "AS IS", and it comes with ABSOLUTELY NO WARRANTY of any kind, either expressed or implied, included, but not limited to, the implied warranties of MERCHANTABILITY and FITNESS FOR A PARTICULAR PURPOSE. Again, see the file COPYING for details.


Announcements and Feedback

Announcements of new versions of TAP-plugins will be sent to the Linux Audio Developers mailing list.

TAP-plugins is being developed by Tom Szilagyi. You can send him mail to st444@hszk.bme.hu. If your mail gets blocked (someone has sent some SPAM using the same ISP you're using and someone else at hszk.bme.hu received it, and has blocked your domain) you may also try tszilagyi@index.hu. You should generally receive a reply in 48 hours, if your mail deserves it.

Please write if you have problems compiling or running these plugins, or you feel they do something different than they should. You can also write if you successfully use the plugins, because they were originally tested only on a few systems (gcc 2.95.4; Debian GNU/Linux Woody; Ardour 0.9beta8 and upwards at least until Ardour/GTK 0.433.0 with libardour 0.717.0 is known to work). Reports of successful installations and usage on different systems, different gcc versions, hosts etc. are welcome.


Installation

Should be pretty easy. Download and untar the archive and cd into the resulting directory tap-plugins-x.y.z. If you store your plugin .so files in a different directory than /usr/local/lib/ladspa (which is the default) then please edit the top of the Makefile first of all. There is a default place also for RDF metadata. Set it according to your own needs. Because the plugins do not require any special library (apart from the standard GNU C library), there is no ./configure script. All you have to do is issue a make and (as root) a make install. If you don't get any errors (you shouldn't), fire up your host and check out your new plugins. You may also want to check the README file for additional information.


A few words about signal routing

When connecting plugins to audio inputs/outputs and to each other in order to build a digital audio processing chain, it is important to understand how audio is actually routed between individual input/output ports. Plugins can have a different number of audio inputs and outputs, and routing is handled by the host.

The TAP-plugins have either 1 input and 1 output (mono plugins) or 2 inputs and 2 outputs (stereo plugins). No other combinations are used, although it would be perfectly legal for a plugin to have 1 input and 2 outputs, for example.

When you apply a mono plugin to a mono track, everything is clear. The one and only input of the plugin gets connected to the mono signal, and the single plugin output is routed back somewhere (to the input of another plugin, or to a master out, etc). Another simple case is when you apply a stereo (2 in / 2 out) plugin to a stereo track. Here again, everything gets connected as you would expect.

But what happens if you apply a mono plugin to a stereo track (or put it in a chain of plugins after a plugin with stereo outputs)? In this case, actually two instances are created of the same plugin, and the two input channels are processed by these two separate plugins to get two output channels. The two instances are binded to the same GUI controls, so you see and adjust only one plugin GUI. But keep in mind that it's actually two plugins running in the background, consuming twice as much memory and CPU power as one single plugin would cost. The CPU usage metrics (provided below) for mono plugins assume you are actually using only one instance, so you should double the figures when applying them to a stereo track.

The last possible arrangement is when you apply a stereo plugin to a mono track (or put it in a chain of plugins after a plugin with only one output). Here the stereo plugin receives the same data on both input channels. This can be an important issue because there are some effects requiring that audio is received on only one input and the other input muted (i.e. feeded with zeroes) if the input is actually mono. (See the Haas effect switch of the TAP Stereo Echo plugin for an example).

Given the above routing behaviour, TAP-plugins have been written in a manner that minimizes the number of stereo plugins. If the stereo version of a plugin would process two input signals identically and separately, then there is no stereo version of the plugin since applying the mono plugin to a stereo track yields the exact same effect. A plugin is implemented as stereo if and only if it uses an algorithm that results in differences between the output channels even with identical input data (echoing and reverberation algorithms are an example of this). If one of the input channels needs to be muted to achieve a particular effect when the inputs are identical, there is a user controllable toggle button built in the plugin to achieve this.


About CPU usage metrics

CPU usage metrics are provided for each plugin. This is not a very accurate way to tell how much a plugin setup costs, but it should provide a general idea about how expensive each plugin is, and it is better than nothing. Please don't rely on these figures when you need to predict the system load in a situation where the results of system overload (stopping of the transport, falling out of sync, etc) are unacceptable. For example, if you are recording a live show or doing live PA work, never ever go into calculations that result in saying that you will need only 98% of your CPU power when using such-and-such plugins. This is extremely dangerous, and there are much easier ways to commit suicide as well.

The CPU usage figures were measured running the plugins within Ardour, and recording the increase of CPU usage indicated at the top of the Ardour Editor window. The machine used for measurements was a uniprocessor Pentium IV machine with a processing power of approximately 3395 BogoMIPS. Mono plugins were applied to mono tracks, and stereo plugins were applied to stereo tracks (read the above section about routing to understand why this is important). Measurements were made at both 44.1 kHz and 96 kHz sampling frequencies. CPU usage is proportional to the sampling rate (at least in theory), so at 48 kHz you should expect somewhat greater CPU demand than at 44.1 kHz, and at 192 kHz expect roughly twice as much CPU usage as the value at 96 kHz. The actual figures are provided as part of the plugin manuals.


Plugin manuals

This section contains detailed information, benchmarks and usage tips for each available plugin. It is intended to serve as a reference manual for the TAP-plugins.

For every plugin, some general information is provided in a table. The Unique ID is an identification number that each and every LADSPA plugin must uniquely have. See the LADSPA homepage for details. I/O ports describes the number of input and output audio ports. A plugin is mono if it has 1 input and 1 output, and it is stereo if it has 2 inputs and 2 outputs. The CPU usage measures have been explained in the previous section.

A plugin qualifies as hard RT capable (suitable for use in hard realtime environments) if it satisfies all of the following:
(a) it does not use malloc(), free() or other heap management within its buffer processing functions;
(b) does not call any library functions (except for functions in the ANSI standard C and C math libraries);
(c) does not access files, devices, pipes, sockets, IPC or any other mechanism that might result in process or thread blocking;
(d) the time needed to process a buffer can be approximated in the form (A+B*SampleCount) where A and B depend on the machine and host in use -- the time may not depend on input signals and plugin state.

A plugin is capable of in-place operation if it does not get confused when it is asked to use the same memory buffer for both input and output sample data. Finally, the run_adding() function is an optional buffer processing function described in the LADSPA specification. When provided, this may make life of some hosts easier.


TAP AutoPanner

[TAP AutoPanner GUI as shown in Ardour]

The AutoPanner is a very well-known effect; its hardware incarnation originates in the age of voltage controlled synthesizers. Its main use is to liven up synth tracks in the mix.

General information

Unique ID2146
I/O ports2 inputs / 2 outputs
CPU usage (44.1 kHz)0.8%
CPU usage (96 kHz)1.7%
Hard RT CapableYes
In-place operationSupported
run_adding() functionProvided

Usage tips

The "Depth" control sets the wideness of panning. A setting of 100% means that the mono input signal is panned between the extreme left and right positions. If you apply the plugin to a stereo track, it behaves as if you were adjusting the balance control on your home stereo (the left and right channels are not mixed together, but their gains are controlled separately). If you feel that the overall loudness of the track decreases when this effect is applied, you can compensate this by setting the "Gain" control.

Summary of user controls

namemin. valuedefault valuemax. value
Frequency [Hz] 0 0 20
Depth [%] 0 0 100
Gain [dB] -70 0 20

Notes

This plugin was implemented as an enhancement of the TAP Tremolo plugin: processing was extended to 2 tracks, with the LFO-s phase-shifted to be in counter-phase.


TAP DeEsser

[TAP DeEsser GUI as shown in Ardour]

TAP DeEsser is a plugin for attenuating higher pitched frequencies in vocals such as those found in 'ess', 'shh' and 'chh' sounds. Almost any vocal recording will contain 'ess' sounds, whether a strong vocal delivery, from bad recording, speech impediments or simply many 'ess' words spoken together. Wind instruments and other musical instruments can also create shrill high-pitched noises. Audio engineers need to control these harsh 'ess' sounds in most recordings.

General information

Unique ID2147
I/O ports1 input / 1 output
CPU usage (44.1 kHz)5.9%
CPU usage (96 kHz)12.8%
Hard RT CapableNo (see Notes)
In-place operationSupported
run_adding() functionProvided

Usage tips

Audio input is fed into the audio path and the so-called Sidechain. In the Sidechain, the signal is filtered and then an attenuation value is computed based on the filter output. This computation is done using a hard-knee compressor characteristic with a threshold level set by the "Threshold" control and a compression ratio of 1:2. The compressor attack/release time is 10 ms for instant operation.

The filter applied to the Sidechain signal has two modes of operation: Highpass and Bandpass. Highpass mode is useful for attenuating several different 'ess' sounds. Bandpass mode is more suitable for attenuating a specific high frequency. The chosen filter's frequency is set by the "Frequency" control.

General advice about setting the "Frequency" control: The sounds attenuated by this plugin can be fit into four categories: male 'ess', male 'ssh', female 'ess' and female 'ssh' sounds. 'Shh' settings are quite applicable for 'ch', 'th', and hard consonants, such as 't', 'd', and 'k' as well. The following table lists frequencies for these four types of sounds. Note that these are only provided as a starting point for your own experimentations, as the characteristic frequencies of individual vocalists can vary in a suprisingly wide range. Use your ears!

Recommended frequency values

Male 'ess'4500 Hz
Male 'ssh'3400 Hz
Female 'ess'6800 Hz
Female 'ssh'5100 Hz

Generally, female 'ess' and 'shh' sounds vary more in frequency than those of males. Due to this situation, you may find that using the Sidechain filter in the Highpass mode may be more responsive. Otherwise, with the Sidechain filter in Bandpass mode, only a narrow frequency area is being responded to. So if a singer has esses with varying frequency, try the Highpass mode of the Sidechain.

When choosing between Sidechain modes (e.g. Highpass or Bandpass) and setting the "Frequency" it may be very helpful to hear the Sidechain signal, which controls the compression of the through-passing audio: this is why the Monitor control is provided. While listening to the Sidechain signal, try to set the controls so that almost everything you want attenuated can be well heard, and even more importantly, almost everything you want to keep intact doesn't show up in the Sidechain sound.

Another aid in setting the plugin is the "Attenuation" output meter: this shows the momentary attenuation applied to the signal. It shouldn't show a significant attenuation all the time. Instead, it should indicate that attenuation springs into action only occassionally.

Summary of user controls

namemin. valuedefault valuemax. value
Threshold Level [dB] -50 0 10
Frequency [Hz] 2000 5500 16000
Sidechain Filter Highpass Highpass Bandpass
Monitor Audio Audio Sidechain

Notes

Setting the "Threshold" too low will result in an unpleasant muffled sound. Also, if the singer starts sounding as if she had suddenly lost her teeth, take this as a sure sign that your "Threshold" setting is way too low. Use the ever popular Bypass button and watch out for side effects like this.

This plugin is best on vocal tracks, although it can be applied to mixed tracks as well. However, you should expect an increased amount of side effects (especially muffling and pumping of the sound) when attempting to de-ess the vocals of a mixed track.

Internal variables that depend on user settings are re-computed only when the corresponding user settings are changed. This keeps the plugin from being hard RT capable, although the effect of this occassional re-computation is not really noticeable when looking at CPU usage measures.

Because the Sidechain processing algorithm involves converting from linear to decibel values for every sample, a custom, very fast lin2db function was implemented via a log10 table, which is computed and stored when the plugin library is loaded by the host. Without this hack (that is, calling log10f() for every sample), CPU usage would be almost exactly twice this much.


TAP Equalizer

[TAP Equalizer GUI as shown in Ardour]

This plugin is an 8-band equalizer with adjustable band center frequencies. It allows you to make precise adjustments to the tonal coloration of your tracks. The design and code of this plugin is based on that of the DJ EQ plugin by Steve Harris, which can be downloaded (among lots of other useful plugins) from http://plugin.org.uk.

General information

Unique ID2141
I/O ports1 input / 1 output
CPU usage (44.1 kHz)4.0% max. (see Notes)
CPU usage (96 kHz)8.8% max. (see Notes)
Hard RT CapableNo
In-place operationSupported
run_adding() functionProvided

Usage tips

The TAP Equalizer is a powerful tool in the hands of a skilled mixing engineer. The main use of the band frequency controls is to allow to "tune in" various resonance frequencies of musical instruments, and by adjusting the gain of these frequencies, to alter the tone of an instrument in a desired way. For example, the sound of kick drums consists of two mainly distinct parts: the energy is mainly concentrated around 80-100 Hz (this is the "boom" part), but there is another component at around 2.5 kHz which gives the "edge" of the sound. By adjusting the level of these components, different tonal results can be achieved.

While listening to the track (soloed or not) with this plugin applied, raise the gain of the appropriate band (that is, the one with the closest default frequency) by an amount of about 6-12 dB and adjust the frequency control of the same band until you feel that you "got" that particular resonant tone of the instrument. Then play around with the gain settings to achieve the tonal balance you are going for.

Since you only pay (in terms of CPU usage) for the bands you actually use, it is recommended that you set the gains of unneeded bands to exactly 0 dB (you can do this in Ardour quickly by shift+clicking on the control fader) since processing of bands with 0 dB gain will be skipped. So don't leave a band gain at -0.12 dB unless you really need that -0.12 dB to be there.

Summary of user controls

namemin. valuedefault valuemax. value
Band 1 Freq [Hz] 40 100 280
Band 1 Gain [dB] -50 0 +20
Band 2 Freq [Hz] 100 200 500
Band 2 Gain [dB] -50 0 +20
Band 3 Freq [Hz] 200 400 1000
Band 3 Gain [dB] -50 0 +20
Band 4 Freq [Hz] 400 1000 2800
Band 4 Gain [dB] -50 0 +20
Band 5 Freq [Hz] 1000 3000 5000
Band 5 Gain [dB] -50 0 +20
Band 6 Freq [Hz] 3000 6000 9000
Band 6 Gain [dB] -50 0 +20
Band 7 Freq [Hz] 6000 12000 18000
Band 7 Gain [dB] -50 0 +20
Band 8 Freq [Hz] 10000 15000 20000
Band 8 Gain [dB] -50 0 +20

Notes

This plugin consists of 8 Peaking EQ filters (which are IIR filters with an order of two). Filter coefficients are re-computed if and only if the user changed a control value since the last buffer run. Furthermore, those filters that are left at 0 dB gain are not processed at all. For this reason, the CPU demand of this plugin is a function of the control settings, hence it is not hard RT capable. However, the CPU demand is still somewhat predictable: moving all gains away from 0 dB will switch every filter on. The CPU usage measured in this state will not increase significantly when filter coefficients are re-computed in response to a changed control. Of course, if the user sets a gain back to 0 dB, that filter will be switched off, freeing CPU power. The CPU usage values displayed in the above table were measured with all filters working.

The bandwidth of the Peaking EQ filters is fixed to 1 octave in the current implementation. You can change this in tap_eq.c as you see fit. Values between 0.5 and 2 octaves can be considered a reasonable choice for general purpose filters like this.

Below you can see a Bode diagram of the filter that makes up this plugin. The three frequencies are 100 Hz, 1 kHz and 10 kHz, with gain values of -20 and +20 dB and a sampling rate of 44.1 kHz. Bandwidth was set to 1 octave (which is the default). This plot is also available as an EPS file.

[TAP Equalizer filter Bode diagram]

TAP Reverberator

[TAP Reverberator GUI as shown in Ardour]

TAP Reverberator is unique among reverberators freely available on the Linux platform. It supports creating no less than 38 reverberation effects, but its design permits this to be extended even further by the user, without doing any actual programming.

The design is based on the comb/allpass filter model. Comb filters create early reflections and allpass filters add to this by creating a dense reverberation effect. The output of the set of comb and allpass filters (also called the reverberator chamber) is processed further by sending it through a bandpass filter. The resulting band-limited reverberation is very similar to the natural reverberation that occurs in acoustic rooms. To achieve an even more natural-sounding effect, all comb filters have high-frequency compensation in their feedback loop. This is to model that the reflexion ratio of acoustic surfaces is the function of frequency: higher frequencies are attenuated more, and thus decay time of higher frequency components is significantly shorter.

To enhance the reverberation sound even further, a special option called Enhanced Stereo is provided. When turned on (which is the default), it results in an added spatial quality. This feature is most noticeable when applying the plugin to mono tracks: the sound of these tracks will "open up" and a beautiful spatial effect will be heard.

General information

Unique ID2142
I/O ports2 inputs / 2 outputs
CPU usage (44.1 kHz)6.2% max. (see Notes)
CPU usage (96 kHz)14.1% max. (see Notes)
Hard RT CapableNo
In-place operationSupported
run_adding() functionProvided

Usage tips

Despite the rather complex algorithm of this plugin, usage is relatively simple and the user is required to adjust only a limited number of global controls. This is achieved by defining "presets" which actually mean larger sets of control values. When choosing a preset, the plugin loads all values associated to that preset, and operates according to the newly loaded values.

The most important global variable of the whole effect is the decay time. By adjusting this, you can create the feel of a larger acoustic space (set the decay to more than 2-3 seconds for this), as well as a "tight", relatively dry effect (for which you should set a much lower value). But you should be aware of the fact that not every preset (reverberation type) sounds good at any decay setting (see the table below for recommended decay values). For example, a Room (Small) will not sound too good when you set the decay to a very large value, and vice versa, a Hall (Large) will not sound optimal at very small decay settings. However, when choosing a more artificial type of reverberation (Afterburn, Pulse Chamber (Reverse) or Warble Chamber, for example), there is no "natural" decay time: set it as you see fit according to the effect you are trying to achieve.

General advice about adjusting the dry and wet signal levels: the wet level should be about 3 to 15 dB lower than the dry level, according to the preset type you are using. Of course if you want to create an artificial sounding effect, you can decrease the dry level, even down to -70 dB if that is what you want. However, one thing to know is that you shouldn't set the wet level to a very high value (generally not above 0 dB) because the output level of the plugin may become too high and you may overdrive the next plugin in the chain, or you may cause signal clipping in the master output of your multitrack. Furthermore, because the wet signal is added to the incoming dry signal, you should decrease the dry level as well by a few dB-s (and then set the wet level according to this) so as not to raise the overall loudness of the track.

Usually, when trying to create a natural-sounding reverberation effect, all components (comb filters, allpass filters, the bandpass filter and the stereo enhancement mode) should be switched on. However, to create artificial effects, it is possible to turn off any of these effects. For example, if you only want the sound of multiple echoes, you can turn off everything but the comb filters; if you want to create a more unnatural, harsh effect, turn off the bandpass filter processing. (Also note that bandpass filters of different chambers have different low-pass and high-pass frequencies, since this filtering also affects the nature of the reverberated sound very much.) Naturally, components that are switched off don't consume CPU power.

As mentioned earlier, not all presets sound good with any decay setting. The following table contains decay time settings adequate for particular presets. Decay times are shown in seconds. As a rule of thumb, when decay times are above 3 seconds, the "Wet Level" should be at least 6 or more decibels below the "Dry Level". The values below are only general advice, and they are provided merely as a starting point for your experimentation. You are free to use any value that sounds good for your mix.

Recommended decay times

preset namedecay time
AfterBurn (Short)2.8
AfterBurn (Long)4.8
Drum Chamber3.6
Garage2.3
Garage (Bright)2.3
Gymnasium5.9
Gymnasium (Bright)5.9
Gymnasium (Bright) - HD5.9
Hall (Small)2.0
Hall (Medium)3.0
Hall (Large)5.1
Hall (Large) - HD5.1
Plate (Small)1.7
Plate (Medium)2.6
Plate (Large)5.7
Plate (Large) - HD5.7
Pulse Chamber3.1
Pulse Chamber (Reverse)3.1
Resonator (96 ms)4.0
Resonator (152 ms)4.2
Resonator (208 ms)5.1
Room (Small)1.9
Room (Medium)2.8
Room (Large)4.4
Room (Large) - HD4.4
Slap Chamber2.3
Slap Chamber - HD2.9
Slap Chamber (Bright)3.4
Slap Chamber (Bright) - HD3.7
Smooth Hall (Small)1.8
Smooth Hall (Medium)3.0
Smooth Hall (Large)5.9
Smooth Hall (Large) - HD5.9
Vocal Plate3.1
Vocal Plate - HD3.1
Warble Chamber4.0
Warehouse6.0
Warehouse - HD6.0

Q: What is that HD in the name of some presets?

A: HD stands for High Density. Presets marked with this are enhanced versions of other presets, for example Hall (Large) - HD is derived from Hall (Large). Enhancement means additional comb and/or allpass filters, which result in an even smoother reverberation effect. However, more filters mean more CPU usage, so it's up to you to decide whether to choose them or not. If CPU usage is not a great concern, it is recommended to use the HD versions where available.


Q: The GUI of this plugin looks like crap in [host-other-than-Ardour]. Why? Any workaround?

A: Unfortunately LADSPA plugins have virtually no control over what their GUI-s will look like in a particular host. This is because the host generates plugin GUI-s, based upon port definitions provided by the plugin. In the case of TAP Reverberator, it is desirable to have the names of the presets displayed to the user. This can only be achieved by putting all the preset names in a long string that is displayed by the host as a name of a plugin-defined control. It is likely that different hosts handle this situation in different ways, and the list of presets you see may be displayed in a somewhat crappy way. This is because the long string containing all the preset names has been optimized to be good-looking in Ardour. If this long string (which, in addition, contains several newline characters) causes problems with your host, or is damaging your eye, it is possible to turn it off by commenting out the line saying

#define _SHOW_PRESET_NAMES_IN_GUI_

in tap_reverb.h (it is at the top of the file, so you should find it quickly). If you do this, the text displayed next to the preset selector will say nothing but "Preset" (after a re-compile, of course). When using the plugin this way, you will have to open this manual page in a browser to see the preset names.

About RDF metadata

TAP-plugins have some RDF metadata available about them. This is stored in tap-plugins.rdf and a host can use it to retrieve the names and default values of user controls for each plugin. To aid user-friendly representation of the preset selector control (which is a neuralgic point of this plugin), all preset names are provided as Point values of a Scale binded to the preset selector control. If the host you use obeys RDF metadata, it can for example provide a drop-down list with the preset names instead of an ordinary input field for integers. If you are this lucky, please comment out the _SHOW_PRESET_NAMES_IN_GUI_ define (as described above).


How to add a new preset

If you want to add a new preset, here is how to do it. If you are not interested in creating your own reverberation chambers, you can safely skip this boxed section.

You have to specify the following parameters in order to describe a preset.

(a) The name that will (or will not, see Q/A above) be displayed in the GUI.
(b) The number of comb filters (the maximum number is 20)
(c) The number of allpass filters (the maximum number is 20)
(d) For each comb filter, three values are needed: delay time, feedback and frequency response value. The delay time specifies the delay of the reflection (in seconds) that the comb filter describes. The maximum delay time is 0.25 seconds. The feedback value can be between 0 and 100 (it is a percentage value) and the lower the value, the faster this particular reflection decays. The third parameter is a value between 0 and 1 and it models the high frequency attenuation of acoustic surfaces. When set to 0, no high frequency compensation is applied to the feedback loop of the comb filter. When set to 1, high frequency attenuation is at maximum.
(e) For each allpass filter, two values are needed: delay time and feedback. There is no need for high frequency compensation in allpass filters, so the third parameter is missing here. Note that delay times are much smaller than those of comb filters. The maximum delay time for allpass filters is 0.02 seconds.
(f) You have to define the low and high frequencies for the bandpass filter. Frequencies below the specified low frequency and above the high frequency will be attenuated.

Preset data is described in the file tap_reverb_presets.h in a structure written in C syntax. But don't be scared, you don't have to be a C programmer to be able to add a new preset. Just follow the instructions.

First of all, at the top of the file you find this:

/* Number of reverb presets */
#define NUM_MODES 38


It is important that this number always equals to the presets described in the file. For this reason, you have to increase this value if you add a new preset.

Below is an existing preset, as it looks in the file. Note that fractional numbers are given in C float format. This means that a decimal dot is found in every number ( .00 is appended if it happens to be an integer) and it is ended with the letter f.

         {
                  "Garage (Bright)",
                  5,
                  4,
                  {
                           {0.0280f, 82.20f, 0.4720f},
                           {0.0303f, 80.20f, 0.5652f},
                           {0.0325f, 77.30f, 0.6211f},
                           {0.0389f, 75.30f, 0.5217f},
                           {0.0415f, 59.67f, 0.6522f},
                  },
                  {
                           {0.0067f, 65.00f},
                           {0.0061f, 65.00f},
                           {0.0059f, 65.00f},
                           {0.0055f, 65.00f},
                  },
                  100.0f,
                  10000.0f,
         },


In this structure, the string is obviously (a), on the next line is (b) and below that (c). The following block is (d), with one line for every comb filter. The next block is (e), with one line for every allpass filter. Finally, the last two numbers are (f), first the low, then the high frequency given in Hz.

When you have designed a new chamber, all you have to do is append it in a form shown above, to the end of tap_reverb_presets.h, but before the last closing }; brace. After re-compiling the plugin, your new reverberator chamber should be available. (Don't forget to increment the NUM_MODES constant at the top of the file, as shown above, or your new chamber will not show up.)

If you have developed a new preset that you feel sounds good, please mail it with your name and e-mail address to the author so it can be included in the next release. You will be given due credit, of course.


Summary of user controls

namemin. valuedefault valuemax. value
Decay [ms] 0 2500 10000
Dry Level [dB] -70 0 +10
Wet Level [dB] -70 0 +10
Comb Filters OFF ON ON
Allpass Filters OFF ON ON
Bandpass Filter OFF ON ON
Enhanced Stereo OFF ON ON
Preset number 0 0 37

Notes

The maximum number of filters is 20 combs and 20 allpass filters. Actually it is double this much because every filter exists in two instances for the two channels. This amount allows for the creation of very dense, very smooth-sounding reverberation chambers. However, currently the most complex preset called Gymnasium (Bright) - HD employs 7 comb and 7 allpass filters, so there is plenty of capacity left unused in this plugin implementation.

Comb filters are implemented as first-order IIR filters with a peaking EQ in the feedback loop set to a negative gain (the exact gain value depends on the frequency response parameter of the comb filter) at 10 kHz. Allpass filters are implemented as ordinary first-order IIR filters.

When Enhanced Stereo is enabled, parameters of the two instances of the same filter are set to a slightly different value. Without this option, the two input channels are processed in the exact same way. It is absolutely recommended to turn this on when applying the plugin to mono tracks, but it is also good on stereo tracks.

Because the varying complexity of chambers and the fact that options can be switched on/off individually, CPU usage is a function of user settings. For this reason, this plugin is not hard RT capable. The CPU usage was measured with all options turned on, and the preset set to Gymnasium (Bright) - HD, which is the most complex chamber.


TAP Scaling Limiter

[TAP Scaling Limiter GUI as shown in Ardour]

You want to maximize the loudness of your master tracks. Your drummer has the habit of playing with varying velocity. You want to sqeeze high transient spikes down into the bulk of the audio. You want a limiter with transparent sound, but without distortion. This is for you, then. The unique design of this innocent looking plugin results in the ability to achieve signal level limiting without audible artifacts.

Most limiters operate on the same basis as compressors: they monitor the signal level, and when it gets above a threshold level they reduce the gain on a momentary basis, resulting in an unpleasant "pumping" effect. Or even worse, they chop the signal at the top. This plugin actually scales each half-cycle individually down to a smaller level so the peak is placed exactly at the limit level. This operation (from zero-cross to zero-cross) results in an instantaneous blending of peaks and transient spikes down into the bulk of the audio.

General information

Unique ID2145
I/O ports1 input / 1 output
CPU usage (44.1 kHz)0.5% (see Notes)
CPU usage (96 kHz)1.1% (see Notes)
Hard RT CapableNo
In-place operationSupported
run_adding() functionProvided

Usage tips

Although this limiter is an exceptionally clean sounding one, it is possible to introduce distortion by setting the limit level down into the bulk of the audio. Only transients, drum beats and such things (which "stand out" of the waveform) should be attacked. To illustrate the optimal setting of this plugin, let's look at the following waveforms (seemingly some unmastered rock music):

[Before/After Limiter Waveforms 1]

As you can see, no signal gets above the limit level, so this plugin acts as a brickwall limiter (with a compression ratio of 1:inf above the limit level). But the two waveforms above sound exactly the same! This is possible because transients last for a very short amount of time, and despite their high level, they don't carry very much energy compared to the bulk of the audio. Now let's take a closer look at the same waveforms:

[Before/After Limiter Waveforms 2]

As it can be seen, the waveform does not lose any of its details, because half-cycles (from zero-cross to zero-cross) are individually scaled down to the limit level (only those that have peaks above the limit, of course).

When setting the "Limit Level", you should not go more than 7-8 dB below the average peak level of the signal, which should be observed via some peak-holding level meter. When using this plugin in Ardour, this can be done very easily because the meters of the mixer strips provide an excellent way to monitor exact peak values. Assuming an unmastered mix of some rock music with drums, bass, guitars etc. you can usually get down to the point where the Ardour level meter doesn't move very much. Without hearing any distortion, of course. Because high transients are squeezed down, the overall signal level can be raised with the "Output Volume" control. Thus, this plugin is a very effective way to transparently maximize the loudness of your mixes.



About latency issues

To be able to "scan" complete half-cycles of the incoming audio signal, this plugin has some latency. The value of latency means the number of samples the output is "late" when compared to the input. Latency time is always 12.5 ms, so the latency value depends on the sample rate you use.

12.5 ms is not a long time (when you are waiting for a bus, for example), but there may be situations where this amount of latency causes problems. One possible case is when you have multiple channels containing some of the same sound source (a live drum recording for example, with a great amount of snare leakage into cymbal microphones). It can happen that the time shift introduces phasing effects when you place this plugin on one of these tracks.

To deal with such problems, a control output named "latency" is provided. The exact amount of latency is always written to this output during operation. Advanced hosts can shift the entire track backwards in time, based on this value. However, at the time of this writing, no host was found to have working support for this. So if this amount of latency is an issue for you, it is recommended to shift the track backwards manually, by the number of samples indicated by the "latency" output, or by 12.5 ms. Fortunately, latency is not an issue when using the plugin as a maximizer on master outputs or processing separate tracks outside the context of a mix.


Summary of user controls

namemin. valuedefault valuemax. value
Limit Level [dB] -30 0 +20
Output Volume [dB] -30 0 +20
latency latency time is 12.5 ms,
value depends on sample rate

Notes

This plugin has a processing function that examines the input audio signal and makes decisions based on sample values. So by definition, this plugin cannot qualify as hard RT capable, although CPU demand tends to be fairly constant during usage.


TAP Stereo Echo

[TAP Stereo Echo GUI as shown in Ardour]

This plugin supports conventional mono and stereo delays, ping-pong delays and the Haas effect (also known as Cross Delay Stereo). A relatively simple yet quite effective plugin.

General information

Unique ID2143
I/O ports2 inputs / 2 outputs
CPU usage (44.1 kHz)0.4%
CPU usage (96 kHz)0.8%
Hard RT CapableYes
In-place operationSupported
run_adding() functionProvided

Usage tips

If you want to create a conventional mono or stereo delay, all you have to do is set the delay times and feedback ratios for the two input channels. If the feedback is set to zero, then only one delay of the input is created (as if a traditional tape delay was used). When feedback is greater than zero, the same bit of audio is sent back and delayed over and over again, with decreasing amplitudes. In this case the decay time is dependent of the feedback value.

When you turn the Cross Mode switch on, the feedback loops are being feeded by the delayed signal of the opposite input channel. A sound coming from the left input channel will be delayed by the Left Delay time value, but the output of the left delay ringbuffer will be sent back to the right input (instead of the left) with regard to the right channel's feedback setting. In Cross mode, a sound appearing at one input will be bouncing between the two output channels, hence the popular name "ping-pong delay". If you use this effect with high delay times and feedback values, even the dumbest listener will notice that your mix is stereo.

A third effect achievable with this plugin is the so-called Haas effect. This effect is founded by the following psycho-acoustic experience: if a sound reaches one ear, and the same sound reaches the other ear but with a time shift of 15-40 milliseconds, only one sound is heard, but with a spatial feeling. The Haas effect (also known as Cross Delay Stereo, which refers to the means by which the effect is created) is widely used by mixing engineers to avoid their mixes being "pan-potted mono", or to "stretch out" their otherwise mono guitar, vocal etc. tracks in space. This effect is a great alternative to reverberation (although it produces a noticeably different quality).



How to create the Haas effect

It only makes sense to create the Haas effect on a mono track. On a stereo track, you should apply a cross or normal stereo echo instead.

To create the Haas effect on a mono track, follow these steps.

1. Switch on the "Cross Mode" and "Haas Effect" controls of the plugin. The "Haas Effect" switch will mute the second (right) input channel, because when applied to a mono track, the plugin receives the same mono data on both inputs and this would kill the Haas effect (this topic was discussed in the section about signal routing).
2. Set the "R/Haas Delay" time to 15-40 milliseconds. The bigger this setting, the wider the mono track will "stretch out". But if you increase the Haas delay above a certain threshold, the listener will begin to hear two separate sounds shifted in time instead of the Haas effect (which is actually the case at lower delays as well, but the feeling is something completely different).
3. Set the "R/Haas Feedback" near 100% (above 80% will do).
4. "Left Feedback" shouldn't be very large (stay below 50%) or the ping-pong delay which makes up the Haas effect will not decay in a short time, and this will create a very unpleasant sound.
5. Set the "L Delay" time as you see fit.
6. The sound of a mono track "streched out" in space with the Haas effect tends to have some directionality (the listener feels the sound source is a bit nearer to the right side than the left, or vice versa). If the sound of the track would fit into your overall mix better with the left and right sides swapped, you can do this by switching "Swap Outputs" on.
7. Mute the direct sound (set "Dry Level" to -70 dB). It is not needed in this scenario.


Summary of user controls

namemin. valuedefault valuemax. value
L Delay [ms] 0 100 2000
L Feedback [%] 0 0 100
R/Haas Delay [ms] 0 100 2000
R/Haas Feedback [%] 0 0 100
L Echo Level [dB] -70 0 +10
R Echo Level [dB] -70 0 +10
Dry Level [dB] -70 0 +10
Cross Mode OFF OFF ON
Haas Effect OFF OFF ON
Swap Outputs OFF OFF ON

Notes

The maximum delay time (which is currently 2000 ms) can be set to a greater value in tap_echo.c if needed. When activating the plugin, memory is allocated for a ringbuffer which is large enough to contain audio as long as this value. Because this amount of memory is proportional to the maximum delay, it is not desirable to set it to a very large value if you don't want to actually use it since you will be only wasting memory. (This waste will be temporary of course, since memory is freed when the host deactivates the plugin -- that is, when you remove it from the mixer/patchbay/whatever your host has.)


TAP Tremolo

[TAP Tremolo GUI as shown in Ardour]

The tremolo effect is probably one of the most ancient effects, originated in the earliest days of the history of studio recording. It lost some of its popularity over time (and with the emerge of more exciting digital effects), but you still hear this effect on newer recordings from time to time.

General information

Unique ID2144
I/O ports1 input / 1 output
CPU usage (44.1 kHz)1.4%
CPU usage (96 kHz)3.2%
Hard RT CapableYes
In-place operationSupported
run_adding() functionProvided

Usage tips

This plugin sounds good mainly on acoustic or electric guitar tracks, and should be used only occassionally. To create a "floating" effect, set the frequency value to 3-6 Hz. To create a more intensive effect, set it to 8-15 Hz (recommended mostly on electric guitar tracks). The depth should be probably set somewhere between 50% and 90%. If you feel that the overall loudness of the track decreases when this effect is applied, you can compensate this by setting the "Gain" control.

Summary of user controls

namemin. valuedefault valuemax. value
Frequency [Hz] 0 0 20
Depth [%] 0 0 100
Gain [dB] -70 0 20

Notes

The sine function is implemented via a sine table, which is computed when the host loads the plugin library. This sort of implementation was necessary because calling sinf() for every sample proved to be way too expensive -- that very call itself doubled the CPU usage.