madmom

Python audio and music signal processing library

https://github.com/cpjku/madmom

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.4%) to scientific vocabulary

Keywords

audio-analysis cython machine-learning music-information-retrieval numpy python scipy signal-processing

Keywords from Contributors

optimizing-compiler closember theano
Last synced: 6 months ago · JSON representation

Repository

Python audio and music signal processing library

Basic Info
Statistics
  • Stars: 1,485
  • Watchers: 43
  • Forks: 252
  • Open Issues: 76
  • Releases: 10
Topics
audio-analysis cython machine-learning music-information-retrieval numpy python scipy signal-processing
Created over 10 years ago · Last pushed over 1 year ago
Metadata Files
Readme Changelog License

README.rst

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

- `numpy `_
- `scipy `_
- `cython `_
- `mido `_

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

- `pytest `_
- `pyaudio `_
- `pyfftw `_

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 <../../../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:

.. code-block:: latex

   @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.

Owner

  • Name: Institute of Computational Perception
  • Login: CPJKU
  • Kind: organization
  • Location: Linz, Austria

Johannes Kepler University

GitHub Events

Total
  • Issues event: 6
  • Watch event: 144
  • Issue comment event: 26
  • Pull request event: 5
  • Fork event: 39
Last Year
  • Issues event: 6
  • Watch event: 144
  • Issue comment event: 26
  • Pull request event: 5
  • Fork event: 39

Committers

Last synced: 11 months ago

All Time
  • Total Commits: 1,449
  • Total Committers: 23
  • Avg Commits per committer: 63.0
  • Development Distribution Score (DDS): 0.242
Past Year
  • Commits: 1
  • Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Sebastian Böck s****k@j****t 1,099
Filip Korzeniowski f****i@j****t 148
Sebastian Böck s****k@o****t 133
Jan Schlüter j****r@o****t 12
Nick B n****k@d****t 11
SebastianPoell s****l@g****m 8
Johan Pauwels j****s 7
Florian Krebs f****s@j****t 5
Sebastian Böck r****h@m****g 5
Filip Korzeniowski f****m 5
Rainer Kelz r****z@j****t 2
Amaury Durand d****y@h****r 2
Carl Thomé c****e@g****m 2
Ainsley Escorce-Jones me@a****o 1
Cody c****y@q****m 1
Colin Raffel c****l@g****m 1
Dustin Ingram di 1
Göran Sandström v****r@g****m 1
Hendrik Schreiber hs@t****m 1
Laubeee s****e@h****m 1
rainerkelz r****z 1
flokadillo f****o@y****e 1
伯勤 g****z@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 82
  • Total pull requests: 49
  • Average time to close issues: 11 months
  • Average time to close pull requests: 5 months
  • Total issue authors: 62
  • Total pull request authors: 21
  • Average comments per issue: 2.74
  • Average comments per pull request: 1.33
  • Merged pull requests: 20
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 5
  • Pull requests: 7
  • Average time to close issues: 26 minutes
  • Average time to close pull requests: less than a minute
  • Issue authors: 5
  • Pull request authors: 5
  • Average comments per issue: 0.2
  • Average comments per pull request: 0.71
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • superbock (11)
  • hpx7 (4)
  • stunlocked1 (3)
  • radkoff (2)
  • MR-T77 (2)
  • nicolaus625 (2)
  • omareldeeb (2)
  • alastair (2)
  • shreyanc (1)
  • Jarris81 (1)
  • turismo444 (1)
  • bjourne (1)
  • jie-chen (1)
  • johentsch (1)
  • sloev (1)
Pull Request Authors
  • superbock (20)
  • jpauwels (5)
  • SebastianPoell (3)
  • ackramer (2)
  • BigRedDoge (2)
  • declension (2)
  • igalcohenhadria (1)
  • alumkal (1)
  • chadawagner (1)
  • omareldeeb (1)
  • bwagner (1)
  • hendriks73 (1)
  • GrillingUXO (1)
  • di (1)
  • GuitarmonYz (1)
Top Labels
Issue Labels
bug (2) enhancement (1)
Pull Request Labels

Packages

  • Total packages: 3
  • Total downloads:
    • pypi 5,105 last-month
  • Total docker downloads: 25
  • Total dependent packages: 9
    (may contain duplicates)
  • Total dependent repositories: 57
    (may contain duplicates)
  • Total versions: 23
  • Total maintainers: 1
pypi.org: madmom

Python audio signal processing library

  • Versions: 11
  • Dependent Packages: 9
  • Dependent Repositories: 57
  • Downloads: 5,105 Last month
  • Docker Downloads: 25
Rankings
Dependent packages count: 1.1%
Stargazers count: 1.9%
Dependent repos count: 2.0%
Average: 2.8%
Docker downloads count: 3.5%
Forks count: 3.7%
Downloads: 4.4%
Maintainers (1)
Last synced: 6 months ago
proxy.golang.org: github.com/cpjku/madmom
  • Versions: 6
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 7.0%
Average: 8.2%
Dependent repos count: 9.3%
Last synced: 6 months ago
proxy.golang.org: github.com/CPJKU/madmom
  • Versions: 6
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 7.0%
Average: 8.2%
Dependent repos count: 9.3%
Last synced: 6 months ago