Dynamic Vowel Transitions — User Guide

A time-varying source–filter synthesizer. It creates a harmonic or noise excitation, passes it through three moving resonances (F1, F2, F3), and turns the resulting spectral motion into a vowel-like transition.

Technique: Dynamic source–filter / formant synthesis Implementation: Praat FormantGrid Version: 1.1 (2026) License: MIT License
Contents:

What this does

Dynamic Vowel Transitions synthesizes a source first and then filters that source through a moving three-resonance vocal-tract model. The resonances follow trajectories labelled F1, F2, and F3. Changing their positions changes the spectral envelope and therefore the perceived vowel-like colour.

The essential signal path:
excitation → moving F1/F2/F3 resonances → one global RMS reference scalar → short edge fade → optional stereo rendering → output-level policy

This distinction matters: F1, F2, and F3 are not sine oscillators added to the output. They are resonance frequencies inside a time-varying FormantGrid. The source contains a harmonic spectrum or noise; the FormantGrid emphasizes spectral regions around the three resonances as they move.

The result is intentionally a compact synthetic vowel model rather than a complete speech synthesizer. It has three resonances with fixed bandwidths during a run, no consonant model, no articulatory geometry, and no automatic simulation of all details of a natural voice. Its strength is direct control of a clearly visible source–filter transition.

What F1, F2, and F3 mean here

In a source–filter view of speech, the source supplies acoustic energy and the vocal tract shapes that energy through resonances. Those resonances are commonly called formants. F1 and F2 carry much of the information that separates vowel qualities, while F3 contributes additional spectral character.

SOURCE harmonic excitation at F0 or Gaussian noise for whisper mode ↓ TIME-VARYING FILTER F1(t) first resonance F2(t) second resonance F3(t) third resonance ↓ VOWEL-LIKE OUTPUT

The script uses Praat's FormantGrid as the synthesis filter. Each resonance has both a frequency trajectory and a bandwidth. The default bandwidths are 70, 100, and 150 Hz for F1, F2, and F3 respectively, multiplied by Formant bandwidth scale.

Formant values are synthesis targets. They should not be interpreted as formant measurements extracted from a recorded speaker. The presets are deliberately useful synthesis configurations, and some — especially Formant Glissando and Extreme Formant Morph — are explicitly outside ordinary vowel behaviour.

Quick start

  1. Run Dynamic_Vowel_Transitions.praat. No input Sound is required.
  2. Choose a preset such as A to I, Whisper Morph, or Vowel Cycle.
  3. Set the duration and output sample rate.
  4. Choose a spatial mode. Start with Mono when you want to hear the source–filter behaviour without spatial movement.
  5. Choose the output-level policy. Reference RMS preserves the internally referenced result; Safety ceiling only turns down peaks above the ceiling; Peak normalize targets the ceiling peak.
  6. Enable Edit vowel/source details only when you need direct access to formants, source harmonics, breathiness, seed, bandwidth, fade, or ceiling.

Presets

Presets set the source and resonance configuration. They do not change the selected spatial mode, output-level mode, sample rate, visualization, or playback settings.

PresetResonance pathSourceBW scaleCharacter of the model
A to I730/1090/2440 → 270/2290/3010 HzF0 120 Hz, 18 harmonics, breath 0.041.00Two-point vowel transition.
I to U270/2290/3010 → 300/870/2240 HzF0 120 Hz, 18 harmonics, breath 0.041.00Strong F2 descent.
U to A300/870/2240 → 730/1090/2440 HzF0 120 Hz, 18 harmonics, breath 0.041.00Strong F1 rise.
A to E to IA → 530/1840/2480 → IF0 120 Hz, 18 harmonics, breath 0.041.00Three-point path; each segment is eased separately.
Vowel CycleA → I → U → AF0 120 Hz, 18 harmonics, breath 0.041.00Four-point closed path over the requested duration.
Formant Glissando200/600/1800 → 900/2800/4000 HzF0 110 Hz, 24 harmonics, breath 0.030.75Wide synthetic upward resonance sweep.
Whisper Morph600/1200/2400 → 400/1800/2800 HzGaussian noise; F0 = 01.35Noise-driven source–filter morph rather than voiced synthesis.
High-F0 Singing Morph550/1100/2350 → 350/2000/3000 HzF0 220 Hz, 26 harmonics, breath 0.0250.85Higher-pitched harmonic excitation; preset duration becomes 5 s.
Narrow-Band Robot Morph400/1200/2400 → 500/1500/2600 HzF0 100 Hz, 20 harmonics, breath 0.0050.60Narrower synthetic resonances and little noise.
Extreme Formant Morph150/3000/4500 → 800/1200/3500 HzF0 180 Hz, 28 harmonics, breath 0.060.55Deliberately extreme resonance movement.

How the transition moves

Most two-point presets use a half-cosine progress curve rather than a straight line:

progress(t) = 0.5 × [1 - cos(π × t / duration)] F(t) = Fstart + (Fend - Fstart) × progress(t)

This makes the movement start gently, move fastest near the middle, and settle gently at the end. It avoids the constant-speed glide described in the older guide.

A to E to I and Vowel Cycle divide the total duration into equal segments. Each adjacent vowel pair receives its own half-cosine interpolation. The script samples these trajectories densely enough to build the FormantGrid and to draw the same paths in the visualization.

What remains constant: formant bandwidths do not morph within a run. Only F1/F2/F3 frequencies move. Their bandwidths are fixed after the selected bandwidth scale and any global sample-rate headroom correction have been applied.

Excitation source

Voiced / harmonic source

When Fundamental Hz > 0, the source is a harmonic series. Harmonic h has frequency h × F0 and amplitude proportional to 1 / h^1.15. Only harmonics below the script's practical headroom limit of 0.45 × sample rate are included.

Breathiness crossfades the harmonic excitation with Gaussian noise:

source = harmonic × (1 - breathiness) + noise × breathiness

After that mixture is made, the entire source is scaled to a common RMS of 0.12. Therefore Breathiness primarily changes spectral/source character instead of silently acting as an overall gain control.

Whisper / noise source

When Fundamental Hz = 0, no harmonic oscillator bank is used. The source is Gaussian noise, then it is brought to the same RMS reference before filtering. The Whisper Morph preset uses this mode.

Random seed

Random seed = 0 uses the current unpredictable random state. A positive value reproduces the Gaussian component exactly for the same settings. After synthesis, the script restores Praat's unpredictable random initialization rather than leaving the global generator fixed.

Advanced vowel/source controls

The compact main form keeps the common controls visible. Enabling Edit vowel/source details opens a second page after the preset has already been applied, so the values shown there are the selected preset's values and can be fine-tuned.

ControlMeaning
Start / End F1, F2, F3Endpoints for two-point presets and Custom. The script requires 0 < F1 < F2 < F3 at both ends.
Formant bandwidth scaleMultiplies the base synthesis bandwidths 70 / 100 / 150 Hz.
Source harmonicsRequested harmonic count, 1–128. Harmonics above practical sample-rate headroom are simply not generated.
Breathiness0 = harmonic source only; 1 = Gaussian-noise component only when F0 is positive. The source is RMS-referenced afterwards.
Random seedControls the breath/noise realization; 0 = unpredictable.
Edge fadeShort linear fade at both outer edges, capped at 20% of duration. It is click protection, not a musical amplitude envelope.
Ceiling peakTarget used by Safety ceiling or Peak normalize; allowed range >0 to 1.
Sample-rate headroom: if the highest requested F3 exceeds 0.45 × sample rate, the script scales all formant frequencies and all three bandwidths by one common factor. This preserves their relative ordering and ratios better than clipping the resonances independently. The Info window reports when this correction occurs.

Spatial modes

ModeImplementationResult
MonoNo spatial processing.One-channel source–filter output.
Stereo VoiceLeft = original / √2. Right = a delayed copy / √2. Delay is min(4 ms, 2% of duration).Subtle interaural decorrelation without splitting formants into different frequency bands.
Rotating VoiceComplete vowel signal receives exact equal-power sinusoidal panning at 0.15 Hz.The whole source–filter result moves together; the formants are not separated spatially.
Transition PanEqual-power left-to-right pan from position 0.05 to 0.95 using the same half-cosine progress shape.Spectral transition and spatial transition progress together.

Unlike the older implementation, the current stereo modes do not create width by complementary spectral filtering. The complete vowel signal is preserved and spatialized as one signal.

Output level

Praat's Filter (no scale) leaves the raw gain of the FormantGrid untouched. Because an all-pole formant filter can add substantial gain, the script measures the filtered RMS once and applies one global scalar so that the filtered signal's reference RMS matches the source RMS before the short edge fade.

This is a single global gain correction, not time-varying normalization. It therefore preserves the relative intensity changes produced naturally by the moving resonances.
Output level modeWhat happens after spatialization
Reference RMSNo additional peak scaling. The earlier global source/filter reference scalar remains the only main level compensation.
Safety ceilingIf the measured peak exceeds the chosen ceiling, the entire output is attenuated to that ceiling. Quieter results are left unchanged.
Peak normalizeEvery non-zero result is scaled so its absolute peak equals the chosen ceiling.

With the default ceiling of 0.90, Safety ceiling is an attenuate-only limiter-like safety policy, whereas Peak normalize is target peak normalization.

Output propertyBehavior
ChannelsMono in Mono mode; stereo in the other three modes.
DurationRequested duration; High-F0 Singing Morph sets it to 5.0 s before optional detailed editing.
Sample rateUser-selected sample rate; synthesis occurs directly at that rate.
Namevowel_<preset name> with spaces replaced by underscores.

Visualization and QC

PanelWhat it actually shows
A — Synthesis Resonance TrajectoriesThe exact F1/F2/F3 paths written into the synthetic FormantGrid. Multi-vowel segment boundaries are also marked.
B — Actual ExcitationMeasured spectrum of the source before FormantGrid filtering.
C — Model → MeasurementMeasured output spectrogram with the exact synthesis trajectories overlaid, so model targets can be compared with the rendered spectrum.
D — Measured OutputWaveform of the final mono output or, for stereo, whichever channel has the higher RMS.

The QC block reports source type, F0/harmonic count when applicable, Breathiness and seed, the three synthesis bandwidths, any common formant-frequency scale, pre/post peak, final RMS, spatial mode, and output-level policy.

Further Reading