Spiral Pitch Dance — User Guide

Source-relative accelerating sinusoidal pitch modulation with controllable range, rotation count, and acceleration.

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

What this does

Spiral Pitch Dance applies an accelerating sinusoidal pitch shift to the detected source pitch contour. The original F0 trajectory is retained as the moving reference: at each detected pitch point, the script multiplies that source F0 by a time-varying ratio derived from the requested semitone shift.

Source-relative behavior: the script does not replace the performance with a new contour around one median or fixed F0. A source point of 120 Hz and a source point of 240 Hz receive the same semitone shift at the same normalized time, but remain one octave apart before synthesis limits are applied.

Quick start

  1. Select exactly one Sound object in Praat.
  2. Run Spiral_Pitch_Dance.praat.
  3. Choose one of the seven built-in presets, or use Manual.
  4. Set the spiral motion and analysis parameters as needed.
  5. Click OK. The processed Sound is created and optionally visualized and played.

Parameters

GUI fieldDefaultMeaning
PresetManualSelects Manual or one of seven built-in spiral settings. A preset overrides only Spirals, Semitone_range, and Acceleration.
Spirals2Total phase rotations across the file. Valid range: greater than 0 and no more than 64.
Semitone_range24Peak requested shift in either direction. Valid range: 0–72 st. A value of 0 activates the PSOLA bypass path.
Acceleration1.5Exponent controlling how rotation speed changes over normalized time. Valid range: 1–10. At 1, phase advances linearly; values above 1 make the oscillation increasingly faster toward the end.
Time_step0.005 sTime step used by Praat's Manipulation analysis/resynthesis. It does not set the sampling density of the displayed mathematical spiral curve.
Floor_pitch50 HzLower F0 bound for pitch analysis and Manipulation construction.
Ceiling_pitch1200 HzUpper F0 bound for pitch analysis. It must be below 45% of the source sampling frequency.
Draw_visualizationOnDraws the analysis/processing summary in the Picture window.
Play_resultOnPlays the created Sound after processing.

Spiral pitch law

Requested semitone motion

pos = (t - xmin) / duration phase = Spirals × 2π × pos^Acceleration requested_shift_st = Semitone_range × sin(phase) ratio = 2^(requested_shift_st / 12) new_f0 = source_f0 × ratio

The shift therefore oscillates symmetrically between -Semitone_range and +Semitone_range. Spirals determines the total phase rotation, while Acceleration redistributes that rotation over time.

For Acceleration = 1, the spiral frequency is constant. For values above 1, the instantaneous rotation frequency begins lower and increases toward the end of the Sound.

Presets

PresetSpiralsRange (st)Acceleration
Gentle Spiral1.5121.3
Moderate Spiral2241.5
Aggressive Spiral3361.8
Extreme Spiral5482.2
Fast Rotation4302.5
Slow Evolution1181.2
Psychedelic Swirl8603.0

Manual leaves the values entered in the form unchanged. Presets do not override Time_step, pitch-analysis limits, visualization, or playback settings.

Analysis & resynthesis

  1. For multichannel input, a mono copy is created for pitch analysis only. Mono input is copied for the same analysis path.
  2. Praat creates a Manipulation object using Time_step, Floor_pitch, and Ceiling_pitch, then extracts the original PitchTier.
  3. If no usable voiced pitch points are detected, processing stops cleanly.
  4. At every detected PitchTier point, the script evaluates the spiral law and multiplies that point's original F0 by the resulting ratio.
  5. The synthesized F0 is limited to 20 Hz … 0.45 × source sample rate. The Info window reports how many pitch points were limited.
  6. The same processed PitchTier is inserted into a separate Manipulation object for each original channel, and each channel is resynthesized with Praat overlap-add.
  7. The processed channels are rebuilt into a Sound with the original channel count, time domain, duration, and sample rate.
About the 200–2000 curve points: these points are used only to generate the mathematical curve for visualization. The audio PitchTier itself is constructed at the pitch points detected in the source analysis.
Zero-range path: when Semitone_range = 0, PSOLA is bypassed and the Sound is copied directly. The script still performs its final attenuation-only peak check, so a copied source whose absolute peak exceeds 0.95 is reduced to 0.95.

Output

Visualization

When enabled, the Picture window shows:

The mathematical spiral display uses 200–2000 generated points, decimated to at most 500 visualization bins. These display points are independent of the source PitchTier points used for audio resynthesis.