sentriz: for the tag usage player support is the most authorative answer you'll usually get. Most of the best practices was essentially defined by the popular players
2023-12-01 33530, 2023
outsidecontext
But all tag standards in some way define a field for the artist name. Except for the xiph page none explicitly mentions it to be multi-valued. And the vast majority of players does not support multi values there
2023-12-01 33530, 2023
outsidecontext
The multi-valued ARTISTS was essentially introduced by Picard on request of users, and I think first adapted by Kodi
2023-12-01 33544, 2023
outsidecontext
But the separation as it is makes sense.
2023-12-01 33504, 2023
outsidecontext
None of the tagging standards does support a structure like MB's Artist Credits, with multiple values and join phrases for rich rendering
2023-12-01 33535, 2023
outsidecontext
So having a display string is useful
2023-12-01 33542, 2023
outsidecontext
I think we have a scripting example in the docs on how to make ARTIST multi-valued, but that way definitely is badly supported by players
2023-12-01 33531, 2023
relaxoMob has quit
2023-12-01 33504, 2023
relaxoMob joined the channel
2023-12-01 33527, 2023
derwin
multi-valued ARTISTS is actually part of the vorbis tagging thing, IIRC, mutagen only added it a few years ago tho
2023-12-01 33545, 2023
outsidecontext
derwin: it isn't. Vorbis has only very thin tag specs, the closest you get is the docs sentriz linked above. And it only defines ARTIST
2023-12-01 33520, 2023
outsidecontext
But it describes it to allow multiple values (but which most players did not support)
2023-12-01 33533, 2023
outsidecontext
Also mutagen itself does not have any explicit support for ARTISTS. It just allows to write arbitrary tags, and both beets and Picard use it
2023-12-01 33511, 2023
antlarr2 has quit
2023-12-01 33514, 2023
balrog has quit
2023-12-01 33554, 2023
balrog joined the channel
2023-12-01 33523, 2023
griffinannshual joined the channel
2023-12-01 33540, 2023
griffinannshual9 joined the channel
2023-12-01 33557, 2023
griffinannshual9 has quit
2023-12-01 33549, 2023
griffinannshual has quit
2023-12-01 33544, 2023
antlarr joined the channel
2023-12-01 33530, 2023
thuna`
sentriz: You could make prioritizing multi-field ARTIST over ARTISTS an option, or alternatively, you could check if ARTIST is multi-valued and ARTISTS does not exist and then handle it appropriately.
2023-12-01 33531, 2023
thuna`
Most music players that I have tried only recognizes the first field in ARTIST, so that is what discouraged me from putting the individual artists into ARTIST as separate fields. At one point, I even formatted ARTIST like ["X ft. Y", "X", "Y"] but ARTISTS is definitely better supported so I gave up on that quickly.
2023-12-01 33531, 2023
thuna`
I only know the ID3 spec so maybe this is not the case with other formats but there is a very significant lack of paired or delimited data types, only lists (with the exception of TMCL and TIPL as of 3v2.4). Of course, you could treat the lists as delimited or paired internally, but you have to just hope that the tagger didn't do it in a different way.
2023-12-01 33531, 2023
thuna`
And even then, you're bound to common practices. For example, TLEN, the length of the track, is _supposed_ to be in milliseconds, but you always find it in a [HH:][M]M:SS format.
2023-12-01 33509, 2023
mat_ has quit
2023-12-01 33550, 2023
mat_ joined the channel
2023-12-01 33534, 2023
elomatreb
thuna`: the main reason the ARTISTS tag often doesn’t work is that if you read the ID3 spec strictly, it doesn’t allow multiple values for TXXX frames
2023-12-01 33527, 2023
elomatreb
mutagen goes beyond the spec, but quite a few other implementations do not (eg gstreamer doesn’t)
2023-12-01 33518, 2023
outsidecontext
elomatreb: for ID3v2.4 TXXX frames explicitly support multiple null separated strings (according to spec, not supported by all players). But extending this to non-TXXX frames is I think beyond the spec
2023-12-01 33537, 2023
thuna`
outsidecontext: I believe you have that the wrong way around
2023-12-01 33508, 2023
outsidecontext
some tools also use the same approach then for ID3v2.3, e.g. MP3Tag does. but v2.3 explicitly says to ignore data beyond the null
thuna`: yes, exactly. that says "All text information frames supports multiple strings, stored as a null separated list, where null is reperesented by the termination code for the charater encoding." . that's multiple values
2023-12-01 33501, 2023
outsidecontext
thuna`: ah, I see what you mean. yes, you're right. it's only non TXXX text frames that are explicitly defined like that.
2023-12-01 33542, 2023
thuna`
outsidecontext: According to the spec, TXXX supports exactly one encoded string as the value, and no two TXXX frames may have the same description. So, neither multiple ARTISTS frames nor a single ARTISTS frame with multiple strings is valid, and I guess the authors expected the descriptions to be indexed as well
2023-12-01 33549, 2023
thuna`
Since that's not going to happen, you might as well allow multi-valued TXXX frames
2023-12-01 33526, 2023
antlarr has quit
2023-12-01 33540, 2023
antlarr joined the channel
2023-12-01 33552, 2023
elomatreb
The ID3 spec is terrible in any case
2023-12-01 33524, 2023
elomatreb
so many overengineered features while basic ones are neglected