MP3 Diags Error Codes

As described in another post, I was trying to understand and use MP3 Diags 1.2.03, for purposes of testing a number of MP3 files. To assist in that effort, I examined the diagnostic codes, or notes, that MP3 Diags used to analyze those MP3s, and the output file that MP3 Diags produced. This post provides some discussion on what I found.

If you run MP3 Diags on a set of MP3s, it will produce a list of the files and an indication of which of its diagnostic codes are at issue in a given file. That will probably not be a complete list of all diagnostic codes available in MP3 Diags. To see the complete list of available diagnostic codes, you have to go into Configuration (i.e., the crossed wrench and screwdriver icon, near the upper right corner of the screen) > Ignored Notes tab.

I did not see an option, there, to export that list. So here is a manually reproduced copy of that list. To produce this list, I began with some screen captures, saved as PNGs; I enlarged and cropped them using IrfanView; I used Adobe Acrobat to OCR the PNGs; and then I read through the list and made manual corrections.

Note that discussion continues below, after the list.

The Basic Set of MP3 Diags Codes

Code Note Text
aa Two MPEG audio streams found, but a file should have exactly one.
ab Low quality MPEG audio stream. (What is considered “low quality” can be changed in the configuration dialog, under “Quality thresholds”.)
ac No MPEG audio stream found.
ad VBR with audio streams other than MPEG1 Layer III might work incorrectly.
ae Incomplete MPEG frame at the end of an MPEG stream.
af Valid frame with a different version found after an MPEG stream.
ag Valid frame with a different layer found after an MPEG stream.
ah Valid frame with a different channel mode found after an MPEG stream.
ai Valid frame with a different frequency found after an MPEG stream.
aj Valid frame with a different CRC policy found after an MPEG stream.
ak Invalid MPEG stream. Stream has fewer than 10 frames.
al Invalid MPEG stream. First frame has different bitrate than the rest.
an No normalization undo information found. The song is probably not normalized by MP3Gain or a similar program. As a result, it may sound too loud or too quiet when compared to songs from other albums.
ao Found audio stream in an encoding other than “MPEG-1 Layer 3” or “MPEG-2 Layer 3.” While MP3 Diags understands such streams, very few tests were run on files containing them (because they are not supposed to be found inside files with the ” .mp3″ extension), so there is a bigger chance of something going wrong while processing them.
ba Two Lame headers found, but a file should have at most one of them.
bb Xing header seems added by Mp3Fixer, which makes the first frame unusable and causes a 16-byte unknown or null stream to be detected next.
bc Frame count mismatch between the Xing header and the audio stream.
bd Two Xing headers found, but a file should have at most one of them.
be The Xing header should be located immediately before the MPEG audio stream.
bf The Xing header should be compatible with the MPEG audio stream, meaning that their MPEG version, layer and frequency must be equal.
bg The MPEG audio stream uses VBR but a Xing header wasn’t found. This will confuse some players, which won’t be able to display the song duration or to seek.
bh Xing header included in audio frame count. This is probably best ignored, as most players are fine with it and the fix erases potentially important information, like gapless playing information or the table of contents.
ca Two VBRI headers found, but a file should have at most one of them.
cb VBRI headers aren’t well supported by some players. They should be replaced by Xing headers.
cc VBRI header found alongside Xing header. The VBRI header should probably be removed.
da Invalid ID3V2 frame. File too short.
db Invalid frame name in ID3V2 tag.
dc Flags in the first flag group that are supposed to always be 0 are set to 1. They will be ignored.
dd Flags in the second flag group that are supposed to always be 0 are set to 1. They will be ignored.
de Error decoding the value of a text frame while reading an Id3V2 Stream.
df ID3V2 tag has text frames using Latin-1 encoding that contain characters with a code above 127. While this is valid, those frames may have their content set or displayed incorrectly by software that uses the local code page instead of Latin-1. Conversion to Unicode (UTF16) is recommended.
dg Empty genre frame (TCON) found.
dh Multiple frame instances found, but only the first one will be used.
di The padding in the ID3V2 tag is too large, wasting space. (Large padding improves the tag editor saving speed, if fast saving is enabled, so you may want to delay compacting the tag until after you’re done with the tag editor.)
dj Unsupported ID3V2 version.
dk Unsupported ID3V2 tag. Unsupported flag.
dl Unsupported value for Flags1 in ID3V2 frame. (This may also indicate that the file contains garbage where it was supposed to be zero.)
dn Unsupported value for Flags2 in ID3V2 frame. (This may also indicate that the file contains garbage where it was supposed to be zero.)
do Multiple instances of the POPM frame found in ID3V2 tag. The current version discards all the instances except the first when processing this tag.
dp ID3V2 tag contains no frames, which is invalid. This note will disappear once you add track information in the tag editor.
dq ID3V2 tag contains an empty text frame, which is invalid.
ea ID3V2 tag doesn’t have an APIC frame (which is used to store images).
eb ID3V2 tag has an APIC frame (which is used to store images), but the image couldn’t be loaded.
ec ID3V2 tag has at least one valid APIC frame (which is used to store images), but no frame has a type that is associated with an album cover.
ed Error loading image in APIC frame.
ee Error loading image in APIC frame. The frame is too short anyway to have space for an image.
ef ID3V2 tag has multiple APIC frames with the same picture type.
eg ID3V2 tag has multiple APIC frames. While this is valid, players usually use only one of them to display an image, discarding the others.
eh Unsupported text encoding for APIC frame in ID3V2 tag.
ei APIC frame uses a link to a file as a MIME type, which is not supported.
ej Picture description is ignored in the current version.
fa No ID3V2.3.0 tag found, although this is the most popular tag for storing song information.
fb Two ID3V2.3.0 tags found, but a file should have at most one of them.
fc Both ID3V2.3.0 and ID3V2.4.0 tags found, but there should be only one of them.
fd The ID3V2.3.0 tag should be the first tag in a file.
fe ID3V2.3.0 tag contains a text frame encoded as UTF-8, which is valid in ID3V2.4.0 but not in ID3V2.3.0.
ff Unsupported value of text frame while reading an Id3V2 Stream.
fg Invalid ID3V2.3.0 frame. Incorrect frame size or file too short.
ga Two ID3V2.4.0 tags found, but a file should have at most one of them.
gb Invalid ID3V2.4.0 frame. Incorrect frame size or file too short.
gc Invalid ID3V2.4.0 frame. Frame size is supposed to be stored as a synchsafe integer, which uses only 7 bits in a byte, but the size uses all 8 bits, as in ID3V2.3.0. This will confuse some applications.
gd Deprecated TYER frame found in 2.4.0 tag alongside a TDRC frame.
ge Deprecated TYER frame found in 2.4.0 tag. It’s supposed to be replaced by a TDRC frame.
gf Deprectaed TDAT frame found in 2.4.0 tag alongside a TDRC frame.
gg Invalid ID3V2.4.0 frame. Mismatched Data length indicator. Frame value is probably incorrect.
gh Invalid ID3V2.4.0 frame. Incorrect unsynchronization bit.
gi Deprecated TDAT frame found in 2.4.0 tag. It’s supposed to be replaced by a TDRC frame.
gj Unsupported value of text frame while reading an Id3V2.4.0 stream. It may be using an unsupported text encoding.
ha The only supported tag found that is capable of storing song information is ID3V1, which has pretty limited capabilities.
hb The ID3V1 tag should be located after the MPEG audio stream.
hc Invalid ID3V1 tag. File too short.
hd Two ID3V1 tags found, but a file should have at most one of them.
he ID3V1 tag contains fields padded with spaces alongside fields padded with zeroes. The standard only allows zeroes, but some tools use spaces. Even so, zero-padding and space-padding shouldn’t be mixed.
hf ID3V1 tag contains fields that are padded with spaces mixed with zeroes. The standard only allows zeroes, but some tools use spaces. Even so, one character should be used for padding for the whole tag.
hg Invalid ID3V1 tag. Invalid characters in Name field.
hh Invalid ID3V1 tag. Invalid characters in Artist field.
hi Invalid ID3V1 tag. Invalid characters in Album field.
hj Invalid ID3V1 tag. Invalid characters in Year field.
hk Invalid ID3V1 tag. Invalid characters in Comment field.
ia Broken stream found.
ib Broken stream found. Since other streams follow, it is possible that players and tools will have problems using the file. Removing the stream is recommended.
ja Truncated MPEG stream found. The cause for this seems to be that the file was truncated.
jb Truncated MPEG stream found. Since other streams follow, it is possible that players and tools will have problems using the file. Removing the stream or padding it with 0 to reach its declared size is strongly recommended.
ka Not enough remaining bytes to create an UnknownDataStream.
kb Unknown stream found.
kc Unknown stream found. Since other streams follow, it is possible that players and tools will have problems using the file. Removing the stream is recommended.
kd File contains null streams.
la Invalid Lyrics stream tag. File too short.
lb Two Lyrics tags found, but only one is supported.
lc Invalid Lyrics stream tag. Unexpected characters found.
ld Multiple fields with the same name were found in a Lyrics tag, but only one is supported.
le Currently INF fields in Lyrics tags are not fully supported.
na Invalid Ape Item. File too short.
nb Ape Item seems too big. Although the size may be any 32-bit integer, 256 bytes should be enough in practice. If this note is determined to be incorrect, it will be removed in the future.
nc Invalid Ape Item. Terminator not found for item name.
nd Invalid Ape tag. Header expected but footer found.
ne Not an Ape tag. File too short.
nf Invalid Ape tag. Footer expected but header found.
ng Invalid Ape tag. Mismatch between header and footer.
nh Two Ape tags found, but only one is supported.
ni Ape item flags not supported.
nj Unsupported Ape tag. Currently a missing header or footer are not supported.
oa The file seems to have been changed in the (short) time that passed between parsing it and the initial search for pictures. If you think that’s not the case, report a bug.
ob No supported tag found that is capable of storing song information.
oc Too many TRACE notes added. The rest will be discarded.
od Too many notes added. The rest will be discarded.
oe Too many streams found. Aborting processing.
of Unsupported stream found. It may be supported in the future if there’s a real need for it.
og The file was saved using the “fast” option. While this improves the saving speed, it may leave the notes in an inconsistent state, so you should rescan the file.
oh An error occurred while reading the file, so it wasn’t fully processed. This usually happens when reading from external drives or USB sticks, in which case a workaround might be to copy the files to an internal drive.

Additional Codes

As described in the other post, I ran MP3 Diags on a list of several thousand MP3s. I exported and analyzed the log of that process by using steps described in the other post. The log included some error messages that were not included in the foregoing list.

I was using Microsoft Excel to analyze the messages provided in the log. In particular, I used Excel’s VLOOKUP function to identify the two-letter diagnostic codes corresponding to the text messages provided in the log. I did this because I wanted to convert the long messages of the log into the brief diagnostic codes, so that I could present all of the MP3 Diags information about a single MP3 on a single line of the spreadsheet. That would enable me to compare the MP3 Diags findings against the results of other MP3 testing programs.

The first problem was that, in the foregoing list, and also in the log, some messages were too long for VLOOKUP. Consider, for example, the long description of code oh, shown immediately above. To enable VLOOKUP to read the log output (containing that long text message) and link it to code oh, my spreadsheet would have to convert that long text into a short version (e.g., “An error occurred while reading the file”). Then VLOOKUP could look up that short version in the code table, and could give me diagnostic code oh.

The second problem was that, while MP3 Diags obviously represented an enormous investment of time, producing a remarkable tool, it did not appear to be a finished product. I observed that the log contained messages that were not restated in the terms used in the list of diagnostic codes. Here is an example of one such message:

0-2df804 (3012613) Unknown: begins with: “RIFFLgN.WAVEfmt ….U………..” (52 49 46 46 4c 67 4e 00 57 41 56 45 66 6d 74 20 1e 00 00 00 55 00 01 00 e0 2e 00 00 c4 09 00 00)

Just as that message began (more or less) with the word “Unknown,” so also there were other messages beginning with the words Broken, Null, Truncated, or Unsupported. For my purposes — and, I would think, for many other users as well — the details provided in that example would not be important. We would not be doing anything with that series of hexadecimal values. It seemed that, for that message as for others, most users would want the main screen of MP3 Diags to provide a code summarizing the details. For purposes of making my spreadsheet work, I devised the following list of codes, so as to boil down those detailed messages into something useful:

aox – Found audio stream in an encoding other than
dfx – ID3V2 tag has text frames using Latin-1 encoding
dkx – Unsupported ID3V2
fax – Broken ID3V2.3.0
iax – Broken MPEG Audio
jax – Truncated MPEG
kbx – Unknown
kdx – Null

Those additional diagnostic codes were formed by appending “x” to the diagnostic code that seemed closest to the situation. (In a few cases, I had to guess; I did not know enough about MP3 files to be certain of what the detailed log messages were saying.) For instance, consider the first item:

aox – Found audio stream in an encoding other than

That is a shortened version of the longer ao code (above):

ao – Found audio stream in an encoding other than “MPEG-1 Layer 3” or “MPEG-2 Layer 3.” While MP3 Diags understands such streams, very few tests were run on files containing them (because they are not supposed to be found inside files with the ” .mp3″ extension), so there is a bigger chance of something going wrong while processing them.

I would have made the shortened version a little longer, but the quotation marks around “MPEG-1 Layer 3” complicated things.

In a few cases, I was not sure why the log file contained a long discussion, when the gist of it seemed already to be captured by an existing note. For instance, it did not seem necessary for MP3 Diags to provide a long explanation of a problem that I summarized with the jax code, “Truncated MPEG,” when the list of codes already contained code ja, “Truncated MPEG stream found. The cause for this seems to be that the file was truncated.” It appeared that MP3 Diags was not necessarily recognizing all of the instances when one of its existing diagnostic codes would apply, presumably eliminating the need for an alternate text explanation.

These eight additional codes (e.g., aox) did not accommodate all of the lengthy descriptions provided in the foregoing table. They merely accommodated those that appeared in the log file resulting from my 5,133 MP3 files. I assumed I would have to expand the list later, to accommodate other unusual messages.

Advertisements
This entry was posted in Uncategorized and tagged , , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s