fix(judge): chain into the next track — and PLN's ear beats both cut detectors
First real use of the set-judge, and it did its job: it found that the PROBLEM
IS NOT THE MASTER, IT IS THE CUTS. PLN judged through #10 and stopped —
"listened to 7, then errors seem to compound".
#3 893.0 WAP bass bleeds in, real start 0:03, and the END misses a note
#4 1118.4 4s too much at the head; Sunshine begins at 7:15 INSIDE it
#5 1549.4 missing its own head (it is sitting inside #4); ends abrupt
#6 1808.1 "still some sunshine bass here :(" — real start 0:10
#7 2248.8 "this start is still the drops" — 21s of the previous track
#9 2954.4 correct: "perfect starts perfect :lol:"
#10 3269.0 "starts on a perfect sound lol", real Gimme Acid at 0:16.7
Magnitude grows through the middle of the set and the direction flips, so it is
not clock drift — it is per-boundary detection error. PLN named the mechanism
himself: "check careful youll see the xfade". Every dN is a 4-cycle crossfade,
so across a switch the ORBIT SET barely changes (d1 is a kick before and after)
and every activity-based detector sees continuity. What changes is the SAMPLE.
TWO INSTRUMENTS FAILED, AND BOTH REPORTED SUCCESS.
`tidal-ears master cuts verify` said 13/15 PASS. It genuinely catches the
stutter shape — on #3 and #4 it agreed with his ear to within a second — and it
passed #5, #6 and #7 where the errors were 9, 10 and 21 seconds.
So I wrote cut_lens.py to measure TIMBRE rather than activity, with a --truth
harness to check it against the five boundaries his ear had already settled.
It missed by a MEDIAN OF 24 SECONDS, worst 40 s, with only 1-5 orbits voting.
Discarded. Committed anyway, with the negative result and three concrete
hypotheses at the top of the file, because the harness is the valuable part and
the next person to have this idea deserves to see the result first. The
ear-verified boundaries are now DATA (judge_specs/opal26_boundaries_ear.json),
marked do-not-overwrite-with-a-detector.
Also fixed the first version of cut_lens spawning ffmpeg once per window —
14 boundaries x 12 orbits x ~90 windows = 15k execve for four seconds of
arithmetic. Decode the span once, slice in numpy.
FEATURE, from "players need to autoplay next so we can see how it goes into ;)":
the judge now chains into the next track by default. A per-track list otherwise
makes transitions the one thing you cannot hear — which is exactly what this
whole pass turned out to be about. Manual j/k navigation never auto-plays, so
moving around stays quiet; the toggle is in the header.
All his notes archived verbatim in performance_notes.md with the implied
absolute boundary for each, per the archivist rule.
Validated: 11/11 smoke green against the built dist; tsc clean.
Showing
armada/tide-table/cut_lens.py
0 → 100644
Please
register
or
sign in
to comment