Songsterr s6219701, live revision 8212897 of 2026-07-31. Tab under test Sean_song_v20_NOPHANTOM.gp5. Built 2026-08-13.
The reader passed a two-sided control at 96%, so its disagreements are evidence about the tab. Against the real recording the guitar is 78% supported where the control ceiling on a known-good tab is 96%. The disagreement is not spread evenly, it concentrates in a handful of contiguous sections, which is what "wildly wrong at places" looks like when it is measured.
The previous pass rendered the tab's guitar alone and scored 87%%. That measures whether a guitar can be read in silence, which was never the difficulty. This control renders the tab's guitar, its bass and its drums into one signal at the real record's own band balance, then asks two questions with one shared threshold.
Sensitivity render the true tab, ask about the true tab. It should say present.
Specificity render the true tab, ask about a tab whose guitar has been moved. It should say absent. A reader that says yes to everything scores 100%% on the first side and 0%% on the second.
| window | n_fft | cut | sensitivity | spec +1 | spec -2 | worst side |
|---|---|---|---|---|---|---|
| 93 ms | 2048 | 0.80 | 90% | 97% | 96% | 90% |
| 186 ms | 4096 | 0.80 | 93% | 99% | 99% | 93% |
| 372 ms winner | 8192 | 0.80 | 96% | 99% | 96% | 96% |
| 743 ms | 16384 | 0.86 | 96% | 100% | 97% | 96% |
Every window length clears the 85%% bar, so the result does not hinge on which one was chosen. Two falsifications were used, not one (+1 and -2 semitones), and the threshold was swept across the whole range rather than picked, so it could not be tuned to whatever the true tab happened to score.
Move a note down a whole tone inside a diatonic riff and it often lands on a pitch the guitar really is playing in the same window. The recording then does contain that pitch, and calling it present is correct about the audio. 17%% of the -2 falsifications are that case. They are excluded from the specificity score and counted on screen rather than quietly dropped.
Two separate faults, and the second one had not been found before.
Of the mix's energy at 60 to 90 Hz, 1.32%% survives into guitar.wav, and 9.82%% at 90 to 130 Hz. D2, E2, F#2 and G2 all sit in those two bands, so a transcription off that stem reads every chord minus its bottom note. The bass stem carries the opposite fault, holding the guitar's low E at high confidence over 45 to 185 frames. Both stems are contaminated, in opposite directions.
Every earlier pass asked what is bar N's root and compared it to the tab's lowest note in that bar. Measured on this tab, bar 9 holds eight distinct pitches and bar 13 holds six. Averaging a bar into one spectrum column turns a riff into a chord, so its "root" is whichever note rang loudest. The candidate dump proves it: in the two and three note bars the tab's root wins outright, and in the busy bars the winner is still a real tab note, just not the lowest one. A wrong-bar table built that way flags disagreement wherever the guitar is busy. That flaw sits underneath the earlier 60-bar table as well as the blind stem, and it is why this pass asks one question per note instead.
A shorter analysis window was expected to help and made it worse (worst side 58%% at 93 ms against 78%% at 372 ms). A cents-based tolerance was expected to help and made it worse (80%% down to 73%%), because 25 cents rounds to zero bins below 190 Hz and then misses the peak it aims at. What actually carried it from 80%% to 96%% was scoring peak salience instead of raw magnitude: each partial is measured against the median of the third of an octave around it, so the question is whether a peak stands there rather than whether that region is loud.
Of 219 contradicted notes, only 7 were the bass leaking through and 212 survive that check. A single contradiction is a measurement. The same substitution repeating across consecutive bars is a pattern, and only patterns are worth changing a tab over.
| bars | starts | tab writes | record prefers | move | notes | all bars affected |
|---|---|---|---|---|---|---|
| 46–53 | 1:25 | A2 | G2 | -2 | 21 | 46 47 48 49 50 51 52 53 |
| 76–81 | 2:21 | F#4 | A#4 | +4 | 15 | 76 77 78 79 80 81 |
| 49–53 | 1:30 | E2 | G2 | +3 | 13 | 47 49 50 51 52 53 |
| 41–43 | 1:15 | F#4 | G#4 | +2 | 15 | 9 27 41 42 43 45 |
| 64–66 | 1:58 | E2 | F#2 | +2 | 14 | 41 43 45 47 52 64 65 66 69 70 |
| 76–78 | 2:21 | F#4 | C#5 | +7 | 13 | 29 40 43 45 76 77 78 80 81 |
| 1–3 | 0:00 | E3 | C#3 | -3 | 8 | 1 2 3 29 30 |
| 27–28 | 0:49 | F#4 | B4 | +5 | 14 | 2 27 28 36 38 39 61 83 |
| 24–25 | 0:43 | E4 | G4 | +3 | 10 | 6 8 24 25 34 35 51 64 69 |
| 11–12 | 0:18 | B3 | E3 | -7 | 8 | 9 11 12 |
| 9–10 | 0:15 | B3 | E4 | +5 | 4 | 9 10 38 75 |
| 1–2 | 0:00 | E3 | G3 | +3 | 4 | 1 2 37 |
| 67–68 | 2:04 | E2 | B2 | +7 | 4 | 51 59 67 68 |
| 9–9 | 0:15 | F#4 | E4 | -2 | 4 | 9 43 |
| 65–65 | 2:00 | E4 | F#4 | +2 | 4 | 65 68 70 75 |
| 45–45 | 1:23 | F#3 | B3 | +5 | 4 | 45 61 83 |
| 45–45 | 1:23 | E2 | D2 | -2 | 4 | 45 48 50 52 |
21 notes written A2 and 13 written E2 both point at G2. Two different written pitches agreeing on one heard pitch across eight bars is a section sitting in the wrong position, not a scatter of single-note slips. Starts at 1:25.
15 notes written F#4 point at A#4 and 13 point at C#5. F#, A# and C# is an F# major triad, so the record is holding a chord there and the tab writes a single note. Starts at 2:21.
Bars holding fewer than six decidable notes are held back, because one note moves them 20 to 33 points and they would otherwise sit at the top of the list as noise. Median support across rankable bars is 85%.
| bar | at | support | notes | what the record prefers instead |
|---|---|---|---|---|
| 9 | 0:15 | 42% | 12 | B3->E3 x4 F#4->E4 x1 F#4->G#4 x1 B3->E4 x1 |
| 45 | 1:23 | 48% | 23 | F#4->G#4 x3 F#4->C#5 x3 F4->G#4 x1 C4->E4 x1 E2->F#2 x1 E2->A#2 x1 |
| 43 | 1:19 | 52% | 21 | F#4->G#4 x3 F#4->E4 x3 E2->F#2 x2 F#4->C#5 x1 C#4->G#4 x1 |
| 49 | 1:30 | 52% | 21 | A2->G2 x5 E2->G2 x3 G3->B3 x1 A2->E3 x1 |
| 53 | 1:38 | 53% | 17 | A2->G2 x4 E2->G2 x2 A2->E3 x1 E4->B4 x1 |
| 51 | 1:34 | 54% | 28 | A2->G2 x6 E2->G2 x4 E4->G4 x1 C#4->F#4 x1 E2->B2 x1 |
| 77 | 2:23 | 57% | 14 | F#4->A#4 x3 G4->A#4 x1 G4->F#4 x1 F#4->C#5 x1 |
| 78 | 2:25 | 58% | 12 | F#4->C#5 x3 F#4->A#4 x2 |
| 46 | 1:25 | 61% | 18 | D4->D#4 x3 D4->F4 x1 G#4->B4 x1 D4->B3 x1 A2->G2 x1 |
| 41 | 1:15 | 64% | 22 | F#4->G#4 x6 E2->F#2 x2 |
| 79 | 2:26 | 64% | 14 | F#4->A#4 x5 |
| 83 | 2:34 | 64% | 14 | F#4->B4 x3 F#3->B3 x2 |
| 2 | 0:01 | 67% | 24 | E3->C#3 x4 E3->G3 x2 B3->G3 x1 F#4->B4 x1 |
| 19 | 0:34 | 67% | 6 | G#3->C4 x1 G#3->C#4 x1 |
| 27 | 0:49 | 67% | 18 | F#4->B4 x3 F#4->G#4 x1 E3->G#3 x1 |
| 76 | 2:21 | 67% | 12 | F#4->A#4 x2 F#4->C#5 x1 G4->A#4 x1 |
| 47 | 1:26 | 68% | 22 | A2->G2 x2 E2->G2 x2 A2->E3 x1 G3->E3 x1 E2->F#2 x1 |
| 52 | 1:36 | 68% | 22 | E2->F#2 x3 C#4->F#4 x1 E2->D2 x1 A2->G2 x1 E2->G2 x1 |
| 75 | 2:19 | 70% | 10 | B3->E4 x1 E4->F#4 x1 E3->F#3 x1 |
| 12 | 0:20 | 71% | 14 | B3->E3 x2 B3->D#4 x2 |
A guitar E2 over a bass E1 has every one of its partials landing on an even partial of the bass. Nothing in a magnitude spectrum separates them, at any stem quality, with any tool. On this tab the guitar's lowest note sits exactly on a bass harmonic in 46 of 83 bars. Those notes are returned undecidable rather than given a confident answer. Reporting them as agreement would inflate the tab's score, and reporting them as disagreement would invent errors.
The recording is instrumental. The vocals stem carries 0.0%% of stem energy, so nothing but guitar, bass and drums occupies the band being read.
Alignment is not the problem. Support varies by 0.019 across a half second of offset, and the analysis window is 372 ms, so the scan rules out gross misalignment and cannot resolve 76 ms either way. The tab's own 76 ms was used rather than the offset that flatters it most.
Live revision 8212897 lists three tracks, and the one named Bass carries instrument Distortion Guitar, GM program 30, the same program as Rhythm Guitar. The local .gp5 matches. So the tab plays back as two distorted guitars whatever the notes say, which is worth fixing on its own and is separate from every pitch finding above.
The local .gp5 is dated 2026-07-31 16:28 and the live revision was created the same day at 21:39 with the description Fixed drum parts. The guitar is very likely identical, and confirming that byte for byte needs the live notation data, which sits behind an authenticated CDN path. The public metadata endpoints answer without a login, the notation itself returns 403.
| file | what it does |
|---|---|
note_presence.py | the reader and its two-sided control, one file so they cannot drift apart |
read_real.py | runs the passed reader against the record, scans alignment first |
verify_flagged.py | rejects bass leaks, holds back thin bars, keeps only repeated substitutions |
synth_control_mix.py | renders guitar, bass and drums at the record's band balance |
mix_low_reader.py | the bar-level reader that failed its control, kept as the record of why |
build_page.py | builds this page from the measurement files, no hand-typed numbers |
All under ~/Projects/_outputs/songsterr-sean-bass/guitarfix2/.
Playability on the live bytes. The local file passed the physical check already. Re-running it on what is actually live needs the authenticated Songsterr session, so it stays queued as q-2026-08-13-957e00.
Applying the corrections. Nothing in the tab has been edited. This page says where the record disagrees and how strongly, and the edit is a separate decision.