Spectral Freeze with Decay & Glissando — User Guide
Spectral analysis and resynthesis with dynamic partial tracking: creates frozen, evolving, and pitch-shifting textures through peak detection, decay modeling, and glissando control.
What this does
This script implements Spectral Freeze with Decay and Glissando — an advanced spectral processing technique that analyzes audio in short frames, tracks the strongest harmonic partials, and resynthesizes them with controlled decay and pitch evolution. The effect creates ethereal frozen textures, evolving pads, and dynamic spectral transformations that maintain the harmonic character of the source while introducing temporal and pitch manipulation.
Key Features:
- 9 Character Presets — From classic freeze to complex evolving textures
- Dynamic Partial Tracking — Follows strongest harmonic components over time
- Controlled Spectral Decay — Models natural or artificial amplitude decay
- Glissando Control — Smooth pitch shifting up or down over time
- Stereo Output — Optional spatial enhancement with channel differentiation
- Tail Extension — Automatic decay tail for natural fade-outs
- Peak-Based Resynthesis — Reconstructs sound from dominant spectral peaks
Technical Implementation: (1) Parameter Setup: Apply preset values or custom parameters, convert time units. (2) Input Preparation: Convert stereo to mono if needed, add silent tail for decay. (3) Frame-Based Analysis: Process audio in short overlapping windows, extract spectral peaks. (4) Partial Tracking: Track top K partials across frames, applying decay and glissando. (5) Snapshot Storage: Store per-frame frequency and amplitude values for all tracked partials. (6) Additive Resynthesis: Reconstruct sound from stored partial data using sinusoidal oscillators. (7) Stereo Enhancement: Apply optional channel differentiation and delays. (8) Final Processing: Normalize levels, apply light filtering, clean up intermediate objects. The core innovation is the combination of peak-based analysis with independent control of amplitude decay and pitch evolution, creating complex evolving textures from simple audio sources.
Quick start
- In Praat, select exactly one Sound object.
- Run script… →
apply_spectral_freeze.praat. - Choose Preset (9 options from Classic Freeze to Complex Evolutions).
- For custom settings, adjust analysis parameters (frame step, window size, frequency range).
- Set Top_partials_(K) (number of harmonic components to track).
- Adjust Decay_factor and Glissando for custom textures.
- Set Tail_duration for natural fade-out length.
- Enable Create_stereo_output for spatial effects.
- Configure output options (target peak, filtering, auto-play).
- Click OK — effect applied, result named "originalname_freeze".
Spectral Freeze Theory
Spectral Analysis Fundamentals
Frame-Based Processing
Time-frequency analysis:
Why Frame-Based Analysis?
Temporal resolution trade-offs:
- Short frames: Good temporal resolution, poor frequency resolution
- Long frames: Good frequency resolution, poor temporal resolution
- Overlap: Window longer than frame step provides smooth transitions
- Hanning window: Reduces spectral leakage, improves peak detection
Partial Tracking System
Peak Detection Algorithm
Finding dominant spectral components:
Accumulator Update Logic
Tracking partials across frames:
Decay and Glissando Mathematics
Exponential Decay Model
Frame-based decay calculation:
Glissando Pitch Evolution
Continuous pitch shifting:
❄️ Spectral Transformation Visualization
Freeze (decay_factor = 0.999, glissando = 0):
Peaks sustained nearly indefinitely, no pitch change
Creates frozen, static texture from source
Rising shimmer (decay_factor = 0.3, glissando = 0.15):
Rapid amplitude decay + upward pitch drift
Creates evaporating, lifting texture
Ghostly rise (decay_factor = 0.15, glissando = 0.3):
Very fast decay + strong upward glissando
Creates transient ghost tones that rise and disappear
Resynthesis Technique
Additive Synthesis from Peaks
Sine wave reconstruction:
Stereo Enhancement
Spatial processing:
Parameters
Analysis Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Frame_step_(ms) | positive | 10 | Time between analysis frames (milliseconds) |
| Analysis_window_(ms) | positive | 35 | Duration of analysis window (milliseconds) |
| Max_frequency_(Hz) | positive | 8000 | Highest frequency to analyze |
| Top_partials_(K) | integer | 10 | Number of spectral peaks to track |
Spectral Transformation Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Decay_factor_(d) | positive | 0.2 | Amplitude decay rate per second (0-1) |
| Glissando_(octaves_per_sec) | real | 0.1 | Pitch change rate (positive=up, negative=down) |
| Tail_duration_(seconds) | positive | 2 | Silent tail added for natural decay |
Output Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Create_stereo_output | boolean | 1 | Generate stereo instead of mono |
| Stereo_delay_(ms) | positive | 8 | Delay between channels for stereo width |
| Target_peak_(dB) | real | -1 | Output normalization level |
| Apply_light_filtering | boolean | 0 | Apply gentle bandpass filtering |
| Play_after_processing | boolean | 1 | Auto-play result |
Preset Details
⛄ Freeze (classic hold)
Character: Sustained spectral snapshot
Settings:
- Decay_factor: 0.999
- Glissando: 0
Use for: Creating frozen textures, infinite sustains
🍃 Gentle decay (slow fade)
Character: Natural amplitude decay
Settings:
- Decay_factor: 0.5
- Glissando: 0
Use for: Smooth fade-outs, natural reverberation
✨ Rising shimmer (decay + up)
Character: Fading upward drift
Settings:
- Decay_factor: 0.3
- Glissando: 0.15
Use for: Evaporating textures, uplifting pads
🌊 Falling shimmer (decay + down)
Character: Fading downward drift
Settings:
- Decay_factor: 0.3
- Glissando: -0.15
Use for: Descending textures, sinking effects
👻 Ghostly rise (strong decay + up)
Character: Rapid fade with strong upward shift
Settings:
- Decay_factor: 0.15
- Glissando: 0.3
Use for: Transient ghost tones, dramatic rises
🌊 Deep dive (strong decay + down)
Character: Rapid fade with strong downward shift
Settings:
- Decay_factor: 0.15
- Glissando: -0.3
Use for: Plunging effects, sub-bass transformations
💎 Crystalline (minimal decay + micro-up)
Character: Nearly frozen with subtle brightening
Settings:
- Decay_factor: 0.9
- Glissando: 0.05
Use for: Sparkling textures, subtle evolution
🌑 Submerge (minimal decay + micro-down)
Character: Nearly frozen with subtle darkening
Settings:
- Decay_factor: 0.9
- Glissando: -0.05
Use for: Darkening textures, subtle descent
Processing Pipeline
Complete Algorithm
Processing Characteristics
Computational Complexity
Performance considerations:
- Frame count: ∝ total_duration / frame_step
- Peak detection: ∝ K × frequency_bins
- Resynthesis: ∝ frames × K × samples_per_frame
- Memory usage: Stores all frame/partial snapshots during processing
Quality vs Speed Trade-offs
Fine (5-10ms): High temporal resolution Smooth amplitude and pitch evolution Increased processing time Recommended for most applications
Medium (10-20ms): Balanced performance Good for general use Slight stepping in rapid changes
Coarse (20-50ms): Faster processing Noticeable stepping in evolution Good for slow, evolving textures only
Analysis Window: Typically 2-4× frame step for proper overlap
Partial Count Guidelines
Low (5-8 partials): Fast processing Captures only strongest harmonics Sparse, minimalist textures Good for bass, fundamental emphasis
Medium (10-15 partials): Balanced detail/performance Captures harmonic richness Recommended for most sources Preserves tone character
High (20-30 partials): Slower processing Captures subtle harmonics and noise Rich, complex textures Good for detailed source analysis
Very High (>30 partials): Significant processing time Diminishing returns on quality May capture noise as "partials" Special applications only
Applications
Pad and Texture Creation
Use case: Transforming short sounds into evolving pads
Technique: Use Freeze or Gentle decay on percussive sources
Example: Apply to drum hits, vocal phrases, or instrument stabs
Vocal Transformation
Use case: Creating ethereal vocal textures
Technique: Use Rising/Falling shimmer on vocal phrases
Example: Transform spoken word into evolving background textures
Sound Design for Media
Use case: Creating magical, supernatural sound effects
Technique: Use Ghostly rise/Deep dive with stereo enhancement
Example: Spell effects, magical auras, supernatural phenomena
Ambient Music Production
Use case: Generating evolving background textures
Technique: Use Crystalline/Submerge with long tail duration
Example: Create endless evolving pads from field recordings
Instrument Processing
Use case: Adding sustain and evolution to short notes
Technique: Use Gentle decay with subtle glissando
Example: Extend piano or guitar notes into evolving pads
Practical Workflow Examples
🎹 Piano Pad Transformation
Goal: Create evolving pad from piano note
Settings:
- Preset: Rising shimmer
- Top_partials: 12
- Tail_duration: 4 seconds
- Create_stereo_output: Yes
- Stereo_delay: 12ms
Result: Piano note transforms into shimmering, rising pad
🎤 Vocal Etherializer
Goal: Transform vocal into ghostly texture
Settings:
- Preset: Ghostly rise
- Top_partials: 8
- Tail_duration: 3 seconds
- Max_frequency: 5000 Hz
- Apply_light_filtering: Yes
Result: Vocal phrase becomes evaporating, rising ghost tone
🥁 Drum Texture Generator
Goal: Create textured sustain from drum hit
Settings:
- Preset: Freeze
- Top_partials: 15
- Tail_duration: 2 seconds
- Frame_step: 15ms
- Analysis_window: 50ms
Result: Drum transient extended into complex noisy texture
Advanced Techniques
- Harmonic sources (vocals, strings): Use medium partial counts (10-15)
- Noise-based sources (drums, rain): Use higher partial counts (15-25)
- Transient-rich material: Use longer analysis windows (40-60ms)
- Sustained tones: Use shorter frame steps (5-10ms) for smooth evolution
- Complex polyphonic material: May produce less predictable results
- Very high decay_factor (0.99+) + subtle glissando: Slowly evolving frozen textures
- Medium decay_factor (0.3-0.6) + strong glissando: Dramatic pitch-shifting decays
- Low decay_factor (0.1-0.2) + no glissando: Rapid fade with stable pitch
- Custom decay/glissando curves: Modify script for non-linear evolution
- Extreme stereo delays (20-30ms): Creates distinct left/right perception
Troubleshooting Common Issues
Cause: Too many partials capturing noise components
Solution: Reduce Top_partials, increase Max_frequency limit
Cause: Frame step too large for smooth evolution
Solution: Decrease Frame_step to 5-10ms
Cause: Decay_factor too low, source too quiet
Solution: Increase Decay_factor to 0.9+, ensure strong input signal
Cause: Too many partials or very short frame step
Solution: Reduce Top_partials, increase Frame_step to 15-20ms
Cause: Stereo_delay too long for content
Solution: Reduce Stereo_delay to 5-15ms range