Three guitar transcriptions measured against the isolated stems, one question per note, with a synthetic control establishing what the detector can do before any of them is graded.
CORRECTION, added after a controlled experiment. An earlier version of this page reported
that the stem-derived source c-tied.gp was the weakest transcription in the set, with
Rhythm pitch support at 24.7%. That was a metadata defect, not a bad transcription.
Its Rhythm track carries CapoFret 2 while every Note's stored Midi was written for
capo 0, so the capo-computed pitch exceeds the stored Midi by exactly 2 on all 891 notes. The
file means two things at once, and this audit read that staff two semitones sharp. Changing only the
capo, with every note, onset, duration, string and fret preserved and verified identical, moves
Rhythm pitch support from 24.7% to 63.4%, ownership from 45.6% to 71.9%, and puts the staff in
the correct stem. The corrected source sits within 1.5 points of the promoted build.
The gate now hard-fails this defect as CAPO_MIDI_MISMATCH. It fires 891 times on
c-tied.gp and is clean on the corrected twin and on the promoted build.
The thirteen promotions were checked against the corrected source and are unaffected. Run the
gate on chain62 with c-tied.gp and again with c-tied-CAPO0.gp and both
return preservation PASS and position PASS, identically. The reason is mechanical: the gate's pitch
census prefers each Note's stored Midi, and position compares written string and fret. Both are capo
independent. Receipt 11f6b0f89211bb9f binds chain62 to the corrected baseline.
That divergence is exactly how the defect hid. The gate resolved pitch from stored Midi and this audit resolved it from tuning plus capo plus fret, so the gate saw nothing while the audit read two semitones sharp. The audit now counts and prints the disagreement too, and the gate fails on it, so neither tool can pass it over again.
Every transcription derived from the stems beats the Songsterr AI tab, and they beat it by a
lot on the Rhythm staff. Read with its own note data, c-tied.gp scores 63.4% Rhythm
pitch support against Songsterr's 41.1%, and the promoted build reaches 65.0%. Against a measured
ceiling of 77.5%.
The working assumption of the project holds after all: the stem-derived source is a much better reference than the Songsterr AI tab. It took a controlled experiment to see it, because a capo set on one track without rewriting its frets or its Midi had been reading as forty points of transcription error.
Being stem-derived is still a statement about how a file was produced rather than proof its notes are right. The lesson that survives is narrower and sharper: check a file's internal consistency before measuring it against anything.
A detector that answers yes everywhere proves nothing. The first run on the real stems separated a true pitch from a tritone only 70.5% of the time, which is ambiguous by itself: it can mean the tab is wrong, and it can equally mean the detector cannot tell pitches apart. Those call for opposite work, so the ambiguity was resolved before anything was graded.
The tab was rendered to audio, Lead into the left stem and Rhythm into the right, at the same beat-to-seconds map. Every note in that render is correct by construction, and the identical detector was run over it.
At 99.1% separation with a 25.5 dB median margin, and with Lead and Rhythm recovered into their correct stems at 21.8 and 19.3 dB, the detector works. The weak numbers on the real stems are therefore evidence about the transcriptions.
The control also refuted one of my own metrics. The first composite pitch score reached only 41% on a signal where every note is correct. A note whose control could not be measured was being dropped from the numerator and kept in the denominator. Fixed, the ceiling reads 84.0% and 77.5%, and every number on this page is computed after that fix.
Read every column against the synthetic row. That row is what this detector scores on a signal known to be correct, so it is the ceiling rather than 100%.
| Transcription | Lead notes | Rhythm notes | Tritone sep. | Lead pitch supported |
Rhythm pitch supported | Rhythm owner agrees |
Rhythm maps to |
|---|---|---|---|---|---|---|---|
| synthetic ceiling | 674 | 713 | 99.1% | 84.0% | 77.5% | 83.7% | R, 19.3 dB |
| s6389251-chain49.gp promoted build |
842 | 891 | 87.9% | 65.5% | 64.9% | 71.8% | R, 2.93 dB |
| Songsterr AI tab reference only |
217 | 1087 | 74.0% | 54.9% | 41.1% | 73.7% | R, 3.52 dB |
| c-tied.gp, capo corrected stem-derived source |
844 | 891 | 87.9% | 64.2% | 63.4% | 71.9% | R, 2.87 dB |
| c-tied.gp as written CAPO_MIDI_MISMATCH x891 |
844 | 891 | 70.5% | 64.2% | 24.7% | 45.6% | L, 0.87 dB |
The Lead staff is close across every file, 54.9% to 67.0%. Rhythm appeared to spread from 24.7% to
64.9%, and that one staff carried the whole apparent result. The structural difference sat in the same
place: c-tied.gp writes Rhythm with capo 2 and the promoted chain writes it with capo 0.
Rather than re-voice a hundred chords on the strength of a correlation, the variable was tested on its own. Only the CapoFret value changed. Every note, onset, duration, string and fret was walked before and after and required to be identical on all five tracks.
| Metric on the Rhythm staff | c-tied as written | c-tied, capo 0 only | Change |
|---|---|---|---|
| Pitch supported by audio | 24.7% | 63.4% | the whole gap |
| Owner agreement | 45.6% | 71.9% | resolved |
| Maps to stem | L, wrong | R, correct | resolved |
| Tritone control separation | 70.5% | 87.9% | resolved |
| Hand skip | 61% | 61% | unchanged |
| IMPOSSIBLE_SPAN | 17 | 17 | unchanged |
| TIE_INCONSISTENT | 40 | 40 | unchanged |
The capo explains the entire accuracy gap and none of the playability numbers. That is the expected signature and it is worth stating, because it separates the two cleanly: hand skip and spans are read from written frets, which the capo does not touch, while every sounding pitch shifts by two semitones. Any account that blamed the transcription for the accuracy gap was wrong.
Hashing the two files settles the argument that started this work.
s6389251-BEST.gp sha256 0e7cf090f141ccba... s6389251-iter48.gp sha256 0e7cf090f141ccba... identical bytes
BEST is a byte-for-byte copy of iter48, the blanket refret. An open-string regression was called against that file because of its name. Its 310 and 405 open notes are the outlier in the set, and the stem-derived source sits near 29 and 25.
The validator now records a comparison_basis on every promotion, rejection and receipt:
stem source, parent, checkpoint, Songsterr reference, beat map, every audio file, the transformation,
the authorized edit scope and the exact changed note IDs, all hashed. Promotion refuses without a
declared stem source and at least one audio file, because a build compared only to other
transcriptions has never been tested for accuracy.
| Difference, source to promoted build | Class | Evidence |
|---|---|---|
| Rhythm staff capo 2 becomes capo 0 | Supported correction | pitch support 24.7% → 64.9% |
| Rhythm staff moves to the correct stem | Supported correction | owner agreement 45.6% → 71.8% |
| Lead staff loses 2 notes, 844 to 842 | Unresolved ambiguity | below this audit's resolution |
| Struck attacks rise, 1387 to 1447 | Unresolved ambiguity | attack density unmeasured, see below |
| iter48's blanket refret, 310 and 405 open notes | Unsupported change | no audio evidence offered |
The physical gate held one IMPOSSIBLE_SPAN, at bar 62.938 on the Rhythm staff:
s0f11 s1f4, sounding 47 and 49, a 7-fret span against a 4-fret hand at 128 bpm. The gate's
own alternative search reported that no complete voicing of those two pitches is narrower, so
no refret could fix it. The gate said the shape or the transcription is wrong, and the audit is what
told the two apart.
| Pitch, at t = 106.580 s | Salience L | Salience R | vs +1 | vs tritone | vs wrong time |
|---|---|---|---|---|---|
| 47, in the Rhythm's own stem (R) | 29.75 | 35.88 | +6.1 | +12.0 | +5.8 |
| 49, in the Rhythm's own stem (R) | 37.47 | 31.87 | +4.6 | +6.6 | −18.0 |
| 49, in the Lead's stem (L) | 37.47 | 31.87 | +7.3 | +18.5 | −17.5 |
Pitch 47 passes all three controls in the Rhythm's stem. Pitch 49 fails the wrong-time control by 18 dB in both stems, meaning a randomly chosen instant carries more energy at that pitch than the written moment does, and it is louder in the Lead's stem. The Lead staff writes pitch 49 at 246.750 and again at 248.250, one beat either side. This is the documented failure of the pipeline: two guitars written onto one staff.
One note removed, Note id 2407, Rhythm staff, beat 247.750. Span 7 becomes span 0. Collateral drift across all five tracks: zero beats changed. Pitch 49 remains written at 240 other positions, so no pitch left the music and Tier 1 preservation passes.
Gate verdict moves FAIL to REVIEW and the hard profile is clean: same-string 0, tie-inconsistent 0, impossible spans 0, octave artifacts 0. Re-measured against the stems, the removal also nudged accuracy up: Rhythm pitch support 64.9% to 65.8%, wrong-time separation 75.5% to 76.4%.
Reassignment to the Lead staff was rejected. Pitch 49 fails its wrong-time control in the Lead's stem too, so moving the attack across would keep an unsupported attack rather than resolve one.
The gate does not fail an interior-string gap or a suspect ownership. It says the shape "needs positive audio evidence of fingerpicking or hybrid picking". That is a request for evidence, and nothing in the pipeline could answer it before, because every check compared one transcription to another. The audit can answer it.
Each flagged chord was adjudicated note by note in the stem its staff actually lives in.
| Verdict on a flagged chord | Interior gaps | Suspect ownership | What it means |
|---|---|---|---|
| ONE_HAND | 5 of 15 | 10 of 21 | every note supported and owned by this staff, so the skipped string is real fingerpicking |
| SPLIT | 5 of 15 | 3 of 21 | some notes belong to the other guitar, so the gap is the seam between two players |
| UNSUPPORTED | 5 of 15 | 8 of 21 | a note fails its controls in both stems, so nothing in the audio explains it |
Where exactly one note failed while the chord kept a supported partner, that note was removed and the gate judged the result. Nothing advanced on assertion: every step is a real promotion against the previous build, and a refusal would have stopped the run.
| Build | Bar | Removed | Wrong-time margin | Notes | Hand skip | Receipt |
|---|---|---|---|---|---|---|
| chain50 | 62.938 | Rhythm p49 | −18.0 dB | 1732 | 63.0% | 61f91733eca5ebc9 |
| chain51 | 52.688 | Lead p73 | −22.0 dB | 1731 | 62.8% | 8455430a02cb146e |
| chain52 | 29.188 | Lead p57 | −12.0 dB | 1730 | 62.8% | 37298b31c33f6ca6 |
| chain53 | 15.438 | Rhythm p61 | −8.6 dB | 1729 | 62.8% | 3b0c4a45dacabd71 |
| chain54 | 18.312 | Lead p73 | −7.5 dB | 1728 | 62.8% | 2fe2d76ca7badcd7 |
| chain55 | 22.812 | Lead p52 | −6.1 dB | 1727 | 62.8% | df35c927b25bbf6a |
| chain56 | 24.312 | Lead p52 | −2.6 dB | 1726 | 62.7% | 654badcfb1f4d084 |
| chain57 | 21.938 | Rhythm p50 | −2.4 dB | 1725 | 62.5% | abbb1efe148cec82 |
| the panning cue is dropped here, and the remaining rounds decide by pitch alone | ||||||
| chain58 | 79.5 | Rhythm p49 | −5.8 dB | 1724 | 62.4% | 737d873bd0624759 |
| chain59 | 86.875 | Lead p56 | −1.0 dB | 1723 | 62.4% | 4a2356d824e70f1e |
| chain60 | 28.812 | Rhythm p64 | −12.3 dB | 1722 | 62.3% | c4c2040f0b9b82be |
| chain61 | 14.188 | Rhythm p68 | −3.4 dB | 1721 | 62.1% | b4d2b790772bbb71 |
| chain62 | 17.188 | Rhythm p57 | −3.8 dB | 1720 | 62.1% | 14d1a88227276c57 |
The adjudication above originally decided whether a chord was two guitars by comparing how loud each note was in each stem. That is the cue this recording does not carry. Re-run deciding a note only on whether some stem explains its pitch, the SPLIT class disappears entirely:
| Rule | Every note real | Split across guitars | Unsupported |
|---|---|---|---|
| with panning, as first run | 15 of 36 | 8 | 13 |
| pitch only, no panning | 26 of 36 | 0 | 10 |
Eight chords had been called two guitars on 2 to 3 dB of noise. Under the pitch-only rule every note in them is explained by the audio, and the finding evaporates. That correction is the reason the last five promotions were reachable at all.
The evidence was re-derived from the audio after every round rather than reused, so the list shrank as the tab improved: 43 flagged findings became 37, then 36, 35, and finally 33. The run stopped because the rule found zero remaining candidates, not because a budget ran out. Thirteen promotions, each one a real gate decision against the build before it.
Accuracy rose while notes came out. Lead pitch support 65.5% to 67.0% and Rhythm 64.9% to 65.0%, against ceilings of 84.0% and 77.5%. Thirteen notes left the tab across thirteen promotions, each licensed by its own measurement and each leaving its pitch elsewhere in the music. 25 of the 33 chords the gate asked about now carry positive evidence that every note in them is real.
The gate holds at REVIEW rather than PASS, and the reason is a single diagnostic tier. Reading the gate's own thresholds, PASS needs hand skip at or under 40%. Both staves sit above it.
| Staff | Skipping chords | Hand skip | Same pitches, contiguous voicing exists | No contiguous voicing at any fingering |
|---|---|---|---|---|
| Lead Guitar | 80 of 121 | 64.5% | 42 | 38 |
| Rhythm Guitar | 89 of 143 | 60.1% | 59 | 30 |
So the tier is mechanically reachable. Re-voicing those 101 chords onto contiguous strings, without altering a single pitch, would put Lead at 31.4% and Rhythm at 21.0%, both under the threshold.
Every recorded attempt at that re-voicing broke a tier the gate ranks higher. This is not a prediction. It is what the checkpoint ledger already holds, from earlier runs:
s6389251-iter5.gp reached hand skip 25.6%, comfortably under the threshold, and
was rejected for SAME_STRING 0 to 10, TIE_COLLISION 0 to 3, TIE_INCONSISTENT 0 to 60, and
Tier 1 preservation FAILED, so a pitch left the music or a pitch was invented.s6389251-iter55.gp reached 46.4% and was rejected because Tier 1b POSITION FAILED,
and Tier 1b outranks the Tier 2 hard profile, so a better hand count does not license a relocated
performance.s6389251-iter48.gp, the blanket refret, produced 310 and 405 open notes against
roughly 29 and 25 in the stem-derived source.The gate is behaving consistently. It ranks pitch preservation and fret position above hand comfort, and a mass re-voicing trades the first two for the third.
The audio cannot license the relocation, and this is the hard limit. Every check on this page answers a question about pitch: is this pitch sounding, at this instant, in this stem. A re-voicing changes none of that. The same pitch fretted at s1f9 or at s0f14 produces nearly the same sound, and the timbral difference between two fingerings of one pitch sits far below what a Demucs guitar stem preserves. The recording does not contain the information the position gate needs.
So the blocked operation is exact: re-voice 101 chords onto contiguous strings, and satisfy Tier 1b position for each. The missing evidence is per-note fingering evidence, which no measurement of this audio can supply. Methods attempted: per-note peak salience across six partials in both stems, three controls, a synthetic ceiling, and per-chord adjudication. All of them answer pitch, and none answers fingering.
Closing that gap is a decision rather than a measurement. It means accepting a blanket refret whose last outing measurably degraded the transcription, and the ledger holds the receipt for that.
Attack density is not established for any of the three. The onset detector finds 387 onsets in the left stem and 321 in the right. All three tabs write between 700 and 1076 attacks per staff. Even on the synthetic control, where the answer is known, only 86.5% and 89.9% of written attacks matched a detected onset and roughly 75% of detected onsets were explained. The detector under-detects in dense material, so this number cannot yet separate an over-written tab from a limitation of the detector.
Timing cannot be resolved finer than 23 ms. On the synthetic control the median timing error is exactly one analysis hop, which is a resolution artifact rather than a real offset.
The low register is unmeasurable from these stems. 102 Lead notes and 36 Rhythm notes in
c-tied.gp sit below 130 Hz, and the Demucs guitar stem keeps roughly 1.32% of the mix
energy at 60 to 90 Hz. Those notes are reported as unmeasurable rather than absent. Settling them
needs the source mix, which was not on this machine.
Hand skip sits at 62.1%. Every hard gate is clean and the gate labels hand skip a diagnostic
to be read after the gates. It is the last tier still in the uncorrected band, which is why the
artifact holds status best_validated_so_far rather than BEST.
8 chords remain unexplained, and each has a stated reason removal is not evidenced. Five hold
no supported note at all, so a removal would empty the chord rather than repair it. Three have a
POSITIVE wrong-time margin, meaning they fail a pitch control rather than showing the absent-note
signature that every removal here was licensed by. They are named with bars and margins in
interior_evidence_c62.json, and they need a chord-level decision rather than a deletion.
One question per note, never a bar average. For each written attack a single high-resolution spectrum is taken from a 150 ms window at the note's mapped time, zero-padded to 0.67 Hz per bin. Salience sums the peak magnitude within 40 cents of the first six partials and divides by that window's own median magnitude, so loud and quiet passages compare. Every hypothesis for a note is read from the same spectrum.
Three controls run on those same spectra, and they are reported before any result:
Staff-to-stem assignment is measured rather than assumed, by comparing median salience across both stems for every note on a staff.
python3 audit_accuracy.py --gp c-tied.gp \ --left gtr_L.wav --right gtr_R.wav \ --beat-map beats_to_seconds.json --out audit_c-tied.json python3 synth_control_render.py --gp c-tied.gp \ --beat-map beats_to_seconds.json --seconds 172.5 \ --out-left synth_L.wav --out-right synth_R.wav python3 repair_span_247750.py s6389251-chain49.gp s6389251-chain50.gp python3 impossible_gate.py s6389251-chain50.gp --item kilgore-trout \ --source c-tied.gp --checkpoint s6389251-chain49.gp --promote \ --stem-source c-tied.gp --audio gtr_L.wav --audio gtr_R.wav \ --beat-map beats_to_seconds.json --changed-notes 2407 \ --transform impossible-span-removal-247750 \ --edit-scope "Rhythm Guitar beat 247.750 only" \ --license-note-removal "<the audio evidence above>"