Spiral Segmentation — User Guide

Spiral-based temporal and pitch transformation: divides sound into segments, applies exponential duration scaling and incremental pitch shifting to create a spiral trajectory through time-pitch space.

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

What this does

This script implements Spiral Segmentation — a time and pitch transformation that creates spiral trajectories through audio material. Process: (1) Segmentation: Divide sound into equal-duration segments. (2) Duration spiral: Apply exponential scaling to segment durations (expanding or contracting). (3) Pitch spiral: Apply incremental pitch shifts to each segment. (4) Jitter addition: Add stochastic timing variations for non-metric feel. (5) Resynthesis: Recombine transformed segments via PSOLA (Pitch-Synchronous Overlap-Add). Result: Audio material returns repeatedly, but each return occurs at transformed temporal and spectral levels — never identical, never metrically fixed.

Key Features:

What is spiral transformation? Traditional time-stretch/pitch-shift: Uniform transformations. Spiral transformation: Segmented, exponential, incremental changes creating perceptual spirals. Philosophical basis: Material returns but transformed — "eternal return" with variation. Musical applications: (1) Formal structure: Creates perceivable large-scale shape. (2) Perceptual interest: Systematic yet variable transformations. (3) Algorithmic composition: Generates complex structures from simple materials. (4) Sound design: Creates evolving, spiraling textures. (5) Analytical tool: Reveals material through systematic variation. The spiral is both a formal structure and a perceptual metaphor: expansion, return, displacement.

Technical Implementation: (1) Segmentation: Divide sound into N equal segments. (2) Duration factors: Calculate multiplier^n for each segment (n = segment index). (3) Jitter application: Multiply duration factors by (1 + Gaussian random). (4) Pitch shifts: Calculate pitch_step_Hz × segment_index (with direction options). (5) Manipulation object: Create Praat Manipulation object for PSOLA. (6) Duration tier: Build duration tier with segment-specific tempo factors. (7) Pitch tier: Extract original pitch, add spiral offsets, create new pitch tier. (8) Resynthesis: Replace tiers in manipulation, resynthesize via overlap-add. (9) Visualization: Create 6-panel plot showing waveforms, factors, shifts, spiral diagram.

Quick start

  1. In Praat, select exactly one Sound object.
  2. Run script…Spiral_Segmentation.praat.
  3. Choose Preset (12 options) or Custom for manual settings.
  4. Set Number_of_segments (how many times material repeats).
  5. Adjust Duration_multiplier (1.0 = no change, >1 = expansion, <1 = contraction).
  6. Choose Spiral_direction: Expanding or Contracting.
  7. Set Pitch_step_Hz (pitch change per segment).
  8. Choose Pitch_direction: Rising, Falling, or Alternating.
  9. Add Jitter_amount (0.0 = precise, 0.2 = noticeable variation).
  10. Enable Show_visualization to see spiral trajectory.
  11. Click OK — spiral transformation applied, visualization shown.
Quick tip: Start with Gentle Expansion preset (segments gradually lengthen, pitch rises slightly). Use 8-16 segments for clear spiral perception. Duration_multiplier 1.1-1.3 creates noticeable expansion; 0.7-0.9 for contraction. Pitch_step_Hz 5-15 creates clear pitch spiral. Enable visualization to understand the transformation — shows original vs spiral waveforms, duration factors, pitch shifts, and spiral diagram. Jitter_amount 0.05-0.15 adds natural, non-mechanical feel. For voice/speech, use subtle settings; for sound design, experiment with extreme values. Output named [original]_spiral appears in Objects window.
Important: PSOLA REQUIREMENTS: Works best with voiced sounds (speech, singing, monophonic instruments). Unvoiced/noisy sounds may produce artifacts. Extreme duration factors (>3× or <0.3×) can cause quality degradation. Large pitch shifts (>±50 Hz) may exceed PSOLA's natural range. Segment boundaries occur at equal time intervals — musically significant boundaries not detected. Jitter is applied multiplicatively to duration factors — large jitter can create extreme variations. Visualization may be complex for many segments (>20). Processing time scales with sound duration and number of segments. Original sound preserved unless "Preserve_original" disabled.

Spiral Concept

The Spiral as Formal Structure

🌀 Philosophical & Musical Basis

Core idea: Material returns repeatedly, but transformed

Musical precedents: Minimalism (Reich, Glass), spiral forms in non-Western music

Perceptual effect: Familiar yet novel, predictable yet variable

Time-pitch space: Two-dimensional transformation creates spiral trajectory

Mathematical Spiral Formulation

TIME DIMENSION (duration spiral): durationFactor[i] = multiplier ^ i WHERE i = segment index (0-based) PITCH DIMENSION (pitch spiral): pitchShift[i] = stepHz × i × direction COMBINED SPIRAL: Each segment i has coordinates: timeCoordinate = Σ durationFactor[j] for j=0 to i-1 pitchCoordinate = basePitch + pitchShift[i] VISUALIZATION: Points (timeCoordinate, pitchCoordinate) trace spiral

Segment Processing Pipeline

🔄 From Original to Spiral

Step 1: Equal segmentation

Original duration: D Number of segments: N Segment duration: d = D / N Segment boundaries: start[i] = (i - 1) × d end[i] = i × d

Step 2: Duration factor calculation

Base multiplier: m Direction: expanding (1) or contracting (2) IF expanding: factor[i] = m ^ (i - 1) [first segment unchanged] ELSE (contracting): factor[i] = m ^ (N - i) [last segment unchanged] Jitter application: jitter[i] = randomGauss(0, jitter_amount) factorJittered[i] = factor[i] × (1 + jitter[i])

Step 3: Pitch shift calculation

Pitch step: p (Hz) Direction: rising (1), falling (2), alternating (3) IF rising: shift[i] = p × (i - 1) ELSE IF falling: shift[i] = -p × (i - 1) ELSE (alternating): shift[i] = p × floor((i - 1) / 2) × (-1)^(i - 1)

PSOLA Resynthesis

🎵 High-Quality Time-Pitch Modification

Praat Manipulation object: PSOLA (Pitch-Synchronous Overlap-Add) algorithm

PROCESS: 1. Create Manipulation object (analysis) 2. Extract original pitch contour 3. Build DurationTier with segment factors 4. Build PitchTier with spiral shifts 5. Replace tiers in Manipulation 6. Resynthesize via overlap-add ADVANTAGES: - Preserves formants (voice quality) - High quality for moderate modifications - Smooth transitions between segments LIMITATIONS: - Works best with voiced sounds - Extreme modifications cause artifacts - Requires pitch detection (may fail on noise)

Jitter: Breaking Metric Regularity

🎲 Stochastic Timing Variations

Purpose: Prevent mechanical, predictable timing

Implementation: Gaussian-distributed multiplicative factors

jitter_amount = standard deviation parameter (0.0 to 0.5+) FOR each segment i: jitter[i] = randomGauss(0, jitter_amount) factorJittered[i] = factor[i] × (1 + jitter[i]) EFFECTS: jitter_amount = 0.0: precise, mechanical jitter_amount = 0.1: subtle humanization jitter_amount = 0.3: noticeable variations jitter_amount = 0.5+: extreme, unpredictable CONSTRAINTS: Clamped to [0.1, 10.0] to prevent extreme values

Philosophical rationale: Imperfection as humanizing element, escape from perfect metric grid

Spiral Presets

Preset 1: Gentle Expansion

🌱 Gradual Growth

Settings: 8 segments, multiplier=1.12, expanding, pitch+3Hz, rising, jitter=0.05

Character: Subtle, natural expansion with slight pitch rise

Use: Gentle evolution, meditative textures, gradual intensification

Musical analogy: Breathing exercise, sunrise, gradual awakening

Preset 2: Accelerating Collapse

💥 Implosive Compression

Settings: 16 segments, multiplier=1.25, contracting, pitch-8Hz, falling, jitter=0.06

Character: Rapid shortening with pitch descent, accelerating feel

Use: Dramatic tension, collapsing structures, downward spirals

Musical analogy: Black hole, vortex, downward spiral

Preset 3: Pitch Ascent

⬆️ Upward Trajectory

Settings: 10 segments, multiplier=1.05, expanding, pitch+15Hz, rising, jitter=0.03

Character: Strong pitch rise with minimal time expansion

Use: Ascending lines, lifting effects, upward motion

Musical analogy: Elevator, rocket launch, climbing

Preset 4: Pitch Descent

⬇️ Downward Trajectory

Settings: 10 segments, multiplier=1.05, expanding, pitch-15Hz, falling, jitter=0.03

Character: Strong pitch fall with minimal time expansion

Use: Descending lines, sinking effects, downward motion

Musical analogy: Falling object, descent, subsidence

Preset 5: Drunken Spiral

🥴 Unstable Orbit

Settings: 12 segments, multiplier=1.18, expanding, pitch±7Hz, alternating, jitter=0.25

Character: High jitter creates unstable, wavering feel

Use: Disorientation, instability, drunken/wobbly effects

Musical analogy: Drunken walk, unstable orbit, wavering

Preset 6: Tight Coil

🌀 Dense Winding

Settings: 24 segments, multiplier=1.08, expanding, pitch+2Hz, rising, jitter=0.02

Character: Many segments with small increments, tight spiral

Use: Dense textures, intricate patterns, detailed evolution

Musical analogy: Watch mechanism, tight spring, precise clockwork

Preset 7: Wide Orbit

🌌 Broad Sweep

Settings: 6 segments, multiplier=1.35, expanding, pitch+20Hz, rising, jitter=0.1

Character: Few segments with large increments, broad spiral

Use: Grand gestures, sweeping motions, large-scale forms

Musical analogy: Planetary orbit, broad sweep, grand gesture

Preset 8: Reverse Time Feel

⏪ Backward Expansion

Settings: 12 segments, multiplier=1.2, contracting, pitch+5Hz, rising, jitter=0.08

Character: Time contracts while pitch rises — contradictory motion

Use: Temporal paradox, contradictory cues, unusual perceptions

Musical analogy: Time running backward, paradoxical motion

Preset 9: Glitch Scatter

💥 Digital Fragmentation

Settings: 32 segments, multiplier=1.1, expanding, pitch±12Hz, alternating, jitter=0.4

Character: Many segments with high jitter, glitchy texture

Use: Glitch art, digital corruption, fragmented textures

Musical analogy: CD skip, digital corruption, data error

Preset 10: Meditative Stretch

🧘 Extreme Expansion

Settings: 6 segments, multiplier=1.5, expanding, pitch-1Hz, falling, jitter=0.02

Character: Extreme time expansion with minimal pitch change

Use: Meditation, time dilation, extreme slow motion

Musical analogy: Time dilation, deep meditation, extreme slow motion

Preset 11: Anxious Compression

😰 Tense Contraction

Settings: 20 segments, multiplier=1.3, contracting, pitch+10Hz, rising, jitter=0.15

Character: Rapid shortening with pitch rise and moderate jitter

Use: Anxiety, tension building, accelerating pressure

Musical analogy: Pressure building, anxiety attack, accelerating tension

Preset 12: Cosmic Drift

🌠 Space-Time Drift

Settings: 8 segments, multiplier=1.4, expanding, pitch±25Hz, alternating, jitter=0.12

Character: Large increments in both time and pitch with oscillation

Use: Cosmic effects, space-time distortion, large oscillations

Musical analogy: Space-time distortion, cosmic drift, gravitational wave

Preset 13: Custom

🔧 Manual Settings

Settings: User-defined parameters

Character: Tailored to specific needs

Use: Experimentation, specific applications, fine control

Flexibility: Full control over all parameters

Parameters Explained

Segmentation Parameters

ParameterDefaultRangeDescription
Number_of_segments122-100How many times material repeats

Duration Spiral Parameters

ParameterDefaultRangeDescription
Duration_multiplier1.150.5-3.0Factor applied exponentially across segments
Spiral_directionExpandingExpanding/ContractingWhether segments get longer or shorter

Pitch Spiral Parameters

ParameterDefaultRangeDescription
Pitch_step_Hz5.00.1-100.0Pitch change per segment (Hz)
Pitch_directionRisingRising/Falling/AlternatingDirection of pitch change

Temporal Jitter Parameters

ParameterDefaultRangeDescription
Jitter_amount0.080.0-1.0Standard deviation of timing variations

Output Parameters

ParameterDefaultDescription
Preserve_originalyesKeep original sound in Objects window
Play_resultyesAutomatically play output
Show_visualizationyesDisplay 6-panel visualization

Parameter Interactions

How parameters work together:
  • Number_of_segments × Duration_multiplier: Determines total output duration
  • Duration_multiplier ^ Number_of_segments: Ratio of last/first segment durations
  • Pitch_step_Hz × Number_of_segments: Total pitch change from first to last segment
  • Jitter_amount × Duration_multiplier: Combined effect on timing irregularity
  • Spiral_direction + Pitch_direction: Creates coherent or contradictory motion

Effect of Parameter Values

Duration_multiplier effects:
  • 1.0: No duration change (segments equal length)
  • 1.05-1.15: Gentle expansion/contraction
  • 1.2-1.4: Strong expansion/contraction
  • 1.5+: Extreme expansion/contraction
  • 0.5-0.9: Opposite direction (contraction/expansion)
Pitch_step_Hz effects:
  • 1-3 Hz: Subtle, barely perceptible changes
  • 5-10 Hz: Clear but moderate changes
  • 15-30 Hz: Strong, obvious pitch spiral
  • 50+ Hz: Extreme, possibly unnatural changes
Jitter_amount effects:
  • 0.0: Precise, mechanical timing
  • 0.05-0.1: Subtle humanization
  • 0.15-0.25: Noticeable rhythmic variation
  • 0.3+: Highly irregular, unpredictable

Visualization

Six-Panel Display

📊 Understanding the Visualization

PanelContentPurpose
TitleScript name, input file, presetContext and identification
Original WaveformInput sound with segment boundaries (red dotted lines)Show segmentation of original material
Result WaveformOutput spiral-transformed soundShow effect of spiral transformation
Duration Factor PlotBars showing duration factor for each segmentVisualize duration spiral (blue bars = planned, black line = jittered)
Pitch Shift PlotLine graph of pitch shift per segmentVisualize pitch spiral (red line with markers)
Spiral DiagramParametric spiral with numbered segment markersConceptual representation of spiral trajectory
Parameters & ResultsText display of settings and outcomesReference information
Time AxisTimeline showing original and output durationsCompare time scales

Interpreting the Spiral Diagram

🌀 Reading the Conceptual Diagram

Spiral equation: r = a + b×θ (Archimedean spiral)

  • Radius (r): Represents cumulative duration factor
  • Angle (θ): Represents segment number/position
  • Marker position: Shows segment's place in spiral
  • Marker size: Proportional to segment duration factor
  • Marker number: Segment index (1, 2, 3...)

Interpretation: Movement outward = expansion; movement around = progression through segments

Duration Factor Plot Details

⏱️ Understanding Duration Changes

Blue bars: Planned duration factor (multiplier^n)

Black horizontal lines: Actual jittered duration factor

Dotted line at 1.0: Reference (no change)

Pattern: Shows exponential growth/decay across segments

Jitter effect: Black lines deviate from blue bars

Pitch Shift Plot Details

🎵 Understanding Pitch Changes

Red line: Pitch shift trajectory across segments

Square markers: Pitch shift for each segment

Dotted line at 0 Hz: Reference (no change)

Pattern: Shows linear/alternating pitch changes

Direction: Upward slope = rising, downward = falling, oscillation = alternating

Practical Examples of Visualization

What to look for with different presets:
  • Gentle Expansion: Slightly upward blue bars, gradual red line rise
  • Accelerating Collapse: Steeply downward blue bars, falling red line
  • Drunken Spiral: Black lines far from blue bars (high jitter), oscillating red line
  • Tight Coil: Many small blue bars, gradual red line
  • Wide Orbit: Few large blue bars, steep red line
  • Reverse Time Feel: Downward blue bars (contracting) with upward red line (rising pitch)

Advanced Applications

Compositional Techniques

Layering spirals: Apply different spirals to same material, mix results

Spiral chains: Use spiral output as input for another spiral transformation

Multi-voice spirals: Apply same spiral to different sounds, create spiral counterpoint

Sound Design Applications

Evolving textures: Create slowly evolving pads from short samples

Riser/downer effects: Use pitch ascent/descent with time expansion/contraction

Glitch generation: High segment count + high jitter = glitch textures

Analytical Applications

Material study: Hear material transformed systematically, reveal hidden characteristics

Formal analysis: Test different segmentations, hear formal implications

Perceptual experiments: Study perception of time-pitch relationships

Performance Applications

Live processing: Apply spiral transformations in real-time (with adaptation)

Interactive composition: Let parameters be controlled by performers/sensors

Algorithmic improvisation: Use spiral as generative structure

Troubleshooting

Problem: Artifacts/distortion in output
Causes: Extreme duration/pitch modifications, unvoiced input, PSOLA limitations
Solutions: Use more moderate settings, ensure input has clear pitch, try different source material
Problem: No pitch change detected (pitch tier empty)
Causes: Unvoiced/noisy input, Praat pitch detection failure
Solutions: Script adds reference points, but results may be artificial; use voiced input
Problem: Output much longer/shorter than expected
Causes: Extreme duration_multiplier, many segments, jitter accumulation
Solutions: Check formula: total_duration = segment_duration × Σ(multiplier^i × (1+jitter[i]))
Problem: Visualization missing/corrupted
Causes: Many segments (>30), complex plot, Praat drawing limits
Solutions: Reduce number_of_segments, disable visualization, use simpler preset

Mathematical Formulas Reference

SEGMENT BOUNDARIES: segStart[i] = (i - 1) × totalDuration / N segEnd[i] = i × totalDuration / N DURATION FACTORS (expanding): factor[i] = multiplier^(i - 1) factorJittered[i] = factor[i] × (1 + randomGauss(0, jitter_amount)) DURATION FACTORS (contracting): factor[i] = multiplier^(N - i) factorJittered[i] = factor[i] × (1 + randomGauss(0, jitter_amount)) PITCH SHIFTS (rising): shift[i] = stepHz × (i - 1) PITCH SHIFTS (falling): shift[i] = -stepHz × (i - 1) PITCH SHIFTS (alternating): shift[i] = stepHz × floor((i - 1) / 2) × (-1)^(i - 1) TOTAL OUTPUT DURATION: totalOut = Σ(segmentDuration × factorJittered[i]) for i=1 to N

Creative Combinations

Experiment with these combinations:
  • Contradictory spirals: Expanding time + falling pitch, or contracting time + rising pitch
  • Micro-spirals: Many segments (30+) with tiny increments
  • Macro-spirals: Few segments (3-6) with huge increments
  • Jitter experiments: Same spiral with different jitter amounts
  • Alternating extremes: Extreme expansion then extreme contraction
  • Nested spirals: Apply spiral to already-spiraled material