This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

Madmom is an audio signal processing library written in Python with a strong focus on music information retrieval (MIR) tasks.

The library is internally used by the Department of Computational Perception, Johannes Kepler University, Linz, Austria (http://www.cp.jku.at) and the Austrian Research Institute for Artificial Intelligence (OFAI), Vienna, Austria (http://www.ofai.at).

Possible acronyms are:

  • Madmom Analyzes Digitized Music Of Musicians
  • Mostly Audio / Dominantly Music Oriented Modules

It includes reference implementations for some music information retrieval algorithms, please see the References section.

Documentation

Documentation of the package can be found online http://madmom.readthedocs.org

License

The package has two licenses, one for source code and one for model/data files.

Source code

Unless indicated otherwise, all source code files are published under the BSD license. For details, please see the LICENSE file.

Model and data files

Unless indicated otherwise, all model and data files are distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 license.

If you want to include any of these files (or a variation or modification thereof) or technology which utilises them in a commercial product, please contact Gerhard Widmer.

Installation

Please do not try to install from the .zip files provided by GitHub. Rather install it from package (if you just want to use it) or source (if you plan to use it for development) by following the instructions below. Whichever variant you choose, please make sure that all prerequisites are installed.

Prerequisites

To install the madmom package, you must have either Python 2.7 or Python 3.3 or newer and the following packages installed:

If you need support for audio files other than .wav with a sample rate of 44.1kHz and 16 bit depth, you need ffmpeg (avconv on Ubuntu Linux has some decoding bugs, so we advise not to use it!).

Please refer to the requirements.txt file for the minimum required versions and make sure that these modules are up to date, otherwise it can result in unexpected errors or false computations!

Install from package

The instructions given here should be used if you just want to install the package, e.g. to run the bundled programs or use some functionality for your own project. If you intend to change anything within the madmom package, please follow the steps in the next section.

The easiest way to install the package is via pip from the PyPI (Python Package Index):

pip install madmom

This includes the latest code and trained models and will install all dependencies automatically.

You might need higher privileges (use su or sudo) to install the package, model files and scripts globally. Alternatively you can install the package locally (i.e. only for you) by adding the --user argument:

pip install --user madmom

This will also install the executable programs to a common place (e.g. /usr/local/bin), which should be in your $PATH already. If you installed the package locally, the programs will be copied to a folder which might not be included in your $PATH (e.g. ~/Library/Python/2.7/bin on Mac OS X or ~/.local/bin on Ubuntu Linux, pip will tell you). Thus the programs need to be called explicitely or you can add their install path to your $PATH environment variable:

export PATH='path/to/scripts':$PATH

Install from source

If you plan to use the package as a developer, clone the Git repository:

git clone --recursive https://github.com/CPJKU/madmom.git

Since the pre-trained model/data files are not included in this repository but rather added as a Git submodule, you either have to clone the repo recursively. This is equivalent to these steps:

git clone https://github.com/CPJKU/madmom.git
cd madmom
git submodule update --init --remote

Then you can simply install the package in development mode:

python setup.py develop --user

To run the included tests:

python setup.py test

Upgrade of existing installations

To upgrade the package, please use the same mechanism (pip vs. source) as you did for installation. If you want to change from package to source, please uninstall the package first.

Upgrade a package

Simply upgrade the package via pip:

pip install --upgrade madmom [--user]

If some of the provided programs or models changed (please refer to the CHANGELOG) you should first uninstall the package and then reinstall:

pip uninstall madmom
pip install madmom [--user]

Upgrade from source

Simply pull the latest sources:

git pull

To update the models contained in the submodule:

git submodule update

If any of the .pyx or .pxd files changed, you have to recompile the modules with Cython:

python setup.py build_ext --inplace

Package structure

The package has a very simple structure, divided into the following folders:

/bin
this folder includes example programs (i.e. executable algorithms)
/docs
package documentation
/madmom
the actual Python package
/madmom/audio
low level features (e.g. audio file handling, STFT)
/madmom/evaluation
evaluation code
/madmom/features
higher level features (e.g. onsets, beats)
/madmom/ml
machine learning stuff (e.g. RNNs, HMMs)
/madmom/models
pre-trained model/data files (see the License section)
/madmom/utils
misc stuff (e.g. MIDI and general file handling)
/tests
tests

Executable programs

The package includes executable programs in the /bin folder. If you installed the package, they were copied to a common place.

All scripts can be run in different modes: in single file mode to process a single audio file and write the output to STDOUT or the given output file:

SuperFlux single [-o OUTFILE] INFILE

If multiple audio files should be processed, the scripts can also be run in batch mode to write the outputs to files with the given suffix:

SuperFlux batch [-o OUTPUT_DIR] [-s OUTPUT_SUFFIX] LIST OF INPUT FILES

If no output directory is given, the program writes the output files to same location as the audio files.

The pickle mode can be used to store the used parameters to be able to exactly reproduce experiments.

Please note that the program itself as well as the modes have help messages:

SuperFlux -h

SuperFlux single -h

SuperFlux batch -h

SuperFlux pickle -h

will give different help messages.

Additional resources

Mailing list

The mailing list should be used to get in touch with the developers and other users.

Wiki

The wiki can be found here: https://github.com/CPJKU/madmom/wiki

FAQ

Frequently asked questions can be found here: https://github.com/CPJKU/madmom/wiki/FAQ

References

[1]Florian Eyben, Sebastian Böck, Björn Schuller and Alex Graves, Universal Onset Detection with bidirectional Long Short-Term Memory Neural Networks, Proceedings of the 11th International Society for Music Information Retrieval Conference (ISMIR), 2010.
[2]Sebastian Böck and Markus Schedl, Enhanced Beat Tracking with Context-Aware Neural Networks, Proceedings of the 14th International Conference on Digital Audio Effects (DAFx), 2011.
[3]Sebastian Böck and Markus Schedl, Polyphonic Piano Note Transcription with Recurrent Neural Networks, Proceedings of the 37th International Conference on Acoustics, Speech and Signal Processing (ICASSP), 2012.
[4]Sebastian Böck, Andreas Arzt, Florian Krebs and Markus Schedl, Online Real-time Onset Detection with Recurrent Neural Networks, Proceedings of the 15th International Conference on Digital Audio Effects (DAFx), 2012.
[5]Sebastian Böck, Florian Krebs and Markus Schedl, Evaluating the Online Capabilities of Onset Detection Methods, Proceedings of the 13th International Society for Music Information Retrieval Conference (ISMIR), 2012.
[6]Sebastian Böck and Gerhard Widmer, Maximum Filter Vibrato Suppression for Onset Detection, Proceedings of the 16th International Conference on Digital Audio Effects (DAFx), 2013.
[7]Sebastian Böck and Gerhard Widmer, Local Group Delay based Vibrato and Tremolo Suppression for Onset Detection, Proceedings of the 13th International Society for Music Information Retrieval Conference (ISMIR), 2013.
[8]Florian Krebs, Sebastian Böck and Gerhard Widmer, Rhythmic Pattern Modelling for Beat and Downbeat Tracking in Musical Audio, Proceedings of the 14th International Society for Music Information Retrieval Conference (ISMIR), 2013.
[9]Sebastian Böck, Jan Schlüter and Gerhard Widmer, Enhanced Peak Picking for Onset Detection with Recurrent Neural Networks, Proceedings of the 6th International Workshop on Machine Learning and Music (MML), 2013.
[10]Sebastian Böck, Florian Krebs and Gerhard Widmer, A Multi-Model Approach to Beat Tracking Considering Heterogeneous Music Styles, Proceedings of the 15th International Society for Music Information Retrieval Conference (ISMIR), 2014.
[11]Filip Korzeniowski, Sebastian Böck and Gerhard Widmer, Probabilistic Extraction of Beat Positions from a Beat Activation Function, In Proceedings of the 15th International Society for Music Information Retrieval Conference (ISMIR), 2014.
[12]Sebastian Böck, Florian Krebs and Gerhard Widmer, Accurate Tempo Estimation based on Recurrent Neural Networks and Resonating Comb Filters, Proceedings of the 16th International Society for Music Information Retrieval Conference (ISMIR), 2015.
[13]Florian Krebs, Sebastian Böck and Gerhard Widmer, An Efficient State Space Model for Joint Tempo and Meter Tracking, Proceedings of the 16th International Society for Music Information Retrieval Conference (ISMIR), 2015.
[14]Sebastian Böck, Florian Krebs and Gerhard Widmer, Joint Beat and Downbeat Tracking with Recurrent Neural Networks, Proceedings of the 17th International Society for Music Information Retrieval Conference (ISMIR), 2016.
[15]Filip Korzeniowski and Gerhard Widmer, Feature Learning for Chord Recognition: The Deep Chroma Extractor, Proceedings of the 17th International Society for Music Information Retrieval Conference (ISMIR), 2016.
[16]Filip Korzeniowski and Gerhard Widmer, A Fully Convolutional Deep Auditory Model for Musical Chord Recognition, Proceedings of IEEE International Workshop on Machine Learning for Signal Processing (MLSP), 2016.

Acknowledgements

Supported by the European Commission through the GiantSteps project (FP7 grant agreement no. 610591) and the Phenicx project (FP7 grant agreement no. 601166) as well as the Austrian Science Fund (FWF) project Z159.

Release Notes

Version 0.14.1 (release date: 2016-08-01)

This is a maintainance release.

  • RNNDownBeatProcessor returns only beat and downbeat activations (#197)
  • Update programs to reflect MIREX 2016 submissions (#198)

Version 0.14 (release date: 2016-07-28)

New features:

  • Downbeat tracking based on Recurrent Neural Network (RNN) and Dynamic Bayesian Network (DBN) (#130)
  • Convolutional Neural Networks (CNN) and CNN onset detection (#133)
  • Linear-Chain Conditional Random Field (CRF) implementation (#144)
  • Deep Neural Network (DNN) based chroma vector extraction (#148)
  • CRF chord recognition using DNN chroma vectors (#148)
  • CNN chord recognition using CRF decoding (#152)
  • Initial Windows support (Python 2.7 only, no pip packages yet) (#157)
  • Gated Recurrent Unit (GRU) network layer (#167)

Bug fixes:

  • Fix downbeat output bug (#128)
  • MIDI file creation bug (#166)

API relevant changes:

  • Refactored the ml.rnn to ml.nn and converted the models to pickles (#110)
  • Reordered the dimensions of comb_filters to time, freq, tau (#135)
  • write_notes uses delimiter instead of sep to separate columns (#155)
  • LSTMLayer takes Gate as arguments, all layers are callable (#161)
  • Replaced online parameter of FramedSignalProcessor by origin (#169)

Other changes:

  • Added classes for onset/note/beat detection with RNNs to features.* (#118)
  • Add examples to docstrings of classes (#119)
  • Converted madmom.modules into a Python package (#125)
  • match_files can handle inexact matches (#137)
  • Updated beat tracking models to MIREX 2015 ones (#146)
  • Tempo and time signature can be set for created MIDI files (#166)

Version 0.13.2 (release date: 2016-06-09)

This is a bugfix release.

  • Fix custom filterbank in FilteredSpectrogram (#142)

Version 0.13.1 (release date: 2016-03-14)

This is a bugfix release.

  • Fix beat evaluation argument parsing (#116)

Version 0.13 (release date: 2016-03-07)

New features:

Bug fixes:

  • Fix nasty unsigned indexing bug (#88)
  • MIDI note timing could get corrupted if note_ticks_to_beats() was called multiple times (#90)

API relevant changes:

  • Renamed DownBeatTracker and all relevant classes to PatternTracker (#25)
  • Complete refactoring of the features.beats_hmm module (#52)
  • Unified negative index behaviour of FramedSignal (#72)
  • Removed pickling of data classes since it was not tested thoroughly (#81)
  • Reworked stacking of spectrogram differences (#82)
  • Renamed norm_bands argument of MultiBandSpectrogram to norm_filters (#83)

Other changes:

  • Added alignment evaluation (#12)
  • Added continuous integration testing (#16)
  • Added -o option to both single/batch processing mode to not overwrite files accidentally in single mode (#18)
  • Removed block_size parameter from FilteredSpectrogram (#22)
  • Sample rate is always integer (#23)
  • Converted all docstrings to the numpydoc format (#48)
  • Batch processing continues if non-audio files are given (#53)
  • Added code quality checks (#61)
  • Added coverage measuring (#74)
  • Added –down` option to evaluate only downbeats (#76)
  • Removed option to normalise the observations (#95)
  • Moved filterbank related argument parser to FilterbankProcessor (#96)

Version 0.12.1 (release date: 2016-01-22)

Added Python 3 compatibility to setup.py (needed for the tutorials to work)

Version 0.12 (release date: 2015-10-16)

Initial public release of madmom

Release History

Release History

0.14.1

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.14

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.13.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.13.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.13

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.12.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.12

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
madmom-0.14.1.tar.gz (14.3 MB) Copy SHA256 Checksum SHA256 Source Aug 1, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting