I made a new release of MAD (0.11.1b) with the following changes:
- the libmad code is now in a separate directory
- the robustness of the Win32 audio output module is much improved
- the SSO is now disabled by default, as output accuracy is deemed to be more important than speed in the general case
- a bug in the Layer III sanity checking was fixed that could have caused a crash on certain random data input
- the Layer III requantization table was extended from 8191 to 8206 values as some encoders are known to use these values, even though ISO/IEC 11172-3 suggests the maximum should be 8191 (and I couldn't convince anyone on the LAME mailing list that this could be a bug in LAME)
- a short man page for madplay was added
- a new `madtime' program (not yet built or installed by default) accurately calculates average bitrate and playing time for any file, including VBR
- a new experimental multi-stream mixer `madmix' was added (--enable-experimental during configure to add -x option support for this to madplay)
The experimental mixer code is designed to minimize CPU involvement in decoding multiple bitstreams; subband synthesis is performed only once after all the mixing has taken place on the intermediate decoded data.
Here's an example usage:
madmix <(madplay -Qx one.mp3) <(madplay -Qx two.mp3)
Any number of input streams can be given on the command line to be mixed. You can also use the same -o option as for `madplay'. If your shell doesn't support process substitution with named pipes, you'll have to mess around and make them yourself.
Currently the mix is fixed at 100% for all streams, but this can be adjusted on line 330 of madmix.c. I think there's potential for command-line or file-based configuration to further make this useful, or possibly even a GUI.
As always, the release can be found here:
ftp://ftp.mars.org/pub/mpeg/
Cheers, -rob