-
Notifications
You must be signed in to change notification settings - Fork 9
Implementations
Martijn van Beurden edited this page May 3, 2023
·
13 revisions
- There is a quite extensive list of hardware vendors selling devices capable of playing back FLAC files at the homepage of the FLAC project.
- For a (non-exhaustive) list of playback hardware and software tested against this set of FLAC test files see this page at the Hydrogenaud.io wiki.
- For of a list of web browsers capable of playing FLAC files, see caniuse.
- As the list of devices and software would grow too large, the rest of this page only deals with decoder libraries, library wrappers, encoders and analysis tools.
| Name of library/SDK | Operating system | Remarks |
|---|---|---|
| Media Foundation | Windows 10 and later, XBox | Encoding and decoding, details |
| Core Audio | MacOS 10.15+, iOS 13+, others | Encoding and decoding, details |
| MediaPlayer MediaCodec MediaExtractor MediaRecorder ExoPlayer |
Android | Decoding since 3.1, encoding since 4.1, FLAC-in-MP4 since 10, details |
| libAudio | SerenityOS | Decoding only, open-source implementation (BSD), details |
| Name | Programming language | License | Container support | Remarks |
|---|---|---|---|---|
| libFLAC | C and C++ | 3-clause BSD | FLAC, OGG | Reference implementation |
| libavcodec | C | LGPL | FLAC, OGG, MKV, MP4 | |
| dr_flac | C | public domain or MIT no attribution | FLAC, OGG | Header-only library |
| libfoxenflac | C | GPL 2.0 | FLAC | Focus on low resource usage, embedded use |
| flac | Go | Unlicense | FLAC | |
| FLAC-library-Java | Java | GPL 3.0 | FLAC | |
| Claxon | Rust | Apache 2.0 | FLAC, OGG, MP4 | No seeking support |
| Symphonia | Rust | MPL 2.0 | FLAC, OGG, MKV, MP4 |
| Name | Programming language | License | Container support | Remarks | Limitations |
|---|---|---|---|---|---|
| libFLAC | C and C++ | 3-clause BSD | FLAC, OGG | Reference implementation |
|
| libavcodec | C | LGPL | FLAC, OGG, MKV, MP4 | Based on libflake |
|
| libflake | C | LGPL | FLAC | First implementation of variable blocksize encoding, partly merged into libavcodec, development has stalled |
|
| FLAC-library-Java | Java | GPL | FLAC |
|
|
| FLACCL | C# | GPL | FLAC | Not a library, uses OpenCL acceleration | Not yet checked |
This is a non-exhaustive list of wrappers available for libraries capable of decoding and/or encoding from/to FLAC.
| Name | Wraps | Programming language | License | Remarks |
|---|---|---|---|---|
| libsndfile | libFLAC | C | LGPL | |
| avcpp | libavcodec | C++ | LGPL or BSD | |
| flac | libFLAC | Haskell | 3-clause BSD | |
| hsndfile | libFLAC | Haskell | LGPL | wraps libFLAC through libsndfile |
| ExoPlayer | libFLAC | Java (Android) | Apache 2.0 | |
| Klipspringer FLAC library | libFLAC | Java | GPL | |
| libflacjs | libFLAC | Javascript/WASM | MIT | |
| libsndfile | libFLAC | Julia | MIT | wraps libFLAC through libsndfile |
| audioread and audiowrite | libFLAC | MATLAB | N/A | |
| PyAV | libavcodec | Python | 3-clause BSD | |
| pyFLAC | libFLAC | Python | Apache 2.0 | |
| pysndfile | libFLAC | Python | LGPL | wraps libFLAC through libsndfile |
| pyminiaudio | dr_flac | Python | MIT | decoding only |
| libvlc | libFLAC or libavcodec | C++, C#, Swift, Java, Python, Rust, Go | LGPL |
| Name | Remarks |
|---|---|
| libfoxenflac | C library capable of running on bare-metal (no runtime necessary) |
| ESP8266Audio | Library for ESP8266, ESP32 and RP2040 chips |
| VS1053 and VS1063 | FLAC decoder IC. 1053 with software plugin, 1063 without modification |
-
flac, tool usually bundled with libFLAC to encode from and decode to uncompressed file formats like WAV and AIFF. It also has an analysis mode to represent a FLAC file in human-readable form -
metaflac, tool usually bundled with libFLAC to view and modify the file-level metadata of FLAC files -
fq, tool to help analyse a FLAC file (among other file formats) by representing it in human-readable form -
flac.tcl, tool that decodes a FLAC file with a very verbose human-readable analysis of it