|
MP3 Decoder Review - MAD
MPEG Audio Decoder
MAD
MPEG Audio Decoder by Rob
Leslie -- Review
courtesy of David Robinson
| Decoder
Source: |
Robert Leslie http://www.mars.org/home/rob/proj/mpeg/
|
| Version: |
private beta © 2000 Rob
Leslie
|
| Price: |
Free
|
| Settings: |
various
|
| Similar
products: |
Winamp
MAD decoder plug-in
|
| Verdict: |
Very
Good |
| VBR: |
not
tested |
| Full
file: |
Rarely |
| Major
Flaws: |
None |
| Minor
Flaws: |
Usually
clips the last few samples off files |
| Output
level: |
correct |
| 1-bit
relative accuracy: |
Good |
| 1-bit
absolute accuracy: |
Excellent+ |
MAD, the Mpeg Audio Decoder,
has been programmed from scratch by Rob Leslie. He has made the source
code freely and openly available, for others to compile and incorporate
into their own software and audio devices. He has also written a Winamp
decoder plug-in, based on the MAD decoder, which is reviewed
separately.
The core MAD decoding algorithm yields
24-bit output, and can be optimised for "speed",
"accuracy", or a combination of the two ("default" -
as used in the Winamp plug-in). MADPlay provides a command-line front
end to MAD, and can also convert its output to 16-bits, via dithering or
truncation. Rob kindly provided me with DOS executables compiled with
each of these options in place. All-in-all, a lot of things to test!
The MAD
Winamp plug-in was tested thoroughly. The MAD/MADPlay
combination, and its associated options, were tested for accuracy in the
24-bit
test (16-bit results are also included).
So, the burning questions - First,
how accurate is the MAD decoding algorithm. Secondly, does the 24-bit
calculation, when dithered to 16-bits, really give us better sound
quality than the standard 16-bit decoders?
As a reference, l3dec can output 24-bit
accurate data. The 24-bit
accuracy test revealed that the internal computation of l3dec
was accurate to at least 26 bits. By contrast, MAD "accuracy
optimised" gave accurate results up to around 23 bits, whilst a
further 3 bits were present, but distorted. MAD "default" gave
accurate results up to around 20-bits. A further 5-bits worth of
information was present, but distorted, while the final bit of
information I tested for was entirely absent. MAD "speed optimised",
even in 24-bit output mode, only gave 16-bits of information. In 16-bit
mode, this translates as being slightly less accurate than a good 16-bit
only decoder.
The "accuracy optimised", and
"default" versions of MAD are more accurate than a good 16-bit
decoder. By dithering the results down to 16-bits, does this increase
the perceived resolution? The answer is yes, but not as much as is
theoretically possible. I believe that the dither used by MAD is not
ideal. To prove this, I took the 24-bit output from l3dec, and used Cool
Edit Pro to dither the result to 16-bits. 1-bit of triangular dither
resulted in a 16-bit file which still retained the information held in
the 19th bit of the 24-bit file. (If you're getting lost, just hold onto
the fact that 19-bits of accuracy is what we would expect). Using noise
shaped dither (the same technique as is used on "SuperBitMapped"
CDs), the 21st bit of the 24-bit file was still audible, and undistorted
in the 16-bit version.
The dither used by MAD to generate a
16-bit file from it's 24-bit output retains the 17th bit accurately, and
also a further 2 bits in a very distorted manner. These two bits should
not be distorted, and this distortion is due to the non-ideal dither
used with MAD. Rob has said that if enough people care, he will look
into fixing this.
I tested the accuracy of each decoder
using intentionally noisy signals. To a certain extent these signals
self dither. However, using pure signals, the incorrect dither used by
MADplay is even more obvious. The test signal is a 1kHz tone at -96dB.
Decoded by l3dec to 24-bit accuracy, then
dithered to 16-bits by Cool Edit Pro.
Decoded by MAD "accuracy optimised",
dithered to 16-bits by MAD Play.
Note: the amplitude scales indicated on
these graphs are incorrect. They actually show a 60dB range from -88dB
to -148dB.
These graphs show that the MADPlay
front-end is dithering incorrectly. The spiky waveform in the lower
graph is severe harmonic distortion (guitarists often have a peddle to
add such an effect). Correctly dithering a signal avoids this. See this
article on dither for more information.
In conclusion, the MAD decoder is
significantly more accurate than any 16-bit decoder in its default and
accuracy-optimised modes. Dithering the output to 16-bits via MADPLAY
yields a file containing more information than a standard 16-bit decode,
but some of this information is distorted. This is preferable to the
information being entirely absent (as it is in a typical 16-bit decoders
undithered output), but it would be better still if all detectable bits
of information were preserved in a liner (non-distorted) manner.
EXTRA NOTES:
-
The binaries tested here were provided
by Rob Leslie, but are not available publicly (that I know of). You
may obtain the source code from the web address at the top of this
page, and compile them yourself.
-
The Winamp
MAD decoder plug-in is the easiest way to obtain and use
the MAD decoder.
-
Please see the 24-bit
test for more details and explanation of the accuracy
results quoted in this review.
-
This review sounds quite bad because
MAD claims to be a 24-bit decoder, but isn't quite this
accurate. However, compared to all the other "perfect"
16-bit decoders, it is excellent.
--
Review courtesy of David Robinson
|