FLAC stands for Free Lossless Audio Codec. Grossly oversimplified, it is similar to MP3, but lossless. The project consists of the stream format; libFLAC, which implements reference encoders and decoders, flac; a command-line wrapper around libFLAC to encode and decode .flac files; and input plugins for various music players.
Software License: Open Source
Operating Systems Support: Microsoft Windows, Linux, Mac OS X
Download Link: FLAC 1.1.2
Homepage: FLAC
Version ChangeLog:
General:
Sped up decoding by a few percent overall.
Sped up encoding when not using LPC (i.e. when using flac options -0, -1, -2, or -l 0).
Fixed a decoding bug that could cause sync errors with some ID3v1-tagged FLAC files.
Added HTML documentation for metaflac.
FLAC format:
(none)
Ogg FLAC format:
(none)
flac:
New option --input-size to manually specify the input size when encoding raw samples from stdin.
metaflac:
(none)
plugins:
Added support for HTTP streaming in XMMS plugin. NOTE: there is a bug in the XMMS mpg123 plugin that hijacks FLAC streams; to fix it you will need to add the '.flac' extension to the list of exceptions in Input/mpg123/mpg123.c:is_our_file() in the XMMS sources and recompile.
build system:
(none)
libraries:
libFLAC: Sped up Rice block decoding in the bitbuffer, resulting in decoding speed gains of a few percent.
libFLAC: Sped up encoding when not using LPC (i.e. max_lpc_order == 0).
libFLAC: Trailing NUL characters maintained on Vorbis comment entries so they can be treated like C strings.
libFLAC: More FLAC tag (i.e. Vorbis comment) validation.
libFLAC: Fixed a bug in the logic that determines the frame or sample number in a frame header; the bug could cause sync errors with some ID3v1-tagged FLAC files.
libFLAC, libOggFLAC: Can now be compiled to use only integer instructions, including encoding. The decoder is almost completely integer anyway but there were a couple places that needed a fixed-point replacement. There is no fixed-point version of LPC analysis yet, so if libFLAC is compiled integer-only, the encoder will behave as if the max LPC order is 0 (i.e. used fixed predictors only). LPC decoding is supported in all cases as it always was integer-only.
Interface changes:
libFLAC:
Changed: Metadata object interface now maintains a trailing NUL on Vorbis comment entries for convenience.
Changed: Metadata object interface now validates all Vorbis comment entries on input and returns false if an entry does not conform to the Vorbis comment spec.
Added FLAC__format_vorbiscomment_entry_name_is_legal()
Added FLAC__format_vorbiscomment_entry_value_is_legal()
Added FLAC__format_vorbiscomment_entry_is_legal()
Added FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair()
Added FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair()
Changed the signature of FLAC__metadata_object_vorbiscomment_entry_matches(): the first argument is now FLAC__StreamMetadata_VorbisComment_Entry entry (was const FLAC__StreamMetadata_VorbisComment_Entry *entry), i.e. entry is now pass-by-value.
libFLAC++:
Changed: Metadata object interface now maintains a trailing NUL on Vorbis comment values for convenience.
Changed: Metadata object interface now validates all Vorbis comment entries on input and returns false if an entry does not conform to the Vorbis comment spec.
Changed: All Metadata objects' operator=() methods now return a reference to themselves.
Added methods to FLAC::Metadata::VorbisComment::Entry for setting comment values from null-terminated strings:
Entry(const char *field)
Entry(const char *field_name, const char *field_value)
bool set_field(const char *field)
bool set_field_value(const char *field_value)
Changed the signature of FLAC::Metadata::VorbisComment::get_vendor_string() and FLAC::Metadata::VorbisComment::set_vendor_string() to use a UTF-8, NUL-terminated string const FLAC__byte * for the vendor string instead of FLAC::Metadata::VorbisComment::Entry.
Added FLAC::Metadata::*::assign() to all Metadata objects.
Added bool FLAC::Metadata::get_tags(const char *filename, VorbisComment &tags)