Skip to content

Releases: cuthbertLab/music21

music21 v10.5.0

Choose a tag to compare

@mscuthbert mscuthbert released this 17 Jun 01:22
ec17c23

Bug fixes

Typing and Cleanups

Security

Full Changelog: v10.3.0...v10.5.0

music21 v10.3

Choose a tag to compare

@mscuthbert mscuthbert released this 26 May 09:41
d3ea6aa

Music21 v10.3 is an incremental and backwards-compatible improvement to the v10 line that was released earlier this month. Highlights include proper tempi/metronome marks on score excepts via .measures(start, end) by @oxygen-dioxide, MIDI ability to skip the second-or-so delay before ending the MIDI file (by @SAY-5). Bug fixes on Fractions (by @jacobtylerwalls and me). Support for scores and audio in the marimo notebook system. And paradigms I learned from presenting music21 at PyCon 2026 in Long Beach (stricter Agents and issue policy; using Agents to fix problems with RST)

What's Changed

New Contributors

Full Changelog: v10.1.0...v10.3.0

music21 v10 (10.1.0)

Choose a tag to compare

@mscuthbert mscuthbert released this 16 May 07:57

Music21 v10 (10.1.0) is released. This release has small backwards incompatibilities, but is mostly focused on improved typing, better MIDI support, and improved features for using modern tooling (uv especially) and AI agents and assistants.

I'm very proud of the improvements that the new deprecations and updates have been able to make! 10 in music21 v.10 is a big number, representing decades since the first release, so I'm so proud of release teams and contributors for making this happen.

Other important changes.

  • MIDI in Jupyter notebooks supports playback w/ multiple instruments via music21j and soundfonts. - playback is versioned so future music21j changes will not affect the routine.
  • Humdrum spineParser module major improvements, esp. to repeates.
  • Modern Python packaging. Fully migrated to uv: pyproject.toml now controls dev dependencies.
  • lots of better typehints.

What else's Changed

Bot upgrades

Thanks

Thanks to contributions from

Full Changelog: v9.9.0...v10.1.0

music21 v9.9.2

Choose a tag to compare

@mscuthbert mscuthbert released this 12 May 01:09
aa9780a

v9.9.2 is an immediate release for anyone using music21 with MIDI on Jupyter notebooks. Currently our release system can only support one version of music21j as the Notebook MIDI code provider. The update to music21j v0.22 (from 0.13) broke the MIDIPlayer css. This fixes it.

What's Changed

  • m21_9: Fix MIDI.css bug, uv.lock, gitignore by @mscuthbert in #1888
  • Correct collaborator name

Full Changelog: v9.9.1...v9.9.2

music21 v9.9.1

Choose a tag to compare

@mscuthbert mscuthbert released this 12 Oct 09:16

Python 3.14 Compatible

Music21 v9.9.1 brings full Python 3.14 compatibility to v9 -- there was one incompatibility regarding "NotImplemented" in v9.9.0 w/ Python 3.14 -- users who don't use Python 3.14 have no reason to upgrade from 9.9.0 (see #1830)

Also mark the pyproject.toml as Python 3.14 compatible.

No docs being uploaded here since they are unchanged from 9.9.0

pip install -U music21 to get the latest version.

Full Changelog: v9.9.0...v9.9.1

music21 v9.9.0

Choose a tag to compare

@mscuthbert mscuthbert released this 06 Oct 06:23
7842de3

Update summary

  • Support Dorico as MusicXML reader. by @knutnergaard in #1788
  • music21.text.assembleLyrics: support custom word separator by @oxygen-dioxide in #1797
  • Add github codespace support by @oxygen-dioxide in #1805
  • Modernization of Lilypond generated code (see below)
  • Since this will be the last release in the v9 line, music21 v9.9 is the last version to support Python 3.10. It has been tested on Python 3.14rc3 and looks good to go with that system.

What's Changed: Bug Fixes and smaller improvements

  • Improve Lilypond opening in Windows by @mscuthbert in #1773
  • Also merge spanners when calling stream.Score.partsToVoices by @guang-yng in #1796
  • Fix duration exceptions for slight rounding by @mscuthbert in #1802
  • Rewrite Docs upload script by @mscuthbert in #1804
  • Improve docs for Percussion Chords by @mscuthbert in #1803
  • Update of property assignment syntax for Lilypond conversion (issue #1791) by @jeremy9959 in #1800
  • Updated the FAQ + Build Docs by @mscuthbert in #1810
  • Fix to m21ToXML.py:parseFlatElements() by @gregchapman-dev in #1806
  • Consistant use of 1.0 instead of 1 or 1. by @mscuthbert in #1811
  • Braille translate - support smart quotes by @mscuthbert in #1814
  • Make UserSettings more dict-like by @mscuthbert in #1816
  • Support RepeatBrackets for pianos by @mscuthbert in #1818
  • Stream.template() gets a removeAll keyword and exemptFromRemoveAll keyword in PR1818. This allows for things like removing all spanners except RepeatBrackets (which is what we used it for.
  • Fixed links to my articles about music21 (I decided to leave academia.edu over their AI use policies)

New Contributors

Full Changelog: v9.7.1...v9.9.0

music21 v9.7.1

Choose a tag to compare

@mscuthbert mscuthbert released this 19 Jun 11:51
0ea1e00

Music21 v9.7.1 is a maintenance release that fixes a bug in the pip version of music21 which would not work with numpy 2.0. Now the dependencies of music21 are the same whether installed from source/requirements.txt or pip/pyproject.toml.

This release also fixes errors (typing and intervals with concrete notes) discovered by mypy 1.16 and incorporates grammar and spelling fixes in documentation discovered by Pratim Vasireddy.

What's Changed

New Contributors

Full Changelog: v9.7.0...v9.7.1

music21 v9.7

Choose a tag to compare

@mscuthbert mscuthbert released this 22 May 13:06
3ad399f

Music21 v9.7 is an incremental, but still substantial release focusing mainly on import and export quality and speed. MIDI Lyrics and improved, PedalMarks are added (with more to come). Substantial new tools for FretBend and other tablature-based work.

numpy 2.0–2.2 is now supported, which makes it possible to run music21 on Windows with Python 3.13 without a compiler -- this was
the main reason for moving up the release by a month!

An update to the CONTRIBUTING guidelines -- all AI contributions must be explicitly mentioned. AI-generated contributions (whether properly declared or suspected) that do not pass tests will be closed without comment -- see Simon Williamson's blog about how AI is shifting the coding burden from programmers to reviewers for context.

Thanks to @gregchapman-dev, @adhooge, @TimFelixBeyer, @jacobtylerwalls and many others for contributions to code. And new, special thanks to Anne G. Hamill who has been helping very much with the music21list through some very difficult Google Groups times!

What's Changed

  • MIDI + Lyrics now import #1769 and export #1779 -- thanks to @oxygen-dioxide . Lyrics are encoded in many recent MIDI files used in AI singing synthesis, so this is an important update!
  • Updated Linting/etc. by updating Astroid @mscuthbert in #1755
  • (Somewhat backwards incompatible: Discussed on list) midi.__init__ functions are now in midi/base.py or music21.midi.base -- matching most other formats. Added a lot of typing for MIDI conversion (by @mscuthbert in #1757 and #1758 and #1778)
  • Support enclosure == Enclosure.NO_ENCLOSURE which is different from enclosure == None by @gregchapman-dev in #1761
  • PedalMark support by @gregchapman-dev in #1762
  • FretBend supports alter (interval), prebend, and release by @adhooge in #1580
  • Roundtrip inverted chord symbols properly by @mscuthbert in #1775
  • Interpret empty tags as rests on Finale documents only (derived from PR #1636, thanks @TimFelixBeyer!) by @gregchapman-dev in #1777
  • Allow numpy 2.0+ with music21 by @mscuthbert in #1781

Thanks to two new contributors

Full Changelog: v9.5.0...v9.7.0

music21 v9.5.0

Choose a tag to compare

@mscuthbert mscuthbert released this 20 Feb 00:36
ff16dc2

Music21 v9.5 is a small bug-fix release that fixes a few hard to find bugs, takes advantage of updated dependencies, and adds a bit more typing in various places.

Fixes Introducing Tiny Incompatibilities

These incompatibilities have been removed from music21 in order to get correct typing. They were never documented nor promised to work, hence considering it okay with Semantic versioning.

  • interval.getWrittenLowerNote works on notes and pitches but both objects must be a Note or must be a Pitch. (This restriction guarantees that the type of object being returned as the lower one will not vary based on attributes, and lets these functions be properly typed). By @mscuthbert in #1749 (started in 1747 by mistake) -- same is true for the parallel methods getWrittenHigherNote, getAbsoluteHigherNote, and getAbsoluteLowerNote. Now your IDE/mypy etc. should know the type of object being returned by these poorly-named functions!
  • Removed the "ability" to do this: p = pitch.Pitch(pitch.Pitch('D')) to get a D. Never was documented before: Pitches now cannot take other pitch objects as arguments; this ability was just used in the pre-typed past where we were mixing strings and Pitch objects interchangeably and was only used in music21 in one place (reduceChords.py). The newly created Pitch objects lost a lot of information about harmonics, accidental display, etc. so this was a good catch. Contributed by first-time contributor @float3 in #1746

What's Changed

  • Fixed links to generated documentation by @jacobtylerwalls in #1741
  • Take advantage of Astroid 1015 bug being fixed by @mscuthbert in #1745 -- many overloaded functions in music21 were very verbose with code that did not actually run in order to pass mypy with Astroid bug no. 1015 (a tough bug!). Major contributions to fixing the bug were given by @jacobtylerwalls. Also better docs about why music21 has its own StrEnum package. Also 'highestTime' will forever be equivalent to OffsetSpecial.AT_END -- if you know about this, it's great. Most will not care.
  • Added some typing to graph modules by @mscuthbert in PR1745 above.
  • Updated typing on tablature and intervals by @mscuthbert in #1747
  • Code of Conduct Clarify by @mscuthbert in #1748
  • Update interval Typing overloads by @mscuthbert in #1749
  • Fix a case where octave transposing instruments like piccolo or double bass imported from MusicXML could have incorrect octave information and bad enharmonic transposition (C#s becoming Dbs) fixed by @gregchapman-dev in #1752 (this is unrelated to a question recently here and in StackOverflow about the difference between transposing by P8 and by 12 semitones (thanks to @vanderstel for answering).)
  • Bug fix: corpora (including the built in core corpus) which were indexed using Python 3.13 could not be read on other systems (like Mac to Linux); a pathlib.Path was being stored in the corpus accidentally. Fixed by @mscuthbert in #1754

New Contributors

Full Changelog: v9.3.0...v9.5.0

music21 v9.3

Choose a tag to compare

@mscuthbert mscuthbert released this 29 Oct 09:28
2d93372

Music21's development continues with v.9.3, the first release since Myke Cuthbert's year-long sabbatical and first since June 2023. Thanks to the community for great patience, new developments, new docs, new contributions, and extreme resilience during a summer 2024 spam attack (the first time I took 4 days off out of cell-phone range, they struck!) and doc/homepage problems as the project changed homes.

Music21 v.9.3 is the first release version to officially support both Python 3.12 and Python 3.13. It will probably also be the last to support Python 3.10 and the last to have primary compatibility for numpy v1 and matplotlib v2. The next version will move to the latest major versions of those libraries (if all goes well!) and work to take advantage of their new ecosystems. (However, there are some good PRs waiting to be merged, so there may be one more release before breaking compatibility)

It is designed to be mainly backwards compatible with v9.1 (the first v9 release) but there are a few little things that fix common errors that are not strictly backwards compatible.

This is a minor release with no major new features or changes, mostly bug-fixes, new compatibilities, fixed docs, etc. I want to single out @TimFelixBeyer for contributing a number of optimizations and speed ups, along with many new and long-time contributors (new contributors listed below).

New Home: Old Gratitude

This is the first version of music21 released since I left being a prof at MIT (my wife has been a professor of music at University of Hawai'i since just before the pandemic and the commute to Boston was too long; she supported my career for a decade and I'm proud to be able to do the same for her). I want to thank my colleagues, staff, students, and donors at MIT who helped music21 through its first nine versions. I'm still in the process of "unpacking the boxes" at https://www.music21.org/music21docs/ but things will go well. And thanking my co-founders and fellow music theory nerds at https://www.artusimusic.com/ for knowing the value of music21 as part of our ecosystem there.

What's Changed

New Contributors

Full Changelog: v9.1.0...v9.3.0