Music Notation Software for Linux: a Progress Report, Part 1
The following article presents a status report on the development of five of the most active notation software projects for Linux. Most of them are works in progress, but all are well along on their development track and in varying states of usability.
The LilyPond Connection
Before launching into my reports, I must add a few words about LilyPond and its special relationship to the programs profiled here.
I've written about the awesome LilyPond in previous articles for this column, and I'm happy to report that the project is still alive and flourishing in its version 2.12 stable branch. LilyPond's development tasks and maintenance duties are managed by a sizable community of users and programmers, and it is indeed a work in full maturity. Many users have switched to it from other popular music notation programs, despite its text-format interface and command-line operation. LilyPond's output quality really is that attractive.
Because of its plain ASCII text interface, many users are on the lookout for an effective GUI for LilyPond. Most of the programs reviewed in this article can be considered as LilyPond front ends, but they vary in the kind and degree of their support for LilyPond. They range from specialized text-editing environments to notation-based sequencing, but in all cases, LilyPond is the engine that drives their notation capabilities. In some cases, a working knowledge of LilyPond is required, while others entirely hide LilyPond's presence from the user.
Music Notation Software: General Remarks
Music notation software poses some considerable problems for application developers. A full-featured notation program involves complex graphics mechanisms, flexible audio and MIDI I/O, and support for importing and exporting a variety of file formats. Additionally, developers must decide whether their software falls into the category of composer's helpmate or music typesetter. This distinction determines many important aspects of the program's basic design, especially at the user interface level.
Many packages combine these design factors more or less successfully, but the demands of professional quality typesetting require a dedicated program. Music printed from a general-purpose sequencer may be useful, but it is unlikely to compare favorably with the output from a dedicated music typesetter such as LilyPond.
The essential requirements for all music notation programs include various score layout functions, data entry methods, music symbol palettes, audio output support modes and options for printing the finished score. Basic programs may include only a limited subset of the possible features, while more professional software offers more features for greater control over the details of a work. Of course, with greater control comes greater complexity. The designers of music notation programs work hard to balance ease of operation with the proliferation of features.
Consider the needs of the following users: desktop composers may want only a simple notation palette, but they also might need support for MIDI input (file or real-time) and accurate rendition of that input. Composers working with advanced music (that is, not programming) languages may not need MIDI at all, but they definitely need features such as an extensive symbol palette, part extraction and perhaps even support for score manipulation by routines in Python or another general-purpose language. The commercial music software world offers programs that cover this range of needs. Finale and Sibelius are two of the best-known full-service notation programs in the Windows/Mac world, and many lower-cost and lesser-featured packages are available (search Google for "music notation software").
Music notation also shows up in modern audio/MIDI sequencers, but the implementation is necessarily restricted. A full-featured notation program needs to be a standalone application, although I must admit that the notation tools in sequencers such as Cubase and Rosegarden certainly are adequate for purposes such as lead sheets, chord guides and relatively short pieces. More ambitious work can be done in those programs, but their notation capability is only one component of a multipurpose design. I must note, however, that Rosegarden's developers have lavished attention upon the notation page in their sequencer, and it is also worth noting that Rosegarden includes an Export To LilyPond feature.
The Test Bed
I chose a plain-vanilla Ubuntu 8.10 (with kernel 2.6.27-9) system for the test platform. My decision was influenced in part by Ubuntu's up-to-date package repositories, where I found any and all required build utilities and other dependencies. Real-time audio support is not absolutely required, though audio output is likely to be enhanced in a real-time environment.
Denemo leads a double life as an editor-with-GUI for composing and editing LilyPond scores and as a notation-based MIDI composition environment. Recent work on Denemo has greatly improved the GUI and the program's overall stability, and many new features have been added to the 0.8.0 public release. Current development is intense, and the development crew is open to suggestions for new and even unusual features.
Denemo's UI has opted to use a menu system instead of graphic palette displays that hold the notation symbol collections. At first glance, this design may seem to work against a fast work flow, but the key to productivity in Denemo is its extensive use of keyboard accelerators. Almost every aspect of the program is available from the computer keyboard, and once users become familiar with the keyboard assignments, the work flow moves rapidly.
Data input also is possible via MIDI (real-time or file), an existing Denemo file or LilyPond score and real-time audio (!). Additionally, Denemo is extensible through the use of the Scheme programming language. Users can define and display new menu items for the program, giving Denemo a unique position among the LilyPond helpers reviewed in this article. Scheme is not a difficult language to learn (it's a Lisp varietal), and learning even a little can lend considerable power to your Denemo experience.
Denemo is filled with cool features for composers. You can switch freely between graphic and text-editing modes, figured bass and guitar chord symbols are supported, and its Scheme interface adds the potential for algorithmic composition. [Aside to the Denemo devs: this would be a very cool feature!] You can define your preferred playback applications for audio and MIDI output, including the rather remarkable ability to use Csound as its audio rendering engine. Thus, composers can access the incredible sonority of Csound through a standard notation interface. The Rosegarden sequencer can be used as a notation front end to produce Csound scores, but it provides no integral connection to Csound itself. As far as I know, only Denemo provides such a connection as an option for audio output.
Files can be loaded and saved in Denemo's own XML format or LilyPond's native format. You also can export to PDF. Alas, at the time of this writing, MusicXML is not supported for either import or export, but LilyPond's musicxml2ly utility can be used to translate a MusicXML file to a LilyPond file.
Past releases of Denemo have suffered from stability issues and a difficult learning curve. I'm happy to report that stability no longer appears to be a problem, and there's now plenty of useful and up-to-date reference material, example files and user-level documentation.
Frescobaldi comes to us from the developers of the outstanding lilypond-kde4 software. Frescobaldi is not a notation editor per se. Instead, it provides a specialized environment for editing scores in LilyPond's native text-based file format. The program supplies amenities such as syntax highlighting, on-line help (for LilyPond and Frescobaldi itself) and score previewing. Its user interface is polished and attractive, and the program is easily mastered.
The latest Frescobaldi requires an up-to-date KDE4, so it's not likely to be available in package repositories for older Linux systems (for example, 64 Studio 2.1 or JAD 1.0). It also is absent from my specified repos for Ubuntu 8.10, but as I mentioned earlier, that system is modern enough to accommodate a sufficient build environment. Any missing dependencies are resolved quickly via Synaptic, and I've had no trouble compiling and installing recent versions of the program.
I do have some suggestions for the developers. At present, the basic work flow requires that I save my edits before I can preview them. I'd like to see an edit mode with a one-click previewer that skips the explicit save, if such a mode is feasible. I have another quibble with Frescobaldi's printing capabilities. At the time of this writing, Frescobaldi prints only to a PostScript or PDF file. It would be nice to print to my system printer from the program itself. Finally, given LilyPond's ability to generate a MIDI file from its native file format, perhaps a playback utility could be added ?
Apart from that wish list, I like Frescobaldi and will follow its development closely. If you've been looking for a dedicated LilyPond editor (and would rather not learn how to use emacs), you should check out Frescobaldi.
Canorus began as a fork of the NoteEdit Project described in Part 2 of this article. At that time, it appeared that NoteEdit's programmer planned to abandon the project, so Reinhard Katzmann formed a new group of developers to carry the project forward. Canorus is the result of their efforts to provide "a free extensible music score editor [that] supports note writing, import/export of various file formats, MIDI input and output, scripting and more", and the beta release of Canorus 0.7 is their latest production toward that goal.
The Canorus Web site stresses that the software is beta quality. Although the development release introduces a number of features not found in earlier releases, it may not run so steadily as the public stable release 0.5. In short, the beta release should not be considered for serious work at this stage. You're welcome to check it out; the developers want reports from users, but if you ride on the edge, be aware of the risks.
Stable and development releases are available through the links on the Canorus Web site. Official installable packages are available for Debian and Windows, along with platform-neutral source packages in zip or tarball formats.
A full build requires that a few dependencies are met before you can compile the source code, including a recent Qt4 and the cmake utility in your toolchain. LaTeX and the LyX viewer are required to build the documentation, but the versions I found for Ubuntu 8.10 are unusable with Canorus, and I was unable to build the docs. Fortunately, the documentation build is optional, so don't worry if your build also fails with the docs—just continue with the process steps as listed above. Alas, you won't be able to summon the user-level documentation from the Help menu, but this lack is mitigated somewhat by the GUI's tooltips and the program's relative ease of operation.
A rantlet: I realize that I'm testing a beta version and that the documentation is likely to be compiled and built in to the finished public release, but I think it would be wise for developers to furnish documentation in a compiled format even in pre-releases. I'm surprised that a system as recent as Ubuntu 8.10 does not supply a working toolchain for building the Canorus docs, and I'd be happy to download the user-level documentation from the Canorus Web site. Whatever format is included for the final package, a simple HTML version on the Web site would be a happy addition to the documentation materials.
The installer did not automatically add a launch icon to my Applications menu, so I started the program by entering
canorus at an xterm prompt. No command-line help is available with either -h or --help. When Canorus starts, you'll see its splash screen for a few seconds, then the program presents a canvas with a single starter measure.
Canorus has embraced and extended the feature set originally found in NoteEdit. Outstanding features include an excellent input system for polyphonic notation, MIDI connectivity via the ALSA sequencer (that is, multiplexed MIDI I/O), scripting with Python and/or Ruby, a rich selection of standard symbols and support for user-defined events.
Canorus operates in either Select or Edit mode. In the latter mode, music symbols are entered onto and deleted from the staves (user-definable, of course) with the mouse and common emacs keybindings (Del to remove a selected symbol, Ctrl-Z for undo, Ctrl-A to select all and so on). Projects can be divided into separate sheets (Canorus-speak for the notation canvas), or separate sheets can hold different projects. Each sheet includes controls for MIDI channels and General MIDI instrument assignments. Context menus have been avoided in favor of pull-down menus, which may frustrate some users, but I find that the design leaves the screen relatively clear of clutter.
Regarding file support: you can import MIDI files and files in the MusicXML format. You can save your work to either the Canorus project archive format (*.can) or its XML-based document format, or you can choose to export it as a LilyPond or MusicXML file. You also can also export your work as a MIDI file or a graphics file in PDF or SVG format. Canorus prints your notation by filtering it through LilyPond. You can designate your LilyPond binary in the the Tools/Settings menu where you also can select your preferred PDF viewer (LilyPond's default output format).
Canorus is much like its excellent predecessor in its clear presentation and its overall ease of use. As I mentioned previously, the beta release wants testers, so if you're willing to take some risks, you can help with the development of this excellent program.
Similis sum folio de quo ludunt venti.
- Give new life to old phones and tablets with these tips!
- Memory Ordering in Modern Microprocessors, Part I
- Using Django and MongoDB to Build a Blog
- Tech Tip: Really Simple HTTP Server with Python
- Linux Kernel Testing and Debugging
- Readers' Choice Awards--Nominate Your Apps & Gadgets Now!
- RSS Feeds
- What Is Multi-Threading?
- An Introduction to OpenSSL Programming, Part II of II