8-Channel Time Polyphony

Creates eight PSOLA-resynthesized versions of one source, each with its own constant duration factor. The voices can begin together and diverge in time, or enter at different times so that all eight converge on a common ending.

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

What this does

The script takes one selected Sound, converts it to a zero-based mono working source, and creates eight independent PSOLA resyntheses. Each voice receives one constant duration factor for its entire length. The factors therefore create a field of simultaneously related but differently stretched versions rather than a continuously changing time-warp.

Time polyphony, not speed modulation: each voice keeps one factor from beginning to end. Nothing accelerates or decelerates inside a voice. The audible temporal separation accumulates because different voices consume the same source material at different constant rates.

Quick start

  1. Select exactly one Sound in Praat.
  2. Run 8-Channels_Time_Polyphony.praat.
  3. Choose a Preset, or use Custom and enter eight duration factors.
  4. Choose Alignment: Common onset or Staggered entries.
  5. Set the PSOLA pitch range so that it matches the source material.
  6. Choose an Output_format.
  7. Leave Draw_visualization enabled to inspect the temporal field.
  8. Click OK.
Default Custom factors: 1.00, 1.15, 0.85, 1.30, 0.70, 1.10, 0.90, 1.20. A factor above 1 makes a voice longer/slower; a factor below 1 makes it shorter/faster.

Duration-factor model

For source duration D and channel factor r_i: D_i = D × r_i r_i = 1.00 → unchanged duration r_i > 1.00 → longer / slower r_i < 1.00 → shorter / faster

This is a duration factor, not a speed factor. For example, a 10-second source with factor 1.30 aims for approximately 13 seconds; factor 0.70 aims for approximately 7 seconds.

Do not interchange this with 8-Channel Speed Deviations. That tool uses a speed factor s with D_i = D / s_i. Time Polyphony uses the opposite convention: D_i = D × r_i.

Requested versus achieved factor

PSOLA does not necessarily land on the requested duration with mathematical exactness. The script therefore measures every rendered voice and reports:

achievedFactor_i = measuredVoiceDuration_i / sourceDuration factorError_i = achievedFactor_i - requestedFactor_i

The visualization uses the requested factors to describe the compositional setup, while the drift and span displays use the measured voice durations.

Alignment: divergence and convergence

Common onset

All voices begin at time 0. Because their duration factors differ, corresponding source positions separate progressively in output time.

entryDelay_i = 0 end_i = D_i

With different constant factors, common-onset voices can only diverge. Short voices finish earlier; long voices continue beyond them.

Staggered entries

The longest rendered voice defines the common endpoint. Every shorter voice receives silence before its onset:

D_max = max(D_1 ... D_8) entryDelay_i = D_max - D_i end_i = entryDelay_i + D_i = D_max

The entries fan out, but all voices finish together. This produces genuine temporal convergence using constant duration factors.

Important: convergence is achieved by delayed entrances, not by changing the factor during a voice.

Presets

The presets replace the eight duration factors. Diverging also forces Common onset; Converging forces Staggered entries. Other presets retain the Alignment selection from the form.

PresetCh1–Ch8 duration factorsStructure
Custom1.00, 1.15, 0.85, 1.30, 0.70, 1.10, 0.90, 1.20 by defaultUser-controlled values.
Classic Polyphony1.00, 1.15, 0.85, 1.30, 0.70, 1.10, 0.90, 1.20Mixed expansion and contraction.
Slow Motion1.50, 1.70, 1.30, 1.60, 1.40, 1.80, 1.20, 1.90All voices longer than the source.
Irregular Fast Field0.50, 0.60, 0.40, 0.70, 0.30, 0.80, 0.25, 0.90All voices shorter than the source.
Dual-Rate Field1.00, 0.50, 1.00, 0.50, 1.00, 0.50, 1.00, 0.50Eight channels but only two distinct temporal variants.
Subtle Variation1.00, 1.05, 0.98, 1.02, 0.95, 1.03, 0.97, 1.01Close-duration field around unison.
Extreme Stretch3.00, 2.50, 3.50, 2.00, 4.00, 2.20, 3.80, 2.70Large PSOLA expansions.
Glitch Matrix0.15, 0.80, 0.30, 1.50, 0.20, 1.20, 0.40, 2.00Wide mixed factors; “Matrix” is only the preset title, not matrix processing.
Diverging0.70, 0.80, 0.90, 0.95, 1.05, 1.10, 1.20, 1.30Forces common onset; spread grows over time.
Converging0.70, 0.80, 0.90, 0.95, 1.05, 1.10, 1.20, 1.30Forces staggered entries; all voices finish together.
Unison1, 1, 1, 1, 1, 1, 1, 1One distinct temporal variant copied to eight channels.
Distinct variations: the script counts the number of unique duration factors. Eight output channels do not necessarily mean eight different transformations.

PSOLA resynthesis & edge fades

Processing chain for each voice

mono working source ↓ To Manipulation time step = Analysis_time_step pitch floor = Pitch_floor pitch ceiling = Pitch_ceiling ↓ DurationTier from 0 to source duration point at start = r_i point at end = r_i ↓ Replace duration tier ↓ Get resynthesis (overlap-add) ↓ measure actual duration ↓ per-voice start/end fades

The two DurationTier points have the same value, so each voice uses one constant factor over the complete source.

Pitch-analysis range

Pitch_floor, Pitch_ceiling, and Analysis_time_step directly affect the Manipulation analysis and therefore PSOLA quality. The defaults—75 Hz, 600 Hz, 10 ms—are useful for many voices and speech sources but are not universal.

Extreme factors: the script accepts any factor above zero, but reports factors below 0.25 or above 4.0 because PSOLA quality can deteriorate, especially for polyphonic, noisy, or unstably pitched material.

Per-voice edge fades

After resynthesis and before any entry padding, every voice receives optional raised-cosine fades using Praat's Fade in/out commands.

default Start_fade = 0.003 s default End_fade = 0.010 s fade actually used on each voice: min(requested fade, 10% of that voice's duration)

This placement is important. In common-onset mode, shorter voices may end in the middle of the final multichannel object, so a fade applied only to the completed output would not protect those internal endings. In staggered mode, all eight endings coincide, making edge control particularly important.

Parameters

ParameterDefaultActual role
PresetCustomSelects one of ten named factor sets or uses the eight Custom values.
Duration_factor_1 … 81.00, 1.15, 0.85, 1.30, 0.70, 1.10, 0.90, 1.20Constant duration multiplier per voice. Every value must be greater than zero.
AlignmentCommon onsetEither all voices begin together, or shorter voices are delayed so all endings coincide.
End_fade0.010 sRaised-cosine end fade per resynthesized voice; negative values become 0; capped to 10% of each voice.
Start_fade0.003 sRaised-cosine onset fade per voice; negative values become 0; capped to 10% of each voice.
Pitch_floor75 HzLower pitch bound for Manipulation analysis.
Pitch_ceiling600 HzUpper pitch bound; must be greater than Pitch_floor.
Analysis_time_step0.01 sTime step used by To Manipulation.
Output_format8-channel octophonicSelects the returned object/stem/downmix layout.
Scale_peak0.95Target for shared-gain normalization; invalid values are reset to 0.95.
Draw_visualizationonDraws the v0.6 multi-panel process visualization.
Play_resultonPlays the single output or a temporary odd/even stereo preview for multi-object stem formats.

Output formats

Shared-gain stage

After the eight voices and any entry padding have been created, the largest absolute peak across all eight is measured. One common factor is applied to every voice:

peakAll = max(peak Ch1 ... peak Ch8) sharedGain = Scale_peak / peakAll Ch1 ... Ch8 *= sharedGain

This preserves the relative levels produced by the eight PSOLA renders. If every voice is effectively silent, normalization is skipped.

Output formatReturned objectsRoutingAdditional peak normalization
8 channels — octophonic1 × 8-channelout1–out8 = Ch1–Ch8No
4 stereo pairs4 × stereoCh1|Ch2, Ch3|Ch4, Ch5|Ch6, Ch7|Ch8No
2 quad groups2 × 4-channelOdd = Ch1,3,5,7; Even = Ch2,4,6,8No
4-channel fold-down1 × 4-channel1=Ch1+Ch2, 2=Ch3+Ch4, 3=Ch5+Ch6, 4=Ch7+Ch8Yes, final Scale_peak
Stereo mix1 × stereoL = Ch1+Ch3+Ch5+Ch7; R = Ch2+Ch4+Ch6+Ch8Yes, final Scale_peak

Why odd/even?

Several presets alternate factors between neighboring channel numbers. The odd/even grouping therefore separates temporal-rate families more clearly than a simple Ch1–4 / Ch5–8 split. In the Dual-Rate preset, for example, all odd channels are factor 1.0 and all even channels are factor 0.5.

Different voice lengths

Praat's channel combination pads shorter voices with silence, so a multichannel or stem object runs to the longest constituent voice. In staggered mode, all voices have already been padded at the beginning and finish together.

Preview playback

For the four-stereo-pair and two-quad-group formats, the script creates a temporary stereo monitor with odd voices on the left and even voices on the right, peak-normalizes it, plays it, and then removes it. The monitor is not one of the returned output objects.

Visualization

The v0.6 figure uses the suite-standard 8 × 8 layout and combines requested parameters with measured rendering outcomes.

TITLE • source • preset • source duration • factor range • alignment • output format PANEL A — Drift: source consumed vs output time • one line per voice • x = output time • y = progress through source • based on measured voice durations and real entry delays • makes divergence or convergence visible rather than merely labelling it PANEL B — Duration-factor bars • one horizontal bar per channel • dotted reference at x1 • blue = factor > 1 (longer) • orange = factor < 1 (shorter) • grey = factor = 1 PANEL C — Entry and sounding spans • grey outline = entry delay • filled bar = actual sounding span • dotted reference = original source duration PANEL D — Channel examples • blue = Ch1 • orange = Ch2 • common amplitude scale • two of the eight working voices, not an “8-channel mix” PANEL E — Summary • source / preset • source and longest-output durations • number of distinct factors • alignment • all eight factors • PSOLA pitch range • start/end fade settings • output routing
Drift diagram: this is the most direct process view. Under common onset, lines with different slopes fan apart. Under staggered alignment, they begin at different x positions and meet at the common end.

Implementation notes & limits