At the beginning of the file it's easy - ID3v2 or nothing.
At the end of the file, it's chaotic
- ID3v1, if present, is always at the end of the file
- Lyrics3 is before ID3v1 and requires ID3v1 to be present
- APE can be at the end of the file, before ID3v1, or before Lyrics3. If APE and Lyrics3 coexist, Lyrics3 must come immediately ID3v1 (with APE before Lyrics3)
CODE
// good
ID3v1
Lyrics3+ID3v1
APE
APE+ID3v1
APE+Lyrics3+ID3v1
// bad
[APE+]Lyrics3
Lyrics3+APE+ID3v1
ID3v1
Lyrics3+ID3v1
APE
APE+ID3v1
APE+Lyrics3+ID3v1
// bad
[APE+]Lyrics3
Lyrics3+APE+ID3v1
Now where does ID3v2-footer go?
If that's the only footer tag, no problem, at the end of the file
If there's ID3v1 as well, before ID3v1 I assume.
But what if you have APE+Lyrics3+ID3v1 as well?
Not at the end of the file - that breaks ID3v1.
Not after Lyrics3 - that breaks Lyrics3.
If between APE and Lyrics3, will APE-readers be broken?
If before APE, will IDv2-readers find it?
The ID3v2 documentation doesn't really talk about these issues, it seems to assume that only one tagging standard (ID3v2, naturally) will be applied at one time.
Of course, having 4 tag formats on one file is very silly, but somebody's bound to do it at some point
On a related topic, do any programs (or tagging libraries) support ID3v2 footers other than Frontah?