Harmonic Remover — User Guide
Pitch-tracked harmonic subtraction for removing selected components of voiced sound, isolating the tracked fundamental band, or emphasizing the non-harmonic residual.
What this does
Harmonic Remover tracks the fundamental frequency (F0) of a mono processing signal and removes selected harmonic regions from short overlapping frames. Each target is centred at harmonic number × F0. The selected region is isolated with Praat's Hann-band filter and subtracted from the current frame result.
The processor has four removal modes:
- Fundamental only — removes the tracked F0 band.
- Selected harmonic numbers — removes an explicit list such as
2,4,6. - Isolate F0 band — keeps only the tracked F0 band in voiced frames instead of subtracting it.
- Harmonics 1..N — removes the first N tracked harmonics.
Quick start
- Select exactly one Sound object in Praat. The sound must be at least 100 ms long.
- Run
Harmonic_Remover.praat. - Choose a preset, or choose Custom and select a removal mode.
- Set an appropriate pitch range for the source.
- Adjust the analysis window, removal bandwidth, amplitude threshold, and Wet/Dry amount if needed.
- Click OK. The result is created as
original_harmonicRemoved_PresetName.
Signal flow
Why the one-window padding?
The work signal is padded by one complete analysis window at both ends before framing. This keeps all retained source samples inside the stable overlap region and prevents frame-edge filter energy from being divided by very small overlap weights.
Overlap-add normalization
The script does not assume a fixed COLA divisor. A second buffer accumulates the actual Hanning-window contribution at every sample. After all frames are summed, the output is divided by this accumulated weight wherever it is non-zero. Quiet and unvoiced frames contribute their original windowed signal to the same overlap-add process.
Sequential harmonic subtraction
When several harmonics are removed, each new Hann-band isolation is calculated from the current frame result and then subtracted. This avoids repeatedly subtracting the same overlapping energy when neighbouring removal bands intersect.
Presets
| Preset | Mode | Targets / settings overridden |
|---|---|---|
| Custom | User-selected | Uses the values entered in the form. |
| Remove Fundamental (de-buzz) | Fundamental only | F0 only; N=8; ±50 Hz nominal band; 60 ms window. |
| Remove Odd Harmonics (3,5,7...) | Selected harmonics | 3, 5, 7, 9, 11; N=12 for display extent; ±50 Hz; 60 ms. |
| Remove Even Harmonics (2,4,6...) | Selected harmonics | 2, 4, 6, 8, 10; N=10; ±50 Hz; 60 ms. |
| Isolate Fundamental (F0 band only) | Isolate F0 band | Single tracked F0 band; ±60 Hz; 80 ms. N does not limit the audio processing. |
| Remove Harmonics 1..N | Harmonics 1..N | N=12; ±60 Hz; 80 ms. |
| Remove High Harmonics (warm/mellow, keep 1-3) | Selected harmonics | 4 through 12; ±40 Hz; 60 ms. |
Parameters
Removal controls
| Parameter | Default | Behavior |
|---|---|---|
| Removal_mode | Fundamental only | Chooses fundamental removal, selected harmonics, F0 isolation, or harmonics 1..N. |
| Harmonic_numbers | 2,4,6 | Used in Selected harmonic numbers mode. Accepts integers 1–20 separated by commas, semicolons, or spaces. Duplicate entries are ignored. |
| Number_of_harmonics | 8 | N for Harmonics 1..N; clamped to 1–20. In Selected mode it does not restrict explicitly listed harmonics, but contributes to visualization extent. |
Pitch tracking
| Parameter | Default | Behavior |
|---|---|---|
| Pitch_floor | 75 Hz | Lower bound for Praat's pitch tracker. |
| Pitch_ceiling | 600 Hz | Upper bound. It must be above the floor and below Nyquist. |
Pitch is measured on the padded mono work signal with a 10 ms time step. If no voiced frames are detected, the script stops instead of producing an unprocessed output.
Frame and removal settings
| Parameter | Default | Range / meaning |
|---|---|---|
| Analysis_window_ms | 60 ms | Clamped to 20–200 ms. Hop is always one quarter of the window, giving 75% overlap. |
| Notch_bandwidth_Hz | 60 Hz | Clamped to 5–200 Hz. It is the nominal half-width around each tracked harmonic. Praat's Hann-band transition extends beyond the nominal pass region. |
| Min_amplitude_dB | -50 dB | Frame RMS threshold measured before windowing, referenced to amplitude 1. Frames below it pass through without harmonic processing. |
Output controls
| Parameter | Default | Behavior |
|---|---|---|
| Wet_dry_percent | 100 | Clamped to 0–100. 100 = processed path only; 0 = mono dry processing signal only. |
| Normalize_peak_to | 0.95 | Final peak target whenever Wet > 0. At exactly 0% Wet this normalization is skipped for an exact dry-path bypass. |
| Draw_visualization | On | Draws the suite-standard diagnostic page. It may be disabled without affecting audio processing. |
| Play_result | On | Plays the final Sound after processing. |
Audio and output behavior
Mono processing
The processor always works in mono. A multichannel input is converted to mono before pitch analysis and harmonic processing, and the output is therefore a one-channel Sound. A mono input remains mono.
Duration, sample rate, and time domain
The output keeps the source sample rate and source duration. Processing is performed on a zero-based padded work copy, and the source start time (xmin) is restored to the finished Sound after visualization.
Final level
If Wet_dry_percent > 0, the final result is peak-normalized to Normalize_peak_to (0.95 by default). This normalization can either attenuate or raise the result depending on its pre-normalization peak. At exactly 0% Wet, peak normalization is skipped.
Determinism
The script contains no random process or random seed. Re-running it on the same Sound with the same settings produces the same processing decisions.
Output name and cleanup
The retained object is named original_harmonicRemoved_PresetName. Analysis frames, pitch data, padding buffers, overlap-normalization buffers, and visualization-only objects are removed before the script finishes.
Visualization
When Draw_visualization is enabled, the 8-inch Praat Picture page contains:
- Input waveform — the mono processing signal.
- Output waveform.
- Input and output spectrograms — displayed from 0 to 5 kHz.
- Removal-band diagram — drawn at the source's median tracked F0. Removed harmonics are shown in red and kept harmonics in green.
- F0-isolation diagram — in Isolate F0 mode, the kept F0 region is shown in green and the rejected spectrum outside it in red.
- Summary strip — mode, display harmonic count, nominal removal bandwidth, window size, median F0, processed voiced-frame count, Wet/Dry amount, and processing time.
Notes and limitations
- Voicing is required. If Praat detects no voiced frames within the selected pitch range, processing stops.
- Quiet and unvoiced regions are preserved. They enter the overlap-add reconstruction unmodified rather than being forced to zero.
- Isolate F0 is voiced-frame selective. It keeps the tracked F0 band in voiced frames, but quiet or unvoiced frames still pass through unchanged.
- Harmonics near Nyquist are skipped. A target must remain safely below the upper spectral edge before a Hann-band operation is attempted.
- Bandwidth is nominal.
Notch_bandwidth_Hzdefines the centre region around each target, while the Hann transition adds a smooth surrounding transition. - Pitch errors move the target bands. Incorrect F0 tracking can remove the wrong spectral regions; set Pitch_floor and Pitch_ceiling for the material.
- Processing cost grows with frames and targets. Longer files, smaller windows, and larger harmonic sets require more Hann-band filter operations.