My Languages
EE Editor

About Me
Charles Cuny
His Evil Twin
Tom Riso

One Ring

Euphoria Home Page
MAZ Sound Tools

Underscore: A Music Notation Editor

Screenshot of Underscore
Screenshot of Underscore 0.5a pre-alpha in action. It's a pity none of the buttons on the toolbar work yet.

What is Underscore

Underscore is a music notation editor that I've been working in. It's in the relatively early stages, and probably will never be completed. Underscore it written in the Euphoria programming language.

What's New

  • Printing Almost Works I can actually print a couple of bars. The barline logic is missing (as are the barlines), and it's still mostly broken.
  • Code Posted It's mostly broken, but I've posted it anyway. Enjoy!
  • Toolbar Added The combo is correctly filled with a list of known MIDI devices, but there isn't any MIDI playback support yet. And none of the other toolbar buttons work yet.
  • New Font I've created the Tin Pan Alley font to go with the program. It's based on a the Brahms font I found in a PDF file somewhere on the internet. I'm still working on the Ingrid font, but I'm having trouble with the scanner.
  • Better Grouping Logic Grouping is now a two-pass process. The first pass groups of eighth notes, and can deal with groups that contain a rest as the first or last element. The second pass builds beat-sized groups.
  • Automatic Beaming Beaming works (more or less) in both directions.
  • Added GNU General Public License. Underscore will be my first GPL application - once I get around to posting the code.
  • Win32Lib font optimization. The device's font was set and restored on every write - a very expensive operation. This caused Underscore to move like a slug when there were a lot of elements on the screen. Screen rendering is now quite fast. The hack isn't 100% correct yet, though...

Download Underscore Source Code

Brief Overview

The code is constantly in flux, but basically I took the idea from Noteworthy Composer that just about everything should be done from the (computer) keyboard. Almost every action has a single letter code associated with it. For example, press the C key to insert a clef on the staff:

Treble Clef

Press the C key again to select a different clef. Repeated pressing will toggle through all the clefs:

Bass Clef

Press K inserts a key signature:

Key of G

Press K again, changing the sharps to flats:

Key of F

And press K again toggles the flats back to sharps, and adds an additional sharp:

Key of D

Press T for a time signature:

Common Time

And press T again to toggle through the signatures:

4/4 Time

The blue note above the staff displays the current note's duration. The red block indicates the position of the cursor. Pressing Enter inserts a note at the cursor position; pressing Space inserts a rest. The following keystrokes alter the attributes of the note that is inserted at the cursor position:

  • Up: Move cursor up one step
  • Down: Move cursor down one step
  • 1: Set duration to whole note
  • 2: Set duration to half note
  • 3: Set duration to quarter note
  • 4: Set duration to eighth note
  • 5: Set duration to sixteenth note
  • 6: Set duration to thirty-second note
  • S: Add sharp to note
  • F: Add flat to note
  • N: Add natural to note
  • .: Add dot to note duration

Common Time

What's The Current Status

It's unlikely I'll get back to this program in the near future, if at all. The program works well enough to do some simple things, but not much beyond:

  • Basic editing
  • Multiple staffs
  • Saves/Reads files

In addition, the navigation keys are broken.

The following are missing (roughly in the order or priority)

  • Printing
  • Chords
  • Lyrics
  • MIDI Playback
  • Ties
  • Line Thickening
  • Part Extraction
  • Cut/Paste
  • MIDI file creation
  • Speed

Back to my home page.
Last updated on Tuesday, January 23