2012-01-15 09:34:46 +00:00
|
|
|
# libsndfile
|
|
|
|
|
2016-02-02 17:45:08 +00:00
|
|
|
[![Build Status](https://secure.travis-ci.org/erikd/libsndfile.svg?branch=master)](http://travis-ci.org/erikd/libsndfile)
|
2017-04-27 07:08:07 +00:00
|
|
|
[![Build status](https://ci.appveyor.com/api/projects/status/github/erikd/libsndfile?branch=master?svg=true)](https://ci.appveyor.com/project/Erik13183/libsndfile)
|
2015-08-07 09:48:51 +00:00
|
|
|
|
2012-01-15 09:34:46 +00:00
|
|
|
libsndfile is a C library for reading and writing files containing sampled audio
|
|
|
|
data.
|
|
|
|
|
|
|
|
## Hacking
|
|
|
|
|
2012-01-15 10:23:56 +00:00
|
|
|
The canonical source code repository for libsndfile is at
|
|
|
|
[https://github.com/erikd/libsndfile/][github].
|
2012-01-15 09:34:46 +00:00
|
|
|
|
2012-01-15 10:23:56 +00:00
|
|
|
You can grab the source code using:
|
2012-01-15 09:34:46 +00:00
|
|
|
|
2012-01-15 10:23:56 +00:00
|
|
|
$ git clone git://github.com/erikd/libsndfile.git
|
|
|
|
|
2016-07-16 09:34:17 +00:00
|
|
|
For building for Android see [BuildingForAndroid][BuildingForAndroid].
|
|
|
|
|
2016-07-02 07:18:37 +00:00
|
|
|
There are currently two build systems; the official GNU autotool based one and
|
|
|
|
a more limited and experimental CMake based build system. Use of the CMake build
|
|
|
|
system is documented below.
|
|
|
|
|
2016-07-26 08:41:17 +00:00
|
|
|
Setting up a build environment for libsndfile on Debian or Ubuntu is as simple as:
|
|
|
|
```
|
2016-07-28 11:15:59 +00:00
|
|
|
sudo apt install autoconf autogen automake build-essential libasound2-dev \
|
|
|
|
libflac-dev libogg-dev libtool libvorbis-dev pkg-config python
|
2016-07-26 08:41:17 +00:00
|
|
|
````
|
|
|
|
For other Linux distributions or any of the *BSDs, the setup should be similar
|
|
|
|
although the package install tools and package names may be slightly different.
|
|
|
|
|
|
|
|
Similarly on Mac OS X, assuming [brew] is already installed:
|
|
|
|
```
|
|
|
|
brew install autoconf autogen automake flac libogg libtool libvorbis pkg-config
|
|
|
|
```
|
|
|
|
Once the build environment has been set up, building and testing libsndfile is
|
|
|
|
as simple as:
|
2012-01-15 10:23:56 +00:00
|
|
|
|
|
|
|
$ ./autogen.sh
|
2016-07-26 08:41:17 +00:00
|
|
|
$ ./configure --enable-werror
|
2012-01-15 10:23:56 +00:00
|
|
|
$ make
|
|
|
|
$ make check
|
|
|
|
|
2016-07-02 07:18:37 +00:00
|
|
|
|
|
|
|
## The CMake build system.
|
|
|
|
|
2017-04-13 06:11:02 +00:00
|
|
|
Although Autotools is the primary and recommended build toolchain, experimental
|
|
|
|
CMake meta build generator is also available. The build process with CMake takes
|
|
|
|
place in two stages. First, standard build files are created from configuration
|
|
|
|
scripts. Then the platform's native build tools are used for the actual
|
|
|
|
building. CMake can produce Microsoft Visual Studio project and solution files,
|
|
|
|
Unix Makefiles, Xcode projects and [many more](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html).
|
2016-07-02 07:18:37 +00:00
|
|
|
|
2017-04-13 06:11:02 +00:00
|
|
|
### Requirements
|
2016-07-02 07:18:37 +00:00
|
|
|
|
2017-04-13 06:11:02 +00:00
|
|
|
1. C99-compliant compiler toolchain (tested with GCC, Clang and Visual
|
|
|
|
Studio 2015)
|
|
|
|
2. CMake 3.1.3 or newer
|
2016-07-02 07:18:37 +00:00
|
|
|
|
2017-04-13 06:11:02 +00:00
|
|
|
There are some recommended packages to enable all features of libsndfile:
|
|
|
|
|
|
|
|
1. Ogg, Vorbis and FLAC libraries and headers to enable these formats support
|
|
|
|
2. ALSA development package under Linux to build sndfile-play utility
|
|
|
|
3. Sndio development package under BSD to build sndfile-play utility
|
|
|
|
|
|
|
|
### Building from command line
|
|
|
|
|
|
|
|
CMake can handle out-of-place builds, enabling several builds from
|
|
|
|
the same source tree, and cross-compilation. The ability to build a directory
|
|
|
|
tree outside the source tree is a key feature, ensuring that if a build
|
|
|
|
directory is removed, the source files remain unaffected.
|
|
|
|
|
|
|
|
mkdir CMakeBuild
|
|
|
|
cd CMakeBuild
|
|
|
|
|
|
|
|
Then run `cmake` command with directory where CMakeLists.txt script is located
|
|
|
|
as argument (relative paths are supported):
|
|
|
|
|
|
|
|
cmake ..
|
|
|
|
|
|
|
|
This command will configure and write build script or solution to CMakeBuild
|
|
|
|
directory. CMake is smart enough to create Unix makefiles under Linux or Visual
|
|
|
|
Studio solution if you have Visual Studio installed, but you can configure
|
|
|
|
[generator](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
|
|
|
|
with `-G` command line parameter:
|
|
|
|
|
|
|
|
cmake .. -G"Unix Makefiles"
|
|
|
|
|
|
|
|
The build procedure depends on the selected generator. With "Unix Makefiles" you
|
|
|
|
can type:
|
|
|
|
|
|
|
|
make & make install
|
|
|
|
|
|
|
|
With "Visual Studio" and some other generators you can open solution or project
|
|
|
|
from `CMakeBuild` directory and build using IDE.
|
|
|
|
|
|
|
|
Finally, you can use unified command:
|
|
|
|
|
|
|
|
cmake --build .
|
|
|
|
|
|
|
|
CMake also provides Qt-based cross platform GUI, cmake-gui. Using it is trivial
|
|
|
|
and does not require detailed explanations.
|
|
|
|
|
|
|
|
### Configuring CMake
|
|
|
|
|
|
|
|
You can pass additional options with `/D<parameter>=<value>` when you run
|
|
|
|
`cmake` command. Some useful system options:
|
|
|
|
|
|
|
|
* `CMAKE_C_FLAGS` - additional C compiler flags
|
|
|
|
* `CMAKE_BUILD_TYPE` - configuration type, `DEBUG`, `RELEASE`, `RELWITHDEBINFO`
|
|
|
|
or `MINSIZEREL`. `DEBUG` is default
|
|
|
|
* `CMAKE_INSTALL_PREFIX` - build install location, the same as `--prefix` option
|
|
|
|
of `configure` script
|
|
|
|
|
|
|
|
Useful libsndfile options:
|
|
|
|
|
|
|
|
* `BUILD_SHARED_LIBS` - build shared library (DLL under Windows)
|
|
|
|
* `BUILD_STATIC_LIBS` - build static library
|
|
|
|
* `BUILD_PROGRAMS` - build libsndfile's utilities from `programs/` directory
|
|
|
|
* `BUILD_EXAMPLES` - build examples
|
|
|
|
* `BUILD_TESTING` - build tests. Then you can run tests with `ctest` command
|
|
|
|
* `DISABLE_EXTERNAL_LIBS` - disable Ogg, Vorbis and FLAC support
|
|
|
|
* `DISABLE_CPU_CLIP` - disable tricky cpu specific clipper. Don't touch it if
|
|
|
|
you are not sure.
|
|
|
|
* `ENABLE_BOW_DOCS` - enable black-on-white documentation theme
|
|
|
|
* `ENABLE_EXPERIMENTAL` - enable experimental code. Don't use it if you are
|
|
|
|
not sure
|
|
|
|
* `ENABLE_CPACK` - enable [CPack](https://cmake.org/cmake/help/latest/module/CPack.html) support
|
|
|
|
* `ENABLE_PACKAGE_CONFIG` - Generate and install [package config file](https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#config-file-packages).
|
|
|
|
* `ENABLE_STATIC_RUNTIME` - enable static runtime, useful for Windows
|
|
|
|
|
|
|
|
### Notes for Windows users
|
|
|
|
|
|
|
|
First advice - set `ENABLE_STATIC_RUNTIME` to ON. This will remove dependencies
|
|
|
|
on runtime DLLs.
|
|
|
|
|
|
|
|
Second advice is about Ogg, Vorbis and FLAC support. Searching external
|
|
|
|
libraries under Windows is a little bit tricky. The best wayis to use
|
|
|
|
[Vcpkg](https://github.com/Microsoft/vcpkg). You need to install static libogg,
|
|
|
|
libvorbis and libflac libraries:
|
|
|
|
|
|
|
|
vcpkg install libogg:x64-windows-static libvorbis:x64-windows-static
|
|
|
|
libflac:x64-windows-static libogg:x86-windows-static
|
|
|
|
libvorbis:x86-windows-static libflac:x86-windows-static
|
|
|
|
|
|
|
|
Then and add this parameter to cmake command line:
|
|
|
|
|
|
|
|
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
|
|
|
|
|
|
|
|
You also need to set `VCPKG_TARGET_TRIPLET` because you use static libraries:
|
|
|
|
|
|
|
|
-DVCPKG_TARGET_TRIPLET=x64-windows-static
|
2016-07-02 07:18:37 +00:00
|
|
|
|
2012-01-15 10:23:56 +00:00
|
|
|
## Submitting Patches.
|
|
|
|
|
2017-03-13 13:52:11 +00:00
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
|
2012-01-15 11:13:33 +00:00
|
|
|
|
|
|
|
|
2012-01-15 10:23:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-07-26 08:41:17 +00:00
|
|
|
[brew]: http://brew.sh/
|
2012-01-15 09:34:46 +00:00
|
|
|
[github]: https://github.com/erikd/libsndfile/
|
2016-07-16 09:34:17 +00:00
|
|
|
[BuildingForAndroid]: https://github.com/erikd/libsndfile/blob/master/Building-for-Android.md
|