First of all here is comparison between MP3 tagging (ID3) and WMA (ASF) tagging. Means there is no comparison between audio storage of these two file types. The comparison is just focused on storing something like
Title of song or
Picture of album.Second, remember Mp3 (Mpeg in fact) do not contain special structure to store additional information except audio and video. So ID3 defined a structure for mp3 files to store this type of information but in WMA files that uses ASF formatting there is special part to store this type of information and wma natively support tagging.
The comparison here is about ID3 tagging and WMA parts that store information like ID3. As WMA is ASF file, in the below part of this page ASF abbreviation used instead of WMA.
Both the ID3 and ASF use smaller parts to store their data. ID3 parts named Frame and ASF parts named Object. So anywhere object used means ASF object and where Frame used means ID3 Frames.
Identifiers
Objects and Frames both starts with identifier. Frame Identifier is 4 character (32bits) and Object identifier is a GUID (128bits). Of course reading 4 character instead of 128bits GUID with special format is more easy when programming.
Little Endian and Big Endian
As you know there is two way to storing binary data. Little endian and Big endian(to gain more information about these two methods you can visit Wiki) ASF file uses little endian to store data but ID3 use big endian.
Sometimes reading/writing big endian numbers with unknown length is hard to programming. According to .NET classes reading or writing little endian is more easy to programming.
Strings (Texts)
Any where that ASF wants to store a string, before the string it will store length of it. As an example if ASF try to store "Title" word that is 5 characters, first save binary number 5 and follows with "Title" string. And also all strings store in unicode encoding ( In unicode encoding each character is 2 bytes in length)
Length (16bits) | Content (unicode) |
5 | Title |
Sum: 12 Bytes |
But in ID3 the story is different. ID3 first write Encoding of string follow by string and then use null character to indicate string finished. If the string use unicode encoding the null indicator is 2 bytes otherwise it is 1 byte.
Encoding (8bits) | Content | End (1/2Byte) |
0: Ascii | Title | '\0' |
Sum: 7 Bytes |
1: Unicode | Title | '\0' |
Sum: 13Bytes |
In ID3 you can choose encoding type (UTF-8, UTF16BE, UTF16LE, ASCII) but in ASF files there is no choice for encoding.
Numbers
If ID3 wants to store Track number of song, it will store it as a string. As example imagine ID3 wants to store 12 as track number it will store two characters 1 and 2 in the string format. But ASF just save binary type of this number and save it as real number, not as a string. ID3 also stores dates as string in special format.
Storage Position
ID3 always come in the beginning of the file. So if you needs to read file information there is no need to open the mp3 data and find title of song. You just need to check beginning of the file (or end of file in ID3 v1).
But in ASF format the file information place is not clear and it may be in any part of file. So finding special information in ID3 is more easier than find the same thing in ASF.
Editing
As a programmer when you want to change ID3 data you just read beginning of the file then change it and finally save it. The tag information in ID3 have not any connection with MP3 data they are isolated and there is no need to edit both of them when you edit ID3. Just save ID3 and add mp3 data after it.
But in the ASF file any change to any object change all the file.
As an example, "My Title" where song title and then changed to "Second Title". As is clear the first string is 8 characters but the second one is 12 characters. In ID3 the length of TIT2 frame and of course all ID3 changes but there is no change in audio part and you can store the audio information just after ID3 without any changes. But in ASF the title information is in middle of file. So if the title length changed you must change the file information so you need to calculate every object lengths again.
In one word for ID3 you just need buffer ID3 information in Ram to change it, but for ASF you need to store every objects of file in memory to change it.