- the stream format
- reference encoders and decoders in library form
- flac, a command-line program to encode and decode FLAC files
- metaflac, a command-line metadata editor for FLAC files
- input plugins for various music players
Features of FLAC 1.2.1 :
• Lossless: The encoding of audio (PCM) data incurs no loss of information, and the decoded audio is bit-for-bit identical to what went into the encoder. Each frame contains a 16-bit CRC of the frame data for detecting transmission errors. The integrity of the audio data is further insured by storing an MD5 signature of the original unencoded audio data in the file header, which can be compared against later during decoding or testing.
• Fast: FLAC is asymmetric in favor of decode speed. Decoding requires only integer arithmetic, and is much less compute-intensive than for most perceptual codecs. Real-time decode performance is easily achievable on even modest hardware.
• Hardware support: Because of FLAC's free reference implementation and low decoding complexity, FLAC is currently the only lossless codec that has any kind of hardware support.
• Streamable: Each FLAC frame contains enough data to decode that frame. FLAC does not even rely on previous or following frames. FLAC uses sync codes and CRCs (similar to MPEG and other formats), which, along with framing, allow decoders to pick up in the middle of a stream with a minimum of delay.
• Seekable: FLAC supports fast sample-accurate seeking. Not only is this useful for playback, it makes FLAC files suitable for use in editing applications.
• Flexible metadata: New metadata blocks can be defined and implemented in future versions of FLAC without breaking older streams or decoders. Currently there are metadata types for tags, cue sheets, and seek tables. Applications can write their own APPLICATION metadata once they register an ID
• Suitable for archiving: FLAC is an open format, and there is no generation loss if you need to convert your data to another format in the future. In addition to the frame CRCs and MD5 signature, flac has a verify option that decodes the encoded stream in parallel with the encoding process and compares the result to the original, aborting with an error if there is a mismatch.
• Convenient CD archiving: FLAC has a "cue sheet" metadata block for storing a CD table of contents and all track and index points. For instance, you can rip a CD to a single file, then import the CD's extracted cue sheet while encoding to yield a single file representation of the entire CD. If your original CD is damaged, the cue sheet can be exported later in order to burn an exact copy.
• Error resistant: Because of FLAC's framing, stream errors limit the damage to the frame in which the error occurred, typically a small fraction of a second worth of data. Contrast this with some other lossless codecs, in which a single error destroys the remainder of the stream.
Changes from FLAC 1.2.0 to FLAC 1.2.1b :
• General:
- With the new --keep-foreign-metadata in flac, non-audio RIFF and AIFF chunks can be stored in FLAC files and recreated when decoding. This allows, among other, things support for archiving BWF files and other WAVE files from editing tools that preserves all the metadata.
• FLAC format:
- Specified 2 new APPLICATION metadata blocks for storing WAVE and AIFF chunks (for use with --keep-foreign-metadata in flac).
- The lead-out track number for non-CDDA cuesheets now must be 255.
• Ogg FLAC format:
- This is not a format change, but changed default extension for Ogg FLAC from .ogg to .oga, according to new Xiph specification (SF #1762492).
• flac:
- Added a new option --no-utf8-convert which works like it does in metaflac (SF #973740).
- Added a new option --keep-foreign-metadata which can save/restore RIFF and AIFF chunks to/from FLAC files (SF #363478).
- Changed default extension for Ogg FLAC from .ogg to .oga, according to new Xiph specification (SF #1762492).
- Fixed bug where encoding from stdin on Windows could fail if WAVE/AIFF contained unknown chunks (SF #1776803).
- Fixed bug where importing non-CDDA cuesheets would cause an invalid lead-out track number (SF #1764105).
• metaflac:
- Changed default extension for Ogg FLAC from .ogg to .oga, according to new Xiph specification (SF #1762492).
- Fixed bug where importing non-CDDA cuesheets would cause an invalid lead-out track number (SF #1764105).
• build system:
- New configure option --disable-cpplibs to prevent building libFLAC++ (SF #1723295).
- Fixed bug compiling flac without Ogg support (SF #1760786).
- Fixed bug where sometimes an existing installation of flac could interfere with the build process (SF #1763690).
- OS X fixes (SF #1786225).
- MinGW fixes (SF #1684879).
- Solaris 10 fixes (SF #1783225 SF #1783630).
- OS/2 fixes (SF #1771378 SF #1229495).
- automake-1.10 fixes (SF #1791361 SF #1792179).
• documentation:
- Added new tutorial section for flac.
- Added example code section for using libFLAC/libFLAC++.
• libraries:
- libFLAC: Fixed very rare seek bug (SF #1684049).
- libFLAC: Fixed seek bug with Ogg FLAC and small streams (SF #1792172).
- libFLAC: 64-bit fixes (SF #1790872).
• Interface changes (see also the porting guide for specific instructions on porting to FLAC 1.2.1):
- libFLAC:
+ Added FLAC__metadata_simple_iterator_is_last()
+ Added FLAC__metadata_simple_iterator_get_block_offset()
+ Added FLAC__metadata_simple_iterator_get_block_length()
+ Added FLAC__metadata_simple_iterator_get_application_id()
- libFLAC++:
+ Added FLAC::Metadata::SimpleIterator::is_last()
+ Added FLAC::Metadata::SimpleIterator::get_block_offset()
+ Added FLAC::Metadata::SimpleIterator::get_block_length()
+ Added FLAC::Metadata::SimpleIterator::get_application_id()