Top 2000: het jaar en de plaat van de track, niet die van de lijst #62

Closed
opened 2026-08-06 10:12:41 +02:00 by roelof · 1 comment
Owner

In een Top 2000-collectie dragen alle tracks het jaar en de naam van de lijst in plaats van die van de track zelf. Gemeten over de 2000 bestanden op schijf:

tag waarde aantal
jaar 2024 2000 van 2000
album Top 2000 2000 van 2000

Dat is precies wat de speler toont: het jaar komt rechtstreeks uit de tag (MediaService.ReadTagsfile.Tag.Year), en de ALBUM-kolom leest tweeduizend keer Top 2000. Allebei even nutteloos om naar te kijken.

Kan MusicBrainz het leveren?

Ja. Ik heb tien tracks uit een dwarsdoorsnede van de lijst door MusicBrainzService.FindAlbumAsync gehaald — de methode die de scan zelf gebruikt. Zeven van de tien goed:

nr track antwoord
1 Queen — Bohemian Rhapsody A Night at the Opera, 1975
201 Creedence Clearwater Revival — Bad Moon Rising Green River, 1969
1001 Meat Loaf — You Took The Words Right Out Of My Mouth Bat Out of Hell, 1977
1801 Herman Brood & His Wild Romance — Still Believe Still Believe, 1978
1951 Keane — This Is The Last Time Hopes and Fears, 2004
1998 Goldband — De Langste Nacht Betaalbare romantiek, 2021
2000 Queens Of The Stone Age — I Sat By The Ocean …Like Clockwork, 2013
501 Eagles — Take It Easy One of These Nights, 1975 1972
1501 Pet Shop Boys — West End Girls Summer Hitmix Classics, 2002 1984
1999 R.E.M. — It's The End Of The World Luxembourg Rock Hall, 2008 1987

De drie missers zijn één en hetzelfde geval: de zoekopdracht komt uit op een verzamelaar of een liveplaat, en rapporteert dan diens jaar. Twintig jaar mis, en stil — een verkeerd jaartal valt niet op zoals een verkeerde albumnaam.

De regel die het wél goed doet

Niet het jaar van de gekozen plaat nemen, maar de vroegste release-group waar de opname op voorkomt. Een verzamelaar is nooit de vroegste. Alle drie de missers komen dan goed uit:

R.E.M.        It's The End Of The World   ->  1987   (74 kandidaten)
Pet Shop Boys West End Girls              ->  1984
Eagles        Take It Easy                ->  1972

Beide stukken zitten al in FindAlbumAsync: de release-groups waar de opname op staat (candidates) en de eerste verschijningsdatum per release-group uit de artiestencatalogus (released, opgehaald door ArtistAlbumsAsync). Het is een tweede antwoord uit gegevens die er al zijn — geen extra verzoek.

Let op: het moet de catalogusdatum zijn en niet de datums uit de zoekuitslag zelf. Met dat laatste komt Bohemian Rhapsody op 1976 in plaats van 1975, omdat sommige persingen van A Night at the Opera het jaar erna dragen.

Het is dus een aparte vraag van die welke FindAlbumAsync beantwoordt, en verdient een eigen methode:

  • album repair wil weten wanneer deze plaat uitkwam;
  • dit wil weten wanneer dit nummer voor het eerst verscheen.

Wat het kost

2000 opzoekingen à één per seconde: 35 tot 70 minuten, eenmalig. Zodra de albumtag een echte naam draagt is IsVolumeTitle er niet meer op van toepassing en neemt een volgende scan hem op zijn woord — dezelfde eenmaligheid als bij de RockHeaven-volumes.

Wat er te beslissen valt

1. Het overschrijft een bestaand jaar en een bestaande albumnaam. Dat botst met de staande regel dat er nooit iets overschreven wordt. Te verdedigen: in een collectie met de vorm flat ís het jaar dat van de lijst en de albumnaam die van de lijst — een eigenschap van de collectiesoort, niet iets wat de tagger over deze track heeft willen zeggen. Dezelfde categorie als volume 0, en ClearVolumes doet al precies zoiets.

2. Het is per track, niet per plaat. Alle Top 2000-tracks van één artiest delen nu één albumrij Top 2000, dus de eenheid van AlbumRepairService past hier niet. Dit wordt een eigen stap, met een ProgressStream zoals de andere lange banen — een uur werk hoort een voortgangsregel en een samenvatting te hebben.

3. Branchen op de vórm, niet op het type. CollectionShapes.Flat in plaats van CollectionTypes.Top2000, zoals de rest van de code het doet. Een tweede platte collectie krijgt dan dezelfde behandeling zonder dat er iets bij hoeft.

4. Gevolgen van het schrijven van de albumnaam, die het waard zijn om vooraf te noemen:

  • De albumrij Top 2000 per artiest valt uiteen in echte platen. Waar de Albums-collectie diezelfde plaat al heeft, komen de tracks in dezelfde rij terecht — de albumrij ís de plaat en loopt over collecties heen. Dat is winst: één hoes bedient dan beide.
  • CLAUDE.md zegt nu: "The Top 2000's album tag is left alone, and that needs no special case." Die alinea moet herschreven, inclusief de reden dat het nu wél een special case is.
  • FindKnownAlbum vraagt alleen albumcollecties, dus daar verandert niets.
  • De covers zijn hier geen zorg: alle 2000 Top 2000-tracks dragen al een hoes.

Nog een omissie die hierbij hoort

AlbumMatchDto draagt het jaar niet over de lijn, terwijl AlbumMatch het sinds #56 wél heeft. Daardoor kan het bewerkvenster het gevonden jaar niet aanbieden, en kwam het bij het meten hierboven als ? terug uit /api/musicbrainz/recording. Kleine toevoeging die hier logisch bij hoort.

Risico

De steekproef was tien tracks. Ook met de betere regel zal er een deel misgaan — de opzoeking is nergens beter dan wat MusicBrainz teruggeeft, en een verkeerd jaartal is stil. Voor het meten achteraf is het handig dat de eerste ronde de tags schrijft: een tweede meting over de bestanden laat zien hoeveel er nog op 2024 staan (niets gevonden) en hoe de rest verdeeld is.

In een Top 2000-collectie dragen alle tracks het jaar en de naam van de **lijst** in plaats van die van de track zelf. Gemeten over de 2000 bestanden op schijf: | tag | waarde | aantal | |---|---|---:| | jaar | `2024` | 2000 van 2000 | | album | `Top 2000` | 2000 van 2000 | Dat is precies wat de speler toont: het jaar komt rechtstreeks uit de tag (`MediaService.ReadTags` → `file.Tag.Year`), en de ALBUM-kolom leest tweeduizend keer `Top 2000`. Allebei even nutteloos om naar te kijken. ## Kan MusicBrainz het leveren? Ja. Ik heb tien tracks uit een dwarsdoorsnede van de lijst door `MusicBrainzService.FindAlbumAsync` gehaald — de methode die de scan zelf gebruikt. **Zeven van de tien goed:** | nr | track | antwoord | | |---:|---|---|---| | 1 | Queen — Bohemian Rhapsody | A Night at the Opera, 1975 | ✅ | | 201 | Creedence Clearwater Revival — Bad Moon Rising | Green River, 1969 | ✅ | | 1001 | Meat Loaf — You Took The Words Right Out Of My Mouth | Bat Out of Hell, 1977 | ✅ | | 1801 | Herman Brood & His Wild Romance — Still Believe | Still Believe, 1978 | ✅ | | 1951 | Keane — This Is The Last Time | Hopes and Fears, 2004 | ✅ | | 1998 | Goldband — De Langste Nacht | Betaalbare romantiek, 2021 | ✅ | | 2000 | Queens Of The Stone Age — I Sat By The Ocean | …Like Clockwork, 2013 | ✅ | | 501 | Eagles — Take It Easy | One of These Nights, **1975** | ❌ 1972 | | 1501 | Pet Shop Boys — West End Girls | Summer Hitmix Classics, **2002** | ❌ 1984 | | 1999 | R.E.M. — It's The End Of The World | Luxembourg Rock Hall, **2008** | ❌ 1987 | De drie missers zijn één en hetzelfde geval: de zoekopdracht komt uit op een verzamelaar of een liveplaat, en rapporteert dan diens jaar. Twintig jaar mis, en stil — een verkeerd jaartal valt niet op zoals een verkeerde albumnaam. ## De regel die het wél goed doet Niet het jaar van de gekozen plaat nemen, maar **de vroegste release-group waar de opname op voorkomt**. Een verzamelaar is nooit de vroegste. Alle drie de missers komen dan goed uit: ``` R.E.M. It's The End Of The World -> 1987 (74 kandidaten) Pet Shop Boys West End Girls -> 1984 Eagles Take It Easy -> 1972 ``` **Beide stukken zitten al in `FindAlbumAsync`**: de release-groups waar de opname op staat (`candidates`) en de eerste verschijningsdatum per release-group uit de artiestencatalogus (`released`, opgehaald door `ArtistAlbumsAsync`). Het is een tweede antwoord uit gegevens die er al zijn — geen extra verzoek. Let op: het moet de **catalogusdatum** zijn en niet de datums uit de zoekuitslag zelf. Met dat laatste komt Bohemian Rhapsody op 1976 in plaats van 1975, omdat sommige persingen van *A Night at the Opera* het jaar erna dragen. Het is dus een aparte vraag van die welke `FindAlbumAsync` beantwoordt, en verdient een eigen methode: - **album repair** wil weten wanneer *deze plaat* uitkwam; - **dit** wil weten wanneer *dit nummer* voor het eerst verscheen. ## Wat het kost 2000 opzoekingen à één per seconde: **35 tot 70 minuten**, eenmalig. Zodra de albumtag een echte naam draagt is `IsVolumeTitle` er niet meer op van toepassing en neemt een volgende scan hem op zijn woord — dezelfde eenmaligheid als bij de RockHeaven-volumes. ## Wat er te beslissen valt **1. Het overschrijft een bestaand jaar en een bestaande albumnaam.** Dat botst met de staande regel dat er nooit iets overschreven wordt. Te verdedigen: in een collectie met de vorm `flat` ís het jaar dat van de lijst en de albumnaam die van de lijst — een eigenschap van de collectiesoort, niet iets wat de tagger over deze track heeft willen zeggen. Dezelfde categorie als volume 0, en `ClearVolumes` doet al precies zoiets. **2. Het is per track, niet per plaat.** Alle Top 2000-tracks van één artiest delen nu één albumrij `Top 2000`, dus de eenheid van `AlbumRepairService` past hier niet. Dit wordt een eigen stap, met een `ProgressStream` zoals de andere lange banen — een uur werk hoort een voortgangsregel en een samenvatting te hebben. **3. Branchen op de vórm, niet op het type.** `CollectionShapes.Flat` in plaats van `CollectionTypes.Top2000`, zoals de rest van de code het doet. Een tweede platte collectie krijgt dan dezelfde behandeling zonder dat er iets bij hoeft. **4. Gevolgen van het schrijven van de albumnaam**, die het waard zijn om vooraf te noemen: - De albumrij `Top 2000` per artiest valt uiteen in echte platen. Waar de Albums-collectie diezelfde plaat al heeft, komen de tracks in **dezelfde rij** terecht — de albumrij ís de plaat en loopt over collecties heen. Dat is winst: één hoes bedient dan beide. - `CLAUDE.md` zegt nu: *"The Top 2000's album tag is left alone, and that needs no special case."* Die alinea moet herschreven, inclusief de reden dat het nu wél een special case is. - `FindKnownAlbum` vraagt alleen albumcollecties, dus daar verandert niets. - De covers zijn hier geen zorg: alle 2000 Top 2000-tracks dragen al een hoes. ## Nog een omissie die hierbij hoort `AlbumMatchDto` draagt het jaar niet over de lijn, terwijl `AlbumMatch` het sinds #56 wél heeft. Daardoor kan het bewerkvenster het gevonden jaar niet aanbieden, en kwam het bij het meten hierboven als `?` terug uit `/api/musicbrainz/recording`. Kleine toevoeging die hier logisch bij hoort. ## Risico De steekproef was tien tracks. Ook met de betere regel zal er een deel misgaan — de opzoeking is nergens beter dan wat MusicBrainz teruggeeft, en een verkeerd jaartal is stil. Voor het meten achteraf is het handig dat de eerste ronde de tags schrijft: een tweede meting over de bestanden laat zien hoeveel er nog op `2024` staan (niets gevonden) en hoe de rest verdeeld is.
Author
Owner

Opgepakt op branch lijstcollectie-jaar-en-plaatvergelijken met main.

Commit: c4ba6d9. Sluit dit issue bij de merge.

Opgepakt op branch [`lijstcollectie-jaar-en-plaat`](https://forgejo.ridderman.nl/KavalirOS/RockHeaven/src/branch/lijstcollectie-jaar-en-plaat) — [vergelijken met main](https://forgejo.ridderman.nl/KavalirOS/RockHeaven/compare/main...lijstcollectie-jaar-en-plaat). Commit: [`c4ba6d9`](https://forgejo.ridderman.nl/KavalirOS/RockHeaven/commit/c4ba6d9). Sluit dit issue bij de merge.
roelof added reference lijstcollectie-jaar-en-plaat 2026-08-06 11:38:23 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
KavalirOS/RockHeaven#62
No description provided.