Click here to read the technical report
BlueJam is an undergraduate research project conducted a the University of Kent. It is an algorithmic music generation program.
Using PureData (PD), Java and PDJ (Pure Data for Java), BlueJam was originally written to facilitate designing a heuristic algorithm for generating solos on the blues scale using evolutionary techniques.
Technical Blurb
The program provides a framework for running genetic algorithms to generate musical sequences. BlueJam represents music as a tree, which is then flattened to produce a serial melody. Following in the footsteps of classical training, BlueJam is not assumed to be an adept musician, so we afford it a better chance of good evolution by providing some kind of pointer, or template.
BlueJam then attempts to guide the evolution through the use of the provided templates, or “heuristic trees”. Heuristic trees are structures that represent what a “good” solo might look like, and can follow their lead.
BlueJam has an extensible architecture, so new fitness and selection algorithms can be plugged in to the program and used at compile time.
Interface
BlueJam has an interface to Pure-Data, which allows configuration and output of the algorithms in real-time over MIDI. This also adds an interactive component – during playback, the user can nudge the pitch wheel to indicate when they like what the algorithm is doing. This affects the elitism factor of the program, causing it to preserve good candidates.
Example Setup
BlueJam is designed as a framework, with extensibility and usability in mind, so setting up a simple evolution run is trivial:
SequenceParameters _sp = new SequenceParameters(
new JamParamters(Pitch.C,Scale.BLUES.getInstance(),120);
);
_sp.Jam.loadModels(PitchModel.getModels())
evolution = new Evolve(_sp,50,HeuristicCollection.getHeuristics());
// Listeners get the output of the evolution
evolution.addListener(this);
new Thread(evolution,"Evolution").start();
Ack
Other types of Blue Jam.