JFugue - Java API for Music Programming


JFugue is full of interesting and useful features that let you experiment with music like no other programming tool lets you do. Information on creating Music Strings is available in Getting Started. All of the features are explained in detail in The Complete Guide to JFugue.

Features marked new are new as of JFugue 4.0.

Create music using JFugue "MusicStrings", an easy and quick way to specify musical notes and other events

  • Support for all audible MIDI events. If you can play it in MIDI, you can play it in JFugue
  • Easily specify notes, chords, chord inversions (new!), triplets and other tuplets (new!), ties, instruments, key signatures, controller events, percussion sounds, and more
  • Play your MusicStrings directly from your program
  • Save MusicStrings as text files, or save them into MIDI files
  • MusicStrings can be specified up-front, or played interactively/dynamically (new!)

Convert existing MIDI files into JFugue MusicStrings

  • Read and understand any of your MIDI files
  • Manipulating musical patterns and snippets from existing MIDI files

Manipulate Patterns of music

  • JFugue's Pattern class lets you change, transform, or measure pieces of music
    • Change octaves, scales, durations
    • Replace notes, instruments, chords, and more
    • Mutate musical patterns to come up with a variety of related sounds
  • Patterns can be easily recombined, looped, and otherwise manipulated
  • Patterns can be attributed with author, title, and other information new!

Easily and intuitively specify rhythms

  • Type or generate rhythm sections easily. For example: "ooO' ooO' ooO' OOO'", where "o" might represent a snare drum, "O" a bass drum, and ' a hi-hat
  • Create layers of percussion sounds to be played on the same MIDI channel

Express music as intervals instead of notes new!

  • Specify music using the steps between notes instead of the notes themselves
  • Generate actual music using a variety of root notes

Support for Microtonal Music

  • Easily create music like an Indonedian gamelan, or in an Indian classical or Turkish style - all you have to know is the frequency of the notes you want to play. JFugue manipulates MIDI events to do the rest

Send music to, or receive music from, other MIDI devices

  • Send your Patterns or any of your MIDI files to your MIDI keyboard or sequencer
  • Record music into Patterns as you play it on the keyboard
  • Develop music training software, or games that involve playing notes on the MIDI device
  • (Of course, you'll need a MIDI cable - try looking for USB MIDI cables)

Experience simplified use of MIDI

  • One line of code to play any MIDI file (well, you'll have to manage any exceptions)
  • MIDI generated from JFugue Music Strings can be worked with like any other MIDI sequence - add lyrics, track names, etc.

Anticipate musical events before they happen

  • Easily set up JFugue to alert you before a musical event is fired
  • Develop your own virtual instruments or interactive characters that need to begin some animated action before the notes actually sound

Excellent architecture maps any Parser to any Renderer, allows for easy and powerful reconfiguration

  • A Parser converts data into musical events. Examples: MusicStringParser, MidiParser
  • A Renderer converts musical events into something that can be seen or heard. Examples: MidiRenderer, MusicStringRenderer
  • New MusicXML Parser and Renderer for using MusicXML
  • Create your own Parsers and Renderers, and easily use them in your program!
    • Create your own Parser to convert music from ABC format
    • Create your own Renderer to turn musical events into LilyPond sheetmusic, or create a music-driven light show
    • If you do any of these wishlist items, please let Dave know!
  • Multiple Renderers can listen to an individual Parser