At the Sounding Edge: Music Notation Software For Linux

by Dave Phillips

When I was an untutored rock musician, I envied my colleagues who could read and write music notation. They could access and study material that literally was a closed book to me. So, at one point in my musical life, I dedicated myself to mastering the basics of notation. I've never regretted the effort I put into that study. I now advise my serious students that their careers in music will be considerably more flexible and lucrative if they devote time to mastering the conventions of standard Western music notation.

Linux-based musicians will be pleased to discover that their favorite OS supports some excellent music notation packages. As an heir to the UNIX tradition of high-quality printing, particularly TeX-based printing, Linux can lay claim to some of the most powerful notation software available for any platform. This is a bold statement to be sure, so over the next few months this column will present a series of profiles of some of the best Linux music notation software. I hope you enjoy this survey.

Some History and Definitions

Modern Western music notation is the result of a practice that has been evolving over hundreds of years. From its beginnings as a means of notating monophonic plainchant, the system has grown to accommodate a bewildering array of symbols, signs and objects. All of them are intended to convey a more-or-less accurate description of a composer's musical intentions regarding any number of instrumental and vocal resources. Learning to read and write standard Western music notation is a non-trivial task, and achieving fluency requires considerable time and effort. Fortunately, your computer can relieve many burdensome aspects of music composition, manuscript preparation and score printing. All you need is your machine and the right software for the job--the right Linux software, that is.

Music notation software can be classified into the two overlapping categories of music scoring and music typesetting. Scoring software may be thought of as the composer's assistant, that is, the virtual music manuscript. A GUI usually is associated with software in this category, and it typically presents a graphic representation of a staff display and a palette or palettes of common music symbols. The interface may be controlled with the mouse; the computer keyboard; an external MIDI device, such as keyboard, MIDI guitar or wind controller; or any combination of those controls. In addition, it usually is possible to import a MIDI file for conversion to notation.

To work with music scoring software, the user first selects notation objects from a symbol palette and enters them onto a staff display. This often occurs with real-time audio as notes are placed on the staff. Playback usually is available whenever the user wishes to audition his work from any point in the score. When the notation is complete, it can be saved or exported in a variety of formats, such as PostScript and Adobe PDF, for printing; a MIDI file, for playing or editing in a MIDI sequencer; or MusicXML, for interchange with other notation programs. Linux music notation editors in this category include NoteEdit, MuseScore and the Rosegarden audio/MIDI sequencer.

Music typesetting software prepares publication-quality music scores. The user writes a specification file that encodes the details of his score. The file then is processed by the typesetting program. Output usually occurs in a scalable graphics format that can be printed with common printing tools and a PostScript-compatible printer. Given a powerful enough typesetting specification language, every detail of a score's appearance can be defined as needed for perfectly readable and beautifully printed music.

Linux has inherited powerful text preparation software from its UNIX lineage, including the TeX and PostScript formatting and printing environments. These tools were designed to render high-quality displays to high-resolution plotters and printers. It did not take long for the necessary fonts, macros, symbols and other elements to be combined to form powerful music typesetting packages. In fact, TeX is a required component for some of the applications profiled in this article series.

To a user familiar with the graphic displays of popular notation editors for Windows and the Mac, a specification language may seem like a poor way to deal with something as visual as music notation. Typically the Win/Mac notation editors fall into the category of scoring software, providing relatively less control over the finer details of score preparation. Preparing a music manuscript for printing is not necessarily a straightforward process. Note groupings, placement of accidentals, beaming requirements, stem directions and many other factors influence the appearance and usability of the printed score. The variations of those factors cannot be predicted and accommodated easily, not even by a computer. In the most flexible GUI-based scoring software, the underlying program logic must make decisions that affect the output. By contrast, a specification language allows a degree of output customization not commonly encountered in programs dependent on graphical interfaces. As we shall see, a music typesetting language such as LilyPond or Mup is easy to learn, and with a little practice, you quickly can enter complex scoring indications.

Music Notation File Formats

MIDI and audio applications enjoy the convenience of widely accepted standard file formats. Most audio software can load and save files in the common WAV and AIFF formats, and most MIDI applications support the import and export of files in the Standard MIDI File format, aka, MIDI files. Alas, until recently no standard format has appeared for the exchange of music notation data between music scoring and typesetting applications. Many notation programs import and export MIDI files, but the extent of that support varies. Although the ability to read and write a MIDI file is a great amenity in notation software, the MIDI file format simply is not a substitute for a full-featured exchange format for the display of music notation symbols.

Recently the MusicXML format has been promoted as a universal music notation file format. MusicXML has much to recommend it. It is an open and humanly readable format based on the popular XML mark-up language; it is free of cumbersome patent and royalty issues; and it already is supported in dozens of commercial and free music notation programs. If you need to move your music notation between applications or platforms, consider saving it in the MusicXML format.

As Easy as abc...

My first profile in this series is devoted to the wonderful abc notation system. abc is a free and open-source music notation specification language originally designed to provide a means of notating monophonic melodies in simple ACSII text. It has evolved into a flexible environment capable of representing polyphonic compositions, with processing extensions available to add multiformat output and MIDI realization. A large community of users has grown around the abc software family, and many example scores are now available on-line that demonstrate the power of this simple but useful language. abc is licensed under a Creative Commons license.

Building abc

There is no abc package per se. All that is required to set up a complete basic abc system is some knowledge of the language, a text editor and one or more of the many available abc file format conversion tools. The language details are described in the abc Standard available from the main abc Web site (see Resources). A common editor such as vi or emacs is all that is needed to write an abc file. After the file has been written, it can be converted to a standard MIDI file using abc2mid or to a print-ready format using abc2mtex (MusicTeX), abc2ps (PostScript) or abc2pdf (Adobe PDF). A native abc format player (playabc) also is available. Those applications can be downloaded from the main abc Web site. You need to build and install them from their source code, but most follow this simple command sequence:

	gcc -o progname progname.c

The abc support utilities are simple programs with no unusual dependencies. If you receive fatal error messages while compiling them, you may not have a complete C programming development system installed. Consult your distribution's package management system for details regarding installing the C development packages, often called devel packages. The full AGNULA/Demudi and Planet CCRMA systems include these required packages.

Using abc

For our first example we enter some simple abc code in a text editor, convert it to PostScript and MIDI files and play the native abc file with the playabc player. We start by encoding a simple scale, starting from middle C, in 4/4 time. The scale is played through once and then repeated. Open your text editor and enter the following code:

  T:A Scale In C
  C D E F | G A B c |1 c/2B/2A/2G/2 | F/2E/2D/2C/2 :|2 c4 ||

Here's what's going on in this code. First, we have a header that supplies various informative and notation-specific details:

  X A reference number
  T Title
  C Composer's name
  M Meter
  L Default rhythmic unit
  K Key signature

A series of notated pitches and rhythms follows the header, with measure lines indicated by the | and || symbols. Repeat signs are represented by the |: and :| markers. The notes extend from middle C (C) to an octave above (c), with first and second endings indicated by the |1 and :|2 symbols. The default rhythmic unit (L:1/4) is in steady quarter notes until the endings. Eighth-notes are indicated here by the /2 marker, and beaming is accomplished by grouping the notes without spaces. When printed, this code:

	c/2 B/2 A/2 G/2

would result in a series of unbeamed single eighth notes. This grouping:


represents the same notes beamed (see Figure 1).

Save this file as, and then use the abc2ps program to format it for PostScript output. The following command processes and produces a PostScript file named

	abc2ps -o -O

Figure 1 illustrates the output as seen in the GhostView PostScript file viewer.

Figure 1. A Simple Scale from abc

Now, let's create a MIDI file from the same abc file. We need the abc2midi utility from Jim Allwright's abcMIDI package, which we use in this manner:

	abc2midi -o first-test.mid

Our new MIDI file now is ready for use within any MIDI composition and editing environments, such as MusE or Rosegarden. Incidentally, the abcMIDI package also includes a utility for converting MIDI files to abc files.

You can play your new MIDI file with a player such as TiMidity, pmidi or ALSA's aplaymidi. If you are profoundly short on resources, you can play the native abc file ( with Don Ward's playabc program. playabc's output goes only to the PC speaker, but in the absence of any other sound-producing hardware, playabc can be a welcome utility.

By now it should be apparent that using abc involves a number of separate programs. Fortunately, GUI front-ends are available to simplify the configuration and use of the individual tools. Figures 2 and 3, respectively, show off Wil Macaulay's Skink GUI, which requires Java, and Jean-Francois Moine's tkabc GUI, which requires Tcl/Tk. These programs bring together the components needed for a complete system to edit, display and render abc files, putting all the needed tools into one container.

Figure 2. The Skink abc Editor

Figure 3. Tkabc

Closing Remarks

abc can be used for almost any purpose requiring standard music notation. Its active community has extended the original utility to notate unusual instruments, such as the bagpipe or the dulcimer, process MIDI file I/O and accommodate complex polyphonic voicing. Many excellent abc scores are available on the Internet, so many that tools have appeared for indexing and locating them on-line. The language is easy to learn and use, the supported output formats provide high-quality printable scores and the specification continues to evolve. abc is a fine example of distributed development and is a highly recommended addition to the Linux sound and music software collection. I look forward to its continued growth.

Load Disqus comments