Open-source project
musicinformationretrieval/musicinformationretrieval.com avatar
musicinformationretrieval/musicinformationretrieval.com

musicinformationretrieval.com: A Notebook Curriculum for MIR, Not a Library

Instructional notebooks on music information retrieval.

1,280 stars412 forksJupyter NotebookMIT

At a glance

What is it?
The repository is an instructional notebook site covering MIR from audio representation through beat tracking and machine learning, served on the gh-pages branch under MIT. It teaches methods; it does not ship a feature-extraction API, so the decision is about curriculum, not dependency.
Who is it for?
Adopt this if you are learning MIR concepts or teaching them and want runnable notebooks that walk from audio representation through STFT, chroma, onset detection, tempo estimation, beat tracking, and into k-means and neural networks. Do not adopt it as a dependency: it is a curriculum on the gh-pages branch, not an installed package, and the single release tag v0.1.0 dates from 2014.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 119 days ago.
What is it written in?
Mainly Jupyter Notebook, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What the Notebook Site Is For

The problem this project addresses is the gap between MIR papers and working code. A reader who wants to know what a chroma vector actually contains, or why a novelty function peaks where it does, has to assemble that understanding from signal processing texts and library documentation. This repository packages the explanation as Jupyter notebooks that run. The README lists them under five groupings: Introduction, Music Representations, Signal Analysis and Feature Extraction, Rhythm, Tempo, and Beat Tracking, and Machine Learning. The audience is a learner with some Python, not a team looking for a production component. The Introduction section includes Python Basics and Dependencies and Jupyter Basics, which tells you the material assumes you may be new to the notebook environment itself. The topics list on the repository confirms the framing: ipython-notebook, jupyter-notebook, machine-learning, music, music-information-retrieval, python. Every one of those is a teaching or domain label, not a runtime label.

The Curriculum's Actual Progression

The ordering is deliberate and worth reading as a syllabus rather than a table of contents. Music Representations starts with Sheet Music Representations and Symbolic Representations before Audio Representation, so the reader meets MIDI-style and notation-style encodings before touching samples. Tuning Systems and a MIDI Note to Frequency Conversion Table sit in the same section, which is the right place for them: the conversion from note number to frequency is the point where symbolic and audio representations meet, and the repository treats it as its own notebook rather than a footnote. Signal Analysis then moves in a defensible sequence: Basic Feature Extraction, Segmentation, Energy and RMSE, Zero Crossing Rate, Fourier Transform, Short-time Fourier Transform and Spectrogram, Constant-Q Transform and Chroma, Magnitude Scaling, Spectral Features, Autocorrelation, and a Pitch Transcription Exercise. The rhythm section follows the same build-up pattern, from Novelty Functions to Peak Picking to Onset Detection, then Onset-based Segmentation with Backtracking, Tempo Estimation, and Beat Tracking. Each stage depends on the previous one, which is what makes the set a curriculum rather than a collection.

How the Notebooks Are Delivered and Run

There is no install command in the supplied material and no package published from this repository. The README's links are Binder URLs of the form https://mybinder.org/v2/gh/HuwCheston/musicinformationretrieval.com/HEAD?urlpath=%2Fdoc%2Ftree%2Fcontent%2F1_introduction%2Fabout.ipynb, with the notebook path appended after urlpath. The content lives under a content directory, split into folders named 1_introduction, 2_music_representations, 3_signal_analysis, 4_rhythm_tempo_beat, and 5_machine_learning, with notebooks named in lower snake case such as stft.ipynb, chroma.ipynb, and beat_tracking.ipynb. The default branch is gh-pages, which is consistent with the site being published from the same branch that holds the notebooks. The practical consequence is that the execution environment is Binder's, not yours, and the dependency set is whatever the repository declares for that build. The Introduction notebook titled Python Basics and Dependencies is the project's own statement of what those dependencies are. If you want to run the material locally, the README does not give you a requirements file or a conda environment in the supplied text; you would copy the notebooks from the content tree and reconstruct the environment from that dependencies notebook.

Where the Material Stops Being Enough

Two notebooks in the rhythm section sit apart from the rest. Drum Transcription using ADTLib and the two video notebooks (Video: Chroma Features, Video: Tempo and Beat Tracking) depend on something outside the core numerical stack, and the ADTLib notebook in particular names a third-party package in its title. That is a fragility the rest of the curriculum does not have: a notebook built on NumPy and SciPy survives library churn better than one built on a research package with a small maintainer base. The Machine Learning section shows the same pattern at its edge. K-Means Clustering and the unsupervised instrument classification exercise are self-contained, and Neural Networks is listed alongside Genre Recognition, but the supplied README truncates mid-entry at genre_recognitio, so the full extent of that section cannot be confirmed from the material here. The honest reading is that the signal analysis and rhythm sections are the durable core, and the machine learning section is where you should check each notebook individually before assigning it. There is also a scope limit worth stating plainly: this is a single-instructor site, and the notebooks reflect one person's chosen path through MIR. Topics the field treats as standard, such as source separation or music structure analysis at scale, are not visible in the section listing provided.

The Release Tag and What It Does Not Tell You

The repository has one release, v0.1.0, dated 2014-06-23. The last push is 2026-05-19. Those two dates describe a project that has been edited continuously for over a decade without cutting another versioned release. For a library that would be a serious signal, because consumers need version boundaries to pin against. For a notebook site it is less alarming: the unit of change is a notebook, and the reader consumes the current state of the gh-pages branch rather than a tagged artifact. But it does mean you cannot ask what changed between two versions, because there is only one. If you are building a course on top of this material and you need reproducibility across terms, the tag history will not give it to you. You would have to record the commit you cloned, or vendor the notebooks into your own repository, which the MIT licence permits.

How This Differs from Using libROSA

libROSA is the natural comparison, and the difference is categorical rather than competitive. libROSA is a Python library you import: you call functions for spectral features, onset detection, tempo estimation, and beat tracking, and you get arrays back. This repository is the explanation of what those functions compute. A notebook on the Short-time Fourier Transform here is not a wrapper around a library call; it is a walkthrough of the transform itself, with Magnitude Scaling and Spectral Features as separate lessons. The same holds for the rhythm section, where Novelty Functions and Peak Picking are broken out as their own notebooks before Onset Detection appears. If your goal is to detect onsets in a pipeline, installing libROSA and calling its onset function is the shorter path. If your goal is to understand why the onset function returns what it returns, or to modify the novelty function it uses, the notebook sequence is the faster route to that understanding. The repository also covers ground a feature library does not: Sheet Music Representations, Tuning Systems, and the MIDI conversion table have no equivalent in a signal-processing library, because they are about musical encoding rather than audio.

Licence and the Cost of Keeping It Running

The licence is MIT, which is permissive and permits reuse in course material, internal training, and derivative notebooks, provided the copyright notice and permission notice are retained. This is not legal advice; read the LICENSE file in the repository before redistributing. The maintenance cost falls on you rather than on the project. Because there is no packaged release to pin, keeping a local copy working means tracking the dependencies declared in the Python Basics and Dependencies notebook and re-checking the notebooks that reach outside the core stack, specifically the ADTLib drum transcription notebook. The Binder links in the README are the low-effort option: they rebuild the environment from the repository each time, so a broken dependency shows up as a failed build rather than as a silent wrong answer. That is a reasonable default for a learner. For an instructor who needs the same result every term, vendoring the notebooks and freezing the environment yourself is the more predictable route, and MIT allows it.

Editorial conclusion

Adopt this if you are learning MIR concepts or teaching them and want runnable notebooks that walk from audio representation through STFT, chroma, onset detection, tempo estimation, beat tracking, and into k-means and neural networks. Do not adopt it as a dependency: it is a curriculum on the gh-pages branch, not an installed package, and the single release tag v0.1.0 dates from 2014. Before relying on any notebook, open it through the Binder links in the README and confirm the pinned dependencies still resolve, because the repository's own Python Basics and Dependencies notebook is the only statement of its environment that the supplied material provides.

Official sources

  1. License: MIT
  2. musicinformationretrieval/musicinformationretrieval.com on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes