Download JFugue
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 4.0+ also makes use of generics, varargs, and other 1.5 language enhancements. JFugue 2.1 still works with Java 1.3 and 1.4, and is provided below.
To make the most out of your download, you should check out The Complete Guide to JFugue!
Discussion Group and Forum: After downloading JFugue, you may be interested in joining the JFugue Users Discussion Group on Yahoo! Groups.
Important: The Tempo command has changed as of 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-4.0.2.jar Version 4.0.2 May 15, 2008 |
Get JFugue 4.0.2! This download contains the JFugue .class files. There are no source files or documentation in this file. See version information below |
|
jfugue-4.0.2-src.zip Version 4.0.2 May 15, 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-4.0.2-javadoc.zip Version 4.0.2 May 15, 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. |
Add-ons
MIDI to WAV Renderer
Save your JFugue creations as WAV files. I you're using instruments from another soundbank, creating a WAV file will ensure that your listeners hear exactly what you're hearing.
- First, get gervill.jar from gervill.dev.java.net. Gervill is an open-source audio synthesis engine.
- Include gervill.jar in your project's classpath. Read more about using Gervill in "Getting Started with JFugue"
- Next, get Midi2WavRenderer.java from this site.
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.2 - Bug fix release. May 15, 2008
- Changes to StreamingPlayer: now there are two methods, stream() and streamAndWait()
- stream() should take only a String or Pattern containing a single token, and will return immediately. You'll need to manually throttle the music you send.
- streamAndWait() can take a String or Pattern containing multiple tokens, and will take the time it needs to play each token
- DurationPatternTransformer promoted from org.jfugue.extras to org.jfugue
- The timing on streamAndWait() is still not 100% correct. Still looking into this. Suggestions welcome!
- Fix to Player(Sequence) and Player(Synthesizer) constructors, which weren't initializing the Player
- Fix to the transform() method of PatternTransformer, which wasn't returning the correct Pattern
- Re-introduced Player.allNotesOff() no-arg method
- 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
- 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

