All three found by running the thing, not by reading it. **Chops beat loops mechanically, every time.** grade classes anything under 0.75 s a one-shot and scores it 0.5*level + 0.3*dc + 0.2*zc -- no seam term, no bar term, because a one-shot is never looped. Export already removes DC and snaps zero crossings, so a chop lands near 1.0 by construction, while a loop pays 0.35 on seam and 0.25 on bar consistency and rarely maxes both. Measured on ME: every chop 0.993-0.999 (S), every loop 0.841-0.881 (A). Ranked head to head the vocal kit came out as three stabs and no loops -- exactly backwards from what was asked for. Modes now rank in separate pools with their own slots. **Every loop got its own tempo.** analyze_stem reports a candidate's bpm as the mean local BPM inside its own window, which is the right number for detecting drift and the wrong one to derive a bar length from. ME's track grid read 129.2 bpm while both shipped loops were cut at 150.5 -- so two loops from one track do not layer, and loopAt lies. Bar length now comes from a single robust track tempo: the MODE of the local-BPM histogram, not the mean, because a few dropped or doubled beats drag a mean and leave a mode alone. Validated on a synthetic 120 bpm pack: 120.2, 0.2% off. Confidence comes with it -- the share of beats within 5% of that tempo. Below 35% there is no pulse worth cutting bars against and the track ships chops only. ME is the case that motivated it: no drum stem at all, so the grid was derived from a texture stem that merely measured percussive. **Near-duplicates were shipping.** A producer pack overlaps stems on purpose; ALL DRUMS, KIT, MAIN DRUM LOOP and DRUM BREAKS are four views of one groove and the finder picks the same bar out of all four. Eight slots holding three sounds is a worse kit than three. Dedup now runs at export, reusing kitcheck's mel fingerprint and its threshold so the auditor and the exporter cannot disagree about what "the same sound" means. Smoke test: 12 cuts -> 7, 6 of them distinct. Also: the merged report regenerates from the merged cuts instead of concatenating the children's fragments, which froze the tables before CLAP tagging ran and lost every tag; and kit_multiples_check no longer runs over chops, which are sub-bar by definition and were producing an off-grid warning that meant nothing. 101 tests green.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| at | Loading commit data... | |
| bridge | Loading commit data... | |
| foundry | Loading commit data... | |
| pulsar-parvagues-hud | Loading commit data... | |
| pvlint | Loading commit data... | |
| tests | Loading commit data... | |
| README.md | Loading commit data... | |
| analyze_samples.py | Loading commit data... | |
| audio-lens.py | Loading commit data... | |
| bank-check.py | Loading commit data... | |
| button-column-audit.py | Loading commit data... | |
| button_roles.py | Loading commit data... | |
| cheat-sheet.py | Loading commit data... | |
| check-audio-graph.sh | Loading commit data... | |
| check-boot-blocks.py | Loading commit data... | |
| check-boot.sh | Loading commit data... | |
| check-drift.sh | Loading commit data... | |
| check-mix.py | Loading commit data... | |
| check-preload.sh | Loading commit data... | |
| check-tracks.sh | Loading commit data... | |
| control-lens.py | Loading commit data... | |
| deshadow-helpers.py | Loading commit data... | |
| fader-baseline.py | Loading commit data... | |
| fan_check.sh | Loading commit data... | |
| fix-button-roles.py | Loading commit data... | |
| fix-mute-roles.py | Loading commit data... | |
| gen_tokens.py | Loading commit data... | |
| gen_ts_types.py | Loading commit data... | |
| gig-log.py | Loading commit data... | |
| gig-metadata.py | Loading commit data... | |
| gig-up.sh | Loading commit data... | |
| gig_record.sh | Loading commit data... | |
| install-protect.sh | Loading commit data... | |
| lcxl-init.py | Loading commit data... | |
| lcxl-leds-watch.service | Loading commit data... | |
| lcxl-leds.py | Loading commit data... | |
| lcxl_grid.json | Loading commit data... | |
| lcxl_grid.py | Loading commit data... | |
| master-out.py | Loading commit data... | |
| migrate-columns.py | Loading commit data... | |
| mock-lcxl.py | Loading commit data... | |
| mute.tidal | Loading commit data... | |
| orphan-orbits.py | Loading commit data... | |
| parvagues-protect.service | Loading commit data... | |
| parvagues-protect.sh | Loading commit data... | |
| parvagues-samples.service | Loading commit data... | |
| parvagues-sc-watchdog.service | Loading commit data... | |
| probe-chain.py | Loading commit data... | |
| pvbanks.py | Loading commit data... | |
| rig-pulse.py | Loading commit data... | |
| sample-watcher.py | Loading commit data... | |
| sample_tfidf.py | Loading commit data... | |
| sc-watchdog.sh | Loading commit data... | |
| set-coherence.py | Loading commit data... | |
| setlist.py | Loading commit data... | |
| setlist_samples.py | Loading commit data... | |
| shipowiz.py | Loading commit data... | |
| silent-eval.py | Loading commit data... | |
| solo.tidal | Loading commit data... | |
| surface-columns.py | Loading commit data... | |
| take-lens.py | Loading commit data... | |
| take-master.py | Loading commit data... | |
| take-segments.py | Loading commit data... | |
| tempo-lens.py | Loading commit data... | |
| tidal-remote.py | Loading commit data... | |
| tools.png | Loading commit data... | |
| unmute.tidal | Loading commit data... | |
| unsolo.tidal | Loading commit data... |