Unified Chorus Generator — User Guide

Professional ensemble effects: combines multiple modulated delay lines with intelligent presets to create rich chorus effects that transform single voices into lush ensembles and add spatial depth to any audio source.

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 a unified chorus generator — a sophisticated audio processing system that creates rich ensemble and thickening effects using multiple modulated delay lines. The system works by generating several slightly detuned copies of the original signal, each with unique modulation characteristics, and blending them together to create the illusion of multiple performers. With two distinct processing modes and four carefully crafted presets, this chorus generator can produce everything from subtle shimmer to rich ensemble effects that add depth, width, and professional polish to any audio source.

Key Features:

What is chorus? Chorus is a classic audio effect that creates the illusion of multiple performers playing the same part simultaneously. The effect works on a simple psychoacoustic principle: when multiple sound sources play the same material with slight timing and pitch variations, our brain perceives them as an ensemble rather than individual sources. Traditional chorus effects use: (1) Multiple delay lines with slightly different delay times. (2) Low-frequency modulation to create pitch and timing variations. (3) Phase relationships that prevent cancellation and create richness. This implementation captures the essence of classic analog chorus units while providing modern control and flexibility. Applications range from subtle vocal thickening to dramatic synthesizer transformations.

Technical Implementation: (1) Multiple delay lines: Create 2 or 3 independent delayed copies of the original signal. (2) LFO modulation: Apply sine-wave modulation to each delay line at different rates. (3) Phase offset: Use mathematical phase shifts (2.0, 2.1, 4.2 radians) to prevent synchronization. (4) Vectorized processing: Apply all modulation mathematically in a single formula for efficiency. (5) Mix blending: Combine dry and wet signals with user-controlled ratios. (6) Preset system: Pre-configured parameter sets for immediate professional results. The system uses delay-based pitch shifting rather than spectral processing, creating natural-sounding chorus effects without artificial artifacts.

Quick start

  1. In Praat, select exactly one Sound object.
  2. Run script…Unified_Chorus_Generator.praat.
  3. Choose Chorus_Mode: Dual Tap (2 voices) or Tri Tap (3 voices).
  4. Select a Preset or choose "Custom" for manual control.
  5. Adjust Dry_Mix and Wet_Mix for effect intensity.
  6. Fine-tune delay and modulation parameters if using custom settings.
  7. Set output normalization and playback options.
  8. Click OK — processing completes almost instantly.
  9. Output appears as "originalname_chorus_dual" or "originalname_chorus_tri".
Quick tip: Start with Classic Chorus preset for most applications — it provides balanced, musical chorus effects. Use Dual Tap mode for subtle thickening and Tri Tap mode for richer ensemble effects. Dry_Mix around 0.7 with Wet_Mix around 0.5 gives a good balance between original character and chorus effect. For vocals and acoustic instruments, try the Subtle Chorus preset. For synthesizers and electric guitars, the Rich Ensemble preset works beautifully. The Deep Shimmer preset creates dramatic, washy effects perfect for pads and ambient textures. Experiment with different source material to hear how chorus transforms various sounds.
Important: DELAY-BASED PROCESSING — chorus works by creating delayed copies, which can cause slight time smearing on transients. Extreme settings may cause phase cancellation or unnatural artifacts. Very long base delays (>25ms) can create distinct echoes rather than chorus. Very high modulation depths can cause pitch artifacts. Dry/Wet balance is crucial — too much wet signal can overwhelm the original character. Stereo files are processed with identical chorus on both channels. Phase relationships are carefully designed to prevent cancellation, but extreme parameter combinations may still cause issues. Output normalization preserves the effect character while preventing clipping. Always audition results on representative material.

Chorus Theory

Ensemble Effect Fundamentals

Psychoacoustic Principles

How chorus creates the ensemble illusion:

Natural ensemble characteristics: Multiple performers never play perfectly in sync Slight timing differences (1-30ms) Subtle pitch variations (±5-50 cents) Minor amplitude variations Chorus simulation: Create multiple delayed copies of original signal Apply slow pitch modulation to each copy Mix with original to create ensemble effect Mathematical basis: output = dry_mix × original + wet_mix × Σ modulated_copies Why it works psychoacoustically: Brain interprets slight variations as multiple sources Timing differences create spatial impression Pitch variations add richness and complexity Combined effect sounds like ensemble performance

Why Multiple Voices?

Sonic benefits of multi-voice design:

Delay-Line Modulation Mathematics

Pitch Shifting Through Variable Delay

Time-varying delay principles:

Basic delay modulation: delayed_signal[n] = original[n - d(n)] Where d(n) is time-varying delay: d(n) = base_delay × (1 + depth × modulator(n)) Pitch relationship: Decreasing delay → playing faster → pitch rises Increasing delay → playing slower → pitch falls Oscillating delay → vibrato-like pitch variation Chorus implementation: FOR each voice i: phase_i = 2π × rate_i × time + phase_offset_i delay_i = base_delay × (1 + depth × sin(phase_i)) voice_i = original[n - round(delay_i)] Final mix: output = dry_mix × original + wet_mix × average(voice_1, voice_2, ...)

Why Delay-Based Pitch Shifting?

Advantages over spectral methods:

🎵 Chorus Intuition

For a string section:

Multiple violinists play the same part

Each has slightly different timing and intonation

Result: Rich, warm ensemble sound instead of single instrument


Chorus recreates this by:

Creating multiple delayed copies (different "players")

Adding slight pitch variations (different "intonation")

Mixing together for ensemble richness

Phase Relationship Design

Preventing Cancellation Artifacts

Intelligent phase offset strategy:

Phase offset design: Voice 1: phase_offset = 0.0 radians Voice 2: phase_offset = 2.0 radians (≈114.6°) Voice 3: phase_offset = 4.2 radians (≈240.7°) Why these specific values: Avoid simple relationships (π, π/2, etc.) Prevent synchronization and cancellation Create complex, evolving interference patterns Ensure continuous modulation movement Mathematical implementation: Dual Tap: offsets = [0.0, 2.0] Tri Tap: offsets = [0.0, 2.1, 4.2] Result: Voices rarely align in phase Continuous modulation movement Rich, stable chorus effect No obvious repeating patterns

Why Careful Phase Design?

Avoiding common chorus problems:

Rate Selection Strategy

Modulation Frequency Relationships

Choosing effective LFO rates:

Rate selection principles: Use non-integer relationships between rates Avoid simple ratios (2:1, 3:2, etc.) Spread rates across perceptual range Ensure rates are musically relevant Preset rate examples: Subtle: 2.0, 3.5, 5.0 Hz Classic: 2.5, 4.2, 6.3 Hz Rich: 1.5, 3.8, 5.5 Hz Deep: 0.8, 2.4, 4.0 Hz Why these work: Rates are harmonically unrelated Cover slow, medium, and fast modulation Create complex, evolving patterns Prevent obvious beating or synchronization Perceptual effect: Slow rates: broad, sweeping chorusing Medium rates: classic chorus character Fast rates: shimmer, vibrato-like effects

Why Multiple Rate Speeds?

Creating complex modulation:

Effect Presets

🎛️ Four Professional Chorus Characters

Carefully tuned presets for immediate professional results:

Preset 1: Custom

CharacterParametersApplicationTechnical Details
User-definedAll parameters adjustableExperimental, specific needsFull manual control

Preset 2: Subtle Chorus

CharacterParametersApplicationTechnical Details
Gentle thickeningDelay: 8ms, Depth: 0.08Vocals, acoustic instrumentsRates: 2.0, 3.5, 5.0 Hz

Preset 3: Classic Chorus

CharacterParametersApplicationTechnical Details
Balanced, musicalDelay: 12ms, Depth: 0.15General purpose, guitarsRates: 2.5, 4.2, 6.3 Hz

Preset 4: Rich Ensemble

CharacterParametersApplicationTechnical Details
Dense, wideDelay: 15ms, Depth: 0.20Synths, pads, ensemblesRates: 1.5, 3.8, 5.5 Hz

Preset 5: Deep Shimmer

CharacterParametersApplicationTechnical Details
Dramatic, washyDelay: 20ms, Depth: 0.25Ambient, special effectsRates: 0.8, 2.4, 4.0 Hz

Preset Selection Guide

Choosing the right preset:
  • Use Subtle Chorus when:
    • Processing vocals or delicate acoustic instruments
    • You want enhancement without obvious effect
    • Maintaining natural character is priority
    • Adding professional polish subtly
  • Use Classic Chorus when:
    • Processing electric guitars or synthesizers
    • You want recognizable chorus character
    • Creating 1980s-style chorus effects
    • General purpose thickening and enhancement
  • Use Rich Ensemble when:
    • Creating dense synth pads or string sections
    • You want maximum thickening and width
    • Transforming single sounds into ensembles
    • Professional production applications
  • Use Deep Shimmer when:
    • Creating ambient or special effects
    • You want dramatic, obvious chorus
    • Processing sounds for atmospheric contexts
    • Experimental and sound design applications

Each preset creates a distinct chorus character suitable for different musical contexts

Creative Preset Applications

🎤 Vocal Enhancement

Preset: Subtle Chorus

Application: Process lead vocals for professional polish

Result: Fuller, more professional vocal sound without obvious effect

🎸 Electric Guitar

Preset: Classic Chorus

Application: Process clean or slightly distorted guitar

Result: Classic 1980s chorus guitar sound with richness and movement

🎹 Synth Pads

Preset: Rich Ensemble

Application: Transform simple synth patches into lush pads

Result: Wide, dense textures with professional ensemble quality

Parameters Guide

⚙️ Complete Parameter Reference

Detailed explanation of all chorus parameters:

Core Parameters

ParameterRangeDefaultDescription
Chorus_ModeDual/Tri TapTri TapNumber of chorus voices (2 or 3)
PresetCustom + 4 presetsClassicPre-configured parameter sets
Dry_Mix0.0-1.00.7Original signal level in output
Wet_Mix0.0-1.00.5Chorus effect level in output

Delay and Modulation Parameters

ParameterRangeDefaultDescription
Base_delay_ms1.0-30.010.0Center delay time in milliseconds
Modulation_depth0.01-0.500.15Pitch modulation intensity
Rate_10.1-10.02.5First LFO modulation rate (Hz)
Rate_20.1-10.04.2Second LFO modulation rate (Hz)
Rate_30.1-10.06.3Third LFO modulation rate (Hz)

Output Parameters

ParameterRangeDefaultDescription
Scale_peak0.1-1.00.99Output peak normalization level
Play_after_processing0/11Auto-play result after processing

Parameter Interactions

Key relationships:
  • Base_delay vs ensemble size: Longer delays = larger ensemble illusion
  • Modulation_depth vs pitch variation: Higher depth = more detuning
  • Dry/Wet mix vs effect intensity: Balance determines chorus prominence
  • Rate spread vs complexity: Wider rate differences = richer modulation
  • Voice count vs density: More voices = thicker, more complex chorus

Parameters work together to create the overall chorus character and intensity

Recommended Custom Settings

🎻 String Section

Goal: Create realistic string ensemble from solo instrument

Settings:

  • Chorus_Mode: Tri Tap
  • Base_delay_ms: 18.0
  • Modulation_depth: 0.12
  • Rates: 1.2, 3.6, 5.8 Hz
  • Dry_Mix: 0.6, Wet_Mix: 0.6

🎹 Vintage Synth

Goal: Classic analog synthesizer chorus

Settings:

  • Chorus_Mode: Dual Tap
  • Base_delay_ms: 14.0
  • Modulation_depth: 0.18
  • Rates: 2.8, 5.2 Hz
  • Dry_Mix: 0.5, Wet_Mix: 0.7

🎤 Background Vocals

Goal: Thicken and blend background vocal tracks

Settings:

  • Chorus_Mode: Tri Tap
  • Base_delay_ms: 9.0
  • Modulation_depth: 0.09
  • Rates: 2.2, 3.9, 5.5 Hz
  • Dry_Mix: 0.8, Wet_Mix: 0.4

Applications

Vocal Production

Use case: Add professional polish and thickness to vocals

Technique: Use Subtle Chorus preset with Tri Tap mode

Example: Transform thin vocal recordings into rich, professional tracks

Guitar Processing

Use case: Create classic chorus guitar sounds

Technique: Use Classic Chorus preset with Dual Tap mode

Example: Process clean electric guitar for 1980s-style chorus effects

Synthesizer Enhancement

Use case: Transform simple synth patches into rich textures

Technique: Use Rich Ensemble preset with Tri Tap mode

Example: Create lush pads and strings from basic synthesizer sounds

Sound Design

Use case: Create atmospheric and special effects

Technique: Use Deep Shimmer preset with extreme settings

Example: Process sounds for ambient, cinematic, or experimental contexts

💡 Creative Techniques

Advanced applications:

  • Frequency-specific chorus: Process different frequency bands separately
  • Automated parameters: Change mix balances or rates over time
  • Layered effects: Apply chorus before or after other effects
  • Extreme settings: Use very long delays or high depths for special effects

Troubleshooting Common Issues

Problem: Phase cancellation or thinning
Cause: Poor dry/wet balance or extreme modulation
Solution: Adjust mix balance or use more moderate modulation settings
Problem: Echoes instead of chorus
Cause: Base delay too long for the material
Solution: Reduce base_delay_ms to 5-15ms range
Problem: Effect too subtle
Cause: Low wet mix or shallow modulation
Solution: Increase wet_mix and/or modulation_depth
Problem: Artificial sounding
Cause: Too much modulation or inappropriate rates
Solution: Use more natural rates (2-6 Hz) and moderate depth