Tagger multiple genres problem

You found a bug or have any issues? Please post them here!
Post Reply
User avatar
hdradio
Posts: 625
Joined: 10 Apr 2012 17:36
Location: Crete, Hellas
Tagger multiple genres problem

Post by hdradio »

I am so confused because each software uses its own format for storing multiple genre tags.
I 've tested foobar, xmplay, mediamonkey, musicbee, mp3tag
I don't know finally which is the correct.
For example when I save "Alternative; Dance" in PF Tagger it is saved as :
(20)/(3)
MediaMonkey reads : "Alternative; /; Dance"
Foobar reads: "Alternative"
MusicBee reads: "Alternative; /(3)"
xmplay reads: "Alternative"
mp3tag reads: "Alternative"

When I save "Alternative; Dance" in foobar I read:
mediamonkey reads: "Alternative; Dance"
xmplay reads: "Alternative;Dance"
musicbee reads: "Alternative; Dance"
PF Tagger reads: "Alternative;Dance"
mp3tag reads: "Alternative; Dance"

Mediamonkey saves the same as foobar.

When I save "Alternative; Dance" in MusicBee I read:
mp3tag has 2 genre tags of "alternative" and "Dance"
MediaMonkey reads : "Alternative; Dance"
xmplay reads : "Alternative"
PF Tagger reads : "Alternative; Dance"

And so on...
Finally... is there any standard on writing multiple genres or every program uses it's own method ?
(is that / in PF a bug ?)
User avatar
radio42
Site Admin
Posts: 8328
Joined: 05 Apr 2012 16:26
Location: Hamburg, Germany
Contact:
Re: Tagger multiple genres problem

Post by radio42 »

Yes, there are standards defined (depending on the format, e.g. ID3v2, OGG, M4A, APE, ASF, RIFF, etc.)
And ProppFrexx heavily implemented these standards! However a lot of other applications don't!

So I am not sure what audio and TAG format you are using - but from your post I guss we are talking about MP3 files and ID3v2 ?!

Lets take a look at the ID3v2 Specs:
ID3v2.3:
TCON
The 'Content type', which previously was stored as a one byte numeric value only (in ID3v1), is now a numeric string. You may use one or several of the types as ID3v1.1 did or, since the category list would be impossible to maintain with accurate and up to date categories, define your own. Multiple values are seperated with the "/" character.

References to the ID3v1 genres can be made by, as first byte, enter "(" followed by a number from the genres list (appendix A) and ended with a ")" character. This is optionally followed by a refinement, e.g. "(21)" or "(4)Eurodisco". Several references can be made in the same frame, e.g. "(51)(39)". If the refinement should begin with a "(" character it should be replaced with "((", e.g. "((I can figure out any genre)" or "(55)((I think...)". The following new content types is defined in ID3v2 and is implemented in the same way as the numerig content types, e.g. "(RX)". [RX Remix, CR Cover]

ID3v2.4:
TCON
The 'Content type', which ID3v1 was stored as a one byte numeric value only, is now a string. You may use one or several of the ID3v1 types as numerical strings, or, since the category list would be impossible to maintain with accurate and up to date categories, define your own. Example: "21" $00 "Eurodisco" $00. You may also use any of the following keywords: RX Remix, CR Cover.
Furthermore the following is defined:
Multiple values in ID3v2.3:
The version 2.3 of the standard prescribes that some fields can contain multiple values separated by the "/" character. The fields that can contain multiple values are: TPE1 TCOM TEXT TOLY TOPE

Multiple values in ID3v2.4:
Version 2.4 of the specification prescribes that the text fields (all the fields starting with a T except TXXX) can contain multiple values separated by a null character. The null character is the one represented by the termination code for the character encoding used.
ProppFrexx supports both ID3v2.3 and ID3v2.4 - the version present in a file will be used - if a new ID3 tag is created v2.4 is used!
In addition ProppFrexx supports references to the ID3v1 genres as defined above.
So what ProppFrexx is doing is actually correct...

Saving ID3v2 tags:
a) multiple genres are seperated by a "/" within ID3v2.3 tags or seperated by a '/0' within ID3v2.4 tags.
b) if you specified a known ID3v1 genre name it is replaced by the numerical strings
c) if you specified any other genre name it is used as is

Reading ID3v2 tags:
a) multiple genres are seperated by "/" or '/0' (to support v2.3 and v2.4)
b) if a known ID3v1 numeric genre value is given it is replaced by the effective genre name
c) any other genre name is given it is used as is

To present multiple genres given within the tags to the user, ProppFrexx seperates the list of given genre values by a semicolon ";" (as suggested by the ID3 org as well - and like most other taggers/players as well).

ID3v2.3 Example:
"(20)/(3)" : is a list of 2 genres ('Alternative' and 'Dance')
"(20)/Soulful House" : is a list of 2 genres ('Alternative' and 'Soulful House')
"Classic House/Soulful House" : is a list of 2 genres ('Classic House' and 'Soulful House')
"Classic House/Soulful House" : is a list of 2 genres ('Classic House' and 'Soulful House')
"Alternative/Dance" : is a list of 2 genres ('Alternative' and 'Dance')

So I am affraid to say, that most other players are not fully compatible with the ID3v2 specs and as such don't parse them correctly!
In addition some players don't even support the IDv2.4 spaces at all.
Some players incorrectly don't even support multiple genre values or seperate them incorrectly.

However I might think about disabling the use of 'known' numeric genre values in a future release of ProppFrexx to enhance the compatibility with other players.

Post Reply