The rest of the header contains the number of samples, position of the frame, channel assignment, and optionally the sample rate and bit depth. The data block contains the audio information.Metadata in FLAC precedes the audio. Properties like the sample rate and the number of channels are always contained in the metadata. It may also contain other information, the album cover for example. FLAC uses Vorbis comments for some types of metadata, like the title and artist name. Encoding and decoding
The FLAC encoding algorithm consists of multiple stages. In the first stage, the input audio is split into blocks. If the audio contains multiple channels, each channel is encoded separately as a subblock. The encoder then tries to find a good mathematical approximation of the block, either by fitting a simple polynomial, or through general linear predictive coding. A description of the approximation, which is only a few bytes in length, is then written. Finally, the difference between the approximation and the input, called residual, is encoded using Rice coding. In many cases, a description of the approximation and the encoded residual takes up less space than using pulse code modulation.The decoding process is the reverse of encoding. The compressed residual is first decoded. The description of the mathematical approximation is then used to calculate a waveform. The result is formed by adding the residual and the calculated waveform. As FLAC compresses losslessly, the decoded waveform is identical to the waveform before encoding. For two-channel stereo, the encoder may choose to joint encode the audio.
This codec API is also available in C++ as libFLAC++. The reference implementation of FLAC compiles on many platforms, including most Unix (such as Solaris, BSD) and Unix-like (including Linux), Microsoft Windows, BeOS, and OS/2 operating systems. There are build-systems for autoconf/automake, MSVC, Watcom C, and Xcode. There is currently no multicore support in libFLAC, but utilities such as GNU parallel and various graphical frontends can be used to spin up multiple instances of the encoder. FLAC playback support in portable audio devices and dedicated audio systems is limited compared to formats such as MP3 or uncompressed PCM. FLAC support is included by default in Windows 10, Android, BlackBerry 10 and Jolla devices. In 2014, several aftermarket mobile electronics companies introduced multimedia solutions that include support for FLAC. These include the NEX series from Pioneer Electronics and the VX404 and NX404 from Clarion. The European Broadcasting Union (EBU) has adopted the FLAC format for the distribution of high quality audio over its Euroradio network. The Windows operating system has supported native FLAC integration since the introduction of Windows 10. The Android operating system has supported native FLAC playback since version 3.1. macOS High Sierra and iOS 11 add native FLAC playback support.Among others the Pono music player and streaming service used the FLAC format. Bandcamp insists on a lossless format for uploading, and has FLAC as a download option. The Wikimedia Foundation sponsored a free and open-source online ECMAScript FLAC tool for browsers supporting the required HTML5 features.