Commit eab26896 by PLN (Algolia)

samples: leading digits are part of a bank name, and the truncation resolved

piment_bresilien's d9 plays nothing: it asks for "90s_synatm:10" and that
bank is not on SuperDirt's load path. The samples were never lost -- they sit
in Samples/90sArchive/output/90s_synatm, symlinked from samples-links/, and
SuperDirt reads exactly three roots: Dirt-Samples, Samples/extra and the drum
machines. samples-links is not one of them. Fixed with a link into extra/.

The reason nothing had ever flagged it is worse than a miss. WORD required a
letter first, so extract_names read "90s_synatm:10" as s_synatm and "808bd"
as bd -- and bd, hc and sd are all REAL Dirt-Samples folders. The truncation
did not fail loudly, it resolved to the WRONG bank, and the preload warmed
that one instead. Measured across the Thursday set before changing anything:
5 of 17 tracks affected, gaining 808bd (x3), 808cy, 808hc, 808sd and
90s_synatm, losing the phantom bd, hc and sd. \d* then a mandatory letter, so
bare numbers and the mini-notation's <8 16> still produce no names.

442 tests pass; the one failure is the pre-existing fold-orbits false positive
in the parser ratchet (it matches pw-link node names, not Tidal) -- confirmed
by re-running the ratchet with this change stashed.
parent 7360021e
......@@ -29,7 +29,15 @@ LIVE_DIR = HOME / "Work/Sound/Tidal/live"
# we extract EVERY word-token from EVERY quoted string and let the on-disk
# sample library be the filter (a token is a sample iff a folder exists for it).
QUOTED = re.compile(r'"([^"]*)"')
WORD = re.compile(r'[A-Za-z][A-Za-z0-9_]*')
# Leading digits are PART of the name, not a prefix to skip. `[A-Za-z]…` read
# "90s_synatm:10" as `s_synatm` and "808bd" as `bd` — and `bd`, `hc` and `sd`
# are all REAL Dirt-Samples folders, so the truncation did not fail loudly: it
# resolved, to the wrong bank, and the preload warmed that one instead. Measured
# 2026-09-24 over the Thursday set: 5 of 17 tracks were affected (`808bd` x3,
# `808cy`, `808hc`, `808sd`, `90s_synatm`), which is how piment_bresilien's d9
# came to play nothing. `\d*` then a mandatory letter, so bare numbers and the
# mini-notation's `<8 16>` still produce no names.
WORD = re.compile(r'\d*[A-Za-z][A-Za-z0-9_]*')
# Tidal boolean literals — collide with real Dirt-Samples/{t,f} folders but are
# never meant as samples in the mini-notation, so never preload them.
STOP = {'t', 'f'}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment