I know this is MP3-encoder but I couldn't find any place more suitable to
post the results of some decoder testing I've been doing over the last
couple of days.
I took a fairly complex track (Pat Metheny's Imaginary Day title track in
fact) ripped from CD at 44.1khz 16bit stereo, and encoded it using
Fraunhofer's MP3Enc v3.1 to a 256kbit MP3 file using the '-qual 9' setting.
I then proceeded to decode the track using various decoders. The decoders I
tested were l3dec v2.74, Sonique aE4 (from v1.51.0) and two Winamp decoders,
the first from v2.2 (the first release with the Fraunhofer codec) and the
second from v2.6 (Nitrane). I then compared the output WAV files to discover
any potential differences!
To compare the audio files, I found a suitably complicated 10-second portion
of audio in the original WAV file, then identified by inspection a suitable
reference point at the start of this section, which turned out to be a
particular peak in the waveform that was clearly identifiable. Using
CoolEdit 2000 I marked the corresponding sections in the decoded WAVs to the
exact sample. This allowed me to subtract one of the WAVs from the other and
thereby do a direct comparison.
My first discovery was that out of the four WAV files I had, three were
almost exactly identical. The decoded audio from aE4 and the Fraunhofer
WinAmp codec was byte-by-byte identical with that from l3dec apart from the
occasional 1-bit quantization error (v occasional - about 2 or 3 a second
I'd guess). However the Nitrane WAV, whilst identical in almost every
respect and certainly identical below 13kHz, showed differences in the
These differences appeared in the subtracted audio as single isolated
spectral components, of very short duration (perhaps 0.05s) and constant
frequency. They were distributed quite evenly between the left and right
channels, maybe 5 per channel per second. Each had an amplitude of
The question now was whether these were a) components missing from l3dec's
output; b) components missing from nitrane's output; c) components present
in both but at different amplitudes or d) something else. A little detective
work was in order. I put CEP 2000 into spectral view and captured the
spectrums into Paint Shop Pro, where I could subract then from each other as
images. What I discovered was that the components were always present in
both, but were either at different amplitudes, or at slightly different
positions - the nitrane components were roughly 50/50 too far ahead or too
far behind the l3dec components.
This is clearly a bug, either in fraunhofer's code or nitrane's code. I
could not hear the differences (untrained ear) nor could I verify which was
more 'correct' to the mp3 format since I know nothing of this. My immediate
conclusion would be that Nitrane has a bug that is causing these errors.
However, since Nullsoft have licensed Fraunhofer's mp3 decoding code
already, for version v2.2, and since the v2.6 Nitrane decoder's about box
still has a panel crediting the mp3 decoder license to Fraunhofer, why would
Nullsoft exchange a perfectly good piece of Fraunhofer code for Nitrane code
that produces these bugs? Are these bugs actually original bugs in the ISO
implementation upon which presumably Fraunhofer's code is based? Are these
Hope this is of interest to somebody. I also did some encoder quality tests
and discovered that I could not coax MP3ENC to encode the 16-22kHz band
particularly well - it would occasionally code components up to 20kHz but in
places where it mattered, for example drum attacks, it seemed not to bother.
LAME 3.70 did much better in this area. As I can hear some components above
16kHz and since LAME is about 10 times faster on my machine I'm sticking
with LAME. Nice work guys :)
If anybody's really interested I'll put up some pictures of the results
The basic conclusion is: there is no major difference between any of the MP3
decoders out there, except to say that that WinAmp's EQ sucks bigtime. They
all have the same frequency response.
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )