What is this?

JBusk generates a MIDI file containing backing tracks for a solo performer, in a sort of jazz-swing style. It bases its output on a file containing a chord progression, among other things. JBusk understands many of the chords that are widely used, and recognizes them by a variety of names (see below).

At present JBusk generates bass, drum, and piano stab tracks. The instruments assigned to the bass and piano tracks are configurable, but default to 32 (accoustic bass) and 1 (piano). At present the drum track is not configurable, either in pattern or instrument.

JBusk is extremely crude, and not remotely likely to be useful in its current form. However, if you have even a rudimentary knowledge of Java, you should be able to customize it to produce output more to your taste.

Installation

Unpack the archive jbusk_dist.jar into any convenient directory, using any unjar or unzip utility. The archive contains source code, the executable JAR file jbusk.jar, and an Ant script to rebuild the executable if you change the source code.

How to run JBusk

JBusk can only be run from the command line, and requires a modern Java run-time. The usage is:
java -jar jbusk.jar config_file [midi_file]
The file jbusk.jar should be in the same package as the file you are reading; put the full path to this file on the java command line if it isn't in the current directory.

The last argument, midi_file is optional. If it is given it specifies the name of the output MIDI file; if not, the output goes to a file jbusk.mid.

The configuration file specifies the chord progression to play, and various MIDI settings, as described below.

Configuration file

The configuration file contains entries of the form
name=value
Each entry must be on one line, however long it is. The most important entry is chords=, which is discussed in a separate section below. This sections describes the other configuration file entries. Sample configuration files are included with the software, in the samples directory.

qpm

Quarter-notes (measures) per minute (default 100). JBush only understands common (4/4) time, so the tempo in bars per minute is qpm/4. Sensible values of this parameter are 60-150 or so, although it works best in the range 70-110.

bass_velocity, percussion_velocity, piano_velocity

MIDI note velocity for each of these tracks, in the range 0-127. Defaults are all 100, but this produces a rather overwhelming bass on some systems, so experiment for best effect.

bass_instrument, piano_instrument

MIDI program codes for these instruments. A program change event is coded at the start of the output file to set the right instrument. At present, the drum assignments cannot be changed.

bass_octaves

Range over which bass notes will be generated. A value of 2 is the default, and anything else probably won't work.

syncop

When syncop is 0, only the downbeats are played in the bass and piano tracks. This is very dull. The larger the value of syncop, the more off-beat notes are played. The maximum value is 10. Best results are obtained when this parameter is in the range 1-3.

piano_presence

Controls the frequency of piano stabs; the range is 0 to 10. Best results are obtained with values 2-5, but this depends very much on the tempo.

crash_bars

The number of bars between cymbal crashes. Values of 4 and 8 work quite well. To disable cymbal crashes, simply set a large value, e.g., 1000

Chord names and progressions

The chord sequence to be played is determined by the value of the parameter chords in the configuration file. The chord sequence is one or more chord names separated by vertical bar characters (|). Each bar character represents a bar; there can be at most four changes in a bar. Changes must correspond to downbeats (the software provides no way to set an off-beat change).

For example, to specify one bar of C (major), one of F minor, and one of E# (major):

chords=C | Fm | E#
Unless otherwise obvious, a chord sounds for one (quarter note) measure, or until the end of the bar, whichever comes first. So this sequence:
chords=C F | C C F
plays one measure of C, three of F, two of C, and two of F. To extend the duration of a chord without repeating its name, use the dash (-) character. For example, this sequence
chords=Cmin7 - - F 
plays three measures of C minor 7th, then one measure of F. Without the dashes, you would get one measure of Cmin7, then three of F.
At present, JBusk recognizes the following chord names.

minor, min, m - minor
maj7, major7 - major 7th
6 - major 6th 
7 - dominant 7th 
7b5 - dominant 7th with flattened 5th 
m6, min6 - minor 6th
min7,m7 - minor (dominant) 7th
dim, dim7 - diminished
m7b5 - minor (dominant) 7th with flattened 5th
b9 - major with flattened 9th
9 - major plus 9th
b5 - major with flattened 5th
aug, b13 - augmented (major with 5th sharpened)
If a note name is given without a chord name, a major chord is assumed.

Bugs and limitations

Where to start? Well, here's a few to be going on with...

Legal and copyright stuff

JBusk is copyright ©2003 Kevin Boone. I have made this simple program available in the hope that it will be useful. Source code is included. Please do with it as you see fit, except claim it as your own work. There is absolutely no warranty. Comments and suggestions always welcome, to kb@kevinboone.com.