Frequency Shifter — User Guide

Moves every spectral component by the same number of hertz using single-sideband frequency shifting.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.5.1 (2026) License: MIT License Repo: Praat AudioTools
Contents:

What this does

Frequency Shifter moves every frequency component up or down by a fixed amount in hertz. A 440 Hz component shifted by +100 Hz moves to 540 Hz; a 1000 Hz component moves to 1100 Hz. The spacing between harmonics therefore changes, which can turn harmonic material into metallic, bell-like, robotic or strongly inharmonic spectra.

This is different from conventional pitch shifting. A pitch shifter multiplies frequencies by a ratio, so an octave up maps 440 Hz to 880 Hz and 880 Hz to 1760 Hz. This tool instead adds the same number of hertz to every component.

The processor uses single-sideband modulation built from the original signal and its Hilbert-transform quadrature component. Processing is performed in overlapping Hann-windowed grains and reconstructed with weighted overlap-add. All input channels are processed and preserved.

Quick start

  1. In Praat, select exactly one Sound.
  2. Run Frequency Shifter.praat.
  3. Choose a preset, or use Custom and set Shift_hz, Direction and Dry_wet_mix.
  4. For upward shifts, consider enabling Pre_limit_to_avoid_aliasing when important source energy extends close to Nyquist.
  5. Choose the desired output-level behavior, then click OK.
Useful starting point: small shifts mixed with the dry signal create detuning and thickening; larger shifts at high wet values expose the characteristic inharmonic frequency-shifter sound.

Presets

PresetShiftDry/WetCharacter
CustomUses the form valuesUses the form valueManual control.
Subtle Detune (15 Hz)+15 Hz25% wetSmall frequency offset blended under the source.
Chorus Thick (8 Hz)+8 Hz40% wetSlow beating and spectral thickening.
Metallic Ring (200 Hz)+200 Hz100% wetClearly inharmonic, metallic transformation.
Robot Voice (150 Hz)+150 Hz80% wetStrong inharmonic vocal coloration with some dry structure retained.
Horror Alien (666 Hz)+666 Hz100% wetLarge spectral displacement.
Deep Sub (-100 Hz)−100 Hz70% wetDownward shift with low-frequency reflection when components cross 0 Hz.
Bell Shimmer (1200 Hz)+1200 Hz80% wetLarge upward shift; aliasing protection becomes especially relevant.

Presets set the shift, direction and Dry/Wet amount. The anti-alias pre-limit, output-level mode, ceiling, visualization and playback choices remain under the user's control.

Parameters

ControlDefaultWhat it changes
PresetCustomSelects one of the prepared shift/mix combinations above.
Shift_hz100Magnitude of the fixed frequency displacement in hertz. The selected Direction determines its sign.
DirectionUpUp makes the shift positive; Down makes it negative.
Dry_wet_mix1.00 = original signal only; 1 = shifted signal only. Intermediate values blend the two.
Pre_limit_to_avoid_aliasingOffFor upward shifts, low-passes the wet source only before shifting so energy that would cross Nyquist is reduced. It never filters the dry path.
Output_level_modeNatural levelChooses whether the result keeps its natural level, is attenuated by a safety ceiling, is matched to the input RMS, or is peak-normalized.
Ceiling_peak0.95Peak target used by Safety ceiling and Peak normalize.
Draw_visualizationOnDraws the original and shifted spectrograms plus a processing summary.
Play_after_processingOnPlays the result after processing. If the stored output exceeds 1.0, playback uses a temporary scaled copy; the stored Sound is not changed.

The script requires a shift magnitude smaller than Nyquist. With the standard internal 100 ms grain and 50 ms hop, the selected Sound must be at least about 150 ms long.

How the shift works

For the wet signal, each overlapping grain is converted into an analytic-style pair: the original grain and a 90° quadrature version produced with a Hilbert transform. They are combined with a sinusoidal carrier whose phase follows global time. The result keeps one modulation sideband and suppresses the other, producing a true fixed-Hz frequency displacement rather than ring-modulation sidebands.

output frequency ≈ input frequency + signed shift

Grains are Hann-windowed on analysis and again on synthesis. A Hann² weight buffer is used during overlap-add so the reconstructed level remains stable across grain boundaries. The padded result is then trimmed back to the original sample span.

The same signed shift is applied independently to every channel. Channel count, sample rate and duration are preserved, and the original Sound start time is restored before the final object is named.

Aliasing and low-frequency reflection

Upward shifts

An upward shift can push source components beyond Nyquist. Without protection, those components fold back into the audible spectrum as aliases. The boundary is approximately:

highest safe source frequency = Nyquist − shift

If Pre_limit_to_avoid_aliasing is enabled and more than 100 Hz remains below Nyquist, the wet source is low-passed at that boundary before it enters the shifter. The dry signal remains untouched, so 0% wet at Natural level is a true sample-for-sample bypass.

If the requested upward shift leaves 100 Hz or less below Nyquist, there is not enough room for the script's pre-filter transition. In that case the script reports that the pre-limit is unavailable and aliasing can remain.

Downward shifts

A downward shift does not encounter the Nyquist boundary in the same way, but components that cross 0 Hz cannot remain at negative physical frequency. They reflect back upward. For example, 440 Hz shifted by −666 Hz appears at 226 Hz. This low-frequency reflection is part of the frequency-shifting operation, not pitch transposition.

Visualization

When enabled, the Picture window shows:

For multichannel Sounds, the spectrograms display one real input channel chosen by highest RMS rather than folding channels to mono. This avoids a misleading display when channels contain anti-phase material. The audio processing itself still preserves and processes every channel.

Output behavior

Output level modes

ModeBehavior
Natural levelNo automatic gain change after the frequency shift and Dry/Wet mix.
Safety ceilingAttenuates only when the result exceeds Ceiling_peak; otherwise leaves the level unchanged.
Match input RMSScales the final result so its RMS matches the input RMS. This mode does not subsequently enforce the safety ceiling.
Peak normalizeScales every non-silent result so its peak equals Ceiling_peak.

If Natural level, Safety ceiling or Match input RMS leaves a stored peak above 1.0, the script reports a clipping warning. Playback uses a temporary 0.95-peak copy in that situation, while the stored result remains unchanged.