Changeset a982e7e in Klonkt


Ignore:
Timestamp:
08/16/2026 12:53:33 PM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
daa8eb8
Parents:
abd2093
Message:

Audio: fw:track meesturen in de kleine Emissary-vorm

Spoor B stap 1 uit shaer-3f8a. Twee onafhankelijke implementaties lezen
dit veld: Funkwhale (verplicht in UploadSerializer) en Emissary 0.9.0,
gemeten op bandwagon.fm 16-8. petitminion noemde het ontbreken ervan als
eerste wat hem aan onze objecten opviel.

De vorm is die van Emissary: type, id, name, position. Klein, en dat is
het punt -- Funkwhale's eigen TrackSerializer wil er artists en
musicbrainzId bij, en dat is de grote versie die we niet nodig hebben om
gelezen te worden.

EIGEN ID MET #track. Emissary hergebruikt daar het id van het
Audio-object, maar dan zijn de Audio en de Track in JSON-LD een knoop met
twee typen, en een bestand is geen werk. Dat onderscheid moeten we straks
toch maken -- een album verzamelt nummers, geen mp3's.

GEEN album in de track. Dat is bij hen een URI naar een Album-object en
bij ons een tekstkolom; er een adres van maken belooft een ding dat niet
bestaat. Die keuze staat apart (shaer-k37k) en moet eerst vallen.

Het commentaar in ap-core dat uitlegde waarom we track NIET namen is
bijgesteld in plaats van weggehaald: die redenering klopte half. Een
track heeft bij ons wel een eigen identiteit, een album niet -- dat is
waar de grens werkelijk ligt.

Co-Authored-By: Claude Opus 5 <noreply@…>

Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • src/services/ap-core.js

    rabd2093 ra982e7e  
    5757    // zou een verhuizing kunnen laten mislukken.
    5858    sameAs: { '@id': 'schema:sameAs', '@type': '@id' },
    59     // ── De ENIGE term die we uit Funkwhale's eigen vocabulaire overnemen ──
     59    // ── Wat we uit Funkwhale's vocabulaire overnemen, en waarom ──
    6060    //
    61     // Waarom deze wel en track/ArtistCredit niet (shaer-0nh): die twee vragen
    62     // ENTITEITEN waar wij tekst hebben -- een artiest en een album zijn bij ons
    63     // kolommen, en er een id voor verzinnen zou beloven wat we niet kunnen
    64     // waarmaken. Een Library is iets anders: het is precies wat we AL hebben,
    65     // een verzameling van onze eigen open tracks met een echte telling.
     61    // LIBRARY. Gemeten op 13-8: open.audio had onze vier tracks binnengehaald
     62    // via hun AP-id, met een artist_credit dat het zelf uit onze attributedTo
     63    // afleidde -- maar uploads LEEG en is_playable false. Bij Funkwhale hangt
     64    // een upload aan een library; zonder die bak blijft een track een naam
     65    // zonder geluid.
    6666    //
    67     // En hij doet iets. Gemeten op 13-8: open.audio heeft onze vier tracks
    68     // binnengehaald via hun AP-id, met artist_credit dat het zelf uit onze
    69     // attributedTo afleidde -- maar uploads is LEEG en is_playable false. Bij
    70     // Funkwhale hangt een upload aan een library; zonder library is er geen bak
    71     // om het bestand in te hangen, en blijft een track een naam zonder geluid.
     67    // TRACK. Hier stond dat we deze NIET namen, met als reden: hij vraagt een
     68    // entiteit waar wij tekst hebben, en er een id voor verzinnen belooft wat
     69    // we niet waarmaken. Die redenering klopte half, en de Emissary-meting van
     70    // 16-8 (shaer-3f8a) laat zien welke helft. Een TRACK heeft bij ons wel
     71    // degelijk een eigen identiteit -- het is een rij met een titel en een
     72    // plaats in een uitgave. Wat wij niet hebben is een ALBUM als entiteit, en
     73    // dat is een andere vraag (shaer-k37k). Emissary stuurt precies die kleine
     74    // vorm: type, id, name, position. Wij ook, en album blijft eruit tot het
     75    // een echt object is -- een verzonnen album-URI is nu juist wel de belofte
     76    // die we niet kunnen waarmaken.
     77    //
     78    // Twee onafhankelijke implementaties zenden dit nu, en het is de kant waar
     79    // FEP-be68 heen beweegt. ArtistCredit blijft eruit: dat is nog steeds een
     80    // entiteit die wij niet hebben.
     81    //
     82    // De vorm van de termen is letterlijk die van hun contexts.py (regel
     83    // 293-306), zodat een lezer die hun context laadt en een lezer die de onze
     84    // leest op dezelfde IRI's uitkomen.
    7285    fw: 'https://funkwhale.audio/ns#',
    7386    Library: 'fw:Library',
    7487    library: { '@id': 'fw:library', '@type': '@id' },
     88    Track: 'fw:Track',
     89    track: { '@id': 'fw:track', '@type': '@id' },
    7590    position: 'schema:position',
    7691    bitrate: 'schema:bitrate',
  • src/services/music/index.js

    rabd2093 ra982e7e  
    182182  // van te maken.
    183183  if (post) a.context = noteId(base, post.id);
     184  // Het NUMMER, los van dit bestand (shaer-3f8a, spoor B). Funkwhale en
     185  // Emissary lezen allebei `fw:track`, en petitminion noemde het ontbreken
     186  // ervan als eerste wat hem opviel aan onze objecten.
     187  //
     188  // EIGEN ID MET #track, en niet hetzelfde id als de Audio. Emissary hergebruikt
     189  // daar het object-id, maar dan zijn in JSON-LD de Audio en de Track EEN knoop
     190  // met twee typen -- en een bestand is geen werk. Dat verschil moeten we straks
     191  // toch maken, want een album verzamelt nummers en geen mp3's. Een fragment is
     192  // een geldige IRI en wijst naar hetzelfde document.
     193  //
     194  // GEEN `album`. Dat veld is bij hen een URI naar een Album-object en bij ons
     195  // een tekstkolom; er hier een adres van maken zou een ding beloven dat niet
     196  // bestaat. Zie shaer-k37k -- dat is de keuze die daarvoor eerst moet vallen.
     197  a.track = {
     198    type: 'Track',
     199    id: `${a.id}#track`,
     200    name: a.name,
     201    ...(Number(r.position) ? { position: Number(r.position) } : {}),
     202  };
    184203  if (r.duration) a.duration = `PT${Math.round(r.duration)}S`;
    185204  if (r.created_at) a.published = new Date(r.created_at).toISOString();
Note: See TracChangeset for help on using the changeset viewer.