[ID3 Dev] TCON confusion

Mitchell S. Honnert mitch at honnert.com
Fri Jan 13 23:36:08 PST 2006


OK, I've decided to revisit something that's been bugging me for a long
time.  The TCON "genre" section in the standards document states that you
can store multiple genre values in the frame, but after several readings, I
still can't say exactly how to do this.

See below for the TCON frame section (from
http://www.id3.org/id3v2.3.0.html#TCON) in its entirety and my inline
questions and comments...

>The 'Content type', which previously was stored as a one byte numeric value
>only, is now a numeric string.
So far, so good.  Genres will be represented with numbers.

>You may use one or several of the types as ID3v1.1 did 
What? This sentence appears to imply that ID3v1.1 supported "several"
genres, but it clearly does not.  One can even read into this sentence that
the ID3v2.3 implements multiple genres in the same manner that ID3v1.1 did.

>or, since the category list would be impossible to maintain with accurate
>and up to date categories, define your own.
Now we're getting somewhere.  We don't have to use numbers from a predefined
list.  We can define out own genres.  Cool.
 
>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".
This is where the uncertainty really starts for me.  The "(4)" represents
Disco (from Appendix A) and "Eurodisco" is the refinement.  The word
"refinement" combined with the example implies that you aren't supposed to
define your *own* genres, but only new *subcategories* of the genres in
Appendix A.  But all editors for ID3v2.3 have genre as free-form text.  

But if genre is truly meant to be free-form, why bother with the number in
the first place?  Why open up a situation where you can combine the genre
number for with a totally contradictory refinement i.e. "(15)Country and
Western"?  What would you display given this genre: "Rap", "Country and
Western", or "Rap (Country and Western)"?

>Several references can be made in the same frame, e.g. "(51)(39)".
OK.  Here's the part I'm interested in: multiple genres.  But there are no
details around the "refinements" i.e. how to handle custom genres.  Common
sense would say that multiple genres would appear like so...

"(51)Southern Techno-Industrial(39)Funny Noises"

But how would I implement multiple genres in a single frame if I chose to do
away with the number, as most of the popular audio players appear to do?  It
seems like I can't.  Even though they are ignored, it looks like I'd have to
put some dummy genre numbers in there just to act as delimiters.  Like so...

"(12)Songs to brush my teeth to(12)A bright coloured fish"

>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
These two sections make sense.  (I actually support the Remix and Cover
flags in my lib, but I don't know of any other libs or apps that do.)


And to confuse matters even worse, I loaded up a file edited using ID3-TagIT
(which is the only application that I can find that supports multiple
genres) in a binary editor and discovered that this application uses null
chars to delimit the multiple genres.  This seems like the easiest way to
implement multiple genres to me, but in no reading of the TCON standard, do
I get to use null-terminated strings.

So...how should I implement multiple genres to best follow the standard?  I
know I'm being pedantic about this, but I don't want to interpret the TCON
section one way, implement it in my ID3 library, and later discover some
popular library or audio application that supports multiple genres in a
completely different way.

Thanks,

Mitchell S. Honnert
www.UltraID3Lib.com



---------------------------------------------------------------------
To unsubscribe, e-mail: id3v2-unsubscribe at id3.org
For additional commands, e-mail: id3v2-help at id3.org



More information about the ID3v2 mailing list