The <effects> element
Adding global, instrument-wide effects is easy: just add an <effects> element right below your top-level <DecentSampler> element.
It is also possible to have effects that only get added to a specific group. To adding effects that only apply to a specific group, all you need to do is create an <effects> group that lives underneath the <group> element for the group you want to affect.
Group level effects are initialized every time a note is started and destroyed every time a note is stopped. If you play two notes simultaneously, two instances of this effect will be created and these will be independent of eachother. As a result, they use more CPU than global effects.
NOTE: Only certain effects will work as group-level effects: lowpass filter, hipass filter, bandpass filter, gain, and chorus. Delay and reverb cannot work properly as they will be deleted before their tail peters out.
The <effect> element
Within the <effects> element, you can have any number of <effect> sub-elements. These specify parameters for each individual effect that you would like to have in your global effects chain. There are currently only a handful effects available although more could definitely be added on request:
All <effect> elements support a tags attribute — a comma-separated list of tag names. Tags allow bindings to target effects by name instead of by numeric index. For example:
<effects>
<effect type="lowpass" frequency="22000" tags="main-filter" />
</effects>
A binding can then reference this effect using tags="main-filter" instead of effectIndex="0":
<binding type="effect" level="instrument" tags="main-filter" parameter="FX_FILTER_FREQUENCY"
translation="linear" translationOutputMin="100" translationOutputMax="8000" />
Low-pass, Band pass, and Hi-pass filter
A 2-pole resonant filter that can be either a lowpass, bandpass, or highpass filter
Example:
<DecentSampler>
<effects>
<effect type="lowpass" resonance="0.7" frequency="22000" />
</effects>
</DecentSampler>
There is also a single pole version of the lowpass filter that can be accessed using the lowpass_1pl effect type. This version does not have a resonance parameter.
<DecentSampler>
<effects>
<effect type="lowpass_1pl" frequency="22000" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
The type of filter |
Must be either |
|
|
Optional |
The filter resonance (Q) |
0.001 - 5.0, where 5 is big, 0 is small. |
0.7 |
|
Optional |
The filter frequency |
0 - 22000 |
22000 |
Notch EQ Filter
A simple notch filter.
Example:
<DecentSampler>
<effects>
<effect type="notch" q="0.7" frequency="22000" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
The type of filter |
Must be |
|
|
Required |
The filter frequency |
60 - 22000.0 |
10000 |
|
Optional |
Q is the ratio of center frequency to bandwidth |
0.01 - 18.0 |
0.7 |
Peak EQ Filter
A peak filter centred around a given frequency, with a variable Q and gain.
Example:
<DecentSampler>
<effects>
<effect type="peak" q="0.7" frequency="22000" gain="2.0" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
The type of filter |
Must be |
|
|
Required |
The filter frequency |
60 - 22000.0 |
10000 |
|
Optional |
Q is the ratio of center frequency to bandwidth |
0.01 - 18.0 |
0.7 |
|
Required |
Values greater than 1.0 will boost the high frequencies, values less than 1.0 will attenuate them. |
0 - 1.0 |
1.0 |
Gain effect
Applies a volume boost or cut to the output signal.
Example:
<DecentSampler>
<effects>
<effect type="gain" level="-6" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Default |
Valid Range |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Required |
The amount of gain to apply. By default (and for backwards compatibility) this is expressed in decibels (e.g. |
|
dB: -99 – 24; linear: 0.0 – 8.0 |
|
Optional |
Specifies the unit for the |
|
|
Reverb effect
Example:
<DecentSampler>
<effects>
<effect type="reverb" roomSize="" damping="" wetLevel="" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The reverb “room size” |
0 - 1.0, where 1.0 is big, 0 is small. |
0.7 |
|
Optional |
The reverb damping level |
0 - 1.0, where 0 is not damped, 1.0 is fully damped. |
0.3 |
|
Optional |
The volume of reverb signal |
0 - 1.0 |
0 |
Delay effect
A simple delay effect that can be controlled either in seconds or using musical time increments based on the host tempo. For a complete explanation of how to use tempo-syncing, see here.
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
Determines whether the delay will be synced to DAW tempo or not, as well as what format you will be using for the |
|
|
|
Optional |
The delay time in seconds |
0 - 20.0 |
0.7 |
|
Optional |
The feedback level. |
0 - 1.0, where 0 is no feedback, 1.0 is max feedback. |
0.2 |
|
Optional |
The parameter allows you to introduce delay variations between the left and right channels. Half of this amount is subtracted from the left channel’s delay time and half of this amount is added to the right channel’s delay time. For example, if the |
-10 - 10 |
0 |
|
Optional |
The volume of the delay signal |
0 - 1.0 |
0.5 |
Example of using the delay effect when specifying time in seconds:
<DecentSampler>
<effects>
<effect type="delay" delayTime="0.5" stereoOffset="0.01" feedback="0.2" wetLevel="0.5" />
</effects>
</DecentSampler>
Example of using the delay effect when specifying time in musical time:
<DecentSampler>
<ui>
<tab>
<labeled-knob x="180" y="40" label="Delay Time" valueType="musical_time"
minValue="0" maxValue="20" value="10" defaultValue="10">
<binding type="effect" level="instrument" position="0" parameter="FX_DELAY_TIME" />
</labeled-knob>
</tab>
</ui>
<effects>
<effect type="delay" delayTimeFormat="musical_time" delayTime="10" stereoOffset="0.01"
feedback="0.3" wetLevel="0.5" />
</effects>
</DecentSampler>
Chorus effect
Example:
<DecentSampler>
<effects>
<effect type="chorus" mix="0.5" modDepth="0.2" modRate="0.2"/>
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The wet/dry mix which controls how much of the chorus signal we hear |
0 - 1.0, where 1.0 is just chorus, 0 is just dry signal. |
0.5 |
|
Optional |
The modulation depth of the effect |
0 - 1.0, where 0 is no modulation, 1.0 is max modulation. |
0.2 |
|
Optional |
The modulation speed in Hz. |
0 - 10.0 |
0.2 |
Phaser effect
Example:
<DecentSampler>
<effects>
<effect type="phaser" mix="0.5" modDepth="0.2" modRate="0.2" centerFrequency="400" feedback="0.7" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The wet/dry mix which controls how much of the phaser signal we hear |
0 - 1.0, where 1.0 is just phaser, 0 is just dry signal. |
0.5 |
|
Optional |
The modulation depth of the effect |
0 - 1.0, where 0 is no modulation, 1.0 is max modulation. |
0.2 |
|
Optional |
The modulation speed in Hz. |
0 - 10.0 |
0.2 |
|
Optional |
The center frequency (in Hz) of the phaser all-pass filters modulation |
0 - 22000 |
400 |
|
Optional |
Sets the feedback volume of the phaser. |
-1 - 1.0 |
0.7 |
Convolution effect
This effect allows you to use a convolution reverb or amp simulation to your sample library. Depending on the length of the impulse response, the convolution effect can use substantial CPU, so you’ll definitely want to do some testing both with and without the convolution effect turned on.
Example:
<DecentSampler>
<effects>
<effect type="convolution" mix="0.5" irFile="Samples/Hall 3.wav" />
</effects>
</DecentSampler>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The wet/dry mix controls how much of the convolution signal we hear |
0 - 1.0, where 1.0 is just convolution, 0 is just dry signal. |
0.5 |
|
Required |
The path of the WAV or AIFF to use as an Impulse Response (IR) file |
String |
No default |
Pitch Shifter effect
As of version 1.13.3, Decent Sampler contains an old-school pitch shifter effect, which allows you to shift the pitch of the audio signal up or down by a specified number of semitones. This can be useful for creating harmonies or for adding subtle chorus effects.
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The number of semitones to shift the pitch of the audio signal |
-24 - 24, where -24 means two octaves down, 0 means no pitch shift, and 24 means two octaves up |
|
|
Optional |
The wet/dry mix controls how much of the pitch-shifted signal we hear |
0 - 1.0, where 1.0 is just pitch-shifted signal, 0 is just dry signal. |
0.5 |
Example:
<DecentSampler>
<effects>
<effect type="pitch_shift" pitchShift="2" mix="0.5" />
</effects>
</DecentSampler>
Wave Folder effect
Introduced in version 1.7.2. This effect allows you to fold a waveform back on itself. This is very useful for generating additional harmonic content.
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The volume of the input signal |
1 - 100, where 100 means the signal is amplified by a factor of 100 and 1 means no amplification is applied |
1 |
|
Optional |
The amplitude above which wave folding should take place |
0 - 10.0 |
0.25 |
Because wave folding tends to sound better when applied on a per-voice basis, it usually makes sense to set up the wave folder at the group level (separate group effects get created for each keypress). Example:
<DecentSampler pluginVersion="1">
<ui>
<tab>
<labeled-knob x="180" y="40" label="Drive" type="float" minValue="1" maxValue="100" textColor="FF000000" value="1">
<binding type="effect" level="group" groupIndex="0" effectIndex="0" parameter="FX_DRIVE" translation="linear" />
</labeled-knob>
<labeled-knob x="280" y="40" label="Threshold" type="float" minValue="0" maxValue="1" value="1" textColor="FF000000">
<binding type="effect" level="group" groupIndex="0" effectIndex="0" parameter="FX_THRESHOLD" translation="linear" />
</labeled-knob>
</tab>
</ui>
<groups>
<group>
<!-- Samples go here. -->
<effects>
<effect type="wave_folder" drive="1" threshold="1" />
</effects>
</group>
</groups>
Wave Shaper effect
Introduced in version 1.7.2. This effect allows you to distort an audio signal. This is very useful for generating additional harmonic content.
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The amount of distortion. This really just controls the volume of the input signal. The volume of the input signal |
1 - 1000, where 1000 means the signal is amplified by a factor of 1000 and 1 means no amplification is applied |
1 |
|
Optional |
Introduces an extra gain boost to the drive |
0 - 1.0 |
1 |
|
Optional |
The linear output level of the signal |
0 - 1.0 |
0.1 |
|
Optional |
Whether or not oversampling is performed. Oversampling sounds better, but it’s CPU intensive. If you want to save CPU, set this to false. |
true, false |
true |
Because wave shaping tends to sound better when applied on a per-voice basis, it usually makes sense to set up the wave shaper at the group level (separate group effects get created for each keypress). Example:
<DecentSampler pluginVersion="1">
<ui>
<tab>
<labeled-knob x="180" y="40" label="Drive" type="float" minValue="1" maxValue="40" textColor="FF000000" value="0.5473124980926514">
<binding type="effect" level="group" groupIndex="0" effectIndex="0" parameter="FX_DRIVE" translation="linear"/>
</labeled-knob>
<labeled-knob x="280" y="40" label="Drive Boost" type="float" minValue="0" maxValue="1" value="0.328312486410141" textColor="FF000000">
<binding type="effect" level="group" groupIndex="0" effectIndex="0" parameter="FX_DRIVE_BOOST" translation="linear"/>
</labeled-knob>
<labeled-knob x="380" y="40" label="Output Lvl" type="float" minValue="0" maxValue="1" value="0.328312486410141" textColor="FF000000">
<binding type="effect" level="group" groupIndex="0" effectIndex="0" parameter="FX_OUTPUT_LEVEL" translation="linear"/>
</labeled-knob>
</tab>
</ui>
<groups>
<group>
<!-- Samples go here. -->
<effects>
<effect type="wave_shaper" drive="0.5473124980926514" shape="0.328312486410141" outputLevel="0.1"/>
</effects>
</group>
</groups>
Stereo Simulator effect
Introduced in version 1.17.0. This effect converts a mono input signal into a pseudo-stereo signal using one of three classic algorithms.
<effect type="stereo_simulator"
algorithm="adt"
width="0.5"
delayTime="0.005"
modRate="0.5"
modDepth="0.3" />
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
Pseudo-stereo algorithm to use |
|
|
|
Optional |
Stereo spread and dry/wet amount; 0 = mono/dry, 1 = full stereo effect |
0–1 |
0.5 |
|
Optional |
Delay time in seconds |
0.001–0.030 |
0.005 |
|
Optional |
LFO modulation rate in Hz (ADT algorithm only) |
0.1–10.0 |
0.5 |
|
Optional |
LFO modulation depth (ADT algorithm only) |
0–1 |
0.3 |
The three algorithms are:
lauridsen: Complementary comb filters — simple and CPU-efficient.schroeder: Double-delay comb filters — slightly richer stereo image.adt(default): Artificial Double Tracking with LFO-modulated delay — the most convincing stereo widening effect. ThemodRateandmodDepthparameters only affect this algorithm.
The width parameter serves as both the stereo spread amount and the dry/wet control. Setting width to 0 produces a mono dry signal; setting it to 1 applies the full stereo effect.
All parameters except algorithm are bindable. Example with a width knob:
<DecentSampler pluginVersion="1">
<ui>
<tab>
<labeled-knob x="100" y="40" label="Width" type="float" minValue="0" maxValue="1" value="0.5" textColor="FF000000">
<binding type="effect" level="instrument" effectIndex="0" parameter="FX_WIDTH" translation="linear" translationOutputMin="0" translationOutputMax="1"/>
</labeled-knob>
</tab>
</ui>
<groups>
<group>
<!-- Samples go here. -->
</group>
</groups>
<effects>
<effect type="stereo_simulator" algorithm="adt" width="0.5" delayTime="0.005" modRate="0.5" modDepth="0.3" />
</effects>
</DecentSampler>
Bit Crusher effect
The bit crusher reduces the bit depth and sample rate of the audio signal, producing a characteristic lo-fi, digital, crunchy sound. Bit depth reduction introduces quantisation noise, while sample rate reduction creates aliasing artifacts.
<effect type="bit_crusher" bitDepth="8" sampleRateReduction="4" mix="1.0"/>
Attributes:
Attribute |
Type |
Valid Range |
Default |
|
|---|---|---|---|---|
|
Required |
Must be |
|
|
|
Optional |
The number of bits used to quantise the audio signal. Lower values = more aggressive crushing. |
1–24, where 24 is clean and 1 is maximum crushing. |
24 |
|
Optional |
Sample-rate reduction factor. A value of 4 means the effective sample rate is reduced to one quarter of the original. |
1–32, where 1 is no reduction and 32 is maximum downsampling. |
1 |
|
Optional |
The wet/dry mix which controls how much of the bit-crushed signal we hear. |
0–1.0, where 1.0 is fully crushed and 0.0 is the original dry signal. |
1.0 |
Both bitDepth and sampleRateReduction are bindable, so you can attach knobs to control them in real time.
Binding parameters for the bit crusher effect:
Binding |
Description |
|---|---|
|
Controls the bit depth (1–24) |
|
Controls the sample-rate reduction factor (1–32) |
|
Controls the wet/dry mix (0–1) |
Example with knobs for all three parameters:
<DecentSampler pluginVersion="1">
<ui>
<tab>
<labeled-knob x="80" y="40" label="Bit Depth" type="float"
minValue="1" maxValue="24" value="24" textColor="FF000000">
<binding type="effect" level="instrument" effectIndex="0"
parameter="FX_BIT_DEPTH" translation="linear"
translationOutputMin="1" translationOutputMax="24"/>
</labeled-knob>
<labeled-knob x="185" y="40" label="Rate Reduction" type="float"
minValue="1" maxValue="32" value="1" textColor="FF000000">
<binding type="effect" level="instrument" effectIndex="0"
parameter="FX_SAMPLE_RATE_REDUCTION" translation="linear"
translationOutputMin="1" translationOutputMax="32"/>
</labeled-knob>
<labeled-knob x="290" y="40" label="Mix" type="float"
minValue="0" maxValue="1" value="1" textColor="FF000000">
<binding type="effect" level="instrument" effectIndex="0"
parameter="FX_MIX" translation="linear"
translationOutputMin="0" translationOutputMax="1"/>
</labeled-knob>
</tab>
</ui>
<groups>
<group>
<!-- Samples go here. -->
</group>
</groups>
<effects>
<effect type="bit_crusher" bitDepth="24" sampleRateReduction="1" mix="1.0"/>
</effects>
</DecentSampler>