JFugue - Java API for Music Programming

Download JFugue

(After downloading JFugue, you may be interested in joining the JFugue Users Discussion Group on Yahoo! Groups)

JFugue 4.0 requires Java 1.5.0 at a minimum. A lot of Java Sound bugs were fixed in Java 1.5, and JFugue takes advantage of those fixes. JFugue 2.1 still works with Java 1.3 and 1.4.

To make the most out of your download, you should check out The Complete Guide to JFugue!

Important: The Tempo command has changed in JFugue 4.0. It now represents beats per minute (BPM) instead of microseconds per beat, or pulses per quarter (PPQ). BPM = 60,000,000 / PPQ

jfugue.jar
Version 4.0
May 1, 2008
Get JFugue 4.0! This download contains the JFugue .class files. There are no source files or documentation in this file.
jfugue-src.zip
Version 4.0
May 1, 2008
This contains the JFugue source code. You only need the source code if you want to make changes to it, or if you want to see how JFugue works.
jfugue-javadoc.zip
Version 4.0
May 1, 2008
This is a zip of the JFugue JavaDoc, also available online here.
jfugue-2.1.zip
Version 2.1
September 9, 2006
Download JFugue 2.1 only if you are restricted to using Java 1.3 or Java 1.4. This download contains the JFugue .class files, source code, and JavaDoc.

License Information

JFugue is distributed under the LGPL license for all development purposes.

To get the most out of JFugue, and to show your support, please purchase The Complete Guide to JFugue - it's an excellent value that really helps you use JFugue to its fullest potential.

Version Information

JFugue 4.0

  • Changes to Tempo
    • Change: IMPORTANT - Tempo has changed. It now represents beats per minute (BPM) instead of microseconds per beat (or pulses per quarter, PPQ). BPM = 60,000,000 / PPQ
    • New: Constants defined for Tempo: T[Adagio], for example
    • New: public static final constants defined in Instrument, Note, Controller, and Tempo, to facilitate compile-time checking when creating object instances
  • Changes to Note parsing
    • New: Chord inversions
    • New: Triplets and other tuplets
    • New: Supports double-sharp (##) and double-flat (bb) notes
    • Change: Duration for 128th note is now "o" instead of "n"
  • Changes to the MusicStringParser and other Parsers/Renderers
    • Change: Improved MusicStringParser - quicker, and easier to understand and modify
    • New: JFugue Elements (Note, Tempo, etc) now have verification strings for verifying MusicString parsing
    • New: Support for MusicXML through the MusicXmlParser and MusicXmlRenderer
  • Changes to the Player
    • New: Pause, stop, fast-forward, or rewind a Player
    • New: Player can be created with pre-existing Synthesizer or Sequencer
    • Fix: Player now ends play when the music actually stops playing, as opposed to when it expects the player to be finished based on the millisecond length of the sequence
    • Fix: Exported MIDI now plays at the correct tempo
    • Fix: Multiple improvements to StreamingPlayer. New stream() method for sending new bits of music, instead of adding music to a pattern.
  • Changes to Pattern and PatternTransformer
    • New: Pattern now has user-definable properties, such as Author, Date, etc. These are persisted to/from a saved Pattern file
    • Change: PatternTransformer's 'returnPattern' now accessed through getReturnPattern() method
    • Change: PatternTransformer no longer has getName(), getDescription(), getParameter() methods
    • Change: PatternFactory and RockPatternFactory have been removed. Rhythm takes its place
  • Updates to Special Features
    • New: IntervalNotation class lets you specify a piece of music based on intervals
    • New: Rhythm class can now control voices (in addition to percussion layers)
    • Change: MicrotoneHelper changes: It's now called MicrotoneNotation, and the notation has changed from [note] to <note>
  • Experimental MusicalEffects class for ornamentation
JFugue 3.2
  • Ability to generate music at runtime using StreamingPlayer
  • Improvements for Anticipator class
  • New EasyAnticipatorListener class
  • New TimeFactor class to encapsulate timing and tempo calculations
  • Removed 'abstract' from PatternTransformer methods that are intended for use with a UI

JFugue 3.1

  • Fixes for sending and receiving music to/from external MIDI devices
  • New IntelligentDeviceResolver for selecting an external MIDI device automatically

JFugue 3.0

  • Significant updates to JFugue 2.1, including API changes
  • Support for reading MIDI files and converting MIDI files to Patterns
  • Additional play() methods to support multiple parameter types
  • New MusicString capabilities:
    • Fix for dotted note durations
    • Support for Channel Pressure, Polyphonic Pressure, Pitch Wheel (Pitch Bend),
    • Timing token to support MIDI parsing
    • KeySignature token, and Natural note modifier
    • Layers, to ease the creation of simultaneous percussion sounds in one channel
    • Ties
    • Bar Lines
  • Ability to send music to external MIDI devices
  • Ability to receive music from external MIDI devices
  • New Rhythm class makes creating rhythms intuitive and easy
  • New MicrotoneHelper class allows one to create MIDI of microtonal music
  • New Anticipator class lets you know about musical events before they happen
  • Re-architecture to support Parsers and Renderers