Exponential Pitch Glide — User Guide

Applies a deterministic time-varying transposition to the detected source pitch contour, with selectable upward or downward direction and an exponential glide shape.

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

What this does

Exponential Pitch Glide analyzes the source F0 once from a mono reference, then applies a deterministic transposition curve to that detected contour. The original melodic or prosodic pitch movement is therefore retained: at every voiced control point, the target F0 is the detected source F0 multiplied by the current glide ratio.

The glide can move up or down. Its nominal endpoint is exactly the requested Semitones_change, unless individual target points must be limited for sampling safety. The processed sound keeps the source duration, sampling frequency, start/end times, and channel count.

Source material: The effect requires usable periodic/voiced pitch. If Praat cannot obtain a median F0 or the control grid produces no usable pitch points, the script stops instead of inventing a fallback pitch.

Quick start

  1. Select exactly one Sound object in Praat.
  2. Run Exponential_Glide_Up.praat.
  3. Choose one of the ten presets, or leave Manual (configure below).
  4. For Manual, choose Direction, set Semitones_change, and shape the curve with Curve_steepness.
  5. Set the Praat pitch-analysis range with Minimum_pitch and Maximum_pitch. Time_step controls pitch analysis only; the glide control grid itself is fixed at 10 ms.
  6. Optionally enable Draw_visualization and Play_result, then run the script.

Glide curve

Normalized time is u = (t - start) / duration. For Curve_steepness > 0.001, the script uses:

shape(u) = (1 - exp(-k·u)) / (1 - exp(-k)) semitone_shift(u) = direction_sign × Semitones_change × shape(u) direction_sign = +1 for Up, -1 for Down

The curve is normalized so that shape(0)=0 and shape(1)=1. For Curve_steepness at or below 0.001, the script uses the linear fallback shape(u)=u.

Meaning of steepness: positive values create a fast initial change followed by progressively slower change. Increasing Curve_steepness makes more of the total transposition happen earlier in the sound. A value of 0 gives a linear glide.

At each voiced control time:

target_F0(t) = source_F0(t) × 2^(semitone_shift(t)/12)

This is a transposition of the detected source contour, not a replacement contour built around one constant reference frequency.

Presets

Choosing a preset overrides only Direction, Semitones_change, and Curve_steepness. Pitch-analysis settings and output switches remain as entered in the form.

PresetDirectionChangeSteepness
Gentle Glide UpUp5 st2
Moderate RiseUp8 st3
Dramatic Sweep UpUp12 st4
Extreme RocketUp24 st6
Slow BuildUp6 st1
Quick JumpUp4 st8
Cinematic RiseUp18 st2.5
Gentle Glide DownDown5 st2
Dramatic FallDown12 st4
Dive BombDown24 st6

Parameters

ParameterDefaultWhat it controls
PresetManualSelects Manual or one of ten fixed glide configurations.
DirectionUpSets the sign of the semitone change. Used directly in Manual mode and overridden by non-Manual presets.
Semitones_change7Positive magnitude of the nominal final transposition. Direction determines whether it is added or subtracted.
Curve_steepness3Must be ≥ 0. Zero is linear; larger positive values concentrate more pitch change near the beginning.
Time_step0.005 sPraat pitch-analysis time step used for the mono analysis reference and each channel Manipulation object. It does not set the glide-control spacing.
Minimum_pitch50 HzLower bound for Praat pitch analysis.
Maximum_pitch900 HzUpper bound for pitch analysis; it must be below Nyquist.
Draw_visualizationYesDraws the source/result waveforms, semitone glide curve, curve-shape comparison, and summary strip.
Play_resultYesPlays the final Sound after processing.

Processing & output

Analysis and control grid

If the input has more than one channel, the script creates a mono analysis reference. Pitch is detected from that reference using the user-specified Time_step, Minimum_pitch, and Maximum_pitch. The median detected F0 is reported only as diagnostic information; it is not used as the pitch target.

The glide is sampled on a fixed 10 ms control grid, with an exact point at the sound endpoint. Only times with a usable detected source F0 contribute target points.

Target-pitch safety

The transposed target F0 is limited to 20 Hz through 0.45 × source sample rate. These are rendering-safety limits and are separate from the user-defined pitch-analysis range. The Info window reports how many control points were limited.

Channels and resynthesis

The original channel count is preserved. Every source channel is extracted and converted independently to a Praat Manipulation object, but all channels receive the same target PitchTier derived from the mono pitch analysis. Each channel is then resynthesized with Get resynthesis (overlap-add) and copied back into the matching channel of a new output Sound.

The output is created directly with the source start time, end time, duration, sample rate, and number of channels. Its name is <source>_glideUp or <source>_glideDown.

Final level

Peak handling is attenuation-only. If the final absolute extremum exceeds 0.95, the script applies Scale peak: 0.95. Quieter results are left unchanged; they are not normalized upward.

Visualization

When Draw_visualization is enabled, the Picture window contains:

The glide curve is decimated only for drawing when necessary; the DSP uses the full 10 ms control grid. The visualization decimation always retains the exact endpoint.