Analyzes masking relationships between 3 or more stems at once, identifying which pairs have the worst frequency collisions and where the overall mix has crowding problems.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| file_paths | string[] | required | Array of paths to audio stems (3 or more) |
| channel | string | "all" | Channel to analyze |
Example Output
$ multi_stem_masking [vocals.wav, guitar.wav, keys.wav, bass.wav]
Multi-stem Masking Analysis: 4 stems
Worst Collisions: 1. vocals + guitar 0.67 @ 500 Hz - 2 kHz 2. guitar + keys 0.54 @ 250 Hz - 1 kHz 3. bass + guitar 0.41 @ 125 - 500 Hz 4. vocals + keys 0.38 @ 1 - 4 kHz 5. bass + keys 0.22 @ 125 - 250 Hz 6. vocals + bass 0.11 @ (no significant overlap)
Crowded Frequency Zones: 500 Hz - 1 kHz: 3 stems competing (vocals, guitar, keys) 1 kHz - 2 kHz: 2 stems competing (vocals, guitar) 250 - 500 Hz: 2 stems competing (guitar, keys)
Suggested Priority: 1. Separate vocals from guitar in 500 Hz - 2 kHz 2. Separate guitar from keys in 250 Hz - 1 kHz
What the Numbers Mean
-
Worst Collisions — Pairs of stems ranked by masking severity. The number is the same 0-1 severity scale as analyze_masking. Highest-severity pairs should be addressed first.
-
Crowded Frequency Zones — Bands where 3+ stems are competing. These are the mix’s biggest clarity problems — too many elements fighting for the same space.
-
Suggested Priority — AI-generated recommendations for which masking pairs to address first, based on severity and how many other stems are affected in that range.
Example Prompts
Full session check
Which stems in my mix are fighting each other? Analyze masking across vocals.wav, guitar.wav, bass.wav, drums.wav, keys.wav
Clarity issues
My mix sounds muddy — which stems are competing in the low mids?
Related Tools
- analyze_masking — Detailed two-stem comparison for deeper investigation
- analyze_spectrum — See individual stem frequency profiles
- batch_diagnostic — Overall stem health before masking analysis
Pro tip
Start with multi_stem_masking to identify the worst offenders, then use analyze_masking on specific pairs for detailed per-octave data. This narrows your EQ decisions to exactly where they matter.