Time Manipulation — User Guide
Pitch-preserving PSOLA time scaling with optional cascaded low-pass spectral blur and a mono-to-stereo widening stage based on channel filtering plus a delayed right channel.
What this does
Time Manipulation first converts the selected Sound to a mono processing copy, then changes its duration with Praat Manipulation and a constant DurationTier. Optional filtering can progressively darken the result, and the stereo-width stage can create a new two-channel output from the processed mono signal.
selected Sound
→ mono processing copy
→ PSOLA / DurationTier time scaling
→ optional high-pass + low-pass + cascaded low-pass blur
→ optional pseudo-stereo:
L = filtered body
R = differently filtered body + leading delay
→ target peak 0.99
Quick start
- Select exactly one Sound object.
- Run
Time_Manipulation.praat. - Choose Custom or one of the six named presets.
- Set Duration_factor: values above 1 lengthen the sound; values below 1 shorten it.
- Use Blur_amount and the filter cutoffs to control spectral darkening.
- Enable Create_stereo_width to create the delayed/filter-differentiated stereo result.
- Set Min_pitch and Max_pitch for Praat's Manipulation analysis.
- Run. The result is named
<source>_stretched_<factor>x.
Pitch-preserving time scaling
The main duration transformation uses:
To Manipulation:
time step = 0.01
minimum pitch = Min_pitch
maximum pitch = effective Max_pitch
Create DurationTier
Add point at start: Duration_factor
Add point at end: Duration_factor
Replace duration tier
Get resynthesis (overlap-add)
The effective upper pitch limit is:
safeMaxPitch =
min(
Max_pitch,
0.45 × sampleRate
)
Duration_factor is a relative duration factor:
| Factor | Behavior |
|---|---|
| < 1 | Shorter output; faster temporal progression. |
| 1 | Nominal original duration. |
| > 1 | Longer output; slower temporal progression. |
The transformation is intended to alter duration while retaining the pitch contour through Praat's Manipulation resynthesis rather than by changing playback sample rate.
Spectral blur
Blur is enabled whenever Blur_amount > 0. The number of additional blur passes is:
blurPasses =
floor(Blur_amount)
Initial band limiting
The stretched signal first passes through:
- a Hann-band high-pass from effectiveHighpass upward;
- a Hann-band low-pass from 0 to effectiveLowpass.
The effective low-pass is Nyquist-safe:
effectiveLowpass =
min(
Lowpass_frequency,
0.49 × sampleRate
)
Cascaded low-pass passes
Each additional pass lowers the cutoff according to:
passCutoff =
effectiveLowpass
× (1 - 0.15 × passIndex)
The cutoff is not allowed to fall below:
cutoffFloor =
min(
effectiveLowpass,
effectiveHighpass + 100
)
Stereo width stage
When Create_stereo_width is enabled, the processed mono Sound is copied into independent left and right branches.
Channel filtering
If Stereo_detune_amount is positive, it changes the low-pass cutoff differently on the two sides:
leftCutoff =
effectiveLowpass
× (1 - 0.10 × Stereo_detune_amount)
rightCutoff =
effectiveLowpass
× (1 + 0.05 × Stereo_detune_amount)
The cutoffs are constrained against the high-pass boundary and the Nyquist-safe ceiling.
Right-channel delay
The right channel receives actual leading silence:
delay =
Stereo_delay_ms / 1000
R =
silence(delay)
+ rightBody
The left channel is padded with trailing silence to the same duration. L and R are then explicitly combined in that order.
This creates a delay/filter-based pseudo-stereo field. It is not panning, chorus modulation, or preservation of the source stereo image.
Presets
| Preset | Duration | Blur | Other overrides |
|---|---|---|---|
| Normal Speed | 1.0× | 0 | Stereo width off. |
| Slow Motion | 1.5× | 1 | Low-pass 10 kHz. |
| Time Lapse | 0.75× | 0 | Stereo width off. |
| Ambient Stretch | 2.0× | 3 | Low-pass 7 kHz; stereo width on. |
| Paulstretch-like | 4.0× | 5 | Low-pass 6 kHz; stereo width on. |
| Extreme Drone | 8.0× | 7 | Low-pass 5 kHz; high-pass 100 Hz; stereo width on; delay 25 ms. |
Named presets overwrite only the fields explicitly listed by the script. Unspecified controls retain the values entered in the form. In particular, Slow Motion does not explicitly change Create_stereo_width, Stereo_delay_ms, Stereo_detune_amount, the PSOLA pitch range, visualization, or playback.
Parameters
| Parameter | Default | Exact role |
|---|---|---|
| Preset | Custom | Custom plus six named configurations. |
| Duration_factor | 4.0 | Constant relative-duration factor written into the DurationTier; must be greater than zero. |
| Blur_amount | 3 | Positive field; floor(value) gives the number of cascaded low-pass passes. Blur is active whenever the value is above zero. |
| Lowpass_frequency | 8000 Hz | Upper spectral boundary, capped internally at 0.49 × sample rate. |
| Highpass_frequency | 80 Hz | Lower spectral boundary when blur is active. |
| Create_stereo_width | On | Create new stereo from the mono processed signal. |
| Stereo_delay_ms | 15 ms | Leading delay added to the right channel. |
| Stereo_detune_amount | 0.5 | Controls asymmetric L/R low-pass cutoffs; it does not alter pitch. |
| Min_pitch | 75 Hz | Lower Manipulation pitch-analysis bound. |
| Max_pitch | 600 Hz | Upper bound, additionally capped at 45% of sample rate. |
| Draw_visualization | On | Draw waveform, spectrogram and processing summary views. |
| Play_result | On | Play the completed output. |
Min_pitch must be lower than the effective Max_pitch. When blur is active, Highpass_frequency must be below the effective low-pass/Nyquist limit.
Channels, duration & sample rate
Input channels
Every multichannel input is converted to mono before time scaling. A mono source is copied directly into the private processing object.
Output channels
- Create_stereo_width = off: mono output.
- Create_stereo_width = on: newly generated stereo output.
Duration
Before stereo widening, the PSOLA result is approximately the source duration multiplied by Duration_factor. When stereo widening is enabled, the delayed right channel extends the final object by approximately Stereo_delay_ms, and the left side is padded to match it.
Sample rate
The source sample rate is preserved throughout the process.
Final level
After the final mono or stereo object has been created, the script measures its Sinc70 absolute extremum. Every non-silent result receives:
Scale peak: 0.99
This is target peak normalization, so a quiet non-zero result can be amplified as well as attenuated. Digital silence is left unchanged.
Visualization
When enabled, the Picture view contains:
- Title: source, preset and Duration_factor.
- Original waveform.
- Result waveform.
- Original spectrogram.
- Result spectrogram.
- Stats line: factor, blur amount, stereo setting and source→result duration.
Waveform scaling
The original and result waveforms are drawn independently with Praat's automatic amplitude range. They are not a shared-amplitude-scale comparison.
Spectrograms
For visualization only, multichannel original/result Sounds are converted to mono display copies before spectrogram analysis. The frequency ceiling is:
min( 5000 Hz, 0.49 × sampleRate )
Spectrogram settings are 30 ms analysis window, 10 ms time step, 20 Hz frequency step, and a Gaussian window.
Output behavior
- Name:
<source>_stretched_<Duration_factor>x. - Source object: unchanged.
- Sample rate: preserved.
- Channels: mono unless Create_stereo_width is enabled, then stereo.
- Pitch: duration modification uses Praat Manipulation/DurationTier resynthesis rather than varispeed.
- Normalization: target Sinc70 peak 0.99 for non-silent output.
- Randomness: none.
- Playback: controlled by Play_result.