27 January 2009

Qualities of Music Notation Software

I have officially decided that LilyPond is superior to all other music notation software, in terms of output quality. Since I have been using LilyPond for so long now, I am used to looking at high-quality printouts. When I look at scores produced by Finale or Sibelius, it's hard for me not to notice the inconsistencies and other problems they have. From what I've noticed, Finale does a little better than Sibelius, but not much.

The downside to LilyPond is that it is difficult to use. It takes a long time to type in all of the notes, articulations, etc. and not have the visual reinforcement to see if everything is okay. Heck, if Finale or Sibelius had the capabilities that LilyPond has, I might consider using them, because visual reinforcement is an absolutely huge thing, and it can save a lot of time.

So should I use the helper programs for LilyPond, that allow you to enter the notes while staring at them, get the visual feedback, and export the stuff to an LY file? NO! This is not visual reinforcement, it's just visual feedback. I would much rather be observing the music as it is going to look when I print it out. The other approach is just cheesy. Plus, these programs don't have a tenth of the capabilities LilyPond has. Do they help? Yes, but this kind of help is not helpful to me. :-)

I make the same case for using Finale or Sibelius, exporting to MusicXML, and importing into LilyPond with musicxml2ly. This is not fun, and to make matters more complicated, musicxml2ly understands MusicXML better than Finale or Sibelius, so the imports will not be clean. This is an unfortunate thing for those that want to follow this route.

So should I use jEdit with the LilyPondTool plugin? No, but I will admit that most beginning LilyPond users should use it. I can't stand jEdit: it is such a memory hog. I don't like to use text editors that are memory hogs. That's why I use Vim. Much nicer, and it responds instantly to every command.

But using Vim with LilyPond can be troublesome too. The editor is great, the Vim plugin and syntax highlighting for LilyPond are (mostly) great. That's not the problem.

I need a solution, most likely in the form of a Graphical User Interface, that knows more about LilyPond than LilyPond does itself.

LilyPond's language is very semantic and very flexible. However, these characteristics make LilyPond difficult to use for a large number of people. The paradigm of "listen to what the user types in, and respond accordingly" is not strict enough for the average computer user.

Users should have access to the complete capabilities of a program at their fingertips. Of course, this has been a usability issue from the birth of the computer. It's a big problem that needs to be solved eventually. The Microsoft Office "ribbon" isn't the answer, and is the "menu" approach it used to use, and so many other programs still use. What is the answer?

The path to discovering the answer lies in learning how to know what the user wants to do at any given moment.

In LilyPond's case, there is definitely a way to do this. At any point in an LY file, there is only a certain number of things you can do. Most of the time, you can't type two consecutive hash marks, unless it's within a string.

But there are also some tricky points. Since Scheme code can be directly embedded within an LY file, a Scheme parser would be needed. Programming languages are open, but the LY language is closed (AFAIK). If it's not closed (maybe it's not), then maybe a program could interpret it as being closed, but still allow this to be a runtime option.

LilyPond users need a program that disallows incorrect input. We want to bypass LilyPond's error checking. The program should be doing the dirty work, weeding out incorrect syntax by default. We don't have time to read LilyPond's error messages, go back and change our file, and try again. That takes too much time.

The user should immediately know if the note they are entering is in the correct octave.

I could continue this list. But hopefully that gives a better sense of what I need from LilyPond. LilyPond could not be easily rewritten. A program written from scratch that competes with LilyPond is unimaginable.

I need a program that provides a helping hand in creating music and doesn't assume the user has read the 1000+ pages of documentation. Some of this help can come from LilyPond itself, in the form of information dumps, but a sizeable amount would need to come from the program itself.

Through this program is currently nonexistent, I created a git repository a while back and pushed a README:

http://repo.or.cz/w/ripple.git

As you can see...it's codename is "Ripple".