@@ -291,13 +291,8 @@ def artists(self) -> tuple[str, ...]:
291291 if tag := self .tags .get ("artists" ):
292292 # Runtime check: mutagen returns list[str] for Vorbis multi-field
293293 if isinstance (tag , list ) and len (tag ) > 1 : # type: ignore[unreachable]
294- # Multiple ARTISTS fields in Vorbis - non-standard tagging.
295- # Should use multiple ARTIST (singular) fields instead.
296- LOGGER .warning ( # type: ignore[unreachable]
297- "Multiple ARTISTS fields found. Use multiple ARTIST fields instead: %s" ,
298- tag ,
299- )
300- artists = clean_tuple (tag )
294+ # Multiple ARTIST fields from Vorbis - already separated, no splitting needed
295+ artists = clean_tuple (tag ) # type: ignore[unreachable]
301296 else :
302297 # Single field (ID3 TXXX:ARTISTS) - split on semicolons
303298 artists = split_items (tag )
@@ -358,13 +353,8 @@ def album_artists(self) -> tuple[str, ...]:
358353 if tag := self .tags .get ("albumartists" ):
359354 # Runtime check: mutagen returns list[str] for Vorbis multi-field
360355 if isinstance (tag , list ) and len (tag ) > 1 : # type: ignore[unreachable]
361- # Multiple ALBUMARTISTS fields in Vorbis - non-standard tagging.
362- LOGGER .warning ( # type: ignore[unreachable]
363- "Multiple ALBUMARTISTS fields found. Use multiple ALBUMARTIST fields "
364- "instead: %s" ,
365- tag ,
366- )
367- artists = clean_tuple (tag )
356+ # Multiple ALBUMARTIST fields from Vorbis - already separated, no splitting needed
357+ artists = clean_tuple (tag ) # type: ignore[unreachable]
368358 else :
369359 # Single field (ID3 TXXX:ALBUMARTISTS) - split on semicolons
370360 artists = split_items (tag )
@@ -1012,10 +1002,23 @@ def _parse_vorbis_artist_tags(tags: VCommentDict, result: dict[str, Any]) -> Non
10121002 else :
10131003 result ["albumartist" ] = albumartist_values [0 ]
10141004
1015- # Explicit ARTISTS tag takes precedence if present
1005+ # ARTISTS (plural) is non-standard in Vorbis - it's a MusicBrainz/Picard ID3 convention.
1006+ # Vorbis spec recommends multiple ARTIST (singular) fields instead.
1007+ # Accept it but warn. See: https://xiph.org/vorbis/doc/v-comment.html
10161008 if artists := _vorbis_get_multi (tags , "ARTISTS" ):
1009+ LOGGER .warning (
1010+ "ARTISTS tag found in Vorbis file. Use multiple ARTIST fields instead: %s" ,
1011+ artists ,
1012+ )
10171013 result ["artists" ] = artists
10181014
1015+ if albumartists := _vorbis_get_multi (tags , "ALBUMARTISTS" ):
1016+ LOGGER .warning (
1017+ "ALBUMARTISTS tag found in Vorbis file. Use multiple ALBUMARTIST fields instead: %s" ,
1018+ albumartists ,
1019+ )
1020+ result ["albumartists" ] = albumartists
1021+
10191022
10201023def _parse_vorbis_tags (tags : VCommentDict ) -> dict [str , Any ]:
10211024 """Parse Vorbis comment tags (FLAC, OGG Vorbis, OGG Opus, etc.).
0 commit comments