The sorry state of musical software under Linux.

This is going to be a rant on how doing anything music related under Linux currently works very, very bad. Perhaps I shouldn't be writing this since I don't have the time or skillz to help out in improving it any (so anyone interested in posting a comment to that regard should know that I already know ;-P), and because I've done it beforebut let's just ignore that for a few seconds. Hah.

I've been a musician since I was 7 years old (well, a bit less if you don't count the first years where I was only learning how to read music and not playing an instrument (the flute) yet). I've always loved doing it, since music is a great way to express one's emotions and to relax, in my opinion. Being able to produce beaty is also extremely satisfying, and I just love music (in a John Miles sort of way).

When I started to get into computers at the age of 14, one of the early things I did, even before doing my first BASIC program, was to play with musical software. I fondly remember some old Commodore 64 program of which I have forgotten the name, which would allow me to put notes on bars and play them, which was cool at the time—even if it would not allow me to put more than three notes in one chord, since that was the maximum polyphony which the Commodore's SID chip would allow. Later, when my parents bought our first PC-based system—a 486DX4@100Mhz—I moved on to Finale1. As a musical notation program, Finale is unsurpassed. It doesn't have a Linux-version, but there is lilypond.

Of course, writing down music isn't everything. Any serious musician would also want to play the music he's written, either by having the computer play it itself, or by sending it to a MIDI device. This is usually done through a (hardware or software) MIDI synthesizer and some bit of software called a Sequencer. Traditionally sound cards came with hardware MIDI synthesizers on them, but as computers became more powerful (i.e., after the Sound Blaster 16-era), hardware MIDI synthesizers were replaced by software MIDI synthesizers that had their wavetable on disk and (when playing MIDI) in RAM. That doesn't require huge gobs of ROM chips on the sound card, resulting in either less expensive sound hardware and better MIDI playback (because software wave tables are usually larger than hardware ones).

So what's the issue? Everything.

While lilypond is nice, and (it has to be said) produces very beautiful output, the interface is way too cumbersome. I mean, what is the clearest thing to read? This:

r4\< e,8-. r8 r4 e8-. r8\!

or this?

graphical version
of the above

They represent exactly the same thing, yet someone who knows music needs a split second to decode the below but a few seconds for the above (if they understand lilypond's syntaxis). In fact, at first I thought that I had done something wrong in invoking lilypond-book to produce that snippet, because I had misparsed the code above (which, incidentally, is one bar of some actual music that I have in my ~/data/audio/lilypond directory)

The plain text interface certainly does have some advantages, but IMO the downsides by far outweigh the benefits. In general, lilypond is not well suited as a way to actually write music, as opposed to simply typesetting already existing music. I did actually follow a course on harmonics (although I never finished it due to lack of time); when writing some new piece, I find that it often far easier to do the actual writing on a piece of paper and then enter that in lilypond syntaxis, rather than getting distracted over the lilypond syntaxis while trying to concentrate on what chords I can and/or want to use. It is unnatural, and would look like a Japanese person being forced to read and write texts like 'gaka ga e o kaita' which then get postprocesssed into something like 'がか が え お かいた' (look ma, Unicode!). Or, in other words: why isn't there just an input method to write music? There are unicode characters for musical notes, you know...

When comparing lilypond to finale, it is not hard to understand that entering music in a graphical environment is just so much easier. When I last used it, Finale had four input methods: one with keyboard and mouse (use the numeric keys on the keyboard to enter the desired note length and the mouse to enter the pitch); one with keyboard only (use abcdefg etc. to choose the pitch, and the same numeric keys to enter the desired length); one with keyboard and MIDI keyboard (use the numeric keys to enter a desired note length, and just press a note on the MIDI keyboard to choose it); and finally, it can also quantisise music as you play it (which is the fastest, but least accurate, method to enter music). Lilypond only allows entering music with the keyboard directly, and then only displays notes after 'compiling' them, so that you cannot see your mistakes and typos until much later. I'm disregarding midi2ly, which converts MIDI files to lilypond input files in a reasonably good way; but Finale has MIDI import functionality as well, I do not consider that to be an 'Input Method' as such.

After having entered the music, a musician will want to do something with it. Have the computer play it, for instance, or print it out so that he or she can rehearse it and eventually play it themselves. Lilypond will do neither by itself; however, it can produce postscript, PDF, and DVI files which one can use to print, and/or MIDI files which one can have the computer play. The printouts are great, as I've said before; but playing the MIDI files is another matter entirely.

As I've explained earlier, playing MIDI used to be done through hardware. When I still had a working SB16-compatible card, I could play MIDI files on my computer perfectly fine by just using the driver for that sound card. Since I currently depend mostly on ESS1371-compatible cards, that do not havve any hardware MIDI synthesizer, however, that doesn't work. So I have to use software sequencing instead. On Windows, software sequencing is done by the sound card's driver. On Linux, there is no software sequencing being done by any driver, so it all has to be done in userland. In theory, that's just fine. Unfortunately, the implementation sucks.

The only software MIDI synthesizer available on Debian is timidity. On a 1.33Ghz processor, it requires approximately 60% of my CPU to play a reasonably easy MIDI file with a polyphony of only some 5 to 10 voices. Complex MIDI files are totally out of the question. And it gets worse; when one runs timidity -iA -Os, it will register itself as an ALSA device capable of playing MIDI, so that ALSA-using applications can play MIDI data by just throwing it to the relevant device. However, this requires far more CPU power, not even being able to play as much as two or three voices at the same time on my same system. If one knows that my last Windows-based system (a Pentium I at 166Mhz) was able to play much more complex MIDI files using the same ESS1371-based sound card just fine, it's not hard to see that timidity really (really) sucks.

As said, I probably shouldn't be ranting about this as much as I do, since I don't have the time to invest in making this any better. But if anyone feels inclined to contribute some to Open Source Software, and needs some ideas, these might be interesting things to consider.

1 I should add that, to my shame, I used an illegal copy of both afore-mentioned programs. I didn't really know any better at the time.