Download JFugue 5.0
Get JFugue and start creating programs that sing!
May 18, 2017, Version 5.0.9: Update to microtone calculations. Update to parsing broken chords. ChordProgression can now take chords with inversions (for example, "vii^^"). There is a new static method, Chord.isValidChord(String candidateChord). Update to Note.setValue(byte value) that makes sure the new value persists in Note.toString(). As always, additional tets cases.
March 24, 2017, Version 5.0.8: Added support for broken chords. Update to real-time player so each note comes with its voice and instrument information ("atoms"). Added Intervals.has(Note note) to check if given note is in an interval that has a root. Changed the $_ replacement string to $!. Read about this change on Medium.
April 22, 2016, Version 5.0.7: Fixed bug in MidiEventManager. Updated some Note methods to respond better if the note is a rest - considering creating new Rest class in the future. Removed RecombinatorDemo and RearrangerDemo. Introduced DefaultNoteSettingsManager.getInstance().setDefaultAdjustNotesByKeySignature(false) for those times that you don't want JFugue to automatically convert notes to fit a key signature (like when you're loading a MIDI file).
April 14, 2016, Version 5.0.6: Fixed bug where music seemed to play notes twice. Updated code for Controller Events with high and low byte settings. New capabilities for TrackTable, including working easily with Rhythms. Added human-readable strings for some Chords. Make Intervals.as() match ChordProgression.allChordsAs() and .eachChordAs(). New examples and demos that go along with released version of The Complete Guide to JFugue.
January 26, 2016, Version 5.0.5: New Token class and TokenProvider interface in org.jfugue.pattern, and Subparser interface now has getTokenType(). Pattern has add(String s, int repetitions) again. Added reset() to ManagedPlayer and onReset() to ManagedPlayerListener. Moved org.jfugue.mitools (Rearranger and Recombinator) to the Experimental sources. Spelled "harpsichord" correctly in MidiDictionary.
September 14, 2015, Version 5.0.4: Cleaned up class names for MusicXmlParser. The previous MusicXmlParser_R is now MusicXmlParser, and the previous MusicXmlParser_J is moved out. Please note that there is no current implementation for MusicXmlParserListener. JFugue still needs: a MusicXmlParserListener updated for JFugue 5.0, more thorough tests for MusicXMLParser, and a fix to a timing issue when reading music from an external device.
August 14, 2015, Version 5.0.3: ParserListener now has onNotePressed(Note) and onNoteReleased(Note) callbacks. MusicTransmitterToParserListeners can be used to receive keypresses from a musical keyboard in realtime. See MusicTransmitterToParserListenerListenForMillisDemo.
May 6, 2015, Version 5.0.2: Fix to key signatures when loading from MIDI
March 17, 2015, Version 5.0.1: Load and save Patterns, pattern.prepend(), create ChordProgression from named chords using fromChords(), chordProgression.distribute(), new SolfegeReplacementMap and Demo, new ChainingParserListenerAdapter and Demo
March 8, 2015, Version 5.0.0: All-new JFugue 5 functionality! We're still working on the MusicXML parser/listener, and code that lets you hook up JFugue to external MIDI devices (org.jfugue.devices).
Important Notes about JFugue 5.0
JFugue 5.0 is a from-scratch revision of JFugue. While you may find many similarities with previous versions
of JFugue, there are also significant differences. JFugue 5.0 is not a drop-in replacement for JFugue 4.x.
For an extensive look at the differences between JFugue 4.x and JFugue 5.0, read Differences Between JFugue 4.x and JFugue 5.0.
Despite the differences, JFugue 5.0 is a fantastic API! It is superior to previous versions of JFugue in
many ways, and it introduces new capabilities that make music programming fun and powerful. For more information,
read What's New in JFugue 5.0.