-
Notifications
You must be signed in to change notification settings - Fork 4
/
README
195 lines (136 loc) · 8.1 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
FreqTweak - Realtime audio frequency spectral manipulation
Written by Jesse Chappell <[email protected]>
Please see the file COPYING for license details.
For building and installation instructions please see the INSTALL file.
**** Description ****
FreqTweak is a tool for 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 spectragrams 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.
**** Features ****
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 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 spectragram, 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 (unaltered) 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. Again, 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.
**** Requirements ****
* JACK [jackit.sf.net] -- providing realtime low-latency audio
interconnection and delivery. JACK requires the ALSA Linux sound
drivers so you'll need those too.
* FFTW [www.fftw.org] -- for speedy FFT processing
(compiled as single-precision) Supports v2 or v3.
* wxWindows (wxGTK) [www.wxwindows.org] -- the GUI toolkit I've
chosen to use. It should work with the most 2.2.x, 2.3.x, and 2.4.x.
* libsigc++ 1.2 -- this library is usually already on recent systems
but can be found at [ http://libsigc.sourceforge.net/ ]
**** Misc Usage Tips ****
* 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 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 operations.
* Middle-button pops up frequency axis menu.
* Ctrl-Alt right-click resets a filter to default values.
* 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 respectively.
* The L and LA buttons mean Link and Link All respectively.
**** 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 -i none,none -n ft &
[ you will see some jack errors, ignore them.. they are intentional ]
Start alsaplayer like so:
alsaplayer -o jack -d ft:in_1,ft:in_2 &
**** TODO ****
* Fix known bugs
* Support reordering of processing modules
* Automated filter modulation (via plugins?)
* Plot performance optimizations (OpenGL?)
* Whatever else the users want :)
==============================================================================
Jesse Chappell <[email protected]>
Last modified: Sat Oct 12 13:02:59 EDT 2002