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 Finale
1. 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?

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.