Drum kit guitar-bleed audit
Band practice 8.28, four-mic master. Why the kick reads as a kick and the snare reads as a guitar. Measured 2026-09-04 on Brandons-MacBook-Pro.
Verdict
The skill transfer is intact. jam-stem-rebuild/SKILL.md on this Mac still carries the correct ordering at step 5 and step 6: Demucs first, DrumSep second, on the Demucs drums.wav. Nothing was lost from the other machine.
The 8.28 v2 run departed from that ordering. It fed a raw room mic straight into DrumSep, after boosting +5 dB at 2.5 kHz and +7 dB at 6 kHz, which is the exact band the guitar amps occupy. DrumSep was trained on already-isolated drum stems, so it had no way to reject the guitar. It sorted the guitar into the snare and cymbal lanes.
The good kits already exist on disk for 11 of 13 songs. Fixing this is hours, not three days.
Status: Phase 1 is running now
Launched 2026-09-04T15:42:49 as launchd job com.drwu.phase1-song12-song16. It runs do_song.sh on the two songs that have no clean kit, which is the correct path: tilt, then Demucs htdemucs_6s, then DrumSep six-piece, then declick assemble. It verifies itself at the end by re-running the guitar-bleed measurement against the verbatim guitar mic and writing the table into its own log.
The 13 contaminated kits were quarantined at 2026-09-04T15:44, 17 GB moved into v2-mic-lanes/…/delete/CONTAMINATED-drumkits-2026-09-04/. Nothing was deleted. Each song folder keeps a QUARANTINED-drumkit.md naming the new location and the reason. The verbatim mic lanes were not touched.
Log: ~/Projects/_outputs/band-practice-stems/8-28/phase1_song12_song16.log. Completion marker: PHASE1_DONE.
1. Hear it first
Song 13, seconds 64 to 82, every clip loudness-matched to −16 LUFS so quiet lanes are audible. The percentage is how much of that lane a least-squares projection of the two guitar mics explains. Lower is cleaner.
Reference: what the guitar actually sounds like
Guitar mic 3, verbatim
The independent transducer. Every number below is measured against this.Kick mic 1, verbatim
41.6%
The room mic handed to DrumSep. Nearly half of it is guitar before separation begins.Snare lane, the worst case
snare.wav
58.5%
Spectral centroid 1011 Hz, 4.5% of energy above 5 kHz, 125 onsets per minute. A real snare crack is broadband. This is a midrange instrument sitting in the snare lane.snare.wav
1.9%
Centroid 3445 Hz, 27.4% above 5 kHz, crest factor 32.2 dB. That is a snare.Crash and ride
crash.wav
48.2%
crash.wav
4.4%
ride.wav
26.7%
ride.wav
4.9%
Prototype: cancel the guitar mics out of the kick mic first
Kick mic 1
41.6%
Raw room mic.Kick mic 1, guitar removed
17.1%
Kick band 40 to 120 Hz retained at 96%, the 2 to 6 kHz band down to 81%. The mics are sample-locked, so the leakage path is a fixed linear filter and it solves cleanly.2. The measurement, all 13 songs
Percent of each drum lane explained by the two verbatim guitar mics, per-frequency-bin least squares over a window inside each song. The guitar mics are separate physical transducers, so this test never asks a model to grade its own output.
under 10%, clean10 to 25%, marginalover 25%, contaminated
| song | path | kick | snare | toms | hh | ride | crash |
|---|---|---|---|---|---|---|---|
| song1031–75s | mic‑direct | 34.3 | 52.6 | 45.5 | 37.1 | 34.4 | 25.1 |
| Demucs‑first | 25.1 | 7.8 | 2.0 | 10.7 | 9.2 | 22.5 | |
| song11134–194s | mic‑direct | 22.2 | 25.6 | 60.4 | 23.1 | 25.8 | 20.5 |
| Demucs‑first | 19.9 | 7.8 | 20.6 | 11.1 | 7.2 | 11.3 | |
| song1230–72s | mic‑direct | 15.9 | 54.5 | 25.5 | 25.0 | 22.9 | 17.8 |
| Demucs‑first | no Demucs-first kit on disk | ||||||
| song13159–219s | mic‑direct | 25.7 | 76.9 | 35.1 | 20.8 | 26.8 | 29.1 |
| Demucs‑first | 22.9 | 7.9 | 5.7 | 25.2 | 10.4 | 12.1 | |
| song1441–99s | mic‑direct | 9.5 | 73.0 | 42.9 | 26.6 | 54.2 | 3.0 |
| Demucs‑first | 3.6 | 1.1 | 3.9 | 4.2 | 1.6 | 1.3 | |
| song15121–181s | mic‑direct | 19.6 | 57.0 | 39.2 | 18.2 | 23.3 | 6.2 |
| Demucs‑first | 14.3 | 6.8 | 19.0 | 5.7 | 2.2 | 5.8 | |
| song16102–162s | mic‑direct | 40.0 | 58.8 | 32.9 | 12.6 | 52.4 | 9.6 |
| Demucs‑first | no Demucs-first kit on disk | ||||||
| song17188–248s | mic‑direct | 11.6 | 62.0 | 60.8 | 13.4 | 25.2 | 8.3 |
| Demucs‑first | 11.4 | 0.9 | 4.7 | 3.5 | 6.3 | 3.0 | |
| song1893–153s | mic‑direct | 5.5 | 28.0 | 47.6 | 17.1 | 41.6 | 14.8 |
| Demucs‑first | 3.2 | 9.8 | 2.6 | 12.2 | 10.5 | 14.1 | |
| song19143–203s | mic‑direct | 34.2 | 56.2 | 56.7 | 20.6 | 34.4 | 5.6 |
| Demucs‑first | 4.5 | 2.6 | 1.4 | 6.5 | 42.7 | 10.8 | |
| song2049–109s | mic‑direct | 23.6 | 43.5 | 43.5 | 25.4 | 42.1 | 41.2 |
| Demucs‑first | 21.7 | 7.0 | 6.1 | 6.7 | 5.7 | 19.3 | |
| song2169–129s | mic‑direct | 20.9 | 51.6 | 17.1 | 29.7 | 22.9 | 35.2 |
| Demucs‑first | 6.3 | 1.5 | 0.6 | 3.2 | 2.1 | 3.7 | |
| song2269–129s | mic‑direct | 31.4 | 62.8 | 23.7 | 27.2 | 37.8 | 21.1 |
| Demucs‑first | 12.4 | 2.4 | 4.0 | 8.4 | 5.0 | 2.3 | |
Snare lane across the 11 paired songs. Mic-direct runs 25.6% to 76.9%, median 56.2%. Demucs-first runs 0.9% to 9.8%, median 6.8%. Every single song moves the same direction. Song 12 and song 16 have no Demucs-first kit yet, which is the only real work outstanding.
3. Why it happened
- DrumSep assumes a clean input. MDX23C-DrumSep was trained to split an isolated drum stem into six pieces. Its output heads sum back to the input, so anything in the input has to land in some lane. Guitar in, guitar out, distributed across snare and cymbals.
- The presence lift made it worse.
_kitsource_mic1_presence_lift.wavis mic 1 with +5 dB at 2.5 kHz and +7 dB at 6 kHz, applied to help the separator find cymbals. Electric guitar lives in that band, so the lift raised the guitar along with the cymbals. Measured: 41.6% guitar before the lift, 42.1% after. - The reasoning in the script was sound and the conclusion was wrong. The header of
drumkit_from_mic.shsays “no separation upstream of this, so the kit split is the only model in the path,” treating the removal of Demucs as a provenance win. Removing Demucs removed the only stage that could take the guitar out. - The currently running chain is on the correct path.
run_8_14_chain.py, live under launchd ascom.drwu.chain-8-14-missing6, does Demucs, then measures the drum stem, then DrumSep. Leave it running.
4. The three-phase fix
Phase 1 — Adopt the kits that already pass, fill the two gaps
- Promote the 11 existing Demucs-first kits to the delivered set, retire the mic-direct kits into a sibling
delete/folder rather than removing them. - Run
do_song.sh 12anddo_song.sh 16under launchd. Demucs is about 10 minutes per song, DrumSep is 80 to 90 minutes per song atnum_overlap: 4. - Gate every lane on the air-band reality check from
composite-stem-alignment/scripts/drum_lane_reality_gate.pyso a hallucinated cymbal never ships.
Status: running since 2026-09-04T15:42:49 under com.drwu.phase1-song12-song16. Quarantine of the 13 contaminated kits completed at 15:44.
Phase 2 — Level and air, through the skill that already encodes it
- The Demucs-first lanes measure 6 to 18 dB quieter than the mic-direct lanes. That is a gain problem, and it is separate from contamination.
multimic-stem-fixlesson 4 already restores the 6 to 16 kHz air DrumSep strips off hats and cymbals, by blending the highpassed full Demucs drums stem back in. Run the skill rather than hand-rolling an EQ.- Verify each restored lane against the raw mics with the air-band gate, so the restoration adds real signal.
Cost: minutes per song, scripted.
Phase 3 — The punchy version, proven on one song before any batch
- Cancel the two guitar mics out of mic 1 first, then Demucs, then DrumSep. The prototype above already takes mic 1 from 41.6% guitar to 17.1% in 1.5 seconds per minute of audio, and keeps 96% of the kick band.
- The payoff is a close-mic kit with the punch mic 1 has and the cleanliness the Demucs path has.
- Prove it end to end on song 13 alone, measure the six lanes against the guitar mic, and only then run the other 12.
Cost: one 90-minute validation run, then a decision. This phase is optional and it does not block Phase 1.
5. Method and reproduction
Every number on this page comes from one measurement. For each frequency bin f, solve the least-squares gain a_f that best predicts the lane magnitude from the guitar mic magnitude, then report the explained energy as a fraction of the lane's total. The reference is always a verbatim guitar microphone, never a model output, so the test cannot be gamed by the separator that produced the lane.
A lag search from −3 s to +3 s was run on the Demucs-first kit to rule out the possibility that its low scores came from time misalignment. Best-lag snare was 2.2% against 1.9% at zero lag, so alignment is not carrying the result.
- Sweep data: bleed_sweep.json
- Cancellation prototype: guitar_cancel.py
- Correct pipeline of record:
~/.claude/skills/jam-stem-rebuild/SKILL.md, steps 5 and 6 - Level and air restoration:
~/.claude/skills/multimic-stem-fix/SKILL.md, lesson 4 - Kits measured:
~/Projects/_outputs/band-practice-stems/8-28/
~/venvs/audio_midi_311. Window sizes and offsets per song are recorded in the sweep JSON. Audio clips are loudness-matched for listening and are not the delivered levels.