summaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md278
1 files changed, 278 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2979862
--- /dev/null
+++ b/README.md
@@ -0,0 +1,278 @@
+<!---
+/* FLAC - Free Lossless Audio Codec
+ * Copyright (C) 2001-2009 Josh Coalson
+ * Copyright (C) 2011-2023 Xiph.Org Foundation
+ *
+ * This file is part the FLAC project. FLAC is comprised of several
+ * components distributed under different licenses. The codec libraries
+ * are distributed under Xiph.Org's BSD-like license (see the file
+ * COPYING.Xiph in this distribution). All other programs, libraries, and
+ * plugins are distributed under the LGPL or GPL (see COPYING.LGPL and
+ * COPYING.GPL). The documentation is distributed under the Gnu FDL (see
+ * COPYING.FDL). Each file in the FLAC distribution contains at the top the
+ * terms under which it may be distributed.
+ *
+ * Since this particular file is relevant to all components of FLAC,
+ * it may be distributed under the Xiph.Org license, which is the least
+ * restrictive of those mentioned above. See the file COPYING.Xiph in this
+ * distribution.
+ */
+--->
+
+# Free Lossless Audio Codec (FLAC)
+
+FLAC is open source software that can reduce the amount of storage space
+needed to store digital audio signals without needing to remove
+information in doing so.
+
+The files read and produced by this software are called FLAC files. As
+these files (which follow the [FLAC format](https://xiph.org/flac/format.html))
+can be read from and written to by other software as well, this software
+is often referred to as the FLAC reference implementation.
+
+FLAC has been developed by volunteers. If you want to help out, see
+CONTRIBUTING.md for more information.
+
+## Components
+
+FLAC is comprised of
+ * libFLAC, a library which implements reference encoders and
+ decoders for native FLAC and Ogg FLAC, and a metadata interface
+ * libFLAC++, a C++ object wrapper library around libFLAC
+ * `flac`, a command-line program for encoding and decoding files
+ * `metaflac`, a command-line program for viewing and editing FLAC
+ metadata
+ * user and API documentation
+
+The libraries (libFLAC, libFLAC++) are licensed under Xiph.org's
+BSD-like license (see COPYING.Xiph). All other programs and plugins are
+licensed under the GNU General Public License (see COPYING.GPL). The
+documentation is licensed under the GNU Free Documentation License
+(see COPYING.FDL).
+
+## Documentation
+
+For documentation of the `flac` and `metaflac` command line tools, see
+the directory man, which contains the files flac.md and metaflac.md
+
+The API documentation is in html and is generated by Doxygen. It can be
+found in the directory doc/html/api. It is included in a release tarball
+and must be build with Doxygen when the source is taken directly from
+git.
+
+The directory examples contains example source code on using libFLAC and
+libFLAC++.
+
+Documentation concerning the FLAC format itself (which can be used to
+create software reading and writing FLAC software independent from
+libFLAC) was included in previous releases, but can now be found on
+https://datatracker.ietf.org/doc/draft-ietf-cellar-flac/ Additionally
+a set of files for conformance testing called the FLAC decoder testbench
+can be found at https://github.com/ietf-wg-cellar/flac-test-files
+
+If you have questions about FLAC that this document does not answer,
+please submit them at the following tracker so this document can be
+improved:
+
+https://github.com/xiph/flac/issues
+
+## Building FLAC
+
+All components of the FLAC project can be build with a variety of
+compilers (including GCC, Clang, Visual Studio, Intel C++ Compiler) on
+many architectures (inluding x86, x86_64, ARMv7, ARMv8 and PowerPC)
+for many different operating systems.
+
+To do this, FLAC provides two build systems: one using GNU's autotools
+and one with CMake. Both differ slighly in configuration options, but
+should be considered equivalent for most use cases.
+
+FLAC used to provide files specifically for building with Visual Studio,
+but these have been removed in favor of using CMake.
+
+## Building with CMake
+
+CMake is a cross-platform build system. FLAC can be built on Windows,
+Linux, Mac OS X using CMake.
+
+You can use either CMake's CLI or GUI. We recommend you to have a
+separate build folder outside the repository in order to not spoil it
+with generated files. It is possible however to do a so-called in-tree
+build, in that case /path/to/flac-build in the following examples is
+equal to /path/to/flac-source.
+
+### CMake CLI
+
+Go to your build folder and run something like this:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source
+```
+
+or e.g. in Windows shell
+
+```
+C:\path\to\flac-build> cmake \path\to\flac-source
+```
+
+(provided that cmake is in your %PATH% variable)
+
+That will generate build scripts for the default build system (e.g.
+Makefiles for UNIX). After that you start build with a command like
+this:
+
+```
+/path/to/flac-build$ make
+```
+
+And afterwards you can run tests or install the built libraries and
+headers
+
+```
+/path/to/flac-build$ make test
+/path/to/flac-build$ make install
+```
+
+If you want use a build system other than default add -G flag to cmake,
+e.g.:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source -GNinja
+/path/to/flac-build$ ninja
+```
+
+or:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source -GXcode
+```
+
+Use cmake --help to see the list of available generators.
+
+By default CMake will search for OGG. If CMake fails to find it you can
+help CMake by specifying the exact path:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source -DOGG_ROOT=/path/to/ogg
+```
+
+If you would like CMake to build OGG alongside FLAC, you can place the
+ogg sources directly in the flac source directory as a subdirectory with
+the name ogg, for example:
+
+```
+/path/to/flac-source/ogg
+```
+
+If you don't want to build flac with OGG support you can tell CMake not
+to look for OGG:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source -DWITH_OGG=OFF
+```
+
+Other FLAC's options (e.g. building C++ lib or docs) can also be put to
+cmake through -D flag. If you want to know what options are available,
+use -LH:
+
+```
+/path/to/flac-build$ cmake /path/to/flac-source -LH
+```
+
+### CMake GUI (for Visual Studio)
+It is likely that you would prefer to use the CMake GUI if you use
+Visual Studio to build FLAC. It's in essence the same process as
+building using CLI.
+
+Open cmake-gui. In the window select a source directory (the
+repository's root), a build directory (some other directory outside the
+repository). Then press button "Configure". CMake will ask you which
+build system you prefer. Choose that version of Visual Studio which you
+have on your system, choose whether you want to build for Win32 or x64.
+Press OK.
+
+After CMake finishes you can change the configuration to your liking and
+if you change anything, run Configure again. With the "Generate" button,
+CMake creates Visual Studio files, which can be opened from Visual
+Studio. With the button "Open Project" CMake will launch Visual Studio
+and open the generated solution. You can use the project files as usual
+but remember that they were generated by CMake. That means that your
+changes (e.g. some additional compile flags) will be lost when you run
+CMake next time.
+
+CMake searches by default for OGG on your system and returns an error
+if it cannot find it. If you want to build OGG alongside FLAC, you can
+download the OGG sources and extract them in a subdirectory of the FLAC
+source directory with the name ogg (i.e. /path/to/flac-source/ogg)
+before running CMake. If you don't want to build FLAC with OGG support,
+untick the box following WITH_OGG flag in the list of variables in
+cmake-gui window and run "Configure" again.
+
+If CMake fails to find MSVC compiler then running cmake-gui from MS
+Developer comand prompt should help.
+
+## Building with GNU autotools
+
+FLAC uses autoconf and libtool for configuring and building. To
+configure a build, open a commmand line/terminal and run `./configure`
+You can provide options to this command, which are listed by running
+`./configure --help`.
+
+In case the configure script is not present (for example when building
+from git and not from a release tarball), it can be generated by running
+`./autogen.sh`. This may require a libtool development package though.
+
+After configuration, build with `make`, verify the build with
+`make check` and install with `make install`. Installation might require
+administrator priviledged, i.e. `sudo make install`.
+
+The 'make check' step is optional; omit it to skip all the tests, which
+can take about an hour to complete. Even though it will stop with an
+explicit message on any failure, it does print out a lot of stuff so you
+might want to capture the output to a file if you're having a problem.
+Also, don't run 'make check' as root because it confuses some of the
+tests.
+
+Summarizing:
+
+```
+./configure
+make && make check
+sudo make install
+```
+
+## Note to embedded developers
+
+libFLAC has grown larger over time as more functionality has been
+included, but much of it may be unnecessary for a particular embedded
+implementation. Unused parts may be pruned by some simple editing of
+configure.ac and src/libFLAC/Makefile.am; the following dependency
+graph shows which modules may be pruned without breaking things
+further down:
+
+```
+metadata.h
+ stream_decoder.h
+ format.h
+
+stream_encoder.h
+ stream_decoder.h
+ format.h
+
+stream_decoder.h
+ format.h
+```
+
+In other words, for pure decoding applications, both the stream encoder
+and metadata editing interfaces can be safely removed. Note that this
+is specific to building the libraries for embedded use. The command line
+tools do not provide such compartmentalization, and require a complete
+libFLAC build to function.
+
+There is a section dedicated to embedded use in the libFLAC API
+HTML documentation (see doc/html/api/index.html).
+
+Also, there are several places in the libFLAC code with comments marked
+with "OPT:" where a #define can be changed to enable code that might be
+faster on a specific platform. Experimenting with these can yield
+faster binaries.