Projects: Polyhymnia



Timeline: Dec. 2007 – Jan. 2008
Application Type: MIDI sequencer
Status: Stalled
Technologies: Java, MIDI
Partners: None


One of my hobbies is home recording, and to the end I use MIDI a lot. It's useful for sequencing drum tracks and sketching out the orchestration of a song before I record anything. Unfortunately, most of the free or open-source MIDI sequencers lack features that I find useful.

Toward the end of 2007, I decided to write my own editor. Doing so would also give me insight into the MIDI file format. I picked Java because it was portable, so I could write the program and use it on any machine (Mac or PC) I happened to be mkaing music on. I started coding, first a prototype to open a MIDI file and read out its MIDI events to the console, then a GUI application to edit the notes. I got pretty far on the project before I found a sequencer (Reaper) that did almost everything I wanted. This new development, coupled with lacking features in Java's MIDI library (it cannot, for example, use SoundFont files to playback MIDI tracks) led to to abandon the project. With my personal interest in the project's completion diminished, the project lingered and finally development stopped.

It's an interesting project, because the GUI frontend essentially acted as a 'translator' between the user and the MIDI file specification, and this was reflected in the class architecture. The project gave me a change to learn a lot about user interface / GUI coding (I probably learned more about those topics than MIDI), and a chance to use a carefully thought-out architecture. I may come back to it someday, as even Reaper is not perfectly suited to my needs. I'd have a good starting point, because the MIDI classes I wrote (for notes, events, tempo changes, and so on) are still pretty solid and a good place to start from.