Discussion:
Understanding multiple genres in ID3v23
Paul Taylor
2010-04-12 13:18:13 UTC
Permalink
With ID3v24 you can specify multiple genres by writing a null character
between each genres, and I treat as multiple genres with equal
precedence, unfortunately this is not how ID3v23 works.


From the ID3v23 Spec:

"The 'Content type', which previously was stored as a one byte numeric
value only, 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.

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)"."

So if you want to specify two genres and not use the numerical system,
how do you separate them - with a space ?

i.e Rock Acapella

and if you do separate with a space, how do you specify genres which
contain a space

i.e Rock Punk Rock Acapella

should be three genres, but would be read as four.

and are multiple genres read as refinements , or as genres of equal
standing.

Or should we be putting these in brackets, I though brackets only
applied to the predefined numeric types (plus RX and CV) but perhaps not.

In summary I dont expect there is a right anwser, but I would love to
know whats others are doing, what is the defacto standard.

Paul
Paul Taylor
2010-04-13 09:39:24 UTC
Permalink
Post by Paul Taylor
With ID3v24 you can specify multiple genres by writing a null
character between each genres, and I treat as multiple genres with
equal precedence, unfortunately this is not how ID3v23 works.
"The 'Content type', which previously was stored as a one byte numeric
value only, 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.
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)"."
So if you want to specify two genres and not use the numerical system,
how do you separate them - with a space ?
i.e Rock Acapella
and if you do separate with a space, how do you specify genres which
contain a space
i.e Rock Punk Rock Acapella
should be three genres, but would be read as four.
and are multiple genres read as refinements , or as genres of equal
standing.
Or should we be putting these in brackets, I though brackets only
applied to the predefined numeric types (plus RX and CV) but perhaps not.
In summary I dont expect there is a right anwser, but I would love to
know whats others are doing, what is the defacto standard.
Paul
Done some more delving this is what Foobar2000 does

By default it writes IDv24 tags but if you have
AdvancedTagging/MP3/ID3v2 writer compatabilty mode set it writes ID3v23
, but separates values by a null char (as in the v24 spec) . As a Foobar
user you can specify multiple values by seperating them with a ; but a
semicolon doesnt actually get written to a file a null char is written
instead. When reading values back the values the null chars are
converted to ;'s for display.

Paul

Loading...