DtBlkFx Revision 1.0
VST audio effect plugin by Darrell Tam (darrell.barrell@gmail.com)
User Guide
Compile date 22 April 2006, Microsoft Windows version
This software incorporates code from fastest-fourier-transform-in-the-west 2.1.3 (www.fftw.org) and Steinberg VST plugin SDK 2.3. VST is a trademark of Steinberg Media Technologies GmbH User manual diagrams incorporate graphics from ian.umces.edu.
DtBlkFx is a Fast-Fourier-Transform (FFT) based Virtual Sound Technology (VST) plug-in for use in a variety of audio software running under Microsoft Windows 2000 or newer.
Use it for...
You can select up to 4 of the above effects to be run in series! Combining the effects in this way allows you to make completely new and surprising sounds.
DtBlkFx is freely distributable and is covered by the terms of the GNU licensing agreement. Full source code is included in the distribution.
Some really short theory
This effect works differently to most others - instead of filtering or distorting audio data directly, it finds the frequency spectrum via a fast-fourier-transform and then does stuff to that.
The steps are:
Note: The effect must delay the audio the length of at least a block. By default it is set to 1 beat but you can adjust this down to a fraction of a beat.
No installer... manually copy DtBlkFx.dll and DtBlkFxS.dll to the VST plug-ins directory of your music software.
Now start the music software of your choice and select either:
Here's the user interface and it is very colourful.
What is all that stuff? Read on...
These are the parameters along the top.
MixBack |
Percentage mix back of original sound. Set this to 100% to save CPU if you don't want any effect apart from delay. VstParam: MixBack |
Power |
Power can be set to match or filter. Match causes the output "power" to be amplified or attenuated to be the same as the input "power". This means individual effect amplitudes are relative to one another. It also means that if you remove a large portion of your frequency spectrum then left over stuff may end up sounding very loud. Filter mode operates like a traditional filter where the output power may be very different to the input power. This mode is of most use when using DtBlkFx as a parametric equalizer. VstParam: MixBack shared parameter, if MixBack param < 0.5 then power is match otherwise power is filter. |
Delay |
Since DtBlkFx processes audio in blocks it must delay the sound to operate . Delay controls the amount of delay introduced in music-beats. Hopefully this isn't too painful because if you shift your audio track forward by the same number of beats then all the timing is back to normal. Some people complained to me about the delay... but they left it at the default of 1 beat when they could have set it to much less! The maximum block size that can be processed is limited by the delay that you specify (i.e. small delays will only allow small block sizes). VstParam: Delay |
Overlap |
Percentage overlap of blocks to use. A large overlap results in a smooth transit ions between blocks but more CPU while a smaller overlap can give interesting effects. VstParam: Overlap |
BlkSync |
If BlkSync is turned on then DtBlkFx will try align the blocks with the song tempo and any parameter changes. When turned off then the position of blocks will have no particular relationship with the song tempo. VstParam: Shared with Overlap param (on when > 0.5) |
BlkLen |
Specify the maximum length of block to process audio data. If the specified Delay is less than the BlkLen specified then a smaller block length will be used and displayed with an asterisk (*). Longer block lengths give a higher frequency resolution but need more delay and CPU. Short block lengths can introduce interesting artefacts. VstParam: BlkLen |
FreqA / FreqB |
Use these sliders to select a frequency range for the effect. The frequency is displayed in the format note octave:cents Hertz. For example c#2:-13 68.7Hz means note c# octave 2 flat 13 cents is equivalent to 68.7Hz. For non-harmonic effects FreqA & FreqB are used to select or exclude a frequency range to process. Set FreqA less than FreqB to include the region between them otherwise the range is excluded. ![]() Use the smallest possible frequency range for an effect to save on CPU. VstParam: <n>: FreqA / <n>: FreqB |
Amp |
Amplitude controls the amplitude of the effect. If the overall power parameter is set to match then this is relative because raising the Amplitude of the selected frequency range effectively decreases that of the other frequencies. VstParam: <n>: Amp |
Type |
Type controls which effect will be run. Click for a pop-up menu of many different effects - these are described in the next section. VstParam: <n>: Type |
Value |
The meaning of value depends on which effect type has been selected. VstParam: <n>: Value |
The effect type is selected from the Type pop-up menu for each effect position.
There are 2 categories of effects as described below: Normal and Masking.
Normal Effects
Filter |
Parametric equalizer - adjust the amplitude of the frequency range specified. This does not use the effect value control. Some of the other effects have this capability too but will tend to use more CPU if this is all you want to do. |
Contrast |
Contrast changes the dynamic range of frequencies present in the sound. Positive contrast results in the reduction of noise and softer frequency components. Small amounts are useful for reducing distortion and un-muddying sound. When applied heavily only the loudest tones remain but can end up sounding like nasty audio compression on dodgey web videos. Negative values flatten the frequency spectrum and increase noise. Small to medium amounts are useful for adding "body". ![]() |
Smear |
Randomizes the phase of the spectrum data which results in a flattening of the sound envelope. Sound smearing can be used to remove loop clicks and give a sustain effect. Similar to reverb in other plugins except that outcome is both forwards and backwards in time! |
Thresh |
Boost or reduce frequency components with an amplitude above or below a particular threshold (set by the effect value) within the selected frequency range. ![]() You can get a similar sound to contrast. In previous versions of DtBlkFx this was known as "Weed". |
Clip |
Clip frequency components greater than a particular level (set by the effect value). ![]() |
Mirror |
Reverse the order of frequencies within the selected frequency range. The effect value lets you control the percentage of mirrored and non-mirrored mixing.
Mathematically this is similar to aliasing. For some fun try in combination with the masking effects. |
Resample |
Resample is just the same as what resample normally does - it changes the pitch and the speed together.
When used with long block sizes (16384+) you can hear the segment of sound being repeated. If you use it with medium sizes (2048 or 4096) the repeating is not as obvious and it becomes more of a pitch shifting effect. |
ShiftAdd |
Modify the pitch of the selected spectrum in one of 2 ways: pitch shift or constant. Pitch shift mode shifts by a particular number of notes while constant mode shifts by a number of Hertz . Add & AddD add the shifted data to whatever it lands on while Repl & ReplD versions replace the destination. The specified frequency range for AddD & ReplD refers to the destination while for Add & Repl it is the source. The constant shift mode may be similar to frequency modulating effects or listening to single-side-band CB radios. It tends to give a metallic quality as the sound loses its normal harmonic relationships. Shift accuracy is affected by the block length - longer lengths result in higher shifting resolution. |
HarmShift |
Harmonic frequency shift by a constant number of notes (HarmShift) or to a particular note (HarmRepitch). These effects will only work correctly on single voice or single note sounds (i.e. a chord won't be properly pitch shifted). ![]() DtBlkFx shifts the frequency spectrum in blocks that are aligned to harmonics of the sound (shown in alternating pink & blue). The fundamental frequency (centre of the first block) is automatically set to the loudest peak within the FreqA/B range. Normally you can set FreqA & FreqB to cover at most the first 6 octaves - set to the narrowest possible range to slightly reduce CPU usage. Use the AutoHarmMask effect (described later) in the effect position immediately above to control harmonic width and all/even/odd/between setting (refer oto the HarmFilt diagram) . In this case the fundamental is found from the AutoHarmMask FreqA/B range while the HarmShift/HarmRepitch FreqA/B range specifies the inclusion or exclusion range. Note that the DtBlkFx's spectrogram display will not show the harmonic ranges as equally spaced as shown above because of the way it spaces the frequencies (logarithmic). |
HarmFilt |
HarmFilt (Harmonic Filter) is a comb filter that allows you to modify amplitude at regular intervals or harmonics but leave the gaps between unchanged. You can use this to control the amplitude of a particular note or to produce interesting sweeping effects (similar to "phasing"). Be sure to set the effect Amp to be non-0 dB (e.g. try -inf or +40 dB) to make the effect do something. ![]() The above diagram shows the possible frequency ranges selected by the effect (semi-transparent red squares). The fundamental frequency corresponds to which ever FreqA/FreqB control has a lower frequency while the other controls the maximum frequency limit. The effect value sets the width around each harmonic and which harmonics you want to modify - all, dd, even or between. Note that the DtBlkFx's spectrogram display will not show the harmonic ranges as equally spaced as shown above because of the way it spaces the frequencies (logarithmic). |
AutoHarm |
AutoHarm is similar to HarmFilt except that the fundamental frequency is automatically determined (if FreqB < FreqA the effect will stop at FreqA otherwise it continues to the end of the spectrum). Use this to automatically track a pitched sound and change its amplitude. ![]() The harmonic width and all/odd/even/between setting is controlled by the effect value (see HarmFilt). Set the FreqA/FreqB range as narrow as possible to slightly reduce CPU. |
Triangles |
These effects change the timbre of a pitched input sound by power matching harmonics to various built-in envelopes. Like AutoHarm, HarmShift & HarmRepitch these only work as described on a single voice or note and the fundamental is automatically determined from the frequency component within the selected frequency range. ![]() The effect value varies the harmonic envelope according to a built-in sequence of envelopes. Use the AutoHarmMask effect (described later) in the effect position immediately above to control harmonic width and all/even/odd/between setting (refer oto the HarmFilt diagram) . In this case the fundamental is found from the AutoHarmMask FreqA/B range while the HarmShift/HarmRepitch FreqA/B range specifies the inclusion or exclusion range. |
Mask Effects
Mask effects don't change the sound in anyway by themselves but affect which frequencies a normal effect immediately following will be applied. For example if you set the first effect as ThreshMask and the second effect as Contrast you can now choose to apply Contrast only to frequency components above or below the threshold.
Note: A normal effect can only have one mask (i.e. if you set 2 masks in a row then the first mask will have no effect).
HarmMask |
HarmMask is the masking version of HarmFilt and allows you to apply any normal effect to the harmonics of a particular note. |
AutoHarmMask | AutoHarmMask is the masking version of AutoHarm and has the same effect value meaning. |
ASubH1Mask ASubH2Mask ASubH3Mask |
These effects are all variants of AutoHarmMask differing in that the fundamental frequency is taken as 1/2 (ASubH1Mask), 1/3 (ASubH2Mask) or 1/4 (ASubH3Mask) of the loudest frequency component within the selected range. |
ThreshMask | Thresh mask is the masking version of Thresh and lets you apply the following "normal" effect to only frequencies above or below a particular threshold. |
Stereo Only Effects
These effects are only available in the stereo version of DtBlkFx because they require 2 channels to operate
Vocode |
Vocode mixes the two channels by taking the frequency envelope of the left channel and applying it to the right channel (with the result in both the left and right). Example: feed voice into the left channel (red spectrum) and some strings into the right (blue spectrum). DtBlkFx will mix the voice and the strings to produce talking strings (which is just just what we need).
Vocode takes the frequency envelope of the left channel and applies it to the right channel. It operates by dividing the spectrum into a number of blocks (controlled by effect value) and adjusting the amplitude of each block from the right channel so as to power-match with the corresponding block in the left channel. When FreqA < FreqB then processing on the right channel is limited to that range while the entire spectrum is used from the left channel. If FreqB < FreqA then the entire spectrum of the right channel is processed while the envelope from the left channel is limited to the FreqB-FreqA range. Mask effects are not supported and will do nothing. |
HarmMatchLR |
HarmMatchLR & HarmMatchRL match the power from each harmonic in one channel to the corresponding harmonic in the other resulting in a different type of vocoding. HarmMatchLR uses the left channel as a reference and adjusts the right channel to match while HarmMatchRL goes the other way (right is reference, left is adjusted). Both versions of the effect output the adjusted channel on both left & right channels (i.e. reference is not output) and always set the overall output power to match the left channel. ![]() The fundamental frequency (centre of the first block) for each channel is automatically set by the loudest peak within the FreqA/FreqB range. The effect value controls the harmonic width and all/odd/even/between setting. Refer to AutoHarm for more information - as with all other harmonic effects these only work as described for single voice or note sound (although it will do interesting things on chords). Use AutoHarmMask in the effect position immediately above to allow individual control over channel 1 & channel 2. The AutoHarmMask settings (FreqA/FreqB & value) refer to channel 1 while the HarmMatch settings refer to channel 2 - this means you can set different fundamental search ranges and harmonic settings for each channel. ThreshMask and HarmMask are not supported and will do nothing. The above diagram differs from what you will see in the spectrogram because of a different frequency scale (logarithmic). |
DtBlkFx can be quite hard on your CPU! How can you reduce it?? Try these...
I agree this would be good... If anyone wants to write some, please do!
Please send me bug reports, comments and suggestions.
Author | Darrell Tam |
darrell.barrell@gmail.com |
I live in Canberra, Australia, with my wife Yvette and 2 children Asher and Jasper. I have been writing computer music and music software for about 17 years, starting on the Amiga using various trackers.
I am open for consulting work and collaborative free software development. I have 13 years experience in hardware (VHDL for FPGAs, microcontrollers) and software (C, C++, perl) development. Projects have included digital signal processing, digital demodulation, high-speed demultiplexing, parallel data processing, Microsoft Windows device driver development and system architecture design.