Wednesday, August 3, 2016

music21 v. 3 beta-3.0.6 released

A release candidate of version 3 of music21 (3.0.6) is available now as a package on GitHub. As a beta release it's still not 100% ready for general usage, so "pip install music21" will still install version 2.Get it at:https://github.com/cuthbertLab/music21/releasesThis is likely to be the Release Candidate also for music21 v.3. I've indicated several times in the past that music21 v.3 is the last release that I guarantee will continue to support Python 2. I now suspect that there will be a Python 2.7-compatible v.4, since Python 2.7 is still the shipping version of Python w/ macOS Sierra.Notes about the substantial changes in Version 3 have been posted on this list several times. The biggest changes are that .getElementsByClass() and .notes, etc. all return a new class called a “StreamIterator” which makes working with stream filtering much much faster than before, especially for very large streams. The new tree-based storage system is still too flaky to turn on by default except in a few cases, and will be deferred to Music21 v.4.Laundry list of items changed since 3.03-alpha:min Python 3 version is now 3.4 -- 3.3 should still work but is untested.Notes parsed from MIDI or transposed by a number of semitones now get a .spellingIsInferred attribute which indicates that they can change their spelling ("G#" vs "A-") as needed for the situation. This is incompatible behavior, but much improved!More User's Guide chapters...Lots of improvements to Braille output, and refactoring to make more improvements in the future possible. (Thanks Bo-Cheng Jhan! and esp. to Jose Cabal-Ugaz in the first place).Better documentation for Searching Lyrics (User's Guide, Chapter 28)MIDI will now handle part names, etc. that use unicode.Long files (>10 pages) in Musescore automatic PDF generation format now work (thanks Emily Zhang)TimeSignatures such as 2/4+3/8 display much better now.TimeSignatures import and export symbols ('common', 'cut', etc.) in MusicXML properly.Fixes for musicxml parsing where both voices and chords interact.configure.py now finds common MusicXML readers (Finale, Sibelius, MuseScore) on Windows!InsertIntoNoteOrChord works in more casesStreams are faster to calculate their own durationsMajor speedups to large makeMeasure() calls.A failure in makeTies now gives a warning instead of an exceptionThe old "musicxmlOld" format is removed. metronomeMarkBoundaries works better (thanks Frank Zalkow!)improved ability to specify how to quantize MIDI (thanks EZ!)improvements to automatic instrument detection.lots more MEI articulations work (thanks sonovice)Fingerings import and export to MusicXML better.noteheadParentheses work well now.Roman.fromChordAndKey gets quite a few more chords now.incompatible change: normalOrder instead of normalForm for chords -- gives the untransposed ordering of a chord -- this is the correct behavior; prior behavior is wrong.incompatible change: Stream.offsetMap is now a methodincompatible change: common.isStr() removed -- use isinstance(s, str) or (s, (str, unicode))incompatible change: key.KeySignature() no longer supports a .mode attribute. Use key.Key() instead. key.KeySignature() objects get an .asKey('major') etc. attribute.incompatible change: pitches lose ".getMidiPreCentShift()" method. Just call .midi instead!in case you missed what is new in v.3.0.3:

Python 3.5 compatible.

Splitting notes via .splitXXXX() is now much safer and more efficiently

Many, many parts of music21 can now use multiprocessing efficiently (see common.misc.runParallel())

BUG: Haydn Opus 74no2 was not actually ever in the corpus and has been removed.