Audio features extraction
Switch branches/tags
Clone or download
thomasfillon Update .travis.yml
Remove libhdf5-serial-1.8.4 package installation.
This package is no more available but an equivalent should be installed as a depency of libhdf5-serial-dev

Corresponding error was
> E: Package 'libhdf5-serial-1.8.4' has no installation candidate
Latest commit fa06604 Nov 20, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmake-modules CMakeLists.txt: use local Eigen3 if available Mar 27, 2014
conda.recipe Conda recipe: Update cmake to handle eigen library Mar 28, 2017
doc Update changelog in documentation Sep 26, 2016
examples compatible with old extensions Mar 28, 2014
externals feat: add fmemopen source Mar 28, 2017
matlab cmake: WITH_MATLAB_MEX: build matlab mex and install matlab package Jan 5, 2014
resources initial import, published version 0.63 Nov 7, 2011
src_cpp Merge branch 'master' into dev Sep 26, 2016
src_python fix: fix 'yaafe -l' error Mar 28, 2017
.binstar.yml Update conda repository to Yaafe Feb 25, 2016
.dockerignore Add .dockerignore Feb 11, 2016
.gitignore Merge branch 'master' into dev Mar 27, 2014
.gitmodules chore: remove fmemopen submodule Mar 28, 2017
.travis.yml Update .travis.yml Nov 20, 2017
CITATION.rst Update markup in CITATION.rst Apr 1, 2014
CMakeLists.txt src_python: Modify to be able to run with py3 Jan 29, 2017
COPYING initial import, published version 0.63 Nov 7, 2011
COPYING.LESSER initial import, published version 0.63 Nov 7, 2011
DISCLAIMER initial import, published version 0.63 Nov 7, 2011
Dockerfile Fix Dockerfile Feb 25, 2016
INSTALL_WINDOWS Add tutorial link in windows install instructions Apr 1, 2015
README.rst Change conda instructions to use Nov 17, 2017 Update Dockerfile setup: add entrypoint Feb 12, 2016 fix( fix typo Jul 14, 2014
requirements.txt tuning .travis.yml Dec 29, 2013
yaafe-config.cmake initial import, published version 0.63 Nov 7, 2011



Yet Another Audio Feature Extractor

Build status

  • Branch master : travis_master
  • Branch dev : travis_dev
  • Anaconda : anaconda_build




Yaafe can be easily install with conda. To install this package with conda run:

conda install -c conda-forge yaafe



Yaafe can also be install through Docker.

Get the official Yaafe image from Yaafe repository on Docker Hub:

docker pull yaafe/yaafe
docker tag yaafe yaafe/yaafe

or build it from the sources directory:

docker build --tag=yaafe .

Following both of the method above, you then have a docker image tagged as yaafe. The yaafe command is the entrypoint for that docker image so you can run 'yaafe' from the command line through docker run yaafe. For example:

docker run -it yaafe --help
docker run -it yaafe --volume=$(pwd):/wd  --workdir=/wd -c resources/featureplan -r 16000 --resample resources/yaafe_check.wav

On Linux, it can be usefull to create an alias for it:

alias yaafe='docker run -it --rm=true --volume=$(pwd):/wd  --workdir=/wd yaafe'

You could then simply run:

yaafe --help
yaafe -l

et voilà !

If you need to set the docker user as the current user on the host, you could try to run docker with the -u $(id -u):$(id -g) option

docker run -it --rm=true --volume=$(pwd):/wd  --workdir=/wd -u $(id -u):$(id -g) yaafe -c resources/featureplan -o h5 -r 16000 --resample resources/yaafe_check.wav

Last but not least, the entry-point for the yaafe docker image is smart :

  • every command that start with a dash - will be pass as options to the yaafe command inside the docker container

  • every command that does not start with a dash will be treated as a regular command. For example:

    docker run -it yaafe /bin/bash

will give you access to a bash terminal inside the docker. And

docker run -it yaafe yaafe-engine --help

will launch the ``yaafe-engine` batch processing tool.

From sources

Yaafe source code should compile on linux and MacOsX platform, and uses CMake as compilation tool. Yaafe requires third-party libraries to enable specific features. Some of these libraries may already be available on your system.

The argtable library is required.

The eigen library is also required. You could either installed it through your regular packages manager (e.g. libeigen3-dev on Debian) and then pass the -DWITH_EIGEN_LIBRARY=ON option flag to ccmake. Or you can use the source code provided through the git submodule included in the Yaafe git repository and which you can get with the git submodule update --init command. If you used ``git clone --recursive`` to clone Yaafe, you don't need this.

Depending on optional features you want to use, other librairies may be used:

  • libsndfile: enable reading WAV files format (highly recommanded)
  • libmpg123: enable reading MP3 audio files
  • HDF5 >= 1.8: enable H5 output format
  • liblapack: enable some audio features (LSF)
  • FFTW3: use FFTW instead of Eigen for FFT computations (pay attention to licensing issues when linking with the GPL FFTW3 library).

To use the yaafe script you need Python >= 2.5, and the numpy package.

Once previous libraries are installed (some may have been locally installed in <lib-path>), you can compile with the following steps:

mkdir build
cd build
ccmake -DCMAKE_PREFIX_PATH=<lib-path> -DCMAKE_INSTALL_PREFIX=<install-path> ..
make install

If you use an external eigen library (and not the one provided by git submodule), don't forget to add the flag:

Several options can control Yaafe compilation. More details can be found at:


To easily use Yaafe, you should set the following environment vars:



The output of make install should give you the INSTALL_DIR path (defaults to /usr/local). The python files are installed in /usr/local/lib/python2.7/site-packages, which is not by default in the python path on MacOSX. The consequence is the error ERROR: cannot load yaafe packages: No module named yaafelib. There are 3 ways to solve this problem :

  • The simplest way is to add the line sys.path.append("/usr/local/lib/python2.7/site-packages") in /usr/local/bin/yaafe after from optparse import OptionParser, but it won't let you use the yaafelib unless you add this line (and import sys) before each import of yaafelib.
  • You can use export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH or add it to your ~/.bash_profile, but this will affect other versions of python.
  • You can move the files to a site-package folder that is in your PYTHONPATH:
    • if you use Python 2: mv /usr/local/lib/python2.7/site-packages/ /usr/local/lib/python2.7/site-packages/yaafelib `python -c 'import sys, re ; print next(i for i in sys.path if re.match(".*site-packages$", i))'
    • if you use Python 3: mv /usr/local/lib/python2.7/site-packages/ /usr/local/lib/python2.7/site-packages/yaafelib `python3 -c 'import sys, re ; print(next(i for i in sys.path if re.match(".*site-packages$", i)))'

If you use Matlab, you can set your MATLABPATH var:



Documentation is also available online: (mirror:

To build documentation, you need Sphinx. Before building documentation, you should set your environment correctly so that sphinx builds documentation with automatic features documentation.

To build documentation, just run make doc_python in the build directory. Documentation is built in doc/doc_python/html.


YAAFE is released under the version 3 of the GNU Lesser General Public License. Read COPYING and COPYING.LESSER for more details. The user should also read DISCLAIMER before linking with optional libraries which have different license policy.


To get help with YAAFE, use the mailing-list (registration at ).


Yaafe was first developed at Telecom Paristech / AAO Team. It uses several great open-source projects like Eigen, Smarc, libsndfile, mpg123, HDF5.

If you want to cite Yaafe in a publication, please see CITATION.