I recently had need for a (preferably web-based) program to help teach the basics of Chorale/SATB writing. I couldn't really find anything in the cheap/free category. HarmonyBuilder looked cool, but wasn't web-based, and cost Real Money™.

Being a programmer, I naturally figured "How hard can it be to code this myself?". To keep things simple, I limited the program to 4 bars of quarter notes with no accidentals.
    (Internally, the code actually deals with the full chromatic system, but the UI for working with accidentals and scrolling adds a lot of complexity, so I haven't done it... yet.)
It's written in HTML 5, and I've targeted Firefox. The code won't work in IE, and not all the features work in Chrome. I don't have a web server, so it's all static code. That made things like "File Save" particularly interesting to implement (the HTML 5 file system is essentially useless at this point).

This is all alpha software, guaranteed to be buggy. It won't crash your machine (it doesn't do anything malicious), but if you try the audio playback in Firefox, it's likely as not to kill the session. As Wonka says, 'Little surprises around every corner, but nothing dangerous."

If all this hasn't scared you off, check it out: http://webs.lanset.com/dcuny/satb/satb.html

Even if you don't like part writing, it's sort of cool to try stringing together chords. One wrong move, and a spiderweb of errors appear, pointing out parallel fifths and octaves, similar motions and unprepared 7ths. It's cool shifting stuff around and seeing what happens.

Hrm... I should probably include some hints on using it.

When the page initially loads, if the music doesn't initially render, just click on it and it'll appear.
    (Before you tell me - yes, I need to attach a callback to the load event.)
You can click on notes and drag them up and down. Click on the following beat to add another chord. If you want to hear a chord, press the 'P' key. (Don't be surprised if your browser disappears!).

The Save File feature is a real hack. For your safety, JavaScript can't write to your hard drive. So clicking the Save File button causes a link to be displayed that's got the saved version of the music in it. To prevent the browser from opening the text file in another tab when you click it, it's Base64 encoded. So you'll (hopefully) be given a dialog to save the file. You'll want to rename the file, since there doesn't seem to be a way to overwrite the default name the the browser gives it (derived from the Base64 encoding - bleah!)

The "wizard" comes from the ClippyJS library. I still haven't figured out how to make it work the way I want... Yes, "Clippy" is an option, and he's really just as irritating as you remember. If you need, you can click and drag him to another location on the screen.

Also, take the error with a grain of salt. Just because I've implemented a bunch of rules doesn't mean they've been implemented correctly.

Let me know what you think!


-- David Cuny
My virtual singer development blog

Vocal control, you say. Never heard of it. Is that some kind of ProTools thing?