├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── docs ├── .nojekyll ├── Makefile ├── build │ ├── .gitkeep │ ├── doctrees │ │ ├── environment.pickle │ │ ├── genindex.doctree │ │ ├── getting_started.doctree │ │ ├── index.doctree │ │ ├── index_b.doctree │ │ ├── index_c1.doctree │ │ ├── index_c2.doctree │ │ ├── index_c3.doctree │ │ ├── index_c4.doctree │ │ ├── index_c5.doctree │ │ ├── index_c6.doctree │ │ ├── index_c7.doctree │ │ ├── index_c8.doctree │ │ └── py-modindex.doctree │ └── html │ │ ├── .buildinfo │ │ ├── _modules │ │ ├── index.html │ │ └── libfmp │ │ │ ├── b │ │ │ ├── b_annotation.html │ │ │ ├── b_audio.html │ │ │ ├── b_layout.html │ │ │ ├── b_plot.html │ │ │ ├── b_sonification.html │ │ │ └── b_test_module.html │ │ │ ├── c1 │ │ │ ├── c1s1_sheet_music.html │ │ │ ├── c1s2_symbolic_rep.html │ │ │ └── c1s3_audio_rep.html │ │ │ ├── c2 │ │ │ ├── c2_complex.html │ │ │ ├── c2_digitization.html │ │ │ ├── c2_fourier.html │ │ │ ├── c2_interference.html │ │ │ └── c2_interpolation.html │ │ │ ├── c3 │ │ │ ├── c3s1_audio_feature.html │ │ │ ├── c3s1_post_processing.html │ │ │ ├── c3s1_transposition_tuning.html │ │ │ ├── c3s2_dtw.html │ │ │ ├── c3s2_dtw_plot.html │ │ │ └── c3s3_tempo_curve.html │ │ │ ├── c4 │ │ │ ├── c4s1_annotation.html │ │ │ ├── c4s2_ssm.html │ │ │ ├── c4s2_synthetic_ssm.html │ │ │ ├── c4s2_threshold.html │ │ │ ├── c4s3_thumbnail.html │ │ │ ├── c4s4_novelty_kernel.html │ │ │ ├── c4s4_structure_feature.html │ │ │ └── c4s5_evaluation.html │ │ │ ├── c5 │ │ │ ├── c5s1_basic_theory_harmony.html │ │ │ ├── c5s2_chord_rec_template.html │ │ │ └── c5s3_chord_rec_hmm.html │ │ │ ├── c6 │ │ │ ├── c6s1_onset_detection.html │ │ │ ├── c6s1_peak_picking.html │ │ │ ├── c6s2_tempo_analysis.html │ │ │ ├── c6s3_adaptive_windowing.html │ │ │ └── c6s3_beat_tracking.html │ │ │ ├── c7 │ │ │ ├── c7s1_audio_id.html │ │ │ ├── c7s2_audio_matching.html │ │ │ └── c7s3_version_id.html │ │ │ └── c8 │ │ │ ├── c8s1_hps.html │ │ │ ├── c8s2_f0.html │ │ │ ├── c8s2_salience.html │ │ │ └── c8s3_nmf.html │ │ ├── _sources │ │ ├── genindex.rst.txt │ │ ├── getting_started.rst.txt │ │ ├── index.rst.txt │ │ ├── index_b.rst.txt │ │ ├── index_c1.rst.txt │ │ ├── index_c2.rst.txt │ │ ├── index_c3.rst.txt │ │ ├── index_c4.rst.txt │ │ ├── index_c5.rst.txt │ │ ├── index_c6.rst.txt │ │ ├── index_c7.rst.txt │ │ ├── index_c8.rst.txt │ │ └── py-modindex.rst.txt │ │ ├── _static │ │ ├── Logo_libfmp.png │ │ ├── basic.css │ │ ├── css │ │ │ ├── badge_only.css │ │ │ ├── fonts │ │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ ├── lato-bold-italic.woff │ │ │ │ ├── lato-bold-italic.woff2 │ │ │ │ ├── lato-bold.woff │ │ │ │ ├── lato-bold.woff2 │ │ │ │ ├── lato-normal-italic.woff │ │ │ │ ├── lato-normal-italic.woff2 │ │ │ │ ├── lato-normal.woff │ │ │ │ └── lato-normal.woff2 │ │ │ └── theme.css │ │ ├── doctools.js │ │ ├── documentation_options.js │ │ ├── file.png │ │ ├── fonts │ │ │ ├── Inconsolata-Bold.ttf │ │ │ ├── Inconsolata-Regular.ttf │ │ │ ├── Inconsolata.ttf │ │ │ ├── Lato-Bold.ttf │ │ │ ├── Lato-Regular.ttf │ │ │ ├── Lato │ │ │ │ ├── lato-bold.eot │ │ │ │ ├── lato-bold.ttf │ │ │ │ ├── lato-bold.woff │ │ │ │ ├── lato-bold.woff2 │ │ │ │ ├── lato-bolditalic.eot │ │ │ │ ├── lato-bolditalic.ttf │ │ │ │ ├── lato-bolditalic.woff │ │ │ │ ├── lato-bolditalic.woff2 │ │ │ │ ├── lato-italic.eot │ │ │ │ ├── lato-italic.ttf │ │ │ │ ├── lato-italic.woff │ │ │ │ ├── lato-italic.woff2 │ │ │ │ ├── lato-regular.eot │ │ │ │ ├── lato-regular.ttf │ │ │ │ ├── lato-regular.woff │ │ │ │ └── lato-regular.woff2 │ │ │ ├── RobotoSlab-Bold.ttf │ │ │ ├── RobotoSlab-Regular.ttf │ │ │ ├── RobotoSlab │ │ │ │ ├── roboto-slab-v7-bold.eot │ │ │ │ ├── roboto-slab-v7-bold.ttf │ │ │ │ ├── roboto-slab-v7-bold.woff │ │ │ │ ├── roboto-slab-v7-bold.woff2 │ │ │ │ ├── roboto-slab-v7-regular.eot │ │ │ │ ├── roboto-slab-v7-regular.ttf │ │ │ │ ├── roboto-slab-v7-regular.woff │ │ │ │ └── roboto-slab-v7-regular.woff2 │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── jquery-3.5.1.js │ │ ├── jquery.js │ │ ├── js │ │ │ ├── badge_only.js │ │ │ ├── html5shiv-printshiv.min.js │ │ │ ├── html5shiv.min.js │ │ │ ├── modernizr.min.js │ │ │ └── theme.js │ │ ├── language_data.js │ │ ├── minus.png │ │ ├── plus.png │ │ ├── pygments.css │ │ ├── searchtools.js │ │ ├── underscore-1.13.1.js │ │ └── underscore.js │ │ ├── genindex.html │ │ ├── getting_started.html │ │ ├── index.html │ │ ├── index_b.html │ │ ├── index_c1.html │ │ ├── index_c2.html │ │ ├── index_c3.html │ │ ├── index_c4.html │ │ ├── index_c5.html │ │ ├── index_c6.html │ │ ├── index_c7.html │ │ ├── index_c8.html │ │ ├── objects.inv │ │ ├── py-modindex.html │ │ ├── search.html │ │ └── searchindex.js ├── environment.yml ├── index.html ├── make.bat └── source │ ├── _static │ └── Logo_libfmp.png │ ├── _templates │ └── .gitkeep │ ├── conf.py │ ├── genindex.rst │ ├── getting_started.rst │ ├── index.rst │ ├── index_b.rst │ ├── index_c1.rst │ ├── index_c2.rst │ ├── index_c3.rst │ ├── index_c4.rst │ ├── index_c5.rst │ ├── index_c6.rst │ ├── index_c7.rst │ ├── index_c8.rst │ └── py-modindex.rst ├── libfmp ├── __init__.py ├── b │ ├── __init__.py │ ├── b_annotation.py │ ├── b_audio.py │ ├── b_layout.py │ ├── b_plot.py │ ├── b_sonification.py │ └── b_test_module.py ├── c1 │ ├── __init__.py │ ├── c1s1_sheet_music.py │ ├── c1s2_symbolic_rep.py │ └── c1s3_audio_rep.py ├── c2 │ ├── __init__.py │ ├── c2_complex.py │ ├── c2_digitization.py │ ├── c2_fourier.py │ ├── c2_interference.py │ └── c2_interpolation.py ├── c3 │ ├── __init__.py │ ├── c3s1_audio_feature.py │ ├── c3s1_post_processing.py │ ├── c3s1_transposition_tuning.py │ ├── c3s2_dtw.py │ ├── c3s2_dtw_plot.py │ └── c3s3_tempo_curve.py ├── c4 │ ├── __init__.py │ ├── c4s1_annotation.py │ ├── c4s2_ssm.py │ ├── c4s2_synthetic_ssm.py │ ├── c4s2_threshold.py │ ├── c4s3_thumbnail.py │ ├── c4s4_novelty_kernel.py │ ├── c4s4_structure_feature.py │ └── c4s5_evaluation.py ├── c5 │ ├── __init__.py │ ├── c5s1_basic_theory_harmony.py │ ├── c5s2_chord_rec_template.py │ └── c5s3_chord_rec_hmm.py ├── c6 │ ├── __init__.py │ ├── c6s1_onset_detection.py │ ├── c6s1_peak_picking.py │ ├── c6s2_tempo_analysis.py │ ├── c6s3_adaptive_windowing.py │ └── c6s3_beat_tracking.py ├── c7 │ ├── __init__.py │ ├── c7s1_audio_id.py │ ├── c7s2_audio_matching.py │ └── c7s3_version_id.py └── c8 │ ├── __init__.py │ ├── c8s1_hps.py │ ├── c8s2_f0.py │ ├── c8s2_salience.py │ └── c8s3_nmf.py ├── setup.py └── test_examples.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | .DS_Store 3 | 4 | # ignore files created when preparing package for PyPi 5 | build/ 6 | dist/ 7 | libfmp.egg-info/ 8 | 9 | # do not ignore build of docs 10 | !docs/build/ 11 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to libfmp 2 | 3 | The libfmp-package goes hand in hand with the FMP notebooks. In particular, we need to manually synchronize all libfmp-functions with text passages, explanations, and code in the FMP notebooks. Of course, we are happy for suggestions and contributions. However, to facilitate the synchronization, we would be grateful for either directly contacting us via email (meinard.mueller@audiolabs-erlangen.de) or for creating [an issue](https://github.com/meinardmueller/libfmp/issues) in our Github repository. Please do not submit a pull request without prior consultation with us. 4 | 5 | By contributing, you agree that your contributions will be licensed under the MIT License. 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Meinard Müller and Frank Zalkow, International Audio 4 | Laboratories Erlangen, Germany. We thank the German Research Foundation (DFG) 5 | for various research grants that allow us for conducting fundamental research 6 | in music processing. The International Audio Laboratories Erlangen are a joint 7 | institution of the Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU) and 8 | Fraunhofer Institute for Integrated Circuits IIS. 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy of 11 | this software and associated documentation files (the "Software"), to deal in 12 | the Software without restriction, including without limitation the rights to 13 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 14 | the Software, and to permit persons to whom the Software is furnished to do so, 15 | subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 22 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 23 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 24 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 25 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # libfmp 2 | 3 | This repository contains the Python package libfmp. This package goes hand in hand with the FMP Notebooks, a collection of educational material for teaching and learning Fundamentals of Music Processing (FMP) with a particular focus on the audio domain. For detailed explanations and example appliciations of the libfmp-functions we refer to the FMP Notebooks: 4 | 5 | https://audiolabs-erlangen.de/FMP 6 | 7 | The FMP notebooks also contain a dedicated notebook for libfmp: 8 | 9 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_libfmp.html 10 | 11 | There is also an API documentation for libfmp: 12 | 13 | https://meinardmueller.github.io/libfmp 14 | 15 | If you use the package libfmp, please consider the following references. 16 | 17 | ## References 18 | 19 | Meinard Müller and Frank Zalkow. [libfmp: A Python Package for Fundamentals of Music Processing.](https://joss.theoj.org/papers/10.21105/joss.03326) Journal of Open Source Software (JOSS), 6(63), 2021. 20 | 21 | Meinard Müller and Frank Zalkow. [FMP Notebooks: Educational Material for Teaching and Learning Fundamentals of Music Processing.](https://archives.ismir.net/ismir2019/paper/000069.pdf) Proceedings of the International Conference on Music Information Retrieval (ISMIR), pp. 573–580, Delft, The Netherlands, 2019. 22 | 23 | Meinard Müller. [Fundamentals of Music Processing – Using Python and Jupyter Notebooks.](http://www.music-processing.de/) Springer Verlag, 2nd edition, 2021. 24 | 25 | Meinard Müller. [An Educational Guide Through the FMP Notebooks for Teaching and Learning Fundamentals of Music Processing.](https://www.mdpi.com/2624-6120/2/2/18) Signals, 2(2): 245–285, 2021. 26 | 27 | ## Statement of Need 28 | 29 | The libfmp package bundles core concepts from the music information retrieval (MIR) field in the form of well-documented and easy-to-use Python functions. It is designed to aid students with the transition from being learners (e.g., studying the FMP notebooks) to becoming researchers by providing proper software support for building and experimenting with complex MIR pipelines. Going beyond and complementing existing Python packages (such as librosa), the libfmp package contains (previously unpublished) reference implementations of MIR algorithms from the literature and new Python implementations of previously published MATLAB toolboxes. The functionality of libfmp addresses diverse MIR tasks such as tuning estimation, music structure analysis, audio thumbnailing, chord recognition, tempo estimation, beat and local pulse tracking, fragment-level music retrieval, and audio decomposition. 30 | 31 | ## Installing 32 | 33 | With Python >= 3.6, you can install libfmp using the Python package manager pip: 34 | 35 | ``` 36 | pip install libfmp 37 | ``` 38 | 39 | ## Contributing 40 | 41 | The libfmp-package has been developed in the context of the FMP notebooks. Being an integral part, all libfmp-functions need to manually synchronized with text passages, explanations, and the code in the FMP notebooks. Of course, we are happy for suggestions and contributions. However, to facilitate the synchronization, we would be grateful for either directly contacting us via email (meinard.mueller@audiolabs-erlangen.de) or for creating [an issue](https://github.com/meinardmueller/libfmp/issues) in our GitHub repository. Please do not submit a pull request without prior consultation with us. 42 | 43 | If you want to report an issue with libfmp or seek support, please use the same communication channels (email or GitHub issue). 44 | 45 | ## Tests 46 | 47 | The functions of libmfp are also covered in the [FMP notebooks](https://audiolabs-erlangen.de/FMP). There, you find several test cases for the functions, showing typical input-output behaviors. Beyond these tests, the FMP notebooks offer extensive explanations of these functions. Thus, we consider FMP as a replacement for conventional unit tests. 48 | 49 | Furthermore, we provide a small script that tests one function of each subpackage from libfmp. Rather than covering the full functionality of libfmp, it only verifies the correct import structure within the libfmp package. 50 | 51 | There are two options for executing the test script. The first is just to run the script, which results in no output if there are no errors. 52 | 53 | ``` 54 | python test_examples.py 55 | ``` 56 | 57 | The second option is to use [pytest](https://pytest.org), which results in a more instructive output. pytest is available when installing libfmp with the extra requirements for testing. 58 | 59 | ``` 60 | pip install 'libfmp[tests]' 61 | pytest test_examples.py 62 | ``` 63 | 64 | ## Acknowledgements 65 | 66 | The main authors of libfmp, Meinard Müller and Frank Zalkow, are associated with the International Audio Laboratories Erlangen, which are a joint institution of the Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU) and Fraunhofer Institute for Integrated Circuits IIS. We thank the German Research Foundation (DFG) for various research grants that allow us for conducting fundamental research in music processing. Furthermore, we thank the various people who have contributed to libfmp with code and suggestions. In particular, we want to thank (in alphabetic order) Stefan Balke, Michael Krause, Patricio Lopez-Serrano, Julian Reck, Sebastian Rosenzweig, Angel Villar-Corrales, Christof Weiß, and Tim Zunner. 67 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/.nojekyll -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/build/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/.gitkeep -------------------------------------------------------------------------------- /docs/build/doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/build/doctrees/genindex.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/genindex.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/getting_started.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/getting_started.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_b.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_b.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c1.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c1.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c2.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c2.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c3.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c3.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c4.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c4.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c5.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c5.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c6.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c6.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c7.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c7.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/index_c8.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/index_c8.doctree -------------------------------------------------------------------------------- /docs/build/doctrees/py-modindex.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/doctrees/py-modindex.doctree -------------------------------------------------------------------------------- /docs/build/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 9210911efc0e1093c426456216b8a50e 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/build/html/_sources/genindex.rst.txt: -------------------------------------------------------------------------------- 1 | Index 2 | ===== 3 | -------------------------------------------------------------------------------- /docs/build/html/_sources/getting_started.rst.txt: -------------------------------------------------------------------------------- 1 | Getting Started 2 | =============== 3 | 4 | You can install libfmp using the Python package manager pip: 5 | 6 | .. code-block:: bash 7 | 8 | pip install libfmp 9 | 10 | Beyond the API documentation of this webpage, you find extensive explanations of libfmp's functionality in the FMP Notebooks: 11 | 12 | https://www.audiolabs-erlangen.de/FMP 13 | 14 | In particular, there are dedicated notebooks on how to get started with FMP and on libfmp. 15 | 16 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_GetStarted.html 17 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_libfmp.html 18 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index.rst.txt: -------------------------------------------------------------------------------- 1 | Libfmp API Documentation 2 | ======================== 3 | 4 | This webpage contains the API documentation for the Python package libfmp. 5 | This package goes hand in hand with the FMP Notebooks, a collection of educational material for teaching and learning Fundamentals of Music Processing (FMP) with a particular focus on the audio domain. 6 | For detailed explanations and example applications of the libfmp-functions, we refer to the FMP Notebooks: 7 | 8 | http://audiolabs-erlangen.de/FMP 9 | 10 | The source code for the package libfmp is hosted at GitHub: 11 | 12 | https://github.com/meinardmueller/libfmp 13 | 14 | If you use the package libfmp, please consider the following references. 15 | 16 | .. [#] Meinard Müller and Frank Zalkow. `libfmp: A Python Package for Fundamentals of Music Processing. `_ Journal of Open Source Software (JOSS), 6(63), 2021. 17 | 18 | .. [#] Meinard Müller and Frank Zalkow. `FMP Notebooks: Educational Material for Teaching and Learning Fundamentals of Music Processing. `_ Proceedings of the International Conference on Music Information Retrieval (ISMIR), pp. 573–580, Delft, The Netherlands, 2019. 19 | 20 | .. [#] Meinard Müller. `Fundamentals of Music Processing – Using Python and Jupyter Notebooks. `_ Springer Verlag, 2nd edition, 2021. 21 | 22 | .. [#] Meinard Müller. `An Educational Guide Through the FMP Notebooks for Teaching and Learning Fundamentals of Music Processing. `_ Signals, 2(2): 245–285, 2021. 23 | 24 | .. toctree:: 25 | :hidden: 26 | 27 | getting_started 28 | 29 | 30 | .. toctree:: 31 | :caption: API Documentation 32 | :maxdepth: 1 33 | :hidden: 34 | 35 | index_b 36 | index_c1 37 | index_c2 38 | index_c3 39 | index_c4 40 | index_c5 41 | index_c6 42 | index_c7 43 | index_c8 44 | 45 | .. toctree:: 46 | :caption: Reference 47 | :maxdepth: 1 48 | :hidden: 49 | 50 | genindex 51 | py-modindex 52 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_b.rst.txt: -------------------------------------------------------------------------------- 1 | Basics (libfmp.b) 2 | ================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B.html 8 | 9 | .. automodule:: libfmp.b 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.b.b_annotation 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.b.b_audio 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.b.b_layout 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.b.b_plot 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.b.b_sonification 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.b.b_test_module 28 | :members: 29 | :undoc-members: 30 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c1.rst.txt: -------------------------------------------------------------------------------- 1 | Music Representations (libfmp.c1) 2 | ================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C1/C1.html 8 | 9 | .. automodule:: libfmp.c1 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c1.c1s1_sheet_music 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c1.c1s2_symbolic_rep 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c1.c1s3_audio_rep 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c2.rst.txt: -------------------------------------------------------------------------------- 1 | Fourier Analysis of Signals (libfmp.c2) 2 | ======================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C2/C2.html 8 | 9 | .. automodule:: libfmp.c2 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c2.c2_complex 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c2.c2_digitization 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c2.c2_fourier 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c2.c2_interference 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c2.c2_interpolation 25 | :members: 26 | :undoc-members: 27 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c3.rst.txt: -------------------------------------------------------------------------------- 1 | Music Synchronization (libfmp.c3) 2 | ================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C3/C3.html 8 | 9 | .. automodule:: libfmp.c3 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c3.c3s1_audio_feature 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c3.c3s1_post_processing 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c3.c3s1_transposition_tuning 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c3.c3s2_dtw 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c3.c3s2_dtw_plot 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.c3.c3s3_tempo_curve 28 | :members: 29 | :undoc-members: 30 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c4.rst.txt: -------------------------------------------------------------------------------- 1 | Music Structure Analysis (libfmp.c4) 2 | ==================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C4/C4.html 8 | 9 | .. automodule:: libfmp.c4 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c4.c4s1_annotation 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c4.c4s2_ssm 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c4.c4s2_synthetic_ssm 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c4.c4s2_threshold 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c4.c4s3_thumbnail 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.c4.c4s4_novelty_kernel 28 | :members: 29 | :undoc-members: 30 | .. automodule:: libfmp.c4.c4s4_structure_feature 31 | :members: 32 | :undoc-members: 33 | .. automodule:: libfmp.c4.c4s5_evaluation 34 | :members: 35 | :undoc-members: 36 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c5.rst.txt: -------------------------------------------------------------------------------- 1 | Chord Recognition (libfmp.c5) 2 | ============================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C5/C5.html 8 | 9 | .. automodule:: libfmp.c5 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c5.c5s1_basic_theory_harmony 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c5.c5s2_chord_rec_template 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c5.c5s3_chord_rec_hmm 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c6.rst.txt: -------------------------------------------------------------------------------- 1 | Tempo and Beat Tracking (libfmp.c6) 2 | =================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C6/C6.html 8 | 9 | .. automodule:: libfmp.c6 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c6.c6s1_onset_detection 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c6.c6s1_peak_picking 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c6.c6s2_tempo_analysis 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c6.c6s3_adaptive_windowing 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c6.c6s3_beat_tracking 25 | :members: 26 | :undoc-members: 27 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c7.rst.txt: -------------------------------------------------------------------------------- 1 | Content-Based Audio Retrieval (libfmp.c7) 2 | ========================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C7/C7.html 8 | 9 | .. automodule:: libfmp.c7 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c7.c7s1_audio_id 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c7.c7s2_audio_matching 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c7.c7s3_version_id 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/build/html/_sources/index_c8.rst.txt: -------------------------------------------------------------------------------- 1 | Musically Informed Audio Decomposition (libfmp.c8) 2 | ================================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C8/C8.html 8 | 9 | .. automodule:: libfmp.c8 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c8.c8s1_hps 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c8.c8s2_f0 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c8.c8s2_salience 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c8.c8s3_nmf 22 | :members: 23 | :undoc-members: 24 | -------------------------------------------------------------------------------- /docs/build/html/_sources/py-modindex.rst.txt: -------------------------------------------------------------------------------- 1 | Module Index 2 | ============ 3 | -------------------------------------------------------------------------------- /docs/build/html/_static/Logo_libfmp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/Logo_libfmp.png -------------------------------------------------------------------------------- /docs/build/html/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /docs/build/html/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '1.2.6', 4 | LANGUAGE: 'None', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '.txt', 11 | NAVIGATION_WITH_KEYS: false 12 | }; -------------------------------------------------------------------------------- /docs/build/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/file.png -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Inconsolata.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Inconsolata.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bold.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bold.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bold.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-bolditalic.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-italic.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-italic.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-italic.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-italic.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-regular.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-regular.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-regular.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/Lato/lato-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/Lato/lato-regular.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/build/html/_static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/_static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/build/html/_static/js/badge_only.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); -------------------------------------------------------------------------------- /docs/build/html/_static/js/html5shiv-printshiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/build/html/_static/js/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/build/html/_static/js/theme.js: -------------------------------------------------------------------------------- 1 | !function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t 4 | 5 | 6 | 7 | 8 | 9 | 10 | Getting Started — libfmp 1.2.6 documentation 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
52 | 53 | 124 | 125 |
126 | 127 | 128 | 134 | 135 | 136 |
137 | 138 |
139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 |
159 | 160 |
    161 | 162 |
  • »
  • 163 | 164 |
  • Getting Started
  • 165 | 166 | 167 |
  • 168 | 169 | 170 | View page source 171 | 172 | 173 |
  • 174 | 175 |
176 | 177 | 178 |
179 |
180 |
181 |
182 | 183 |
184 |

Getting Started

185 |

You can install libfmp using the Python package manager pip:

186 |
pip install libfmp
187 | 
188 |
189 |

Beyond the API documentation of this webpage, you find extensive explanations of libfmp’s functionality in the FMP Notebooks:

190 |

https://www.audiolabs-erlangen.de/FMP

191 |

In particular, there are dedicated notebooks on how to get started with FMP and on libfmp.

192 |

https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_GetStarted.html 193 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_libfmp.html

194 |
195 | 196 | 197 |
198 | 199 |
200 |
201 | 205 | 206 |
207 | 208 |
209 |

210 | © Copyright 2021, Meinard Müller and Frank Zalkow. 211 | 212 |

213 |
214 | 215 | 216 | 217 | Built with Sphinx using a 218 | 219 | theme 220 | 221 | provided by Read the Docs. 222 | 223 |
224 |
225 |
226 | 227 |
228 | 229 |
230 | 231 | 232 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | -------------------------------------------------------------------------------- /docs/build/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/build/html/objects.inv -------------------------------------------------------------------------------- /docs/build/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Search — libfmp 1.2.6 documentation 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
53 | 54 | 125 | 126 |
127 | 128 | 129 | 135 | 136 | 137 |
138 | 139 |
140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 |
160 | 161 |
    162 | 163 |
  • »
  • 164 | 165 |
  • Search
  • 166 | 167 | 168 |
  • 169 | 170 |
  • 171 | 172 |
173 | 174 | 175 |
176 |
177 |
178 |
179 | 180 | 187 | 188 | 189 |
190 | 191 |
192 | 193 |
194 | 195 |
196 |
197 | 198 |
199 | 200 |
201 |

202 | © Copyright 2021, Meinard Müller and Frank Zalkow. 203 | 204 |

205 |
206 | 207 | 208 | 209 | Built with Sphinx using a 210 | 211 | theme 212 | 213 | provided by Read the Docs. 214 | 215 |
216 |
217 |
218 | 219 |
220 | 221 |
222 | 223 | 224 | 229 | 230 | 231 | 232 | 233 | 234 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | -------------------------------------------------------------------------------- /docs/environment.yml: -------------------------------------------------------------------------------- 1 | name: libfmp_docs 2 | 3 | dependencies: 4 | - python==3.8.* 5 | - pip 6 | - pip: 7 | - ipython==7.8.* 8 | - librosa==0.8.* 9 | - matplotlib==3.3.* 10 | - music21==5.7.* 11 | - numba==0.56.* 12 | - pandas==1.1.* 13 | - pretty_midi==0.2.* 14 | - soundfile==0.9.* 15 | - scipy==1.5.* 16 | - numpy==1.19.* 17 | # - libfmp # using a freshly downloaded version of libfmp in the ci script 18 | - sphinx==4.0.* 19 | - sphinx_rtd_theme==0.5.* 20 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/source/_static/Logo_libfmp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/source/_static/Logo_libfmp.png -------------------------------------------------------------------------------- /docs/source/_templates/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/docs/source/_templates/.gitkeep -------------------------------------------------------------------------------- /docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | # 3 | # This file only contains a selection of the most common options. For a full 4 | # list see the documentation: 5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 6 | 7 | # -- Path setup -------------------------------------------------------------- 8 | 9 | # If extensions (or modules to document with autodoc) are in another directory, 10 | # add these directories to sys.path here. If the directory is relative to the 11 | # documentation root, use os.path.abspath to make it absolute, like shown here. 12 | # 13 | import re 14 | import os 15 | 16 | # using local version of libfmp 17 | import sys 18 | FMP_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) 19 | assert os.path.exists(os.path.join(FMP_DIR, 'libfmp')) 20 | sys.path.insert(0, FMP_DIR) 21 | 22 | import libfmp # noqa 23 | import libfmp.b # noqa 24 | import libfmp.c1 # noqa 25 | import libfmp.c2 # noqa 26 | import libfmp.c3 # noqa 27 | import libfmp.c4 # noqa 28 | import libfmp.c5 # noqa 29 | import libfmp.c6 # noqa 30 | import libfmp.c7 # noqa 31 | import libfmp.c8 # noqa 32 | 33 | assert libfmp.__path__[0].startswith(FMP_DIR) 34 | 35 | # -- Project information ----------------------------------------------------- 36 | 37 | project = 'libfmp' 38 | copyright = '2021, Meinard Müller and Frank Zalkow' 39 | author = 'Meinard Müller and Frank Zalkow' 40 | 41 | # The version info for the project you're documenting, acts as replacement for 42 | # |version| and |release|, also used in various other places throughout the 43 | # built documents. 44 | 45 | # this gives version of pip-installed version, not of local version 46 | # import pkg_resources # noqa 47 | # libfmp_version = pkg_resources.require('libfmp')[0].version 48 | 49 | # reading version from local setup file 50 | setup_fn = next(fn for fn in ['setup.py', 'libfmp_setup.py'] if os.path.exists(os.path.join(FMP_DIR, fn))) 51 | with open(os.path.join(FMP_DIR, setup_fn), 'r') as stream: 52 | setup_content = stream.read() 53 | version_match = re.search("version='(.*?)'", setup_content) 54 | assert version_match is not None 55 | libfmp_version = version_match.group(1) 56 | 57 | version = libfmp_version 58 | release = libfmp_version 59 | 60 | 61 | # -- General configuration --------------------------------------------------- 62 | 63 | # Add any Sphinx extension module names here, as strings. They can be 64 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 65 | # ones. 66 | extensions = [ 67 | 'sphinx.ext.autodoc', # documentation based on docstrings 68 | 'sphinx.ext.napoleon', # for having google/numpy style docstrings 69 | 'sphinx.ext.viewcode', # link source code 70 | 'sphinx.ext.intersphinx', 71 | 'sphinx.ext.autosummary', 72 | 'sphinx.ext.extlinks' 73 | ] 74 | 75 | # Add any paths that contain templates here, relative to this directory. 76 | templates_path = ['_templates'] 77 | 78 | # List of patterns, relative to source directory, that match files and 79 | # directories to ignore when looking for source files. 80 | # This pattern also affects html_static_path and html_extra_path. 81 | exclude_patterns = [] 82 | 83 | # The name of the Pygments (syntax highlighting) style to use. 84 | pygments_style = 'sphinx' 85 | 86 | # -- Options for HTML output ------------------------------------------------- 87 | 88 | # The theme to use for HTML and HTML Help pages. See the documentation for 89 | # a list of builtin themes. 90 | # 91 | # html_theme = 'alabaster' 92 | import sphinx_rtd_theme # noqa 93 | 94 | html_theme = "sphinx_rtd_theme" 95 | html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] 96 | 97 | # Add any paths that contain custom static files (such as style sheets) here, 98 | # relative to this directory. They are copied after the builtin static files, 99 | # so a file named "default.css" will overwrite the builtin "default.css". 100 | html_static_path = ['_static'] 101 | 102 | html_use_index = True 103 | html_use_modindex = True 104 | 105 | html_logo = os.path.join(html_static_path[0], 'Logo_libfmp.png') 106 | 107 | html_theme_options = {'logo_only': True} 108 | 109 | # do not evaluate keyword default values 110 | # useful, e.g., for libfmp.c6.c6s2_tempo_analysis.compute_plot_tempogram_plp), where np.arange(30, 601) is a default 111 | autodoc_preserve_defaults = True 112 | 113 | # Interpret "Returns" section as "Args" section 114 | napoleon_custom_sections = [('Returns', 'params_style'), ('Attributes', 'params_style')] 115 | 116 | extlinks = {'fmpbook': ('https://www.audiolabs-erlangen.de/fau/professor/mueller/bookFMP', 'FMP'), 117 | 'fmpnotebook': ('https://www.audiolabs-erlangen.de/resources/MIR/FMP/%s.html', '%s.ipynb')} 118 | 119 | 120 | # -- Customn pre-processing of docstrings ------------------------------------ 121 | 122 | def link_notebook(app, what, name, obj, options, lines): 123 | for i, line in enumerate(lines): 124 | if 'Notebook:' in line: 125 | match = re.search('Notebook: (.*?)\.ipynb', line) 126 | if match: 127 | link = match.group(1) 128 | lines[i] = lines[i].replace(f'{link}.ipynb', f':fmpnotebook:`{link}`') 129 | 130 | 131 | def link_book(app, what, name, obj, options, lines): 132 | for i, line in enumerate(lines): 133 | if '[FMP' in line: 134 | lines[i] = lines[i].replace('[FMP', '[:fmpbook:`\ `') 135 | 136 | 137 | def remove_module_docstring(app, what, name, obj, options, lines): 138 | if what == 'module': 139 | del lines[:] 140 | 141 | 142 | def setup(app): 143 | app.connect('autodoc-process-docstring', link_notebook) 144 | app.connect('autodoc-process-docstring', link_book) 145 | app.connect('autodoc-process-docstring', remove_module_docstring) 146 | -------------------------------------------------------------------------------- /docs/source/genindex.rst: -------------------------------------------------------------------------------- 1 | Index 2 | ===== 3 | -------------------------------------------------------------------------------- /docs/source/getting_started.rst: -------------------------------------------------------------------------------- 1 | Getting Started 2 | =============== 3 | 4 | You can install libfmp using the Python package manager pip: 5 | 6 | .. code-block:: bash 7 | 8 | pip install libfmp 9 | 10 | Beyond the API documentation of this webpage, you find extensive explanations of libfmp's functionality in the FMP Notebooks: 11 | 12 | https://www.audiolabs-erlangen.de/FMP 13 | 14 | In particular, there are dedicated notebooks on how to get started with FMP and on libfmp. 15 | 16 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_GetStarted.html 17 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B_libfmp.html 18 | -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | Libfmp API Documentation 2 | ======================== 3 | 4 | This webpage contains the API documentation for the Python package libfmp. 5 | This package goes hand in hand with the FMP Notebooks, a collection of educational material for teaching and learning Fundamentals of Music Processing (FMP) with a particular focus on the audio domain. 6 | For detailed explanations and example applications of the libfmp-functions, we refer to the FMP Notebooks: 7 | 8 | http://audiolabs-erlangen.de/FMP 9 | 10 | The source code for the package libfmp is hosted at GitHub: 11 | 12 | https://github.com/meinardmueller/libfmp 13 | 14 | If you use the package libfmp, please consider the following references. 15 | 16 | .. [#] Meinard Müller and Frank Zalkow. `libfmp: A Python Package for Fundamentals of Music Processing. `_ Journal of Open Source Software (JOSS), 6(63), 2021. 17 | 18 | .. [#] Meinard Müller and Frank Zalkow. `FMP Notebooks: Educational Material for Teaching and Learning Fundamentals of Music Processing. `_ Proceedings of the International Conference on Music Information Retrieval (ISMIR), pp. 573–580, Delft, The Netherlands, 2019. 19 | 20 | .. [#] Meinard Müller. `Fundamentals of Music Processing – Using Python and Jupyter Notebooks. `_ Springer Verlag, 2nd edition, 2021. 21 | 22 | .. [#] Meinard Müller. `An Educational Guide Through the FMP Notebooks for Teaching and Learning Fundamentals of Music Processing. `_ Signals, 2(2): 245–285, 2021. 23 | 24 | .. toctree:: 25 | :hidden: 26 | 27 | getting_started 28 | 29 | 30 | .. toctree:: 31 | :caption: API Documentation 32 | :maxdepth: 1 33 | :hidden: 34 | 35 | index_b 36 | index_c1 37 | index_c2 38 | index_c3 39 | index_c4 40 | index_c5 41 | index_c6 42 | index_c7 43 | index_c8 44 | 45 | .. toctree:: 46 | :caption: Reference 47 | :maxdepth: 1 48 | :hidden: 49 | 50 | genindex 51 | py-modindex 52 | -------------------------------------------------------------------------------- /docs/source/index_b.rst: -------------------------------------------------------------------------------- 1 | Basics (libfmp.b) 2 | ================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/B/B.html 8 | 9 | .. automodule:: libfmp.b 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.b.b_annotation 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.b.b_audio 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.b.b_layout 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.b.b_plot 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.b.b_sonification 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.b.b_test_module 28 | :members: 29 | :undoc-members: 30 | -------------------------------------------------------------------------------- /docs/source/index_c1.rst: -------------------------------------------------------------------------------- 1 | Music Representations (libfmp.c1) 2 | ================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C1/C1.html 8 | 9 | .. automodule:: libfmp.c1 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c1.c1s1_sheet_music 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c1.c1s2_symbolic_rep 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c1.c1s3_audio_rep 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/source/index_c2.rst: -------------------------------------------------------------------------------- 1 | Fourier Analysis of Signals (libfmp.c2) 2 | ======================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C2/C2.html 8 | 9 | .. automodule:: libfmp.c2 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c2.c2_complex 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c2.c2_digitization 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c2.c2_fourier 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c2.c2_interference 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c2.c2_interpolation 25 | :members: 26 | :undoc-members: 27 | -------------------------------------------------------------------------------- /docs/source/index_c3.rst: -------------------------------------------------------------------------------- 1 | Music Synchronization (libfmp.c3) 2 | ================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C3/C3.html 8 | 9 | .. automodule:: libfmp.c3 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c3.c3s1_audio_feature 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c3.c3s1_post_processing 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c3.c3s1_transposition_tuning 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c3.c3s2_dtw 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c3.c3s2_dtw_plot 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.c3.c3s3_tempo_curve 28 | :members: 29 | :undoc-members: 30 | -------------------------------------------------------------------------------- /docs/source/index_c4.rst: -------------------------------------------------------------------------------- 1 | Music Structure Analysis (libfmp.c4) 2 | ==================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C4/C4.html 8 | 9 | .. automodule:: libfmp.c4 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c4.c4s1_annotation 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c4.c4s2_ssm 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c4.c4s2_synthetic_ssm 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c4.c4s2_threshold 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c4.c4s3_thumbnail 25 | :members: 26 | :undoc-members: 27 | .. automodule:: libfmp.c4.c4s4_novelty_kernel 28 | :members: 29 | :undoc-members: 30 | .. automodule:: libfmp.c4.c4s4_structure_feature 31 | :members: 32 | :undoc-members: 33 | .. automodule:: libfmp.c4.c4s5_evaluation 34 | :members: 35 | :undoc-members: 36 | -------------------------------------------------------------------------------- /docs/source/index_c5.rst: -------------------------------------------------------------------------------- 1 | Chord Recognition (libfmp.c5) 2 | ============================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C5/C5.html 8 | 9 | .. automodule:: libfmp.c5 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c5.c5s1_basic_theory_harmony 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c5.c5s2_chord_rec_template 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c5.c5s3_chord_rec_hmm 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/source/index_c6.rst: -------------------------------------------------------------------------------- 1 | Tempo and Beat Tracking (libfmp.c6) 2 | =================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C6/C6.html 8 | 9 | .. automodule:: libfmp.c6 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c6.c6s1_onset_detection 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c6.c6s1_peak_picking 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c6.c6s2_tempo_analysis 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c6.c6s3_adaptive_windowing 22 | :members: 23 | :undoc-members: 24 | .. automodule:: libfmp.c6.c6s3_beat_tracking 25 | :members: 26 | :undoc-members: 27 | -------------------------------------------------------------------------------- /docs/source/index_c7.rst: -------------------------------------------------------------------------------- 1 | Content-Based Audio Retrieval (libfmp.c7) 2 | ========================================= 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C7/C7.html 8 | 9 | .. automodule:: libfmp.c7 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c7.c7s1_audio_id 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c7.c7s2_audio_matching 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c7.c7s3_version_id 19 | :members: 20 | :undoc-members: 21 | -------------------------------------------------------------------------------- /docs/source/index_c8.rst: -------------------------------------------------------------------------------- 1 | Musically Informed Audio Decomposition (libfmp.c8) 2 | ================================================== 3 | 4 | The `FMP notebooks `_ provide detailed textbook-like explanations of central techniques and algorithms implemented in the libfmp. 5 | The part of FMP related to this module is available at the following URL: 6 | 7 | https://www.audiolabs-erlangen.de/resources/MIR/FMP/C8/C8.html 8 | 9 | .. automodule:: libfmp.c8 10 | :members: 11 | :undoc-members: 12 | .. automodule:: libfmp.c8.c8s1_hps 13 | :members: 14 | :undoc-members: 15 | .. automodule:: libfmp.c8.c8s2_f0 16 | :members: 17 | :undoc-members: 18 | .. automodule:: libfmp.c8.c8s2_salience 19 | :members: 20 | :undoc-members: 21 | .. automodule:: libfmp.c8.c8s3_nmf 22 | :members: 23 | :undoc-members: 24 | -------------------------------------------------------------------------------- /docs/source/py-modindex.rst: -------------------------------------------------------------------------------- 1 | Module Index 2 | ============ 3 | -------------------------------------------------------------------------------- /libfmp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meinardmueller/libfmp/5020a801eb368bf0915b9bfad19d391a4f73f2ed/libfmp/__init__.py -------------------------------------------------------------------------------- /libfmp/b/__init__.py: -------------------------------------------------------------------------------- 1 | from .b_audio import read_audio, \ 2 | write_audio, \ 3 | audio_player_list 4 | 5 | from .b_plot import plot_signal, \ 6 | plot_matrix, \ 7 | plot_chromagram, \ 8 | compressed_gray_cmap, \ 9 | MultiplePlotsWithColorbar, \ 10 | plot_annotation_line, \ 11 | plot_annotation_line_overlay, \ 12 | plot_annotation_multiline, \ 13 | plot_segments, \ 14 | plot_segments_overlay, \ 15 | color_argument_to_dict 16 | 17 | from .b_layout import FloatingBox 18 | 19 | from .b_annotation import read_csv, \ 20 | write_csv, \ 21 | cut_audio, \ 22 | cut_csv_file 23 | 24 | from .b_sonification import list_to_chromagram, \ 25 | generate_shepard_tone, \ 26 | sonify_chromagram, \ 27 | sonify_chromagram_with_signal, \ 28 | list_to_pitch_activations, \ 29 | sonify_pitch_activations, \ 30 | sonify_pitch_activations_with_signal 31 | 32 | 33 | #from .b_sonifications import save_to_csv, load_from_csv, sonification_librosa, sonification_own, sonification_hpss_lab 34 | # Requires files "data/B/plato.wav" and so on, which are not part of libfmp -> generates error 35 | -------------------------------------------------------------------------------- /libfmp/b/b_annotation.py: -------------------------------------------------------------------------------- 1 | """ 2 | Module: libfmp.b.b_annotation 3 | Author: Frank Zalkow, Meinard Mueller 4 | License: The MIT license, https://opensource.org/licenses/MIT 5 | 6 | This file is part of the FMP Notebooks (https://www.audiolabs-erlangen.de/FMP) 7 | """ 8 | 9 | import numpy as np 10 | import pandas as pd 11 | import librosa 12 | 13 | import libfmp.b 14 | 15 | 16 | def read_csv(fn, header=True, add_label=False): 17 | """Read a CSV file in table format and creates a pd.DataFrame from it, with observations in the 18 | rows and variables in the columns. 19 | 20 | 21 | Args: 22 | fn (str): Filename 23 | header (bool): Boolean (Default value = True) 24 | add_label (bool): Add column with constant value of `add_label` (Default value = False) 25 | 26 | Returns: 27 | df (pd.DataFrame): Pandas DataFrame 28 | """ 29 | df = pd.read_csv(fn, sep=';', keep_default_na=False, header=0 if header else None) 30 | if add_label: 31 | assert 'label' not in df.columns, 'Label column must not exist if `add_label` is True' 32 | df = df.assign(label=[add_label] * len(df.index)) 33 | return df 34 | 35 | 36 | def write_csv(df, fn, header=True): 37 | """Write a pd.DataFrame to a CSV file, with observations in the rows and variables in the columns. 38 | 39 | Args: 40 | df (pd.DataFrame): Pandas DataFrame 41 | fn (str): Filename 42 | header (bool): Boolean (Default value = True) 43 | """ 44 | df.to_csv(fn, sep=';', index=False, quoting=2, header=header) 45 | 46 | 47 | def cut_audio(fn_in, fn_out, start_sec, end_sec, normalize=True, write=True, Fs=22050): 48 | """Cut an audio file using specificed start and end time positions and writes the result to a new audio file. 49 | 50 | Args: 51 | fn_in (str): Filename and path for input audio file 52 | fn_out (str): Filename and path for input audio file 53 | start_sec (float): Start time position (in seconds) of cut 54 | end_sec (float): End time position (in seconds) of cut 55 | normalize (bool): If True, then normalize audio (with max norm) (Default value = True) 56 | write (bool): If True, then write audio (Default value = True) 57 | Fs (scalar): Sampling rate of audio (Default value = 22050) 58 | 59 | Returns: 60 | x_cut (np.ndarray): Cut audio 61 | """ 62 | x_cut, Fs = librosa.load(fn_in, sr=Fs, offset=start_sec, duration=end_sec-start_sec) 63 | if normalize is True: 64 | x_cut = x_cut / np.max(np.abs(x_cut)) 65 | if write is True: 66 | libfmp.b.write_audio(fn_out, x_cut, Fs) 67 | return x_cut 68 | 69 | 70 | def cut_csv_file(fn_in, fn_out, start_sec, end_sec, write=True): 71 | """Cut a annotation CSV file (where each row corresponds to the four variables ``start``, ``end``, ``pitch``, 72 | and ``label``) using specificed start and end time positions and writes the result to a new CSV file. 73 | 74 | Args: 75 | fn_in (str): Filename and path for input audio file 76 | fn_out (str): Filename and path for input audio file 77 | start_sec (float): Start time position (in seconds) of cut 78 | end_sec (float): End time position (in seconds) of cut 79 | write (bool): If True, then write csv file (Default value = True) 80 | 81 | Returns: 82 | ann_cut (list): Cut annotation file 83 | """ 84 | df = pd.read_csv(fn_in, sep=',', keep_default_na=False, header=None) 85 | ann_cut = [] 86 | for i, (start, end, pitch, label) in df.iterrows(): 87 | if (start > start_sec) and (start < end_sec): 88 | ann_cut.append([start-start_sec, min(end, end_sec)-start, int(pitch), 100, str(int(label))]) 89 | 90 | if write: 91 | columns = ['Start', 'Duration', 'Pitch', 'Velocity', 'Instrument'] 92 | df_out = pd.DataFrame(ann_cut, columns=columns) 93 | df_out['Start'] = df_out['Start'].map('{:,.3f}'.format) 94 | df_out['Duration'] = df_out['Duration'].map('{:,.3f}'.format) 95 | df_out.to_csv(fn_out, sep=';', index=False) 96 | return ann_cut 97 | -------------------------------------------------------------------------------- /libfmp/b/b_audio.py: -------------------------------------------------------------------------------- 1 | """ 2 | Module: libfmp.b.b_audio 3 | Author: Frank Zalkow, Meinard Mueller 4 | License: The MIT license, https://opensource.org/licenses/MIT 5 | 6 | This file is part of the FMP Notebooks (https://www.audiolabs-erlangen.de/FMP) 7 | """ 8 | 9 | import librosa 10 | import soundfile as sf 11 | import IPython.display as ipd 12 | import pandas as pd 13 | 14 | 15 | def read_audio(path, Fs=None, mono=False): 16 | """Read an audio file into a np.ndarray. 17 | 18 | Args: 19 | path (str): Path to audio file 20 | Fs (scalar): Resample audio to given sampling rate. Use native sampling rate if None. (Default value = None) 21 | mono (bool): Convert multi-channel file to mono. (Default value = False) 22 | 23 | Returns: 24 | x (np.ndarray): Waveform signal 25 | Fs (scalar): Sampling rate 26 | """ 27 | return librosa.load(path, sr=Fs, mono=mono) 28 | 29 | 30 | def write_audio(path, x, Fs): 31 | """Write a signal (as np.ndarray) to an audio file. 32 | 33 | Args: 34 | path (str): Path to audio file 35 | x (np.ndarray): Waveform signal 36 | Fs (scalar): Sampling rate 37 | """ 38 | sf.write(path, x, Fs) 39 | 40 | 41 | def audio_player_list(signals, rates, width=270, height=40, columns=None, column_align='center'): 42 | """Generate a list of HTML audio players tags for a given list of audio signals. 43 | 44 | Notebook: B/B_PythonAudio.ipynb 45 | 46 | Args: 47 | signals (list): List of audio signals 48 | rates (list): List of sample rates 49 | width (int): Width of player (either number or list) (Default value = 270) 50 | height (int): Height of player (either number or list) (Default value = 40) 51 | columns (list): Column headings (Default value = None) 52 | column_align (str): Left, center, right (Default value = 'center') 53 | """ 54 | pd.set_option('display.max_colwidth', None) 55 | 56 | if isinstance(width, int): 57 | width = [width] * len(signals) 58 | if isinstance(height, int): 59 | height = [height] * len(signals) 60 | 61 | audio_list = [] 62 | for cur_x, cur_Fs, cur_width, cur_height in zip(signals, rates, width, height): 63 | audio_html = ipd.Audio(data=cur_x, rate=cur_Fs)._repr_html_() 64 | audio_html = audio_html.replace('\n', '').strip() 65 | audio_html = audio_html.replace('