Starting with LAME 3.0:
red = features and bug fixes which effect quality
blue = features and bug fixes which effect speed
black = usability, portability, other
LAME 3.93alpha (CVS)
LAME 3.92 April 14 2002
- Alexander Leidinger: add non linear psymodel
(compile time option, disabled by default), workaround a bug in gcc
3.0.3 (compiler options, based upon suggestions from various people, see
archives and changelog for more)
- Steve Lhomme: ACM wrapper (MS-Windows codec)
- Steve Lhomme: less memory copying on
stereo (interleaved) input
- Takehiro Tominaga: Inter-channel masking,
enables with --interch x option
- For buggy versions of gcc compiler (2.96*), back off on some of
the advanced compiler options
LAME 3.91 December 29 2001
- Darin Morrison: Bugfix for --alt-preset
(for content with low volume, clean vocals), only important for the "fast
- Alexander Leidinger:
- add some missing files to the distribution
- add --alt-preset to the man page
LAME 3.90 December 21 2001
- Many small improvements and bug fixes not
added to history
- John Dahlstrom: more fine tuning on
the auto adjustment of the ATH
- Robert Hegemann: small speed and quality
improvements for the old VBR code (--vbr-old).
- Robert Hegemann: some short block bug
- Robert Hegemann: Big improvements to
--vbr-mtrh, now encodes much more frequencies over 16khz
- Robert Hegemann: --vbr-new code disabled
(outdated and lower quality) and replaced with --vbr-mtrh (Both --vbr-new
and --vbr-mtrh now default to mtrh)
- Robert Hegemann: reordering of --longhelp to give more information,
- Darin Morrison: Totally revamped and extremely high quality
unified preset system and other general quality improvements now available
- some improvements to psychoacoustics
(vast improvements over default L.A.M.E. modes) when --alt-preset is used
- Improved tuning of short block
- Improved quantization selection
usage (the -X modes), now adapts between appropriate modes on the fly.
Also helps on "dropout" problems and with pre-echo cases.
- Improved joint stereo usage. Thresholds
are better tuned now and fix some "dropout" problems L.A.M.E. suffers from
on clips like serioustrouble.
- Improved noise shaping usage.
Now switches between noise shaping modes on the fly (toggles -Z on and off
when appropriate) which allows lower bitrates but without the quality compromise.
- Clips vastly improved over default
L.A.M.E. modes (vbr/cbr/abr, including --r3mix): castanets, florida_seq,
death2, fatboy, spahm, gbtinc, ravebase, short, florida_seq, hihat, bassdrum,
2nd_vent_clip, serioustrouble, bloodline, and others. No degraded clips
- VBR bitrates are now more "stable" with less fluctuation
-- not dipping too low on some music and not increasing too high unnecessarily
on other music. "--alt-preset standard" provides bitrates roughly within
the range of 180-220kbps, often averaging close to 192kbps.
- --alt-presets replace the --dm-presets and "metal" preset is
removed and replaced with generic abr and cbr presets.
- --alt-preset extreme (note the 'e') replaces xtreme to help
eliminate some confusion
- --alt-preset vbr modes now have a fast option which offers almost
no compromise in speed.
- --alt-preset standard (and "fast standard") are now much lower
in bitrate, matching --r3mix with an overall average, though offering higher
quality especially on difficult test samples.
- --alt-presets are no longer just "presets" as in a collection
of switches, instead they are now quality "modes" because of special code
level tunings (those mentioned above).
- Use --alt-preset help for more information.
- Roel VdB: more tuning on the --r3mix
- Jon Dee, Roel VdB: INFO tag
- Alexander Leidinger, firstname.lastname@example.org: added --scale-l
and --scale-r to scale stereo channels independantly
- Takehiro Tominaga: new noise shaping mode, offering more "cutting
edge" shaping according to masking, enabled via -q0
- Mark Taylor: More work on --nogap
- Gabriel Bouvigne: Small changes to abr code for more accurate
- Gabriel Bouvigne, email@example.com: Preliminary ReplayGain analysis code added (not
- Gabriel Bouvigne, Alexander Leidinger: Documentation updates
- John Dahlstrom, DSPguru@math.com: floating point interface
function in the Windows DLL
LAME 3.89beta July 5 2001
- John Stewart: long filename support for Win9x/NT.
- Takehiro Tominaga: LAME can calculate the CRC of VBR
header, so now "lame -pv" works fine.
- Robert Hegemann: Improvements of
the new VBR code (--vbr-mtrh).
- Robert Hegemann: New VBR code (--vbr-mtrh)
is now defaulted to get more feedback. The VBR speed is now on par
with CBR. We will use the old VBR code in the release.
- Gabriel Bouvigne: Change of the maximum
frame size limit. LAME should now be more friendly with hardware players.
- Gabriel Bouvigne: Size of VBR is now more balanced according
to the -V value.
- Alexander Leidinger: Finished the implementation of the set/get
- John Dahlstrom: LAME now handles 24bits input
- Mark Taylor: bugs in lame --decode causing truncation of mp3 file
- Mark Taylor: preliminary --nogap support
- "Final" API completed: shared library safe! This API is frozen
and should be backwords compatiable with future versions of libmp3lame.so,
but we will continue to add new functionality.
LAME 3.88beta March 25 2001
- A lot of work that was never added to the
- Frank Klemm and Gabriel Bouvigne:
New ATH formula. Big improvement for high bitrate encodings.
- Takehiro Tominaga: Temporal masking
- Gabriel Bouvigne/Mark Taylor: auto adjustment
- Robert Hegemann: Better outer_loop
stopping criterion. Enabled with -q2 or better.
- Robert Hegemann/Naoki Shibata: slow/carefull
noise shaping. -q3..9: amplify all distorted bands. -q2:
amplify distorted bands within 50%. -q1-0: amplify only most
distorted band at each iteration.
- Takehiro Tominaga: Interframe, shortblock
- Takehiro Tominaga: LAME restructured into a shared library
and front end application. Slight changes to the API. More changes
are coming to turn LAME into a true shared library (right now you have to
recompile if you upgrade the library :-(
- Naoki Shibata:
- improvements to psychoacoustics (--nspsytune)
- BUG in long block pre echo control fixed
(some out of range array access in M/S
- Ralf Kempkens: Visual
Basic Script for lame, suggested to put it on your Windows Desktop and you
can drag'n'drop Waves to encode on it.
- Alexander Stumpf: improved
lame.bat for 4Dos users
- Mark Taylor: Several bugs fixed in the
- Frank Klemm, Robert Hegemann:
added assembler code for CPU feature detection on runtime (MMX, 3DNow, SIMD)
- Takehiro Tominaga: 3DNow FFT code.
- Florian Bome, Alexander Leidinger:
more work on configure stuff
- Alexander Leidinger: automake/libtool
generated Makefiles and TONS of other work.
- Alexander Leidinger: Much
work towards shared library style API.
- Anonymous: New more efficient RTP code.
- Mark Taylor: psycho-acoustic data now
computed for all scalefactor bands (up to 24 kHz)
- Mark Taylor, Takehiro Tominaga: All ISO
table data replaced by formulas - should improve MPEG2.5 results for which
we never had correct table data.
LAME 3.87alpha September 25 2000
- Mark Taylor: Bug fixed in LAME/mpglib error recovery when
encountering a corrupt MP3 frame during *decoding*.
- Albert Faber: added LayerI+II decoding support
- Frank Klemm: added improved CRC
- Frank Klemm: substantial code cleanup/improvements
- Robert Hegemann: Bug fixes
- in huffman_init, could lead to
segmentation faults (only in rare cases, most likely at lower sample rates)
- M/S switching at lower sample rates
(the fact there is no 2nd granule was ignored)
- Robert Hegemann: speed up in
- Jarmo Laakkonen: Amiga/GCC settings for Makefile.unix.
- Magnus Holmgren: README and Makefile for (free) Borland
C++ compiler. Will also compile lame_enc.dll, but this is untested.
- Florian Bome: LAME finally has a ./configure
LAME 3.86beta August 6 2000
- Christopher Wise: A makefile for DJGPP, the DOS version
of gcc. Now most windows users should be able to compile LAME with
- Robert Hegemann: old VBR:
fixed some bugs and Takehiro's scalefac_scale feature (not yet on by
default.) older LAME versions did not allow to spent more than 2500
bits of 4095 possible bits to a granule per channel, now fixed.
- Robert Hegemann: new VBR: analog silence treatment
like in old VBR
- William Welch: Improved options for Linux/Alpha gcc and
ccc compilers in Makefile.
- Mathew Hendry: setting appropriate CRC bit for additional
Xing-VBR tagging frame
- Don Melton: added ID3 version 2 TAG support
- John Dahlstrom: fixed bug allowing timing
information (for status in command line encoder) to overflow.
- Tamito KAJIYAMA, Fixed several bugs in
the LAME/Vorbis interface.
- Mark Taylor: lame --decode will
recognize Album ID tags
- Naoki Shibata: Additive masking
and other improvements to psycho acoustics. (not yet on by default)
LAME 3.85beta July 3 2000
- Takehiro Tominaga: mid/side stereo
demasking thresholds updated.
- Takehiro Tominaga: New short block MDCT coefficient data structure.
Should allow for future speed improvements.
- Robert Hegemann: fixed bug in old VBR routine, the --noath
mode messed up the VBR routine resulting in very large files
- Robert Hegemann: found bugs in some sections when using 32 bit
floating point. Default is now back to 64bit floating point.
- Takehiro Tominaga: Modified PE formula
to use ATH.
- S.T.L.: README.DJGPP - instructions
for compiling LAME with DJGPP, the dos version of gcc.
LAME 3.84beta June 30 2000
- Mark Weinstein: .wav file output (with --decode option)
was writing the wrong filesize in the .wav file. Now fixed.
- Mark Taylor: (optional) Vorbis support, both encoding
and decoding. LAME can now produce .ogg files, or even re-encode
your entire .ogg collection into mp3. (Just kidding: it is always
a bad idea to convert from one lossy format to another)
- ?: Bug fixed causing VBR to crash under windows.
(pretab array overflow)
- Sergey Sapelin: Another bug found in the mpg123 MPEG2 tables.
Now fixed for the mpg123 based decoder in LAME.
- Marco Remondini: VBR histogram works in win32. compile
with -DBRHIST -DNOTERMCAP
- Takehiro Tominaga: LAME CBR will
now use scalefac_scale to expand the dynamic range of the scalefactors.
- Iwasa Kazmi: Library improvements:
exit()'s, printf, fprintf's are being replaced by interceptable macros.
LAME 3.83beta May 19 2000
- Mark Taylor: Bug in buffering routines:
in some cases, could cause MDCT to read past end of buffer.
Rare in MPEG2, even more rare for MPEG1, but potentially serious!
- Mark Taylor: MDCT/polyphase filterbank was not being "primed"
properly. Does not effect output unless you set the encoder delay lower
than the default of 576 samples.
- Mark Taylor: "vdbj" and "Caster"
found several VBR bugs (now fixed): 1. Analog silence detection
only checked frequencies up to 16 kHz. 2. VBR mode could still
somehow avoid -F mode. 3. VBR mode would ignore noise above
16 kHz (scalefactor band 22), Now calc_noise1 will compute the noise in this
band when in VBR mode. Not calculated in CBR mode since CBR algorithm
has no way of using this information.
- Mark Taylor: scalefactor band 22 info (masking(=ATH),
noise and energy) now displayed in frame analyzer.
- VBR code ATH tuning was disabled by accident
in 3.81, now fixed.
- Mark Taylor: lame --decode will
produce .wav files. (oops - size is off by a factor of 4)
LAME 3.82beta May 11 2000
- Robert Hegemann: Fixed bug in high bitrate joint stereo
- Naoki Shibata: new long block MDCT
LAME 3.81beta May 8 2000
- all ISO code removed!
- Takehiro Tominaga and Naoki Shibata:
new window subband routines.
- Naoki Shibata: Bug fix in mpglib
(decoding) lib: in some cases, MDCT coefficients from previous granule
was incorrectly used for the next granule.
- ISO 7680 bit buffer limitation removed.
It can be reactivated with "--strictly-enforce-ISO" Please report any
trouble with high bitrates.
LAME 3.80beta May 6 2000
- Takehiro Tominaga: more efficient
and faster huffman encoding!
- Takehiro Tominaga and Mark Taylor:
much improved short block compression!
- Tomasz Motylewski and Mark Taylor:
MPEG2.5 now supported!
- Mark Taylor: incorporated Takehiro's bitstream.c!
bitstream.c used by default, but old ISO bitstream code can also be used.
- Scott Manley and Mark Taylor:
good resampling routine finaly in LAME. uses a 19 point FIR filter
with Blackman window. Very slow for non integer resampling ratios.
- Iwasa Kazmi: fixed SIGBUS error:
VBR and id3 tags were using data after it was free()'d.
- Robert Hegemann: Improved VBR tuning.
#define RH_QUALITY_CONTROL and #RH_SIDE_VBR now the defaults.
- Robert Hegemann: LAME version
string now added to ancillary data.
- Kimmo Mustonen: VBR histogram support for Amiga.
- Casper Gripenberg: VBR stats (but not histogram) for DOS
- Robert Hegemann: rare VBR overflow bug fixed.
- Zack: -F option strictly enforces the VBR min bitrate.
Without -F, LAME will ignore the minimum bitrate when encoding analog silence.
- Shawn Riley: User can now specify a compression ratio
(--comp <arg>) instead of a bit rate. Default settings based
on a compression ratio of 11.0
- Mark Taylor: free format bitstreams can be created with
--freeformat, and specify any integer bitrate from 8 to 320kbs with -b.
- Mark Taylor: lame be used as a decoder (output raw pcm only):
lame --decode input.mp3 output.pcm
LAME 3.70 April 6 2000
- "LAME 3.69beta becomes LAME 3.70 "stable"
LAME 3.69beta April 6 2000
- "spahm": default mode selection bug fixed. In some
cases, lame was defaulting to regular stereo instead of jstereo when the
user did not specify a mode.
LAME 3.68beta April 4 2000
- Mark Taylor: mono encoding bug in DLL fixed.
- Ingo Saitz: bug in --cwlimit argument parsing fixed.
- Scott Manly: bug in 4-point resample code
LAME 3.67beta March 27 2000
- Robert Hegemann: jstereo now enabled
for MPEG2 encodings
- Mark Taylor: old M/S stereo mode which used L/R maskings has
- Mark Taylor: Xing MPEG2 VBR headers now working.
- Mark Taylor: When quantized coefficients
are all 0 in a band, set scalefactors to 0 also to save a few bits.
- Ingo Saitz: Problems with framesize
calculation when using -f fast-math option fixed.
LAME 3.66beta March 21 2000
- Bug fixes in BladeEnc DLL, possible click in last mp3 frame,
VBR historgram display, byteswapping option, ASM quantize routines work
for both float and double.
LAME 3.65beta March 17 2000
- Enabled ASM version of quantize_xrpow() - accidently disabled
LAME 3.64beta March 16 2000
- Don Melton: id3v1.1 tags & id3 bugfixes
- Gabriel Bouvigne: L/R matching block
- Bug fixed which was allowing quantized
values to exceed the maximum when not using -h
- Mark Taylor: Fitlers based on polyphase
filterbank. should be slightly better since the responce is independent
of the blocktype, and they are slightly faster.
- Mark Taylor: API: the API changed slightly - and this
should be the final version. There is a new routine: lame_encode_buffer()
which takes an arbritray sized input buffer, resamples & filters if necessary,
encodes, and returns the mp3buffer. There are also several new #defines,
so it is possible to compile a simple encoding library with no decoding or
file I/O or command line parsing. see the file API for details.
- Mark Taylor: MSVC stuff: lame.exe (with and without the
frame analyzer) and the CDex lame_enc.dll
should compile under MSVC. The MSVC5 project files may need some
tweaking. In particular,
you need to make sure LAMEPARSE, LAMESNDFILE and HAVEMPGLIB
are defined. (and HAVEGTK for the GTK stuff).
LAME 3.63beta February 20 2000
- Robert Hegemann: FPE with -h fixed?
- Mathey Hendry: FPE error catching for Cygwin, FPE fix
for vbr mode and output to /dev/null
- Jeremy Hall: Fixed problems with input files where the
number of samples is not known.
- Mathew Hendry: ASM quantize_xrpow()
for GNU i386
- Wilfried Behne quantize_xrpow ()for
PowerPC and non-ASM
- Takehiro Tominaga: GOGO FFTs
(not yet used?)
LAME 3.62beta February 9 2000
- Iwasa Kazmi: frame analyzer short
block display of single subblocks (press 1,2 or 3)
- Ingo Saitz: --help option added,
with output to stdout
- Alfred Weyers: short block AAC spreading
function bug fixed
- Takehiro Tominaga: new scalefac
data structure - improves performance!
- Lionel Bonnet: Bug fixed in MPEG2
scalefactor routine: scalefactors were being severly limited.
- Takehiro Tominaga: faster FFT routines
from. These routines are also compatible with the GOGO routines, in
case someone is interested in porting them back to LAME.
- Sigbjørn Skjæret, Takehiro
Tominaga: faster pow() code.
- Joachim Kuebart: Found some unitialized
variables that were effecting quality for encodings which did not use the
-h option (now fixed).
- Mark Taylor: More modularization work. It is now
possible to use LAME as a library where you can set the encoding parameters
directly and do your own file i/o. The calling program is now
it's own mp3 output. For an example of the LAME API, see main.c, or
mp3rtp.c or mp3x.c. These can all be compiled as stand alone programs
which link with libmp3lame.a.
- Felix vos Leitner: mp3rtp fixes. mp3rtp is a standalone
program which will encode and stream with RTP.
- Robert Hegemann: Information written to stderr displaying
exactly which type of lowpass filter (if any) is being used.
- Iwasa Kazmi: mpglib (the mpg123 decoder) scsfi decoding
- Takehiro Tominaga: More mpglib scsfi decoding fixes.
LAME 3.61beta January 14 2000
- Mark Taylor: Fixed bug with lowpass filters
when using VBR with a 64kbs or lower min bitrate setting.
- Takehiro Tominaga: more efficient
huffman encoding splitting.
LAME 3.60beta January 9 2000
- Mark Taylor: Distribution now comes with self test. Needs
work to be automated, see 'make test' in Makefile.
- Mark Taylor: AAC spreading function now
- Gabriel Bouvigne: updated HTML docs
- Felix von Leitner: compute correct file length from Xing header
(if present) when input file is a mp3 file
- Felix von Leitner: mp3rtp (standalone) program now included.
Not yet tested. mp3rtp ip:port:ttl <infile>
/dev/null will stream directly to ip:port using RTP.
LAME 3.59beta January 4 2000
- Takehiro Tominaga: --noath option. Disables ATH maskings.
- Gabriel Bouvigne: updated HTML docs.
- Iwasa Kazmi: makefile fixes
- Mark Taylor: Fixed bug where first frame of data was always
overwritten with 0's. Thanks to 'gol'
- Mark Taylor: bug fixes in mid/side
masking ratios (thanks to Menno Bakker)
- Mark Taylor: replaced norm_l, norm_s table data with formulas.
LAME 3.58beta December 13 1999
- Segher Boessenkool: More accurate
quantization procedure! Enabled with -h.
- Mathew Hendry, Acy Stapp and Takehiro
Tominaga: ASM optimizations for quantize_xrpow and quantize_xrpow_ISO.
- Chuck Zenkus: "encoder inside" logo on web page
- Mark Taylor: a couple people have asked for this.
Allow LAME to overide VBR_min_bitrate if analog_silence detected.
Analog_silence defined a la Robert: energy < ATH.
- An Van Lam: Valid bitrates were being printed for layer 2, not
- Ethan Yeo: Makefile.MSVC updated
- Mark Stephens: updated all MSVC project files
- Robert Hegemann: lowpass and highpass filters can be enabled
with --lowpass, --highpass
- Mark Taylor: MS switching is now
smoother: ms_ratio average over 4 granules
- Takehiro Tominaga: Scalefactor pre-emphasis
fixed (and now turned back on)
- Takehiro Tominaga: Bug in M/S maskings:
switch to turn on stereo demasking code was buggy.
LAME 3.57beta November 22 1999
- Sigbjørn Skjæret, patch to allow encoding from 8bit
input files when using LIBSNDFILE
- Mark Taylor: Automatic downsampling to nearest valid samplerate.
- Mark Taylor: Scalefactor bands demarked on MDCT plot in frameanalyzer
- Mark Taylor: Scalefactor preemphasis disabled for now.
The algorithm was often doing more harm than good.
LAME 3.56beta November 19 1999
- Kimmo Mustonen: portabilty code cleanup.
- Vladimir Marek: id3 genre patch.
- Conrad Sanderson: new applypatch script.
- Mark Taylor: Initial window type now "STOP_TYPE" to reduce initial
attenuation. This is needed because the new encoder delay is so short.
With a NORM_TYPE, the first 240 samples would be attenuated.
- Mark Taylor: Padding at end of file now adjusted (hopefully!)
to produce as little padding as possible while still guarantee all input
samples are encoded.
- Takehiro Tominaga: Reduced shortblock
extra bit allocation formulas by 10% since new huffman coding is at least
10% more efficient.
LAME 3.55beta November 11 1999
- Albert Faber: updated BladeEnc.dll
- Mark Taylor: Simple lowpass filter added to linear downsampling
- Nils Faerber: updated man page.
- Mark Taylor: All floating point variables are delcared FLOAT
or FLOAT8. Change the definition of FLOAT8 in machine.h to run
at 32bit preceision.
- Mark Taylor: Bug (introduced in 3.54beta) in stereo->mono
LAME 3.54beta November 8 1999
- Mark Taylor: Encoder delay is now 48 samples. Can be adjusted
to 1160 to sync with FhG (see ENCDELAY in encoder.h) This is kind of
amazing, since if Takehiro put his MDCT/filterbank routine in a decoder,
we could have a total delay of only 96 samples.
- Mark Taylor: More inconstancies found
and fixed in MPEG2 tables.
- Mark Taylor: Resampling from an MP3 input file now works.
But we still dont have a lowpass filter so dont expect good results.
LAME 3.53beta November 8 1999
- Takehiro Tominaga: Fixed MPEG2 problem
in new MDCT routines. Takehiro's combined filterbank/MDCT routine is
now the default. Removes all buffering from psymodel.c and the filterbanks/MDCT
LAME 3.52beta November 8 1999
The following changes are disabled because of MPEG2
problems. But to try them, set MDCTDELAY=48 in encoder.h, instead
- By permission of copyright holders of all GPL code in LAME,
all GPL code is now released under a modified version of the LGPL (see the
- By popular demand, all C++ comments changed to C style comments
- Mark Taylor: Linear resampling now works. Use --resample
to set an output samplerate different from the input samplerate. (doesn't
seem to work with mp3 input files, and there is no lowpass filter, so dont
expect good results just yet)
- Takehiro Tominaga: Faster Huffman
- Takehiro Tominaga: New MDCT routines
with shorter delay (48 samples instead of 528) and even faster than the
- Takehiro Tominaga: Removed extra
buffering in psymodel.c
LAME 3.51 November 7 1999
- Takehiro Tominaga: Bug in quantize.c absolute threshold of hearing
calculation for non-44.1 kHz input files.
LAME 3.50 November 1 1999
- LAME 3.37beta becomes official LAME 3.50 release
LAME 3.37beta November 1 1999
- Lionel Bonnet: Found severe bug in
MPEG2 Short block SNR.
- Sergey Sapelin: VBR Toc improvement.
- Sergey Dubov: fskip() routine
- Conrad Sanderson: replacement for filterbank.c.
Not much faster but amazingly simpler.
LAME 3.36beta October 25 1999
- Albert Faber: more MSVC and BladeDLL updates
- Kimmo Mustonen: Much code cleanup and Amiga updates
- Anton Oleynikov: Borland C updates
- Mark Taylor: More stdin fixes: For some reason, forward
fseek()'s would fail when used on pipes even though it is okay with redirection
from "<". So I changed all the forward fseek()'s to use fread().
This should improve stdin support for wav/aiff files. If you know
the input file is raw pcm, you can still use the '-r' option to avoid *all*
seeking of any kind.
LAME 3.35beta October 21 1999
- Leonid Kulakov: Serious bug in MPEG2
scalefactor band tables fixed.
- Portability patches from: Anton Oleynikov, Sigbjørn
Skjæret, Mathew Hendry, Richard Gorton
- Alfred Weyers: compiler options, updated timestatus.
- Albert Faber: BladeDll and other updates (new machine.h).
- Monty: updated Makefile to fix gcc inline math bug.
LAME 3.34beta October 12 1999
- Mark Taylor: Bug fixed: minimum bitrate
in VBR mode could be ignored for a few frames.
- Mark Taylor: New (minor) VBR tunings.
- Tim Ruddick: New wav/aiff header parsing routines. Better
parsing and fewer fseek()'s.
- Anton Oleynikov: patches to work with Borland C
- Gabriel Bouvigne: Experimental voice
option enabled with --voice
LAME 3.33beta October 11 1999
- Robert Hegemann: RH VBR mode now the default
and only VBR mode. The new code will always quantize to 0 distortion
and the quality is increased by reducing the masking from the psy-model.
-X0 is still the default for now.
- Robert Hegemann: new -X5 mode
- Mathew Hendry: New timing code, removes the need for HAVETIMES
- Mathew Hendry: assembler quantize_xrpow
- Iwasa Kazmi: stdin/stdout patch for Windows
- Mark Taylor: New option: "--athonly" will ignore the psy-model
output and use only the absolute threshold of hearing for the masking.
LAME 3.32beta October 8 1999
- Takehiro Tominaga: faster long block
spreading function convolution for non 44.1 kHz sampling frequencies, and
faster short block spreading function convolution for all sampling frequencies.
- Takehiro Tominaga: Completly rewritten
huffman table selection and count_bits(). More efficient table selection
results in many more bits per frame.
- Takehiro Tominaga: More efficient
scalefac compress setting.
- Mike Cheng: new calc_noise2()
- Alfred Weyers: patch for timestatus() seconds rollover
LAME 3.31beta September 28 1999
- Albert Faber: updated his BladeDLL code. This allows
LAME to be compiled into a BladeEnc compatiable .dll.
- Mike Cheng: faster l3psycho_ener() routine.
- Sigbjørn Skjæret: more code cleanup.
LAME 3.30beta September 27 1999
- Conrad Sanderson: ID3 tag code added (type 'lame' for instructions)
- new mdct.c from Mike Cheng (no faster, but much cleaner code)
- Mathew Hendry: Microsoft nmake makefile and a couple other changes
- More modulization work: One input sound file interface
handles mp3's, uncompressed audio, with or without LIBSNDFILE. Fixes
(hopefully) a bunch of file I/O bugs introduced in 3.29 (Mark Taylor)
- LAME will now print valid samplerate/bitrate combinations (Mark
- stdin/stdout fix for OS/2 (Paul Hartman)
- For mp3 input files, totalframes estimated based on filesize
and first frame bitrate. (Mark Taylor)
- Updated all functions with new style prototypes. (Sigbjørn
LAME 3.29beta September 21 1999
- Bug in bigv_bitcount fixed. Loop.c
was overestimating the number of bits needed, resulting in wasted bits every
frame. (Leonid A. Kulakov)
- Bug in *_choose_table() fixed
These routines would not sellect the optimal Huffman table in some cases.
(Leonid A. Kulakov)
- Tuning of ATH normalization (macik)
- Removed unused variables and fixed function prototypes (Sigbjørn
- Sami Farin sent a .wav file that LAME built
in support choked on. I added a slightly more sophisticated
wav header parsing to handle this, but if you have trouble, use libsndfile.
- Resampling hooks and options added. Buffering and resampling
routines need to be written.
- LAME will now take an mp3 file as input. When resampling
code is working, LAME will be able to (for example) convert a high bitrate
stereo mp3 to a low bitrate mono mp3 for streaming.
LAME 3.28beta September 15 1999
- Serious bug fixed in high frequency MDCT
coefficients. Huffman coding was reversing the order of the count1
block quadruples. (Leonid A. Kulakov)
- nint() problems under Tru64 unix fixed and preprocessor variable
HAVE_NINT removed. (Bob Bell)
- Compiler warning fixes and code cleanup (Sigbjørn
Skjæret, Lionel Bonnet)
- USAGE file now includes suggestions for downsampling.
For low bitrate encodings, proper downsampling can give dramatically better
results. (John Hayward-Warburton)
LAME 3.27beta September 12 1999
- Several bugs in encode.c and l3bitstream.c fixed by Lionel Bonnet.
- Bugs in new VBR (#define RH) formula for mono input file and
mid/side encoding fixed.
LAME 3.26beta September 10 1999
- The "-m m" option (mono .mp3 file) will automatically mix left
and right channels if the input file is stereo. (Alfred Weyers)
- New quant_compare algorithm (method for
deciding which of two quantizations is better) enabled with -X4 (Greg Maxwell)
- New mid/side VBR bit allocation formula.
Mid channel bits are set by the quality requirements, and then the side channel
uses a reduced number of bits (in a proportion coming from the fixed bitrate
code). This might not be optimal, but it should be pretty good and
no one knows what the optimal solution should be. (Greg Maxwell)
- New VBR (#define RH) tunings based on
detailed listening tests by Macik and Greg Maxwell.
- Sigbjørn Skjæret fixed several compiler warnings
(which turned out to be potential bugs)
- Takehiro Tominaga fixed a low bitrate bug in reduce_side()
- Alfred Weyers fixed some buffer overflows.
- New ATH (absolute threshold of hearing)
formula replaces buggy ISO code, and adds analog silence treatment
(removal of coefficients below below ATH). These are turned
on by default but have not been fully tested. (Robert Hegemann)
- Bug in short block spreading function
fixed. (Robert Hegemann)
LAME 3.25beta August 22 1999
- Sigbjørn Skjæret fixed a zero byte malloc call.
This bug was introduced in 3.24 and causes problems on non Linux systems.
- Bit allocation routines would sometimes allocate more than 4095
bits to one channel of one granule. A couple of people reported problems
that might be caused by this, especially at higher bitrates.
- Nils Faerber updated the man page and fixed many of the compiler
LAME 3.24beta August 15 1999
- This release contains the following new code (for developers)
which is disabled by default:
- Robert Hegemann: Completely overhauled VBR code.
Now computes exact number of bits required for the given qualty and then
quantized with the appropriate bitrate.
- Several new quantization quality measures.
LAME 3.23beta August 8 1999
- Very nice continuously updated VBR histogram display from Iwasa
Kazmi. (disabled with --nohist).
- More modulerization work. The encoding engine can now
be compiled into libmp3lame, but the interface is awkward.
- Bug fixed in FFT Hann window formula (Leonid
- New LAME logo on the download page. Created by Chris Michalisles.
- Several VBR algorithm improvements from
Robert Hegemann. New quantization noise metrics and VBR quality measure
takes into account mid/side encoding. Should produce smaller files
with the same quality, especially when using jstereo.
LAME 3.22beta July 27 1999
- Downsampling (stereo to mono) bug with MPEG2 fixed. (Mike
- Downsampling now merges L & R channels - before it only
took the L channel.
- More modularization and code cleanup from Albert Faber and myself.
- Input filesize limit removed for raw pcm input files.
For other file types, LAME will still only read the first 2^32 samples,
(27 hours of playing time at 44.1 kHz).
LAME 3.21beta July 26 1999
- Correct Mid/Side masking thresholds for
JSTEREO mode! This is enabled with -h. It makes LAME about
20% slower since it computes psycho-acoustics for L,R Mid and Side channels.
- "Analog silence" threshold added.
Keeps VBR from upping the bitrate during very quite passages. (Robert.Hegemann)
- New VBR quality setting from Robert Hegemann.
It is based on the idea that distortion at lower bit rates sounds worse
than at higher bitrates, and so the allowed distortion (VBR quality setting)
is proportional to the bitrate. Because of this, default minimum bitrate
is now 32kbs.
- Expermental subblock gain code enabled
- New "-r" option for raw pcm input files. With -r, LAME
will not do any fseek()'s or look for wav and aiff headers on the input file.
- Bug fixes in mp3x (frame analyzer) for viewing frames near end
of the file.
- Bug fixed to allow setting the sampling rate of raw pcm input
LAME 3.20beta July 19 1999
- Bug in get_audio.c fixed. Libsndfile wrappers would not
compile (Miguel Revilla Rodriguez)
- Nils Faerber found some unitialized variables and some wierd
extranous computations in filter_subband, now fixed. This was causing
seg faults on some machines.
LAME 3.19beta July 18 1999
- Oops! Robert Hegemann immediatly
found a bug in the new (old -Z option) quantization code. calc_noise1
was not returning tot_noise, so non ms-stereo frames were buggy.
LAME 3.18beta July 17 1999
- Many psycho-acoustic bug fixes. Dan
Nelson discovered a bug in MPEG2: For short blocks, the code assumes 42
partition bands. MPEG1 sometimes has less, MPEG2 can have more.
In MPEG1, this bug would not have effected the output if your compiler initializes
static variables to 0 on creation. In MPEG2 it leads to array out-of-bounds
access errors. Finally, there was a related bug in MPEG1/MPEG2, short &
long blocks where the energy above 16 kHz was all added to partition band
0. (the lowest frequeny partition band!)
- The -Z option (Gabriel Bouvigne's idea
of using total quantization noise to choose between two quantizations with
the same value of "over") is now the default. I believe this helps remove
the trilling sound in Jan's testsignal4.wav. The quality of testsignal2.wav
and testsignal4.wav are now better than Xing and getting closer to FhG.
- Bug fixes in frame & sample count for downsampling mode.
- Patches to improve modulization. (ben "jacobs")
LAME 3.17beta July 11 1999
- substantial code cleanup towards goal of making LAME more modular.
LAME 3.16beta July 11 1999
- New tunings of window switching, and better
bit allocation based on pe. (Jan Rafaj. improves both testsignal2.wav
- Bug in mid/side quantization when side
channel was zero fixed. (Albert Faber)
- Removed some extranous computations in l3psy.c (Robert Hegemann)
- More detailed timing status info, including hours display. (Sakari
Ailus) and percentage indicator (Conrad Sanderson).
- Window_subband and calc_noise1,calc_noise2
speedups. Quantize_xrpow speedup should be significant on non GNU/intel
systems. (Mike Cheng)
- Better initial guess for VBR bitrate.
Should speed up VBR encoding. (Gabriel Bouvigne)
- More advanced .wav header parsing. fixes bugs involving
click in first frame. (Robert.Hegemann)
- Correct filesize and total frame computation when using LIBSNDFILE
- Click in last frame (buffering problem) when using libsndfile
- Audio I/O code overhauled. There is now a uniform audio
i/o interface to libsndfile or the LAME built in wav/aiff routines.
All audio i/o code localized to get_audio.c.
- times()/clock() problem fixed for non-unix OS. (Ben "Jacobs")
- Fixed uninitialized pe when using fast mode. (Ben "Jacobs")
LAME 3.13 June 24 1999
- Patches for BeOS from Gertjan van Ratingen.
- Makefile info for OS/2 Warp 4.0 (from dink.org).
- Status display now based on wall clock time, not cpu time.
- mem_alloc no longer allocates twice as much memory as needed
- Updated BLADEDLL code to handle recent changes (Albert Faber).
- Bug fixed in parsing options when not using GTK (Albert Faber).
- MPEG2 Layer III psycho acoustics now working.
- Improved huffman encoding Chris Matrakidis.
(10% faster). I dont know how he finds these improvements! LAME
with full quality now encodes faster than real time on my PII 266.
- Fixed time display when encoding takes more than 60 minutes.
- New mid/side
stereo criterion. LAME will use mid/side stereo only when the difference
between L & R masking thresholds (averaged over all scalefactors) is
less then 5db. In several test samples it does a very good job mimicking
the FhG encoder.
- Bug in mid/side stereo fixed: independent
variation of mid & side channel scalefactors disabled. Because
of the way outer_loop is currently coded, when encoding mid/side coefficietns
using left/right thresholds, you have to vary the scalefactors simultaneously.
- Bug in side/mid energy ratio calculation
fixed. (Thanks to Robert Hegemann)
- Default mode is stereo (not jstereo) if bitrate is chosen as
192kbs or higher. Tero Auvinen first pointed out that FhG seems to
think at 160kbs, their encoder is so good it doesn't need jstereo tricks.
Since LAME is not as good as FhG, I am going to claim that 192kbs LAME is
so good it doens't need jstereo tricks, and thus it is disabled by default.
- WAV header parsing for big-endian machines, and automatic detection
of big-endian machines. (Thanks to Sigbjørn Skjæret).
- added 56 sample delay to sync LAME with FhG.
- MP3x (frame analyzer) can now handle MPEG2 streams.
- MPEG2 layer III now working! lower bit rates (down to 8kbs)
and 3 more sampling frequencies: 16000, 22050, 24000Hz. Quality is
poor - the psy-model does not yet work with these sampling frequencies.
- Fixed "ERROR: outer_loop(): huff_bits < 0." bug when using
- bash and sh scripts to run LAME on multiple files now included.
(from Robert Hegemann and Gerhard Wesp respectively)
- bug fix in encoding times for longer files from (Alvaro
- yet another segfault in the frame analyzer fixed.
- ISO psy-model/bit allocation routines removed. This allowed
makeframe() to be made much simpler, and most of the complicated buffering
is now gone. Eventually I would like the encoding engine to be a stand alone
- Better VBR tuning. Find minimum bitrate
with distortion less than the allows maximum. A minimum bit rate is
imposed on frames with short blocks (where the measured distortion can not
be trusted). A minimum frame bitrate can be specified with -b,
support. With libsndfile, LAME can encode almost all sound formats.
Albert Faber did the work for this, including getting libsndfile running
- CRC checksum now working! (Thanks to Johannes Overmann
- frame analyzer will now work with mono .mp3 files
- more code tweeks from Jan Peman.
- Compaq-Alpha(Linux) fixes and speedups
from Nils Faerber.
- Faster bin_search_StepSize from Juha Laukala.
- Faster quantize() from Mike Cheng
- Faster quantize_xrpow() from Chris Matrakidis.
xrpow_flag removed since this option is now on by default.
- Fixed .wav header parsing from Nils Faerber.
- Xing VBR frame info header code from Albert Faber.
"Xing" and "LAME 3.12" embedded in first frame.
- Bug in VBR bit allocation based on "over"
LAME 3.11 June 3 1999
Almost all warnings (-Wall) now fixed! (Thanks
to Jan Peman)
More coding improvements from Gabriel Bouvigne and Warren Toomey.
VBR (variable bit rate).
Increases bit rate for short blocks and for frames where the number of
bands containing audible distortion is greater than a given value.
Much tuning needs to be done.
Patch to remove all atan() calls from James Droppo.
LAME 3.10 May 30 1999
- Fast mode (-f) disables psycho-acoustic
model for real time encoding on older machines. Thanks to Lauri Ahonen
who first sent a patch for this.
- New bit reservoir usage scheme to accommodate
the new pre-echo detection formulas.
- Tuning of AWS and ENER_AWS pre-echo
formulas by Gabriel Bouvigne and myself. They work great! now
on by default.
- In jstereo, force blocktypes for left & right channels
to be identical. FhG seems to do this. It can be disabled with
- Patches to compile MP3x under win32 (Thanks to Albert Faber).
- bin_serach_stepsize limited to a quantizationStepSize
of -210 through 45.
- outer_loop() will now vary Mid
& Side scalefactors independently. Can lead to better quantizations,
but it is slower (twice as many quantizations to look at). Running with
"-m f" does not need this and will run at the old speed
- Bug in inner_loop would allow quantizations
larger than allowed. (introduced in lame3.04, now fixed.)
- Updated HTML documentation from Gabriel Bouvigne.
- Unix man page from William Schelter.
- numlines bug fixed. (Thanks
to Rafael Luebbert, MPecker author).
- Quantization speed improvements from
- When comparing quantizations with the
same number of bands with audible distortion, use the one with the largest
scalefactors, not the first one outer_loop happened to find.
- Improved defination of best quantization when using -f (fast
- subblock code now working. But no algorithm to choose
subblock gains yet.
- Linux now segfaults on floating point exceptions. Should
prevent me from releasing binaries that crash on other operating systems.
May 22 1999
May 18 1999
- Version 3.04 released.
- Preliminary documentation from Gabriel Bouvigne.
- I wouldn't have thought it was possible,
but now there are even more speed improvements from Chris Matrakidis!
Removed one FFT when using joint stereo, and many improvements in loop.c.
- "Fake" ms_stereo mode renamed "Force" ms_stereo since it forces
mid/side stereo on all frames. For some music this is said to be a
problem, but for most music mode is probably better than the default jstereo
because it uses specialized mid/side channel masking thresholds.
- Small bugs in Force ms_stereo mode fixed.
- Compaq Alpha fixes from Nathan Slingerland.
- Some new experimental pre-echo detection
formulas in l3psy.c (#ifdef AWS and #ifdef ENER_AWS, both off by default.
Thanks to Gabriel Bouvigne and Andre Osterhues)
- Several bugs in the syncing of data displayed by mp3x (the
frame analyzer) were fixed.
- highq (-h) option added. This turns on things (just
one so far) that should sound better but slow down LAME.
- Version 3.03 released.
- Faster (20%) & cleaner FFT (Thanks
to Chris Matrakidis http://www.geocities.com/ResearchTriangle/8869/fft_summary.html)
- mods so it works with VC++ (Thanks to Gabriel Bouvigne, www.mp3tech.org)
- MP3s marked "original" by default (Thanks to Gabriel
- Can now be compiled into a BladeEnc compatible .DLL
(Thanks to Albert Faber, CDex author)
- Patches for "silent mode" and stdin/stdout (Thanks to
Lars Magne Ingebrigtsen)
- Fixed rare bug: if a long_block is sandwiched
between two short_blocks, it must be changed to a short_block, but the short_block
ratios have not been computed in l3psy.c. Now always compute short_block
ratios just in case.
- Fixed bug with initial quantize step
size when many coefficients are zero. (Thanks to Martin Weghofer).
- Bug fixed in MP3x display of audible distortion.
- improved status display (Thanks to Lauri Ahonen).
May 12 1999
May 11 1999
- Version 3.02 released.
- encoder could use ms_stereo even if
channel 0 and 1 block types were different. (Thanks to Jan Rafaj)
- added -k option to disable the 16 kHz
cutoff at 128kbs. This cutoff is never used at higher bitrates. (Thanks
to Jan Rafaj)
- modified pe bit allocation formula to
make sense at bit rates other than 128kbs.
- fixed l3_xmin initialization problem which showed up under
FreeBSD. (Thanks to Warren Toomey)
- Version 3.01 released
- max_name_size increased to 300 (Thanks to Mike Oliphant)
- patch to allow seeks on input file (Thanks to Scott Manley)
- fixes for mono modes (Thanks to everyone who pointed this
- overflow in calc_noise2 fixed
- bit reservoir overflow when encoding lots of frames with all
zeros (Thanks to Jani Frilander)
May 10 1999
November 8 1998
- Version 3.0 released
- added GPSYCHO (developed by Mark Taylor)
- added MP3x (developed by Mark Taylor)
- LAME now maintained by Mark Taylor
November 2 1998
- Version 2.1f released
- 50% faster filter_subband() routine in encode.c contributed
by James Droppo
October 31 1998
- Version 2.1e released.
- New command line switch -a auto-resamples a stereo
input file to mono.
- New command line switch -r resamples from 44.1 kHz
to 32 kHz [this switch doesn't work really well. Very tinny sounding output
files. Has to do with the way I do the resampling probably]
- Both of these were put into the ISO code in the encode.c file,
and are simply different ways of filling the input buffers from a file.
October 18 1998
- Version 2.1d released
- Fixed memory alloc in musicin.c (for l3_sb_sample)
- Added new command line switch (-x) to force swapping of byte
- Cleaned up memory routines in l3psy.c. All the mem_alloc()
and free() routines where changed so that it was only done once and
not every single time the routine was called.
- Added a compile time switch -DTIMER that includes all timing
info. It's a switch for the time being until some other people have tested
on their system. Timing code has a tendency to do different things on different
October 16 1998
- Version 2.1b released.
- Fixed up bug: all PCM files were being read as WAV.
- Played with the mem_alloc routine to fix crash under amigaos
(just allocating twice as much memory as needed). Might see if we can totally
do without this routine. Individual malloc()s where they are needed instead
- Put Jan Peman's quality switch back in. This reduces quality
via the '-q ' switch. Fun speedup which is mostly harmless if
you're not concerned with quality.
- Compiling with amiga-gcc works fine
October 6 1998
- Version 2.1a released. User input/output has been cleaned up
a bit. WAV file reading is there in a very rudimentary sense ie the program
will recognize the header and skip it, but not read it. The WAV file is
assumed to be 16bit stereo 44.1 kHz.
October 4 1998In response to some concerns about the quality of
the encoder, I have rebuilt the encoder from scratch and carefully compared
output at all stages with the output of the unmodified ISO encoder. Version2.0
of LAME is built from the ISO source code (dist10), and incorporates modifications
from myself and the 8hz effort. The output file from LAME v2.0 is identical
to the output of the ISO encoder for my test file.Since I do not have heaps
of time, I left the ISO AIFF file reader in the code, and did not incorporate
a WAV file reader.Added section on quality
October 1 1998
- Version 2.1 released with all tables now incorporated into
the exe. Thanks to Lars Magne Ingebrigtseni(firstname.lastname@example.org)
Up to September 1998
- Updated web page and released LAME v1.0
Working on the 8hz source code...
- Patched the 8hz source
- 45% faster than original source (on my freebsd p166).
- m1 - sped up the mdct.c and quantize() functions [MDCTD,
- m2 - sped up the filter_subband routine using Stephane
Tavenard 's work from musicin [FILTST]
- m2 - minor cleanup of window_subband [WINDST2]
- m2 - Cleaned up a few bits in l3psy.c. Replaced a sparse
matrix multiply with a hand configured unrolling [PSYD]
- m3 - (amiga only) Added in the asm FFT for m68k (based
on sources from Henryk Richter and Stephane Tavenard)
- m4 - raw pcm support back in
- m5 - put in a byte-ordering switch for raw PCM reading
(just in case)
- m6 - reworked the whole fft.c file. fft now 10-15% faster.
- m7 - totally new fft routine. exploits fact that this
is a real->complex fft. About twice as fast as previous fastest fft
(in m6). (C fft routine is faster than the asm one on an m68k!)
- - Now encodes from stdin. Use '-' as the input filename.
Thanks to Brad Threatt
- - Worked out that the 1024point FFT only ever uses the
first 6 phi values, and the first 465 energy values. Saves a bunch of calculations.
- - Added a speed-up/quality switch. Speed is increased
but quality is decreased slightly. My ears are bad enough not to
be able to notice the difference in quality at low settings :). Setting
'-q 1' improves speed by about 10%. '-q 100' improves speed by about 26%.
Enoding of my test track goes from 111s (at default '-q 0') to 82s (at -q
100). Thanks to Jan Peman for this tip.
- m9 - fixed an error in l3psy.c. numlines is overwritten
with incorrect data. Added a new variable numlines_s to fix this. Thanks
again to Jan Peman.
- m10 - Down to 106 seconds by selecting a few more compiler
options. Also added a pow20() function in l3loop.c to speed up (ever so
slightly) calls to pow(2.0, x)
- No speedups. Just cleaned up some bits of the code.
- Changed K&R prototyping to 'normal' format. Thanks
to Steffan Haeuser for his help here.
- Changed some C++ style comments to normal C comments
- Removed the #warning from psy_data.h (it was getting
- Removed reference in bitstream.c to malloc.h. Is there
a system left where malloc.h hasn't been superceded by stdlib.h?
- In Progess:
- my PSYD hack for the spreading functions is only valid
for 44.1 kHz - Should really put in a "if freq = 44.1 kHz" switch for it.
Someone might want to extend the speedup for 48 and 32 kHz.
- Putting in Jan Peman's quantanf_init speedup.