What Music is Perl?
—Larry Wall, Chapter 2
MIDI (Musical Instrument Digital Interface) is a standard for representing music as a series of notes, rather than as raw audio data. MIDI is to raw audio (e.g., .au, .wav, or .aiff files) as vector graphics (PostScript) are to bitmaps (e.g., .png or .gif files).
With MIDI, you can make music without actually having to perform waveform synthesis, just like PostScript lets you draw circles without having to worry about trigonometry. For the purposes of this article, MIDI represents music as a series of events—where each event is basically “turn a note on or off.” These events happen at certain times, on a certain channel (what others call a “voice” or “track”), with a certain note number, at a certain volume. Most any computer with a sound card can play MIDI files.
When I first started reading the MIDI internals, MIDI seemed like an ideal format for composing music in Perl, so I set out to make routines for encoding to and decoding from the MIDI binary format. In August 1998, I uploaded to CPAN my first release of the imaginatively named “MIDI-Perl,” a mostly object-oriented interface to these encoding and decoding routines.
However, as I stood back from the pile of code, I realized that while I had created a fine object model for representing MIDI files, the most basic data structure, the MIDI event, was no more suited to musical composition than raw PostScript is for composing ...