• Stars
    star
    1,332
  • Rank 35,284 (Top 0.7 %)
  • Language
    Python
  • License
    Other
  • Created over 9 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Python audio and music signal processing library

madmom

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.5 or newer and the following packages installed:

In order to test your installation, process live audio input, or have improved FFT performance, additionally install these packages:

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 pytest

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:

DBNBeatTracker 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:

DBNBeatTracker batch [-o OUTPUT_DIR] [-s OUTPUT_SUFFIX] FILES

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

Some programs can also be run in online mode, i.e. operate on live audio signals. This requires pyaudio to be installed:

DBNBeatTracker online [-o OUTFILE] [INFILE]

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:

DBNBeatTracker -h

DBNBeatTracker single -h

DBNBeatTracker batch -h

DBNBeatTracker online -h

DBNBeatTracker 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

Citation

If you use madmom in your work, please consider citing it:

@inproceedings{madmom,
   Title = {{madmom: a new Python Audio and Music Signal Processing Library}},
   Author = {B{\"o}ck, Sebastian and Korzeniowski, Filip and Schl{\"u}ter, Jan and Krebs, Florian and Widmer, Gerhard},
   Booktitle = {Proceedings of the 24th ACM International Conference on
   Multimedia},
   Month = {10},
   Year = {2016},
   Pages = {1174--1178},
   Address = {Amsterdam, The Netherlands},
   Doi = {10.1145/2964284.2973795}
}

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, 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]Florian Krebs, Sebastian Böck, Matthias Dorfer and Gerhard Widmer, Downbeat Tracking Using Beat-Synchronous Features and Recurrent Networks, Proceedings of the 17th International Society for Music Information Retrieval Conference (ISMIR), 2016.
[17]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.
[18]Filip Korzeniowski and Gerhard Widmer, Genre-Agnostic Key Classification with Convolutional Neural Networks, Proceedings of the 19th International Society for Music Information Retrieval Conference (ISMIR), 2018.
[19]Rainer Kelz, Sebastian Böck and Gerhard Widmer, Deep Polyphonic ADSR Piano Note Transcription, Proceedings of the 44th International Conference on Acoustics, Speech and Signal Processing (ICASSP), 2019.

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.

More Repositories

1

partitura

A python package for handling modern staff notation of music
Python
229
star
2

msmd

A Multimodal Audio Sheet Music Dataset
Jupyter Notebook
80
star
3

wechsel

Code for WECHSEL: Effective initialization of subword embeddings for cross-lingual transfer of monolingual language models.
Python
73
star
4

onset_detection

Python implementation of the most common spectral based onset detection algorithms.
Python
68
star
5

onset_db

Onset data set which can be used to tune/evaluate onset detection algorithms.
60
star
6

SuperFlux

Python reference implementation of the SuperFlux onset detection algorithm
Python
52
star
7

score_following_game

Learning to Listen, Read, and Follow: Score Following as a Reinforcement Learning Game
Python
50
star
8

madmom_tutorials

Tutorials for the madmom package.
Jupyter Notebook
50
star
9

beat_this

Accurate and general beat tracker
Python
49
star
10

deep_lda

Implementation of Deep Linear Discriminant Analysis (DeepLDA)
Python
48
star
11

EfficientLEAF

Official implementation of EfficientLEAF, a learnable audio frontend.
Python
38
star
12

audioLIME

audioLIME: Listenable Explanations Using Source Separation
Python
34
star
13

cca_layer

Implementation of Canonical Correlation Analysis Layer for Cross-Modality Retrieval.
Python
31
star
14

dcase_task2

Training General-Purpose Audio Tagging Networks with Noisy Labels and Iterative Self-Verification
Python
29
star
15

audio_sheet_retrieval

Learning Audio–Sheet Music Correspondences for Cross-Modal Retrieval and Piece Identification
Jupyter Notebook
25
star
16

BallroomAnnotations

This repo includes beat and bar annotations for the ballroom dataset.
24
star
17

audio_conditioned_unet

Audio-Conditioned U-Net for Position Estimation in Full Sheet Images
Python
24
star
18

madmom_models

Trained data models for madmom: https://github.com/CPJKU/madmom
Python
21
star
19

basismixer

The Basis Mixer is an implementation of the Basis Function Modeling framework for musical expression
Python
19
star
20

cpjku_dcase22

Python
18
star
21

partitura_tutorial

A quick introduction to symbolic music processing with partitura
Jupyter Notebook
13
star
22

recommendation_systems_fairness

This repository accompaines the paper "Investigating Gender Fairness of Recommendation Algorithms in the Music Domain"
Jupyter Notebook
12
star
23

cyolo_score_following

Multi-modal Conditional Bounding Box Regression for Music Score Following
Python
12
star
24

composer_concept

Supervised and unsupervised Concept-based explanation of pretrained music classifiers
Python
12
star
25

kagglebirds2020

7th place solution for the Cornell Birdcall Identification Kaggle Challenge
Python
11
star
26

schimmel

Simple Cython Hidden Markov Model Extension Library
Python
11
star
27

LEMONS

Listenable Explanations for Music recOmmeNder Systems
Python
10
star
28

accompanion

An expressive accompaniment system for piano performances
Python
10
star
29

da

Pytorch domain adaptation package
Python
10
star
30

paow

generation experiments
Jupyter Notebook
8
star
31

cpjku_dcase24

Python
7
star
32

adv-multvae

This repository accompanies the paper "Unlearning Protected User Attributes in Recommendations with Adversarial Training"
Python
7
star
33

ScaLearn

ScaLearn: Simple and Highly Parameter-Efficient Task Transfer by Learning to Scale
Python
7
star
34

piano_svsep

Code for the paper Cluster and Separate: A GNN Approach to Voice and Staff Prediction for Score Engraving
Python
6
star
35

DeepGenIR

Code for "A Modern Perspective on Query Likelihood with Deep Generative Retrieval Models"
Python
6
star
36

basismixer-notebooks

A collection of jupyter notebooks demonstrating the basis mixer package
Python
6
star
37

pers_bias

Jupyter Notebook
4
star
38

ModularizedDebiasing

Jupyter Notebook
4
star
39

veracity

Python
4
star
40

performance_embeddings_fire23

Jupyter Notebook
3
star
41

accompanion_ijcai2023

Supplementary material for "The ACCompanion: Combining Reactivity, Robustness, and Musical Expressivity in an Automatic Piano Accompanist" presented at IJCAI-23
Python
3
star
42

dcase2024_task1_baseline

Python
3
star
43

FairnessRetrievalResults

Code and resources of the paper "Societal Biases in Retrieved Contents: Measurement Frameworkand Adversarial Mitigation for BERT Rankers"
Python
3
star
44

accompanion_pieces

Pieces, scores and performances for playing with the accompanion.
2
star
45

plausible_xai

Python
2
star
46

expressivity

Visualizing Musical Expression
JavaScript
2
star
47

performance_similarity_dlfm23

Jupyter Notebook
1
star
48

user-interaction-gender-bias-IR

Code & experiments on the inherent gender bias of the users of search engines
1
star
49

con_espressione_game_ismir2020

Experiments for first results of the Con Espressione Game analysis, accepted for ISMIR 2020
Jupyter Notebook
1
star
50

beat_this_annotations

Beat annotations for the beat tracker Beat This!
Python
1
star