v0.20.1: one fingerprint, six artists
trav's "Dionne Farris - I Know" kept identifying as Jay-Z, against ID3 tags that plainly said otherwise. AcoustID was right; the ranking threw the answer away. The fingerprint matched one AcoustID result at 0.97, and six recordings hang off it: Dionne Farris twice, plus Jay-Z, Marisela, New Atlantic and David Essex, all of whom recorded a song called "I Know". A result's score belongs to the *audio*, so every linked recording carries it however wrong the link is. With the scores tied, ranking fell through to the duration bucket, where Jay-Z's 222.7 s beat Dionne's 227.3 s against a 224 s file. The tags never got a vote: the hint sat below duration in the sort key. So the lookup now asks who submitted each link. `sources` joins LOOKUP_META — 475 people linked that audio to Dionne Farris, 6 to Jay-Z, 1 each to the rest — and _link_tier sinks anything under a tenth of the strongest link in the same result. The share is relative, never an absolute count, and a missing count ranks as real: an obscure song's true link may have two submissions against a stray's one, and rounds 45-46's payloads rank unchanged. And it asks what the file already says. artist_hint_for gathers the artist tag, the album artist and the artist in the filename; _artist_agreement counts the words shared with a candidate's credit, placeholders dropped. Like every hint since round 46 it only chooses among what AcoustID returned. New key order: stray tier, artist agreement, duration bucket, hint overlap, release rank — who, which take, which release. Artist above duration is the whole fix; duration still separates two takes by one artist. Verified live against the reported file: the proposal is now I Know — Dionne Farris — Wild Seed - Wild Flower (1994), track 1, with all five mis-tagged artists off the dropdown. The real response is pinned in tests/test_round52.py. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SKXUgsBBwe3qaHEjeV8ubP
This commit is contained in:
@@ -207,7 +207,19 @@ persistence) → GUI (Qt widgets that read the manager and connect to its signal
|
||||
compilation as the album, because a 60s song must not sort by the year its CD
|
||||
reissue came out. `_releasegroup_sort_key` separately ranks a plain studio
|
||||
Album above EP/Single above anything with a Compilation/Live secondary type,
|
||||
so the default proposal is the real album. `gui/identify_dialog.py` is passive
|
||||
so the default proposal is the real album. **An AcoustID result's score
|
||||
belongs to the *audio*, not to any one recording**: every recording linked to
|
||||
it carries that score, mis-tags included, and a song whose title another
|
||||
artist also used collects them (Round 52: trav's Dionne Farris "I Know" is
|
||||
linked to Jay-Z's, Marisela's, David Essex's and New Atlantic's). What tells
|
||||
a real link from a stray is `sources`, the submission count — 475 against 6
|
||||
and three 1s — so the lookup asks for it and `_link_tier` sinks anything
|
||||
under a tenth of the strongest link in that result. Hence the key order
|
||||
*who*, then *which take*, then *which release*: stray tier, agreement with
|
||||
the artist the file's own tags name (`artist_hint_for`), duration bucket,
|
||||
hint overlap, release rank. Artist before duration is the point — Jay-Z's
|
||||
take was 1.5 s closer to the file than Dionne's own, and that used to decide
|
||||
it. `gui/identify_dialog.py` is passive
|
||||
(the `AlbumArtDialog` contract — nothing written until accepted); the caller
|
||||
applies `result_fields()` through `LibraryManager.edit_track_fields`, which is
|
||||
what buys tag writes, undo and artist/album file relocation for free. A row is
|
||||
|
||||
Reference in New Issue
Block a user