A two-direction audio check of tab s35881, run against a circular-shift null, three positive controls and a five-stem negative control.
Built 2026-09-07 15:00 CDT · anchor clock: 97 snare anchors, piecewise linear, span 59.3s to 506.1s · tolerance 45 ms
Measured Direction A asks whether every written cymbal event has audible support. Direction B asks whether every clearly audible cymbal onset has notation. Null is 200 circular shifts of the whole notated set inside the scored span.
| flux pct | onsets found | density | A written→audible | A null | A ratio | B audible→written | B null | B ratio |
|---|---|---|---|---|---|---|---|---|
| 80 | 2,478 | 5.55/s | 0.476 | 0.444 | 1.07x | 0.382 | 0.318 | 1.20x |
| 90 | 1,533 | 3.43/s | 0.311 | 0.282 | 1.10x | 0.391 | 0.321 | 1.22x |
| 95 | 929 | 2.08/s | 0.193 | 0.174 | 1.11x | 0.402 | 0.322 | 1.25x |
| 97.5 | 576 | 1.29/s | 0.132 | 0.109 | 1.21x | 0.422 | 0.321 | 1.32x |
| 99 | 307 | 0.69/s | 0.070 | 0.062 | 1.13x | 0.414 | 0.321 | 1.29x |
Every cell in both ratio columns falls below 1.5x. The answer does not depend on where the detection threshold is set.
Measured Same clock, same tolerance, same null, each notation lane against its own stem at the 95th percentile.
| notation lane | stem | notated | onsets | A ratio | B ratio |
|---|---|---|---|---|---|
| snare (midi 38,40) | snare | 193 | 466 | 5.90x | 5.23x |
| kick (midi 35,36) | kick | 107 | 652 | 3.00x | 3.28x |
| toms (midi 41-50) | toms | 6 | 569 | 3.67x | 3.45x |
| cymbal (midi 49,51) | cymbals | 1,778 | 929 | 1.16x | 1.26x |
Kick is the load-bearing control. Its anchors are not the snare anchors that built the clock, its band is 30 to 180 Hz rather than 2 to 12 kHz, and it still reaches 3.00x. The clock is sound and the method discriminates.
Measured If the cymbal lane scored no better against cymbals than against bass, it is at chance. It does not, and the row that stands out is not the one expected.
| notation lane | vs stem | A ratio | B ratio | |
|---|---|---|---|---|
| cymbal | cymbals | 1.14x | 1.27x | its own stem |
| cymbal | snare | 2.14x | 1.07x | |
| cymbal | kick | 1.12x | 1.26x | |
| cymbal | bass | 0.87x | 0.98x | |
| cymbal | piano | 1.03x | 1.08x | |
| snare | cymbals | 2.32x | 2.32x | |
| snare | snare | 5.74x | 5.28x | its own stem |
| snare | kick | 0.32x | 0.37x | |
| snare | bass | 1.28x | 1.31x | |
| snare | piano | 1.08x | 1.16x |
Snare notation behaves correctly: 5.74x on its own stem, 2.32x on cymbals through bleed, 0.32x against kick because snare and kick alternate. Cymbal notation does not: its best score, 2.14x, lands on the snare stem.
Measured Chord elements and CDATA blocks counted in each candidate's score.gpif.
| file | CDATA | Chord elements | verdict |
|---|---|---|---|
| PRESWEEP-r7715683.gp (saved original) | 137 | 8 | the reference |
| RESTORED-s35881-TEXTSAFE-v2.gp | 137 | 8 | exact parity with the original, ship this |
| RESTORED-s35881-TEXTSAFE.gp | 136 | 7 | one CDATA and one chord short |
| r8768414-LIVE-EXPORT.gp (the live tab) | 136 | 6 | two chords lost on the live tab |
| RESTORED-s35881-v3-with-chord.gp | 0 | 7 | quarantined, wipes all 9 names |
The chord did not vanish through a new transcription decision. The saved original carries 8 chord elements and the live tab carries 6, so two were lost on the tab. TEXTSAFE-v2 already restores both, and its chord-definition ids and beat-level chord references show an empty symmetric difference against the saved original. The separate chord patch is redundant and poisoned: 7 chords rather than 8, and zero CDATA.
positions added 0 positions removed 0 dynamic marks added 0 dynamic marks removed 0 dynamics changed 0 anti-accent added 1,317 note events 4,855 -> 4,855
The upload does exactly one thing. It restores the author's 1,317 ghost flags and repairs the 9 empty track names as a consequence of preserving CDATA. Nothing moves.
RESTORED-s35881-TEXTSAFE-v2.gp87020f8c4243a7441db8187b4d7356b300e62b4d013787343de5ea4a0cfe27fdFrank Zappa, latest revision 8908034, all 9 track names empty strings.Watermelon In Easter Hay Brandon edit, import the file above, submit there.onset function spectral flux, 1024-pt Hann, 256 hop, 44.1 kHz
cymbals/snare 2-12 kHz, kick 30-180 Hz, toms 80 Hz-3 kHz
peak picking local maxima above the Nth flux percentile, 60 ms min separation
clock piecewise linear through 97 accepted snare anchors (np.interp)
scoring restricted to the anchor span, 59.33 s to 506.08 s
tolerance 45 ms half-window
null 200 circular shifts of the entire notated set inside the span
tools tools/cymbal_two_way.py, tools/lane_control.py, tools/cross_stem.py
data data/cymbal_two_way.json, data/lane_control.json, data/cross_stem.json