{% extends "layout.html" %} {% set title = 'Overview' %} {% block body %}
Essentia is an open-source C++ library for audio analysis and audio-based music information retrieval released
under the Affero GPLv3
license (also available under proprietary license upon request). It contains an
extensive collection of reusable algorithms which implement audio input/output functionality, standard digital signal processing
blocks, statistical characterization of data, and a large set of spectral, temporal, tonal and high-level music descriptors.
In addition, Essentia can be
Essentia is not a framework, but rather a collection of algorithms (plus some infrastructure) wrapped in a library. It does not provide common high-level logic for descriptor computation (so you aren’t locked into a certain way of doing things). It rather focuses on the robustness, performance and optimality of the provided algorithms, as well as ease of use. The flow of the analysis is decided and implemented by the user, while Essentia is taking care of the implementation details of the algorithms being used. There is a special streaming mode in which it is possible to connect algorithms and run them automatically (similarly to PureData or Max/MSP) instead of specifying explicitly the order of execution with an advantage of less boilerplate code and less memory consumption. A number of predefined executable extractors are provided with the library as examples, however they should not be considered as the only correct way of doing things.
Currently the following algorithms are included (among others):
The library is cross-platform and currently supports Linux, Mac OS X, and partially Windows, iOS and Android systems. It can also be cross-compiled to JavaScript to be used on the web.
The library is wrapped in Python (Linux and OSX) and includes a number of predefined command-line extractors for music descriptors (Linux, OSX and Windows), which facilitates its use for fast prototyping and allows setting up research experiments very rapidly. Furthermore, it includes a Vamp plugin (Linux and OSX) that can be used with Sonic Visualiser for visualization purposes. There have been developed a number of third-party extensions to Essentia that allow its use within the frameworks of PureData and Max/MSP, openFrameworks, and Matlab.
Essentia is designed with a focus on the robustness of the provided music descriptors and is optimized in terms of the computational cost of the algorithms and low memory usage. The provided functionality, specifically the music descriptors included in-the-box and signal processing algorithms, is easily expandable and allows for both research experiments and development of large-scale industrial applications. Large part of Essentia's algorithms is well-suited for real-time applications.
Please credit properly your use of Essentia! If you use the Essentia library in your software please acknowledge it and specify its origen as http://essentia.upf.edu. If you do some research and publish an article, cite both the Essentia paper [1] and the specific references mentioned in the documentation of the algorithms used. We would be also very grateful if you let us know how you use Essentia by sending an email to mtg@upf.edu
[1] Bogdanov, D., Wack N., Gómez E., Gulati S., Herrera P., Mayor O., et al. (2013). ESSENTIA: an Audio Analysis Library for Music Information Retrieval. International Society for Music Information Retrieval Conference (ISMIR'13). 493-498.
Contents and search
For a complete overview of the documentation
Algorithm reference
The detailed documentation for all the algorithms
Doxygen C++ documentation
The documentation for the base classes used in Essentia
Introduction
An introduction to Essentia's main concepts
Building and installing Essentia
Instructions to get Essentia running on your computer
Algorithms overview
A quick description of the main algorithms
Python tutorial for beginners
A hands-on introduction to Essentia
Using extractors out-of-box
Quick results with no programming required
Frequently asked questions
Various tips on how to build and use Essentia
Design overview
An explanation of Essentia's basic types and classes
Using standard mode
Learn how to write a "standard" extractor
Using streaming mode
Learn how to write a "streaming" extractor
Streaming mode architecture
A description of how the "streaming" mode works
Standard algorithms
How to write new "standard" algorithms for Essentia
Streaming algorithms
How to write new "streaming" algorithms for Essentia
AlgorithmComposite algorithms
The inner workings of the composite algorithms
Streaming network execution
How Essentia's streaming scheduler works
Coding guidelines
Good practices to follow when developing new algorithms