note that there was ID3v1.1 which reserved the last 2 bytes of the comment field for track number. this actually consumes 3 bytes from the end of the comment as the third comes in as a null character to inform the reading app that the comment is finished and the next 2 bytes are track numbers
i was saddened that such a lame implementation was allowed to exist, it's a poorly thought out kludge and i came up with a much better solution in my head, that the year field (4 bytes wastage just to store an int that would be in the range 1900 to maybe 2100) could be adjusted to store year (1900 to 2156), disc number (0 to 128), track number (0 to 128 though red book spec limits tracks on a cd to 99) and around 10 boolean flags that were user defined.. and still only consume 4 bytes
i made a test version of my tag library as a proof of concept for me, but i never bothered chasing others up to see if they would be interested..
along the way i learned quite a bit about ID3 tagging and i still prefer ID3v1 to ID3v2 for reasons of hard disk work - ID32 are stored on the start of the file, requiring that the entire file be rewritten (the file is appended to the tag rather than the other way round). the debate i had with the standards writer of ID3v2 at the time was:
him> id32 is better because when streaming it, the tag is read first and can be broadcast before the song, not after it
me> and of course no webserver out there in the world has a random access file system..
i raised other points like, an id32 tag can potentially be longer than the file itself, contain pictures, zip files, exes and other things (so theoretically an id32 tag can contain a virus) and i still dont believe id32 is worthwhile but i dont bother so much any more..
its a cert that few people will use a library that only tags id31 though, so you might have to get your xml loving aspects of your personality out yet...
the way id32 slips inside mp3 blocks so as to appear invisible to incompatible players (they play as silence) is rather clever though.. one of the tag's plus points. i'd have loved to see ID31 go further, to variable length simply by writing a length variable at the end of the file, of the number of bytes to skip back to find the start of the tag.. no matter
good luck with your tag project, and if you need any help, let me know