DT Block Fx - Buzz effect plugin

version 1.1, compile date Feb 15 2004

by Darrell Tam

Description

DT Block Fx performs FFT block based effects. Example uses are:

- equalization
- brick-wall (sharp roll off) filtering
- noise reduction (or increase)
- sound smearing/loop click removal
- non-harmonic frequency shifting (without aliasing)
- new filtering effects such as "electrosparkle" and "liquid"

  Short theory

  This effect works differently to most others - instead of filtering or distorting sample data directly it does its thing on the frequency spectrum.

  How does it do it?

  1. The input sample data is cut into overlapping blocks
  2. Each block is transformed to a frequency spectrum using the Fast-Fourier-Transform
  3. An effect is applied to the spectrum
  4. The frequency spectrum is inverse transformed back to sample data

  Installation

  Buzz installation

  Copy dt_blockfx.dll, dt_blockfx.prs to your <buzz root>\Gear\Effects directory.

  Copy fftw_2.1.3_float.dll to <buzz root>.

  The default <buzz root> is c:\Program Files\Jeskola\Buzz

  Usage

  Global Parameters

  Block Synchronization 0,1 | Only available in the pattern editor. Forces synchronization of the block with the start of tick for use with block sizes of 512 or longer. Set to 1 if you want an audio block to be aligned exactly with the current tick. If the paramaters aren't changed then this can generally be left unset. If not set then effects will not be in precisely time with your music. For block sizes longer than a tick (e.g 125 beat/min, 4 ticks/beat, the tick length in samples is 5292) then paramaters from some ticks will be ignored unless this is set. If need be you can set to 1 on every tick at the expense of CPU.
  Parameter Interpolation Mode 0..2 | Only available in the pattern editor. Generally only useful for block sizes of 4096 or shorter. The following values are valid: 0: Normal interpolation of parameters - overlap, freqA, freqB, etc are calculated using values from the current tick, next tick and the playing sample position. 1: No interpolation - parameters are fixed for the duration of each tick. 2: Continue previous - Parameter interpolation is continued from the previous tick (i.e. overlap, freqA, freqB, etc are calculated using values from the previous tick, the current tick and the playing sample position).
  MixBack 0=0% .. 0xA0=100% | Percentage mix back of original sound. If you want DT Block Fx to be off but keep the fixed delay, set this to 100% to save CPU.
  OutAmp 0x0..0xE0 0xA0=0dB, units=1/2dB | Output Amplification - reduce if your sound clicks or increase if you like hard clip distortion.
  TickDelay 0..0x4000, units=1/0x100 ticks | Number of ticks for which the audio is delayed. Since audio is processed in blocks, then the delay must be longer than the required block length.
  BlockLen 0x0..0xB | Maximum block length to use. If the specified TickDelay is sufficient then the requested BlockLen will be used, otherwise the largest possible block length will be used. Longer block lengths result in a smoother sound and give a higher frequency resolution but need more delay and more CPU. Short block lengths can add a liquid or sparkling quality to the sound.
  Overlap 0x5=5% .. 0x50=80% | Percentage overlap of blocks to use. Larger overlap results in a smooth transit ions between blocks but more CPU.

  Track Parameters

  FreqA / FreqB 0x0=c-0/16.35Hz .. 0x8400=c-11/33.5KHz units=1/0x100 note | Start / end frequency for effect. If the end frequency is less than the start frequency then the result depends on the effect (for most effects the range between FreqB & FreqA will be excluded).
  Amp 0x0=-inf dB .. 0xE0=+32 dB units=1/2 dB | Relative amplitude of processed spectrum segment. Note that the overall output power is fixed using the OutAmp parameter. Raising the Amp of the segment effectively decreases the Amp of frequencies outside of the segment.
  Effect 0..8 | Effect to run on frequency segment. Refer to the table below.
  Value | Effect amount. Refer to the table below.

  Effects

  Contrast | This effect changes the contrast or dynamic range of frequencies present in the sound. Increasing contrast (Value > 0.5) results in the reduction of noise and softer frequency components. When applied heavily all but the loudest frequencies remain and the envelope is removed. Useful for reducing distortion and un-muddying sound. Decreasing contrast (Value < 0.5) results in the increase of lower level frequency components. This tends to flatten the frequency spectrum and increase noise. Useful for adding "body" to samples.
  Smear | This effect randomizes the phase of the spectrum data which results in the reduction of the sound envelope. The Value parameter controls how much randomization: 0 for none and 1 for 100% Sound smearing can be used to remove loop clicks and give sustain to any sound. It is similar to a super-soft reverb with large BlockLen.
  Clip | Clip causes frequency components greater than a particular level (set using Value) to be clipped to that level. This is another way of reducing the dynamic range of frequency components but it differs from Contrast in that the lower level components are not increased.
  Weed | Weed removes frequency components above (Value < 0.5) or below (Value > 0.5) a particular level. Removing components below a particular level increases the dynamic range of frequency components by leaving only the louder components. This can be used to remove noise from the spectrum or if applied strongly, leave only the loud components. Removing components above a particular level means that only the softer components remain. This means that background and lower level harmonics of a sound are increased.
  ShiftAdd | ShiftAdd shifts the spectrum segment by the Value specified (0.5 corresponds to no shift). The shift is non-harmonic meaning that it will not generally sound musical on tuned sounds. ShiftAdd mixes the original spectrum with the shifted segment. This effect is similar to modulating effects.
  ShiftReplace | The notes for ShiftAdd apply except ShiftReplace replaces the original spectrum with the shifted data. This effect is similar to modulating effects.
  Harmonic | Harmonic is a comb filter and similar to phase-effects. It modifies the amplitude (according to the effect Amp) of the spectrum at regular intervals or harmonics, leaving the gaps in between unchanged. The start and spacing of the intervals are controlled by FreqA and stop at FreqB. Setting FreqA beyond FreqB disables the effect. The effect value parameter controls the width of the intervals modified and which harmonics are changed (all, only odd or only even). To make this effect do something, be sure to set effect Amp to be non-0 dB (e.g. -inf or +32 dB), effect value to be non-0, FreqB > FreqA (eg FreqB all the way to 22Khz) and FreqA to be somewhere in the middle. Then try wiggling FreqA and/or effect value param.
  AutoHarm | AutoHarm is similar to Harmonic except the harmonic start and spacing is taken from the sample data being processed as the "loudest" frequency in the range of FreqA to FreqB.
  CopyHarm | CopyHarm is another variant of Harmonic. This version takes the frequency data from the first segment (specified by FreqA) and copies it at regular intervals up to FreqB. This effect is similar to combined distortion and phasing.

  Edit

  To open this window select the Edit option from the effect right-button menu. At the moment it doesn't let you edit anything but it does show you spectrograms for the input (top) and output (bottom) data. The picture below explains what you see.

  How does it work? Each line of the spectrogram is generated from one block (or possibly more for smaller block sizes) of FFT'd data. The vertical axis is time with most recent data scrolling in at the bottom. The horizontal axis shows frequency with 0Hz on the far left and the maximum frequency (i.e. 22050Hz for 44.1Khz sampling) on the far right. The colour indicates the power level of each frequency with red showing the maximum normalized non-clipping level while black is 110dB below this level. The colour bar on the left side of the window shows the colour spectrum used.

  Notice that the horizontal scaling is linear over "octaves" (which is how we perceive sound) instead of "Hz" (it is logarithmic over "Hz" meaning that high frequencies are closer together than low frequencies). Since FFT's work linearly over "Hz", there is less frequency resolution (i.e. wider "bins") at low frequencies.

  Source

  Full source code is included. Feel free to modify and experiment with the source code. If you create interesting effects, please send them to me. The Fastest-Fourier-Transform-in-the-West is used to perform frequency transforms. I have not included the source - download this from www.fftw.org but you don't need it to recompile DT Block Fx. Thanks to the guys that made FFTW.

  Contact Information

  Author | Darrell Tam
  Email | ymtam2@tpg.com.au