The Ship — MIDI/GP audit

Verified 2026-07-16 against the album masters in ~/Downloads/The Ship/. Every number below was measured, not asserted.
The eight combined full-band files are timing-correct. No tempo fault exists on any track. Two real defects were found and fixed: 04 Six Feet Under had its lead and rhythm guitars swapped, and 07 MOP had its only guitar mislabeled. The genuine remaining gap is 01 Seedy Shade and 11 Ambulance, which have no Songsterr transcription to build from.
8 / 8
combined files pass the drift gate
2
label bugs found and fixed
2
songs blocked with no source transcription
1
earlier finding retracted as wrong

Correction: 09 MHL is not broken

An earlier pass in this session flagged 09 MHL as 28% adrift and called it the worst track on the record. That was wrong. It came from comparing the MIDI against the audio file length. MHL's master runs music to ~156s, then holds 64 seconds of silence, then a hidden outro from 220s to 236s. Measured against actual musical content, MHL is the second-tightest track on the album at 0.8%. The finding is withdrawn.

Drift: MIDI end against real song end

Each combined MIDI's last note versus where the master actually stops making sound. Under 6% is within normal transcription tail slack, since transcriptions routinely omit a final ring-out or fade.

TrackMIDI endSong endDriftErrorVerdict
02 Flake of the Year195.5s199.0s-3.5s1.8%OK
03 Gene269.2s272.5s-3.3s1.2%OK
04 Six Feet Under212.6s221.5s-8.9s4.0%OK
05 Sleep vs Death253.0s266.5s-13.5s5.1%OK
07 MOP171.4s173.0s-1.6s0.9%OK
08 JGBFTL140.1s147.0s-6.9s4.7%OK
09 MHL155.3s156.5s-1.2s0.8%OK
10 Trapped in Wonderland169.9s174.0s-4.1s2.4%OK
01 Seedy Shade241.0sNO FILE
11 Ambulance (encore)263.5sNO FILE

Track 06 Good Morning Captain has no audio and is not part of the target. The album is 10 tracks.

Why Gene sounded off, and what the evidence says

Gene was the track you flagged as "way off beat, probably tempo as well." Four independent checks say the note data is aligned:

CheckResultReading
Audio tempo vs MIDI tempo89.10 vs 89.00 BPMMatch. No tempo fault.
Drum entry, audio vs MIDI32.0s vs 33.0sAligned at the start.
Last drum hit, audio vs MIDI247.25s vs 247.8sStill aligned 3.5 min later.
MIDI end vs song end269.2s vs 272.5s1.2% — tight.

If the tempo were wrong, the start and the end could not both land within a second across four and a half minutes. That leaves two candidates for what you heard: the transcription's note and rhythm choices in the solo, or a bad render. The earlier WAV was made with pretty_midi, which itself warned about the tempo read on these files, so the render is a live suspect while the file is sound.

An A/B render that settles it by ear

The old gene_solo_vs_click.wav asked you to judge the solo against a click, which is indirect. These put the MIDI in your left ear and the real guitar in your right. If they lock, alignment is fine and the solo needs note cleanup, not re-transcription. The drums file is the control: it is known-aligned, so it tells you what "locked" sounds like.

~/Projects/_outputs/theship-tabs/03_gene/gene_LEAD_midi-L_vs_real-R.wav     <- the question
~/Projects/_outputs/theship-tabs/03_gene/gene_DRUMS_midi-L_vs_real-R.wav    <- the control

Two bugs found in the combine tool, both fixed

The defect was in ~/Projects/gp_fullband_combine.py. It discarded each source's own track names and relabeled guitars purely by note density:

clean.sort(key=len)          # ascending: sparser = Lead, denser = Rhythm
gtracks = clean[-2:]
names = ['Lead Guitar', 'Rhythm Guitar']

Lead is usually sparser than rhythm, so the guess landed correctly on 02, 08, 09 and 10 by luck. It failed exactly where the assumption broke:

TrackSource saysTool wroteStatus
04 Six Feet UnderLead 1315 / Rhythm 387Lead 387 / Rhythm 1319SWAPPED → FIXED
07 MOPRhythm 1800 (only guitar)Lead 1833, no rhythmMISLABELED → FIXED
02, 08, 09, 10Lead sparser than RhythmsameCORRECT BY LUCK

A third bug surfaced during the rebuild: the guitar extractor never filtered the drum channel, so 07's 59-note percussion track was promoted into a phantom "Lead Guitar". Now skipped. The fix reads the source's name first and only falls back to density when the source is silent on the matter. Old outputs are preserved in _outputs/theship-tabs/_archive_2026-07-16/ and the old script in gp_fullband_combine.py.bak-2026-07-16.

What is genuinely blocked

01 Seedy Shade and 11 Ambulance have stems and masters but no Songsterr export exists for either. The pipeline is "Songsterr full-band export + Moises guitar split → combine", so with no export there is nothing to combine and no amount of local work produces one. These two need a Songsterr transcription first. That is the only true blocker on the record.

Honest status of the method

Two measurements were built during this audit and then discarded as unsound, recorded here so they are not repeated. A cross-correlation alignment probe returned offsets up to ±1.9s on Gene; at 89 BPM the beat is 0.674s and several results landed on exactly 1.685s, which is 2.5 beats, so it was locking onto the wrong beat rather than measuring drift. A nearest-onset test then put the lead at 88ms median error against a drums control at 59ms, a gap smaller than the detector's own noise floor. Neither can support a conclusion, and neither was used for any verdict above.