Dynamic Spectral Tremolo — User Guide
A static frequency-domain comb-colour processor whose gain oscillates across frequency rather than over time.
What this does
Dynamic Spectral Tremolo is a frequency-domain colour processor. Despite the word tremolo, its gain does not oscillate over time. Instead, one static gain curve oscillates across frequency below a cutoff; above the cutoff, a constant gain is used.
The whole file is transformed to a complex spectrum, the real and imaginary parts of every FFT bin are multiplied by the same frequency-dependent gain, and the signal is reconstructed. The result is a comb-like spectral colour whose spacing is specified directly in hertz.
What is spectral tremolo?
A useful way to read the effect is as a static spectral comb. Spectral spacing is the peak-to-peak distance between gain maxima. Minimum gain sets the troughs, while Modulation depth raises the peaks above that floor. The maximum gain below the cutoff is therefore Minimum_gain + Modulation_depth.
The cutoff divides the spectrum into two behaviours. Below it, the comb law is active. At and above it, all retained bins receive High_freq_gain. If the requested cutoff lies above the working Nyquist frequency, the effective cutoff becomes Nyquist, so the comb covers the entire retained band.
Quick start
- Select exactly one mono or stereo Sound.
- Run
Dynamic_Tremolo_Effect.praat. - Choose a preset; start with Classic Tremolo.
- For full source bandwidth, keep Full Quality.
- Use Spectral_spacing_Hz to control how closely the spectral peaks repeat.
- Run the script and compare the measured spectrum with the plotted gain law.
Presets
| Preset | Cutoff | Gain below cutoff | Spacing | High-band gain |
|---|---|---|---|---|
| Classic Tremolo | 8000 Hz | 0.3…1.0 | π×500 ≈ 1570.8 Hz | 0.8 |
| Deep Tremolo | 8000 Hz | 0.2…1.1 | π×400 ≈ 1256.6 Hz | 0.7 |
| Subtle Shimmer | 10000 Hz | 0.5…0.8 | π×600 ≈ 1885.0 Hz | 0.9 |
| Fast Flutter | 6000 Hz | 0.3…0.9 | π×150 ≈ 471.2 Hz | 0.8 |
| Slow Pulse | 8000 Hz | 0.2…1.0 | π×1000 ≈ 3141.6 Hz | 0.85 |
| High Cut Tremolo | 4000 Hz | 0.4…0.9 | π×500 ≈ 1570.8 Hz | 0.4 |
| Bass Wobble | 2000 Hz | 0.2…1.0 | π×300 ≈ 942.5 Hz | 1.0 |
| Spectral Sweep | 12000 Hz | 0.1…1.0 | π×800 ≈ 2513.3 Hz | 0.6 |
Controls
| Control | Default | Meaning |
|---|---|---|
| Preset | Custom | Loads one of eight fixed spectral-colour configurations. |
| Speed_mode | Full Quality | Full Quality uses the source rate. Balanced can render at 22.05 kHz (11.025 kHz Nyquist); Fast can render at 11.025 kHz (5.5125 kHz Nyquist). Downsampling happens only when the source rate exceeds the selected render rate. |
| Low_freq_cutoff_Hz | 8000 | Upper boundary of the comb-shaped region; effective cutoff is limited to working Nyquist. |
| Minimum_gain | 0.3 | Gain at the comb troughs; zero is legal. |
| Modulation_depth | 0.7 | Amount added at comb peaks; zero disables the comb variation. |
| Spectral_spacing_Hz | 1570.796327 | Peak-to-peak spacing of the spectral gain comb. |
| High_freq_gain | 0.8 | Constant gain above the effective cutoff; zero is legal. |
| Output_peak | 0.9 | Final target peak for every non-silent result; valid range >0…1. |
| Draw_visualization / Play_result | On / On | Draws the diagnostic figure and optionally plays the result. |
Processing pipeline
- Reject inputs with more than two channels.
- For stereo, extract L and R and process them independently; mono is processed once.
- If Balanced or Fast is selected and the source rate is higher than the target, resample the working channel(s) downward.
- Transform the entire working channel to a complex Spectrum.
- Multiply every complex bin by the exact frequency-dependent gain law.
- Inverse-transform, trim FFT padding back to the working duration, then resample to the original sample rate if required.
- Recombine stereo channels and apply one joint final peak scaling.
Channels, duration, bandwidth and level
- Input: mono or stereo only.
- Output channels: preserved: mono stays mono; stereo stays stereo.
- Stereo: L/R are transformed independently with the same gain law, avoiding Praat's multichannel Spectrum averaging.
- Duration: preserved.
- Output sample rate: restored to the source sample rate after any speed render.
- Bandwidth: Balanced and Fast are deliberate bandwidth reductions when downsampling is actually used; they are not transparent speed switches.
- Level: every non-silent result is target-normalized to
Output_peak. Therefore a neutral/custom spectral setting is not an amplitude-identical bypass.
Output name: <source>_spectralTremolo_<preset>.
Visualization
The figure is designed to verify the spectral mechanism:
- Source / output waveforms: shown on one shared amplitude scale.
- Measured spectrum: source and processed spectrum of the same representative channel, with the effective cutoff marked.
- Gain law: the exact
cos²spectral comb, including cutoff and high-band gain. - Stereo source selection: the stronger original channel is used for the measured comparison rather than L/R averaging, avoiding anti-phase cancellation in the display.
Terminology and compositional context
Traditional tremolo is one of the oldest amplitude gestures in instrumental and electronic practice: loudness rises and falls through time. This processor takes the same idea of alternating emphasis and moves it onto the frequency axis. The result belongs more naturally to spectral filtering and timbral composition than to time-domain tremolo.
Because the gain comb is fixed for the whole file, the musical result depends strongly on the source spectrum. Harmonic sounds can have selected partial regions emphasized or suppressed, while noisy or broadband material exposes the comb as a more continuous colour. In that sense, the source itself “plays” the spectral pattern.