Libsndfile is a C library for reading and writing files containing sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format) through one standard library interface. It is released in source code format under the Gnu Lesser General Public License.
The library was written to compile and run on a Linux system but should compile and run on just about any Unix (including MacOS X). There are also pre-compiled binaries available for 32 and 64 bit windows.
It was designed to handle both little-endian (such as WAV) and big-endian (such as AIFF) data, and to compile and run correctly on little-endian (such as Intel and DEC/Compaq Alpha) processor systems as well as big-endian processor systems such as Motorola 68k, Power PC, MIPS and Sparc. Hopefully the design of the library will also make it easy to extend for reading and writing new sound file formats.
It has been compiled and tested (at one time or another) on the following systems:
At the moment, each new release is being tested on i386 Linux, x86_64 Linux, PowerPC Linux, Win32 and Win64.
libsndfile has the following main features :
libsndfile has a comprehensive test suite so that each release is as bug free as possible. When new bugs are found, new tests are added to the test suite to ensure that these bugs don't creep back into the code. When new features are added, tests are added to the test suite to make sure that these features continue to work correctly even when they are old features.
The following table lists the file formats and encodings that libsndfile can read and write. The file formats are arranged across the top and encodings along the left edge.
Micro- soft WAV |
SGI / Apple AIFF / AIFC |
Sun / DEC / NeXT AU / SND |
Header- less RAW |
Paris Audio File PAF |
Commo- dore Amiga IFF / SVX |
Sphere Nist WAV |
IRCAM SF |
Creative VOC |
Sound forge W64 |
GNU Octave 2.0 MAT4 |
GNU Octave 2.1 MAT5 |
Portable Voice Format PVF |
Fasttracker 2 XI |
HMM Tool Kit HTK |
Apple CAF |
Sound Designer II SD2 |
Free Lossless Audio Codec FLAC |
|
Unsigned 8 bit PCM | R/W | R/W | R/W | R/W | R/W | R/W | ||||||||||||
Signed 8 bit PCM | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | ||||||||
Signed 16 bit PCM | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Signed 24 bit PCM | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |||||||
Signed 32 bit PCM | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |||||||
32 bit float | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |||||||||
64 bit double | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | ||||||||||
u-law encoding | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |||||||||
A-law encoding | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |||||||||
IMA ADPCM | R/W | R/W | ||||||||||||||||
MS ADPCM | R/W | R/W | ||||||||||||||||
GSM 6.10 | R/W | R/W | R/W | R/W | ||||||||||||||
G721 ADPCM 32kbps | R/W | R/W | ||||||||||||||||
G723 ADPCM 24kbps | R/W | |||||||||||||||||
G723 ADPCM 40kbps | R/W | |||||||||||||||||
12 bit DWVW | R/W | R/W | ||||||||||||||||
16 bit DWVW | R/W | R/W | ||||||||||||||||
24 bit DWVW | R/W | R/W | ||||||||||||||||
Ok Dialogic ADPCM | R/W | |||||||||||||||||
8 bit DPCM | R/W | |||||||||||||||||
16 bit DPCM | R/W |
From version 1.0.18, libsndfile also reads and writes FLAC and Ogg/Vorbis.
Some of the file formats I am also interested in adding are:
I have decided that I will not be adding support for MPEG Layer 3 (commonly known as MP3) due to the patent issues surrounding this file format. See the FAQ for more.
Other file formats may also be added on request.
My first attempt at reading and writing WAV files was in 1990 or so under Windows 3.1. I started using Linux in early 1995 and contributed some code to the wavplay program. That contributed code would eventually mutate into this library. As one of my interests is Digital Signal Processing (DSP) I decided that as well as reading data from an audio file in the native format (typically 16 bit short integers) it would also be useful to be able to have the library do the conversion to floating point numbers for DSP applications. It then dawned on me that whatever file format (anything from 8 bit unsigned chars, to 32 bit floating point numbers) the library should be able to convert the data to whatever format the library user wishes to use it in. For example, in a sound playback program, the library caller typically wants the sound data in 16 bit short integers to dump into a sound card even though the data in the file may be 32 bit floating point numbers (ie Microsoft's WAVE_FORMAT_IEEE_FLOAT format). Another example would be someone doing speech recognition research who has recorded some speech as a 16 bit WAV file but wants to process it as double precision floating point numbers.
Here is the release history for libsndfile :
libsndfile is released under the terms of the GNU Lesser General Public License, of which there are two versions; version 2.1 and version 3. To maximise the compatibility of libsndfile, the user may choose to use libsndfile under either of the above two licenses. You can also read a simple explanation of the ideas behind the GPL and the LGPL here.
You can use libsndfile with Free Software, Open Source, proprietary, shareware or other closed source applications as long as libsndfile is used as a dynamically loaded library and you abide by a small number of other conditions (read the LGPL for more info). With applications released under the GNU GPL you can also use libsndfile statically linked to your application.
I would like to see libsndfile used as widely as possible but I would prefer it if you released software that uses libsndfile as Free Software or Open Source. However, if you put in a great deal of effort building a significant application which simply uses libsndfile for file I/O, then I have no problem with you releasing that as closed source and charging as much money as you want for it as long as you abide by the license.
Here is the latest version. It is available in the following formats:
The Win32 installer was compiled for Windows XP but should also work on Windows 2000, Vista and Windows 7.
Pre-release versions of libsndfile are available here and are announced on the libsndfile-devel mailing list.
The latest version of this document can be found here.
Author : Erik de Castro Lopo
This page has been accessed times.