Time-Varying PSOLA Vibrato — User Guide
Per-channel PSOLA vibrato whose rate and depth evolve linearly across the Sound. The changing rate is integrated to phase, so acceleration and deceleration remain phase-continuous.
What this does
Time-Varying PSOLA Vibrato modifies the pitch contour of the selected Sound so that vibrato rate and vibrato depth can each move from a start value to an end value across the complete source duration. Rate and depth evolve independently and linearly, enabling acceleration, deceleration, depth swells, depth fades, or combinations of these movements.
The processing is performed with Praat Manipulation and PitchTier objects. Each input channel is analyzed and resynthesized separately, so mono, stereo, and multichannel layouts are preserved.
Time_Varying_Spectral_Vibrato.praat, but v0.5 performs no spectral analysis. The active algorithm is PSOLA/PitchTier pitch modification.Processing pipeline
Signal flow
The pitch modification is calculated from local source time, τ = x − sourceStart. Moving an otherwise identical Sound to a different Praat start time therefore does not change the vibrato trajectory.
Rate & depth evolution
Both controls are linear functions of local time over the complete Sound duration T.
Integrated phase
Because rate can change continuously, phase is not calculated as 2π × rate(τ) × τ. Instead, v0.5 integrates the linear rate trajectory:
This gives a phase-continuous oscillation whose instantaneous rate is the specified linear rate curve.
Pitch deviation in semitones
The PitchTier frequency value at each time is multiplied by this ratio. A positive deviation raises the tracked pitch and a negative deviation lowers it by the corresponding equal-tempered semitone amount.
PSOLA / PitchTier processing
Each mono channel is converted to a Praat Manipulation object with a 10 ms time step. The script extracts its PitchTier, applies the vibrato ratio directly to the tier, replaces the modified tier in the Manipulation object, and obtains the result with overlap-add resynthesis.
Adaptive pitch-analysis bounds
The normal analysis floor is 75 Hz. The ceiling is:
At low sample rates, if that ceiling becomes too close to 75 Hz, the floor is reduced to maintain a usable analysis range:
This keeps the requested pitch-analysis band safely below Nyquist while retaining the original 75–600 Hz range when the sample rate permits it.
Presets
| Preset | Rate evolution | Depth evolution |
|---|---|---|
| Custom | 4.0 → 8.0 Hz by default | 0.1 → 0.1 st by default |
| Ramp Up (Accelerating) | 2.0 → 10.0 Hz | 0.2 → 0.2 st |
| Slow Down (Decelerating) | 12.0 → 0.5 Hz | 0.3 → 0.5 st |
| Swell (Fade-In Depth) | 5.0 → 5.0 Hz | 0.0 → 1.0 st |
| Fade Out (Dying Wobble) | 6.0 → 3.0 Hz | 0.5 → 0.0 st |
| Nervous Shiver (Fast & Shallow) | 8.0 → 12.0 Hz | 0.1 → 0.1 st |
| Opera Finale (Wide & Slowing) | 5.5 → 4.0 Hz | 0.3 → 1.5 st |
Parameters
| Parameter | Default | Meaning | Runtime handling |
|---|---|---|---|
| Start Rate Hz | 4.0 | Vibrato rate at the beginning of the Sound. | Clamped to 0…50 Hz. |
| End Rate Hz | 8.0 | Vibrato rate at the end of the Sound. | Clamped to 0…50 Hz. |
| Start Depth ST | 0.1 | Peak vibrato depth at the beginning. | Clamped to 0…24 semitones. |
| End Depth ST | 0.1 | Peak vibrato depth at the end. | Clamped to 0…24 semitones. |
| Dry/Wet percent | 100 | Linear blend between original and PSOLA-processed result. | Clamped to 0…100%. |
| Safety peak | 0.99 | Maximum allowed peak after active processing. | Clamped to 0…1; 0 disables safety; attenuation only. |
| Draw visualization | yes | Draws the AudioTools figure. | Does not alter audio. |
| Play result | yes | Plays the completed Sound. | Does not alter audio. |
Channels & output
Every input channel is processed independently through its own Manipulation/PitchTier analysis and resynthesis. No mono fold-down is used and no audio is cross-fed between channels.
| Property | Behavior |
|---|---|
| Mono | Processed as one channel and returned as mono. |
| Stereo / multichannel | Each channel is processed independently and the original channel count is restored. |
| Sample rate | Preserved. |
| Duration / sample grid | Resynthesis follows the original Sound time domain. |
| Start time | Preserved; vibrato calculations use local time. |
| Randomness | None. |
Dry/Wet
At 100% the result is the PSOLA-resynthesized signal. At intermediate values, it is linearly mixed with the corresponding original channel.
Exact bypass
The script copies the source without PSOLA processing when Dry/Wet = 0% or when both Start Depth and End Depth are 0 semitones. Safety Peak is skipped on this bypass path.
Safety Peak
For active processing, the output peak is measured after Dry/Wet mixing. Only if that peak exceeds Safety Peak is the complete result scaled down. Quiet material is never raised.
Visualization
v0.5 uses the standardized AudioTools layout:
Input
Original waveform.
Output
Final waveform after Dry/Wet and any required safety attenuation.
Rate evolution
The linear Start Rate → End Rate trajectory, with start/end labels.
Depth evolution
The linear Start Depth → End Depth trajectory in semitones.
Pitch-deviation trajectory
A full-width panel plots the actual mathematical vibrato deviation
in semitones over the complete Sound. The drawing uses 500 points; this is a visualization of the control law, not the temporal resolution of the PitchTier itself.
Summary
The bottom strip reports rate evolution, depth evolution, Wet percentage, duration, channel count, and final peak.