Dynamic Spectral Tremolo — User Guide

A static frequency-domain comb-colour processor whose gain oscillates across frequency rather than over time.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.5 (2026) License: MIT License Repo: https://github.com/ShaiCohen-ops/Praat-plugin_AudioTools
Contents:

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.

g(f) = g_min + depth · cos²(πf / spacing) for f < cutoff g(f) = high_gain for f ≥ cutoff

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.

Why the name can mislead: conventional tremolo is amplitude modulation over time. Here the modulation axis is frequency. A sustained sound therefore does not pulse in level; instead its partials are alternately retained and attenuated according to their spectral locations.

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.

Static, not swept: even the preset named Spectral Sweep does not move a filter through time. It uses a wide, dense static spectral pattern.

Quick start

  1. Select exactly one mono or stereo Sound.
  2. Run Dynamic_Tremolo_Effect.praat.
  3. Choose a preset; start with Classic Tremolo.
  4. For full source bandwidth, keep Full Quality.
  5. Use Spectral_spacing_Hz to control how closely the spectral peaks repeat.
  6. Run the script and compare the measured spectrum with the plotted gain law.

Presets

PresetCutoffGain below cutoffSpacingHigh-band gain
Classic Tremolo8000 Hz0.3…1.0π×500 ≈ 1570.8 Hz0.8
Deep Tremolo8000 Hz0.2…1.1π×400 ≈ 1256.6 Hz0.7
Subtle Shimmer10000 Hz0.5…0.8π×600 ≈ 1885.0 Hz0.9
Fast Flutter6000 Hz0.3…0.9π×150 ≈ 471.2 Hz0.8
Slow Pulse8000 Hz0.2…1.0π×1000 ≈ 3141.6 Hz0.85
High Cut Tremolo4000 Hz0.4…0.9π×500 ≈ 1570.8 Hz0.4
Bass Wobble2000 Hz0.2…1.0π×300 ≈ 942.5 Hz1.0
Spectral Sweep12000 Hz0.1…1.0π×800 ≈ 2513.3 Hz0.6

Controls

ControlDefaultMeaning
PresetCustomLoads one of eight fixed spectral-colour configurations.
Speed_modeFull QualityFull 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_Hz8000Upper boundary of the comb-shaped region; effective cutoff is limited to working Nyquist.
Minimum_gain0.3Gain at the comb troughs; zero is legal.
Modulation_depth0.7Amount added at comb peaks; zero disables the comb variation.
Spectral_spacing_Hz1570.796327Peak-to-peak spacing of the spectral gain comb.
High_freq_gain0.8Constant gain above the effective cutoff; zero is legal.
Output_peak0.9Final target peak for every non-silent result; valid range >0…1.
Draw_visualization / Play_resultOn / OnDraws the diagnostic figure and optionally plays the result.

Processing pipeline

  1. Reject inputs with more than two channels.
  2. For stereo, extract L and R and process them independently; mono is processed once.
  3. If Balanced or Fast is selected and the source rate is higher than the target, resample the working channel(s) downward.
  4. Transform the entire working channel to a complex Spectrum.
  5. Multiply every complex bin by the exact frequency-dependent gain law.
  6. Inverse-transform, trim FFT padding back to the working duration, then resample to the original sample rate if required.
  7. Recombine stereo channels and apply one joint final peak scaling.

Channels, duration, bandwidth and level

Output name: <source>_spectralTremolo_<preset>.

Visualization

The figure is designed to verify the spectral mechanism:

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.