FreqTweak is a tool for FFT-based realtime audio spectral manipulation and
display. It provides several algorithms for processing audio data in
the frequency domain and a highly interactive GUI to manipulate the
associated filters for each. It also provides high-resolution spectral
displays in the form of scrolling-raster spectrograms and
energy vs frequency plots displaying both pre- and post-processed spectra.
It is an extremely addictive audio toy,
but I hope it has value for serious audio work too
(sound design, etc). The spectrum analysis is
pretty useful in its own right.
Version 0.6.1 released -- 7 July 2004
-- various fixes to satisfy compilers
-- modulator preset loading fixes
-- jack tmpdir option fix
Version 0.6.0 released -- 23 April 2004
-- added filter Modulators, Rotate, Rotate LFO,
Value LFO, and Randomize
-- minor bugfixes
Version 0.5.3 released -- 18 Sep 2003
-- reworked all string handling to be compatible with unicode
versions of wxGTK
-- 64bit portability fixes
-- added usage help
Version 0.5.2 released -- 20 Aug 2003
-- fixed dialog closing problem, made them real windows
-- fixed compile problems for gcc 2.96
-- added Compressor module
-- added EQ Boost module
-- now supports FFTW3
-- manpage contributed by Enrique Arnuncio
Version 0.5.1 released -- preset loading bug fixed
Version 0.5.0 released --
-- arbitrarily selectable and reorderable modules
-- preset blending feature
-- two new modules: limiter and warp
-- new preset format (conversion script available)
-- internal design cleanup
The preset format has changed for 0.5.0 and
above. Use the included ft_preset_convert.py
script to convert your existing presets. If
your freqtweak rc files are in the default location
( ~/.freqtweak/presets ) just execute the script with
otherwise specify the directory containing
preset dirs as the first argument.
Get the source code and build it yourself
Actually, I recommend downloading the latest CVS version and
building from that:
cvs -d:pserver:email@example.com:/cvsroot/freqtweak login
cvs -z3 -d:pserver:firstname.lastname@example.org:/cvsroot/freqtweak co -P freqtweak
Alternatively, you can get prebuilt binary packages for
various RedHat distros at
Or you can get some Debian
FreqTweak supports manipulating the spectral filters at several frequency resolutions
(64,128,256,512,1024,2048, or 4096 bands) depending on your
needs/resources. Overlap and windowing are also selectable.
The GUI filter graph manipulators (and analysis plots)
have selectable frequency scale types: 1x and 2x linear, and two log
scales to help with modulating the musical frequencies.
Filters can be linked across multiple channels.
The plots are resizable and zoomable (y-axis) to allow precise
editing of filter values.
The current processing filters are described below in the
order audio is processed in the chain. Any or all of the
filters can be bypassed. The state of all filters
can be stored or loaded as presets.
- Spectral Analysis --
Multicolor scrolling-raster spectrogram, or energy
vs. freq line or bar plots... one shows
pre-processed, another shows post-processed.
- EQ Cut/Boost --
Your basic multi-band frequency attenuation. But
you get an unhealthy number of bands... Note that this EQ is not intended for
mastering purposes, it allows for (and doesn't protect against) highly irregular
filtering. Two versions, one does only frequency gain
cut, the other boost.
- Pitch Scaling --
This is an interesting application
of Sprengler's pitch scaling algorithm (used in
Steve Harris' LADSPA plugin).
If you keep all the bins at the same scale, it is
equivalent to Steve's plugin, but when you start
applying different scales per frequency bin, things
quickly get weird. For highest quality results (at the expense of transients) use
larger FFT (>= 1024 bins).
- Gate --
This is a double filter where
a given frequency band is allowed to pass through
if the power on that band is between two dB
thresholds... otherwise its gain is clamped to 0.
- Delay --
This lets you delay the audio
on a per frequency-bin basis yielding some pretty wild
effects (or subtle, if you are careful). A feedback
filter controls the feedback of the delay per bin (be
careful with this one).
This is basically what Native Instrument's
Spektral-Delay accomplishes. Granted, I don't
have all the automated filter modulations (yet ;).
See their website for audio examples of what is
possible with this cool effect.
- Limit --
This is very harsh brick wall limiter on a per-bin
basis. It is not very pleasant, but can be interesting.
- Compressor --
This is a massively multiband compressor.
It will not behave quite like a normal
time-domain compressor because of the
inherent block processing of the FFT. Each
frequency bin has its own compressor
complete with Threshold, Ratio,
Attack/Release time, and makeup gain.
This is *not* suitable for mastering applications!
- Warp --
This one is a little different, both axes represent
frequency, and the identity matrix is unaltered
audio. Changing the value (height) of a bin,
reallocates the energy at that frequency to the new
frequency bin represented by the height of the bar.
For instance, if all bins are the same height, all
the frequency energy is added to a single bin. This
is a sensitive filter, the Log frequency scale is helpful here
(it affects both axes).
Modulators to an filter can be attached from the Modulations Window
(Control->Modulators... Ctrl-M). Add a modulator by clicking
on the Add Modulator... button and select from the choices. To
attach a modulator to a filter, click on the Attach... button on the
modulator panel and pick a filter. You can modulate many filters
simultaneously. The text entry fields can be used to exactly set
the slider values, by pressing enter/return after entering the number.
The following modulators are
currently implemented, with more to come soon.
- Rotate --
This will continually shift a filter horizontally at a constant
definable Rate, wrapping when it reaches the edge. The edges
are definable with the Min and Max Freq controls.
- Rotate LFO --
The same as the above, except the shifting rate oscillates via LFO
with its own Rate and Depth controls. Currently there are sine, triangle,
and square waveform shapes. The frequency range that the modulator affects
is definable with the Min and Max Freq controls.
- Value LFO --
Shifts the values up and down with an LFO. The depth control
here is percentage
of total value range. The frequency range that the modulator affects
is definable with the Min and Max Freq controls.
- Randomize --
Randomizes the bin values between the given value bounds
(as percentages of total range). Again, the frequency range
that the modulator affects is definable with the Min and Max Freq controls.
- JACK --
realtime low-latency audio interconnection and
delivery. JACK requires the
ALSA Linux sound drivers so you'll
need those too. If you haven't used JACK before
please study the Linux
Audio User Guide and make sure to read the
section on JACK.
- FFTW --
for speedy FFT processing (compiled as
single-precision). v2 and v3 supported.
(wxGTK) -- the GUI toolkit I've chosen to use.
It should work with versions at or above 2.6.x. I haven't tested with the 2.4.x
in a while.
-- this library is usually already on recent
systems, but if not get it and install it.
- Left button click/drag to draw filters. If Control
is down, the y-axis is fixed at the last cursor
location (to draw nice horizontal lines).
If Control and Alt are down you can draw nice
arbitrary straight lines.
- Right button drag to move filters around in
space. The filters
wrap around the left/right edges unless you hold down
Control. Dragging with both left and right buttons
down moves both primary and alternate together (on Gate).
- Holding Shift modifies the alternate filter (on
double filter graphs like Gate) for the previous
- Middle-button pops up frequency axis menu.
- Ctrl-Alt right-click resets a filter to default
- Shift-Ctrl-Alt Left-Drag zooms in on the y axis.
Look at the status bar to see the values for the cursor
itself and the values of the filter at the cursor's
frequency. Shift-Ctrl-Alt Right click-release resets
the Y-zoom to full.
- The B and BA buttons mean Bypass and Bypass All
- The L and LA buttons mean Link and Link All
- The G and GS buttons mean Toggle Grid and Toggle
Grid Snap respectively. The right button can be used on
the Grid buttons to choose the grid resolution.
Here is an example of using freqtweak with an alsaplayer feeding it
and output going to speakers (alsa_pcm:out_?) without using a JACK patchbay:
Start freqtweak first with this command line:
freqtweak -n ft &
Then start alsaplayer like so:
alsaplayer -o jack -d ft:in_1,ft:in_2 &
- MIDI/OSC control of filter and modulators
- non-GUI version
Please address questions, bugfixes, etc to the
The SourceForge project page is http://sourceforge.net/projects/freqtweak
Created by Jesse Chappell <jesse at essej dot net>
Last modified: Wed Jul 7 23:25:28 EDT 2004