Saturday, June 8, 2019

music21 v5.7 released

Music21 v5.7 is the fourth and final release in the v5 series. It brings under the hood fixes -- lots of bug fixes and speed ups and some new features -- from 126 commits since last October.
Download by running from command line:
pip install --upgrade music21
This is the last release of the v5 series so that work on v6 which may bring some backwards incompatible changes -- all deprecated features will be removed, as will support for Python 3.5 (by the time v6 is released, Py3.8 will be out and this keeps w/ music21 policy of supporting the last three Python releases). The release of v5.7 also marks the End-of-Life for music21 v4 (the last release to support Python 2.7); if someone wants to continue supporting v4/Python 2.7 in music21, please let me know, but I'm so happy with how quickly almost all of us have moved to Python 3. Looking forward to major tablature improvements, SMuFL support, and much faster development thanks to "f-strings" in v6.
The music21 user community continues to be active and robust as attested by the number of contributed features below. Thanks for keeping me sustained during my non-music Admin time! Among the most notable improvements are (in reverse chronological order):
  • Type hints on major objects and functions in the library and the promise of more (once Py3.5 is dropped) soon. Those who use fancy IDEs like PyCharm will reap major bug checks!
  • The most extensive typo-checking / spell-checking / linting ever done to music21 -- the code now has that new car smell.
  • Stream.measures(4, "5a") -- measure suffixes work in many more places in the code.
  • Pizzicato notes export properly in MusicXML
  • Chorale metadata improved (thanks to @doctor-schmidt!)
  • Improvements to MEI accidental handling (kudos @raffazizzi)
  • KeySignatures work better in multi-voice contexts (thanks @pconerly)
  • Bugs that made .getContextByClass() sometimes inconsistent (especially with forward searches) fixed.
  • Harmony objects (ChordSymbols, etc.) sort before Notes so that the harmony of a note at the offset can be found easier. And proper musicxml offset support (thanks @a-papadopoulos)
  • Chord.notes gives direct access to the underlying Note objects that make up a Chord. Chords also get a good __eq__ test.
  • MuseScore 3 support (thanks @YoWenqin)
  • Accidental fixes for ABC (thanks @dvdrndlph)
  • Added Neo-Riemannian analysis features (thanks @MarkGotham) and triads can now know which hexatonic system they belong to.
  • Fixes to MusicXML chord input.
  • Barlines now use "type=double" instead of "style=double", since in v6 they will get full style.Stylebehavior.
  • User's Guide gets the long awaited Chapter 58 on Sites and Contexts for advanced users.
  • Clefs get a .name property so that the class does not need to be parsed.
  • Grace notes no longer cause obscure bugs in Stream.makeNotation().
  • A bug in Interval.direction for some perfect intervals is fixed (thanks @ryaanahmed and www.artusi.xyzteam for identifying the bug)
As always, I want to acknowledge MIT Music and Theater Arts and the School of Humanities, Arts, and Social Sciences for encouraging the development of music21. Founding contributions to music21 were made by the Seaver Institute and the National Endowment for the Humanities.