Some notable changes since JMSL's 2008 release
Even though there have a number of prereleases distributed to Nick's students and bundled in MaxScore distribution (computermusicnotation.com), there has not been
a major JMSL release in quite some time! This new JMSL deserves to be called version 2. Here's a small subset of improvements since
the last official release. There are many more than this, but this is a pretty compelling collection, we think!
- Support for pure Java JSyn API. Please check the numerous source examples, tutorial, and the "Developers' Notes" page which compares the old API to the new one.
- Music Font support: If the Bravura font is located on your system, JMSL's ScoreFrame will use it to render scores. See http://www.smufl.org/fonts/
- SoundFont support: MidiInitPanel offers a "browse for SoundFont" button now which will let you select a SoundFont file.
Only appears if JMSL.midi is MidiIO_JavaSound. Only makes sense if device is Gervill. See jmslexamples.JavaSoundMidiExample
- New MIDI instrument editor panel. Supports choosing from a dropdown list of general midi instruments, names taken from the currently loaded
SoundFont. Other fixes: every time a new MidiInstrument is added in ScoreFrame, the default MIDI channel shown in the editor dialog increments by 1.
- Undo/redo stack for ScoreFrame redesigned to track every change. Uses disk cache to store/restore copies of score.
- Default JMSL.midi is now MidiIO_JavaSound (MidiShare still supported, however)
- Countless smaller features: new expression marks on notes (tremolos, etc), notes can have multiple expression marks, grace notes, glisses, notehead size and notehead color control, note stem visibility
- Improved Lilypond support.
- Converted almost all jmslexamples to new JSyn API. Built JSyn2 versions of classic JSyn circuits RingModBell and FilteredSawtoothBL.
- All Score rendering is done in double precision using Graphics2D
- RenderedMessageBean and listener in Score. This is really cool. You can attach a message to measure, staff, or note which will be interpreted
by a listener when the object is rendered. That message will cause drawing to happen near that object. See jmsltestsuite.RenderedMessagesTest
- MusicCurveRenderer interface allows user to execute custom line and curve drawing on Score, overriding the default implementations. See jmsltestsuite.MusicCurveRendererTest
- Score has user-settable top, bottom, left, and right margins now. Score layout right justifies measure layout so each line of music extends to same far right margin
- Score has subtitle field now, which is displayed below title, saves and loads to/from xml. First page of score displays title, subtitle, and composer at top
- PlaySelectedCluster score operator. Select notes and choose this operator from ScoreFrame menu to sound all selected notes at once.
- JMSL Preferences stores various default directories and user preferences in /.algomusic/JMSL_preferences.props
- JMSL now compiled to be java 1.5 compatible, no longer 1.2 target.
- ScoreFrame only scans for plugin classes which implement the new interface JMSLPlugin.
If you developed plugins that you expect to be scanned automatically and build menus in ScoreFrame,
you must recompile with "implements JMSLPlugin". JMSLPlugin is an interface with no methods declared.
It is used to mark exactly those qualifying classes that you want to be plugins.
- Phil Burk's new XML reader code support unicode
- Score annotation. Allows composer to write arbitrary comment attached to score. Not for rendering or display.
- JMSL Score supports JSyn2 InstrumentLibrary and lets user pick an instrument and a preset from a GUI.
- Note.setAccidentalVisibilityPolicy() with argument ACCIDENTAL_SHOW_NORMAL, ACCIDENTAL_SHOW_NEVER, ACCIDENTAL_SHOW_ALWAYS
- Mouse insertion of note picks up key signature now and will sharpen or flatten the note based on whether or not the staff level is affected by key signature.
- Reorganized menu items in Score Frame, renamed Transforms menu as Tools, moved a bunch of stuff from Score menu to Tools. WindowClosing no longer Quits
ScoreFrame. Closes score instead. Added Quit menu item.
Attempt to close last score pops up alert now.
- When score canvas active, typing w, h, q, e, s sets default duration for note input to whole, half, quarter, 8th, 16th
- On Windows, shortcut for Half transform is no longer H, it is F like on Mac. (Mnemonic: halF)
- New methods to control fonts and font sizes in Score:
score.setMeasureNumberFontScaler(3.0); // default is 1.5
score.setScoreTitleFontScaler(12.0); // default is 4.0
score.setScoreSubtitleFontScaler(8.0); // default is 2.0
score.setTimesigFontScaler(3.0); // default is 2.5
score.setTextFontScaler(1.5); // default is 1.5
score.setMeasureNumberFontName("Serif"); // default is "SansSerif"
score.setScoreTitleFontName("SansSerif"); // default is "Serif"
score.setScoreSubtitleFontName("SansSerif"); // default is "Serif"
score.setTimesigFontName("Serif"); // default is "Serif"
score.setTextFontName("SansSerif"); // default is "SansSerif"
There's a ton more bug fixes and features. Do the tutorial, look at the piles of source examples, read docs, ask questions on the JMSL Mailing List ( https://lists.columbia.edu/mailman/listinfo/jmsl )
Hoping JMSL unleashes great creativity in your life.
Nick Didkovsky, Jan 18, 2017, NYC
www.algomusic.com