Multiband Distortion — User Guide
Frequency‑split distortion: apply different distortion types and amounts to low, mid, and high frequency bands independently for precise spectral control.
What this does
This script implements multiband distortion — a sophisticated distortion effect that splits the audio signal into three frequency bands (low, mid, high), applies different distortion algorithms to each band independently, then recombines them. Key features: (1) Phase‑coherent crossover: Linear‑phase Hann‑band filters for clean band splitting. (2) Three distortion types: Soft Clip (tanh), Hard Clip, and Sine Fold for each band. (3) Independent controls: Drive, distortion type, and gain per band. (4) 5 Built‑in Presets: Warm bass/frizz highs, V‑shape, mid‑range crunch, full fuzz. (5) Visual spectral analysis: Color‑coded band display with spectral comparison.
Key Features:
- Three‑band processing — Low, Mid, High with adjustable crossovers
- Phase‑coherent splitting — Minimizes phase artifacts at crossover points
- Three distortion algorithms — Soft Clip, Hard Clip, Sine Fold per band
- 5 Built‑in Presets — Curated multiband distortion recipes
- Independent gain staging — Drive and gain control per band
- Spectral visualization — Color‑coded band analysis with distortion effects
Technical Implementation: (1) Crossover system: Uses Hann‑band filters for phase‑coherent splitting. Low = 0‑Low_Split, Mid = Low_Split‑High_Split, High = High_Split‑Nyquist. (2) Distortion procedures: Three algorithms: Soft Clip (tanh), Hard Clip (conditional clipping), Sine Fold (wavefolding). (3) Gain staging: Independent Drive (pre‑distortion) and Gain (post‑distortion) per band. (4) Mix control: Wet/dry blend from 0‑100%. (5) Visualization: Shows original vs. processed spectra with color‑coded band regions and band‑specific settings display.
Quick start
- In Praat, select exactly one Sound object.
- Run script… →
apply_multiband_distortion.praat. - Choose a Preset (overrides sliders) or "Manual" to use sliders.
- Set Low_Split_Hz and High_Split_Hz for band boundaries.
- Configure each band: Drive, Type, Gain.
- Adjust Mix (0‑1 = dry‑wet) and Output_Gain.
- Enable Draw_visualization to see spectral analysis.
- Click OK — effect applied, result named "originalname_MultiDist_presetname".
Multiband Theory
Three‑Band Architecture
🎛️ Band Definition & Crossover
Crossover strategy: The script implements a subtractive crossover system: (1) Create total low‑pass at f_H. (2) Create low band at f_L. (3) Mid band = total low‑pass − low band. (4) High band = original − total low‑pass. This ensures perfect reconstruction when bands are summed without distortion.
Distortion Algorithm Types
Soft Clip (Hyperbolic Tangent)
Hard Clip (Conditional Clipping)
Sine Fold (Wavefolding)
Phase‑Coherent Crossover Implementation
🔀 Subtract‑Method Band Splitting
Why subtractive method? This approach ensures that bands sum perfectly to the original when no distortion is applied. Traditional parallel filter banks can have phase misalignment at crossover points. The subtractive method uses the same filtered signal (LP_Total) for both mid and high calculations, ensuring phase coherence.
Parameter Interactions
Crossover Frequencies
Low_Split_Hz: Separates sub‑bass from midrange. Typical: 80‑300 Hz.
High_Split_Hz: Separates midrange from highs. Typical: 1500‑5000 Hz.
Interaction: Wider mid band = more fundamental frequencies affected. Narrower bands = more precise spectral control.
Drive (Pre‑Distortion Gain)
Effect: Amplifies signal before distortion nonlinearity.
Per‑band strategy: Higher on mids for presence, lower on highs to avoid harshness, moderate on lows for warmth.
Typical range: 0.5‑5.0 for subtle, 5‑15 for moderate, 15‑30 for extreme.
Distortion Type Selection
Soft Clip: Smooth, musical, analog‑like. Good for most applications.
Hard Clip: Aggressive, digital, rich in odd harmonics. Use for extreme effects.
Sine Fold: Complex, metallic, inharmonic. Experimental textures.
Gain (Post‑Distortion)
Effect: Adjusts level after distortion.
Purpose: Compensate for level loss from distortion, or create spectral balance.
Strategy: Often > 1.0 to restore peaks reduced by clipping.
Spectral Balance Strategies
🎚️ Common Multiband Recipes
Bass‑Focused (Electronic): • Low: Soft Clip @ 3‑5x, Gain 1.1‑1.3 • Mid: Soft Clip @ 1‑2x, Gain 0.9‑1.0 • High: Soft Clip @ 0.5‑1x, Gain 0.8‑0.9 • Result: Warm low‑end, clean mids/highs
Vocal‑Focused: • Low: Soft Clip @ 1x, Gain 0.8 • Mid: Soft Clip @ 2‑4x, Gain 1.1‑1.3 • High: Soft Clip @ 1‑2x, Gain 1.0 • Crossovers: 120 Hz, 4000 Hz • Result: Present vocals, controlled low/high
Guitar "Amp‑Like": • Low: Hard Clip @ 2‑3x, Gain 1.0 • Mid: Soft Clip @ 4‑6x, Gain 1.2 • High: Hard Clip @ 3‑5x, Gain 0.9 • Crossovers: 150 Hz, 3500 Hz • Result: Punchy lows, singing mids, crisp highs
Experimental Texture: • Low: Sine Fold @ 8‑12x, Gain 0.7 • Mid: Hard Clip @ 10‑15x, Gain 0.8 • High: Sine Fold @ 15‑20x, Gain 0.6 • Result: Complex, inharmonic, evolving texture
Parameters & Presets
Common Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| Preset | optionmenu | Manual | 5 built‑in presets or manual control |
| Low_Split_Hz | real | 200 | Low‑mid crossover frequency |
| High_Split_Hz | real | 2500 | Mid‑high crossover frequency |
| Low_Drive / Mid_Drive / High_Drive | real | 1.0 | Pre‑distortion gain per band |
| Low_Type / Mid_Type / High_Type | optionmenu | Soft Clip | Distortion type per band |
| Low_Gain / Mid_Gain / High_Gain | real | 1.0 | Post‑distortion gain per band |
| Mix_0_to_1 | real | 1.0 | Wet/dry mix (0=dry, 1=wet) |
| Output_Gain | real | 0.9 | Master output gain |
| Draw_visualization | boolean | 1 (yes) | Show spectral analysis display |
| Play_result | boolean | 1 (yes) | Auto‑play after processing |
Built‑in Presets
| Preset | Low | Mid | High | Crossovers | Character |
|---|---|---|---|---|---|
| Warm Bass / Clean Highs | Soft @ 3x | Soft @ 1x | Soft @ 0.5x | 200/2500 | Warm low‑end, clean mids/highs |
| Frizz (Distorted Highs) | Soft @ 1x | Soft @ 1x | Hard @ 8x | 200/1500 | Clean low/mid, sizzling highs |
| V‑Shape Destruction | Hard @ 4x | Soft @ 0.5x | Hard @ 4x | 200/2500 | Aggressive lows/highs, clean mids |
| Mid‑Range Crunch | Soft @ 0.5x | Fold @ 6x | Soft @ 0.5x | 400/3000 | Telephone‑like mid focus |
| Full Spectrum Fuzz | Hard @ 5x | Hard @ 5x | Hard @ 5x | 200/2500 | Heavy distortion across spectrum |
Preset Design Philosophy
🎛️ Preset Characteristics Explained
Warm Bass / Clean Highs: • Low band: Moderate Soft Clip (3x) for warmth • Mid band: Unity processing (1x) for transparency • High band: Reduced Drive (0.5x) to avoid harshness • Crossovers: Standard 200/2500 Hz • Use: Bass‑heavy music, electronic, hip‑hop
Frizz (Distorted Highs Only): • Low/Mid: Clean (1x Soft Clip) • High: Extreme Hard Clip (8x) for sizzle • High crossover lowered to 1500 Hz to capture more high‑mids • Use: Guitar "presence" boost, cymbal enhancement, vocal air
V‑Shape Destruction: • Low/High: Aggressive Hard Clip (4x) • Mid: Clean (0.5x Soft Clip) with reduced gain • Creates scooped‑mid "smiley face" EQ with distortion • Use: Aggressive rock/metal, sound design
Mid‑Range Crunch (Telephone): • Low/High: Clean with reduced gain • Mid: Heavy Sine Fold (6x) for complex crunch • Crossovers widened: 400/3000 Hz to focus on vocal range • Use: Lo‑fi effects, vocal processing, retro sounds
Full Spectrum Fuzz: • All bands: Heavy Hard Clip (5x) • Uniform processing across spectrum • Creates traditional "full‑range" fuzz • Use: Extreme distortion, noise music, sound design
Parameter Relationships
Applications
Mastering‑Grade Distortion
Use case: Adding warmth and harmonics to final mixes
Technique: Use Warm Bass preset with subtle settings
Tip: Low Drive 1.5‑2.5, Mid Drive 1.0‑1.5, High Drive 0.5‑1.0, Mix 0.1‑0.3
Advanced: Different settings for different genres: more low distortion for electronic, more mid for rock
Bass & Kick Processing
Use case: Adding warmth and punch to low‑end
Technique: Focus distortion on low band only
Tip: Low_Split 80‑120 Hz, Low Drive 3‑6 (Soft Clip), Mid/High Drive 1.0
Advanced: Parallel process: heavily distort low band, mix 20‑40% with clean
Vocal Enhancement
Use case: Adding presence and "air" to vocals
Technique: Focus on mid‑high bands
Tip: Low_Split 100‑150 Hz (remove rumble), High_Split 3000‑4000 Hz, Mid Drive 2‑4, High Drive 1‑2
Advanced: De‑ess before multiband distortion to prevent sibilance harshness
Guitar Amp Simulation
Use case: Creating complex amp‑like distortion
Technique: Different distortion types per band
Tip: Low: Hard Clip @ 3x, Mid: Soft Clip @ 5x, High: Hard Clip @ 4x
Advanced: Chain with cabinet IR after distortion for authentic amp sound
Sound Design & Experimental
Use case: Creating unique spectral textures
Technique: Extreme parameter combinations
Tip: Sine Fold on mids, Hard Clip on highs, very different crossover points
Advanced: Automate crossover frequencies for evolving spectral effects
Practical Workflow Examples
🎵 Mastering Warmth
Goal: Subtle harmonic enhancement on master bus
Settings:
- Preset: Warm Bass (modified)
- Low: Soft @ 2.0x, Gain 1.1
- Mid: Soft @ 1.5x, Gain 1.05
- High: Soft @ 1.0x, Gain 1.0
- Mix: 0.2 (20% wet)
- Crossovers: 120 Hz, 3500 Hz
Result: Subtle warmth across spectrum, emphasized low‑end, no harshness
🎸 Modern Metal Guitar
Goal: Tight low‑end, singing mids, crisp highs
Settings:
- Preset: V‑Shape (modified)
- Low: Hard @ 3.5x, Gain 1.0
- Mid: Soft @ 4.0x, Gain 1.2
- High: Hard @ 3.0x, Gain 0.9
- Mix: 1.0 (100% wet)
- Crossovers: 150 Hz, 4000 Hz
Result: Punchy rhythm, singing leads, defined high‑end
🔮 Spectral Morphing
Goal: Evolving spectral distortion texture
Settings:
- Preset: Manual extreme
- Low: Sine Fold @ 10x, Gain 0.7
- Mid: Hard Clip @ 8x, Gain 0.8
- High: Sine Fold @ 12x, Gain 0.6
- Mix: 0.5
- Crossovers: 500 Hz, 2000 Hz (narrow mid)
Result: Complex, inharmonic texture with distinct band character
Troubleshooting Common Issues
Cause: Crossover filters causing phase issues at band boundaries
Solution: Adjust crossover frequencies, use wider transition (increase from 20 Hz), or reduce Mix
Cause: Too much distortion on low band, or Low_Split too high
Solution: Reduce Low Drive, lower Low_Split, increase Low Gain, or use Soft Clip instead of Hard Clip
Cause: Too much Drive on high band, or Hard Clip on highs
Solution: Reduce High Drive, use Soft Clip instead, lower High_Split, or reduce Mix
Cause: Drive too low, Mix too low, or Gain compensation too aggressive
Solution: Increase Drive values, increase Mix, adjust Gain per band
Cause: Extreme Drive values, especially with Hard Clip or Sine Fold
Solution: Reduce Drive, use Soft Clip, or oversample before processing
Processing Pipeline
🎛️ Multiband Distortion Processing Flow
START: User Selects Sound
│
▼
INPUT VALIDATION
│ • Check exactly one Sound selected
│ • Exit with error if not
│
▼
FORM PROCESSING
│ • Load user parameters from form
│ • Apply preset overrides if selected
│ • Preset mapping:
│ Manual → "Manual"
│ Warm Bass → "WarmBass"
│ Frizz → "Frizz"
│ V‑Shape → "VShape"
│ Mid Crunch → "MidCrunch"
│ Full Fuzz → "FullFuzz"
│
▼
SAFETY CHECKS
│ • Ensure Low_Split < High_Split (swap if needed)
│ • Convert type numbers to names:
│ 1 → "Soft", 2 → "Hard", 3 → "Fold"
│
▼
SOUND PROPERTIES
│ • Get duration, sampling frequency
│ • Write InfoLine with parameter summary
│
▼
PHASE‑COHERENT CROSSOVER SPLIT
│
├── STEP 1: Total Low‑Pass
│ • Filter original: 0 to High_Split_Hz (Hann band)
│ • Result: LP_Total_Temp
│
├── STEP 2: Low Band
│ • Filter original: 0 to Low_Split_Hz (Hann band)
│ • Result: Low_Band
│
├── STEP 3: Mid Band (Subtractive)
│ • Copy LP_Total_Temp → Mid_Band
│ • Formula: Mid = LP_Total − Low_Band
│ • Contains: Low_Split to High_Split
│
└── STEP 4: High Band (Subtractive)
• Copy original → High_Band
• Formula: High = Original − LP_Total
• Contains: Above High_Split
│
▼
CLEANUP TEMP OBJECT
│ • removeObject: LP_Total_Temp
│ • Now have: Low_Band, Mid_Band, High_Band
│
▼
APPLY DISTORTION PER BAND
│
├── LOW BAND PROCESSING
│ • selectObject: Low_Band
│ • Call @applyDistortion procedure:
│ Parameters: Low_Drive, Low_Type, Low_Gain
│ • Distortion applied in‑place
│
├── MID BAND PROCESSING
│ • selectObject: Mid_Band
│ • Call @applyDistortion procedure:
│ Parameters: Mid_Drive, Mid_Type, Mid_Gain
│
└── HIGH BAND PROCESSING
• selectObject: High_Band
• Call @applyDistortion procedure:
Parameters: High_Drive, High_Type, High_Gain
│
▼
DISTORTION PROCEDURE LOGIC (@applyDistortion)
│ • Convert parameters to strings
│ • Type 1 (Soft Clip):
│ Formula: "tanh(self * " + drive$ + ") * " + gain$
│ • Type 2 (Hard Clip):
│ Build conditional formula with nested if/then
│ • Type 3 (Sine Fold):
│ Formula: "sin(self * " + drive$ + ") * " + gain$
│
▼
SUMMING BANDS (Wet Signal)
│ • Copy Low_Band → Wet_Sum_Temp
│ • Formula: Wet = Low + Mid + High
│ • Apply Output_Gain: Wet = Wet × Output_Gain
│
▼
MIX PROCESSING
│
├── CASE 1: Mix = 1.0 (100% Wet)
│ • Rename Wet_Sum_Temp → originalname_MultiDist_presetname
│ • Result = wet signal only
│ • Cleanup: (no dry object to remove)
│
└── CASE 2: Mix < 1.0 (Partial Mix)
• Copy original → Dry_Temp
• dry_Mix = 1.0 − mix_0_to_1
• wet_Mix = mix_0_to_1
• Formula: Dry = Dry×dry_Mix + Wet×wet_Mix
• Rename Dry_Temp → originalname_MultiDist_presetname
• Result = mixed signal
• Cleanup: removeObject: Wet_Sum_Temp
│
▼
FINAL OUTPUT PROCESSING
│ • Scale peak to 0.95 (prevent clipping)
│ • Write completion InfoLine
│
▼
VISUALIZATION PIPELINE (if enabled)
│
├── TITLE PANEL
│ • "Multiband Distortion: name (preset)"
│
├── ORIGINAL WAVEFORM
│ • Gray curve
│ • Time domain view
│
├── PROCESSED WAVEFORM
│ • Red curve
│ • Time comparison
│
├── SPECTRAL ANALYSIS
│ • Convert original to spectrum
│ • Convert result to spectrum
│ • Color‑coded band regions:
│ Low: Pink (0.9, 0.85, 0.85)
│ Mid: Green (0.85, 0.9, 0.85)
│ High: Blue (0.85, 0.85, 0.9)
│ • Draw crossover lines
│ • Band labels at top
│
├── BAND SETTINGS DISPLAY
│ • Three‑column layout
│ • Per‑band: Type, Drive, Gain
│ • Color‑matched to spectral regions
│
└── MASTER INFO
• Mix percentage
• Output Gain value
│
▼
VISUALIZATION CLEANUP
│ • removeObject: temporary spectrum objects
│ • Reset viewport settings
│
▼
FINALIZATION
│ • Play result if Play_result enabled
│ • Keep processed sound selected
│ • Return to Praat Objects window
│
END: Multiband‑distorted sound ready for use
Subtractive Crossover Implementation
Distortion Procedure Implementation
⚙️ @applyDistortion Procedure
Key implementation details: • String concatenation builds dynamic formulas • Hard Clip requires nested if/then (Praat Formula limitation) • Negative gain string needed for hard clip negative side • Procedure allows reuse for all three bands • In‑place processing (modifies the selected sound object)
Mix Processing Algorithm
Case 1: Mix = 1.0 (100% Wet): • Result = Wet signal only • Rename Wet_Sum_Temp to final name • No dry processing needed
Case 2: Mix < 1.0 (Partial Mix): • dry_Mix = 1.0 − mix_0_to_1 • wet_Mix = mix_0_to_1 • Create dry copy of original • Apply: Dry = Dry×dry_Mix + Wet×wet_Mix • Clean up Wet_Sum_Temp
Mathematical: Output = Dry×(1−α) + Wet×α, where α = mix_0_to_1 Parallel processing benefit: • Preserves transients from dry signal • Adds distortion character from wet • Can use more extreme distortion settings • Typical mix: 0.3‑0.7 for best results
Visualization Architecture
Mathematical Deep Dive
Filter‑Based Crossover Analysis
Distortion Algorithms in Frequency Domain
For sinusoidal input A sin(ωt):