Crossfade Concatenator — User Guide

Join multiple sounds with smooth crossfade transitions. Optionally randomize order for creative arrangements.

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

What this does

This script concatenates multiple Sound objects with smooth 25% crossfade transitions between them. It joins sounds seamlessly, eliminating abrupt cuts. Optional randomization of sound order enables creative arrangements and variations.

How crossfade concatenation works:
  • Select multiple Sound objects in Praat
  • Script calculates 25% of each incoming sound's duration
  • Fade out the end of the previous sound (over last 25%)
  • Fade in the beginning of the next sound (over first 25%)
  • Overlap the faded sections during concatenation
  • Result: smooth transitions between all sounds

Quick start

  1. In Praat Objects window, select 2 or more Sound objects
  2. Run script: concatenate_crossfade.praat
  3. Choose whether to Randomize order (optional)
  4. Click OK
  5. Output named "concatenated_crossfade" appears in Objects window
  6. Script automatically normalizes and plays the result
Key features:
  • 25% crossfade: Fixed percentage ensures consistent transitions
  • Order randomization: Create variations of the same material
  • Automatic normalization: Peak normalized to 0.99 (prevents clipping)
  • Clean processing: Removes temporary objects automatically
  • Preserves metadata: Output inherits sample rate/channels from first sound
Important notes:
  • Minimum 2 sounds: Script requires at least 2 selected Sound objects
  • Crossfade percentage: Fixed at 25% (not adjustable in current version)
  • Very short sounds: If sound duration < 0.1s, crossfade may be too short for smooth transition
  • Different sample rates: Praat handles conversion automatically
  • Mono/stereo mixing: All sounds converted to match first sound's channel configuration

Parameters

ParameterDefaultDescription
Randomize_order1 (enabled)Randomly shuffle sound order before concatenation

Technical Details

Crossfade calculation:
fade_percentage = 25
fade_ratio = fade_percentage / 100 = 0.25

For each incoming sound:
    current_duration = Get total duration
    overlap_time = current_duration × 0.25
Processing steps:
  1. Copy first sound as starting point
  2. For each subsequent sound:
    • Calculate overlap = 25% of its duration
    • Fade out last 25% of current result
    • Fade in first 25% of incoming sound
    • Concatenate with overlap
  3. Normalize peak amplitude to 0.99
  4. Clean up temporary objects

Applications

🎵 Music Composition

Create seamless transitions between musical phrases:

  • Join different sections of a composition
  • Create smooth medleys from multiple recordings
  • Experiment with phrase ordering via randomization
  • Build longer textures from short sound snippets

🎬 Sound Design

Smooth sound effect sequences:

  • Create evolving soundscapes from individual elements
  • Design smooth transitions between different environments
  • Build complex Foley sequences
  • Generate randomized sound textures for games/film

🔬 Audio Research

Stimulus generation for experiments:

  • Create continuous audio streams from discrete stimuli
  • Generate randomized presentation orders
  • Build test sequences with smooth transitions
  • Prepare audio materials for perception studies

Creative Techniques

Workflow suggestions:
  • Randomization iterations: Run multiple times with randomization enabled, select best results
  • Layering: Combine multiple crossfaded sequences for complex textures
  • Source preparation: Trim sounds to similar durations for consistent crossfade timing
  • Post-processing: Apply effects (reverb, EQ) to the final concatenated result
  • Nesting: Concatenate concatenated results for hierarchical structures