Music Notation Software

FOMUS is a open source software application by David Psenicka that automates many musical notation tasks for composers and musicians, facilitating the process of creating professionally notated scores by allowing the user to separate attributes such as times, durations and pitches from the representation of them in conventional music notation. It is especially useful for composers who work with algorithms and computer music software languages/environments such as CM/Grace, Pure Data and Lisp. It can also be used to import data from MIDI files into a graphical notation editor or creating scores from scratch using text files.

Input of musical events is narrowed down to a small set of basic attributes: time, duration, pitch, a list of marks and an optional dynamic level. Measures are treated as containers with time offsets and durations. After a score has been created, it can be entirely renotated with different rhythmic values (e.g., eighth notes instead of quarter notes) or in a different meter (e.g., 5/8 instead of 4/4). A score for percussion ensemble can be renotated with different layouts using single or multiple staves, or entire blocks of music can be easily shifted by any value (e.g., an eighth note or one third of an eighth note triplet). As the software develops the user will have multiple specialized algorithms to choose from for any given task and will be able to tailor the program to his/her own style or aesthetic. If desired, many automated tasks can be switched off or overridden by the user, the goal being to allow varying levels of control and flexibility over the output.

The software is implemented as a shared library, and can be used in programming environments such as Lisp or Common Music or as an external in graphical programming environments such as Pure Data. It can also load files written in FOMUS's native file format and import data from other file formats (such as MIDI). Once the composer loads or inputs his/her information, FOMUS outputs a file (or multiple files) in one or more different formats suitable for importing into a graphical notation program such as LilyPond, Finale or Sibelius. The user can then load the output file into one of these programs and make further edits to produce a finished score. FOMUS thus determines symbolic aspects of notation while leaving issues related to graphical layout and positioning to another program where this type of editing can be done. The library can easily be extended to work with other programming environments and its plugin-style architecture allows the user to modify, add to or replace parts of its functionality.


7/5/2011 Version 0.1.18-alpha released. Fixed many bugs and added an `untie' algorithm to simply notation with complex rhythms.
4/12/2011 Version 0.1.17-alpha released. Fixed compiling errors with Boost 1.46.1 and bugs involving measure barlines, tempo markings, mark events, and several other issues. Added a default `all' metapart for easily adding certain things (like tempo markings) and some more dynamic marks.
3/20/2011 Version 0.1.16-alpha released. Now compiles properly in Fedora 14.
2/7/2011 Version 0.1.15-alpha released. More bug fixes, including one in Windows that caused executables (like `lilypond.exe') to be called incorrectly.
12/17/2010 Version 0.1.14-alpha released. OS X binaries should now run on PPC, Intel 32-bit and Intel 64-bit machines. Fixes a bug involving calculation of time signatures in compound meter and another one involving how clef signatures are output to `.ly' files, along with several other minor corrections.
12/8/2010 Version 0.1.13-alpha released (source code only). Fixes a compile-time error caused by a recent change in Boost's API.
12/4/2010 Version 0.1.12-alpha released. Includes major fixes (since the last rc6 release) involving compound meter/time signatures, detached marks and mark events, as well many minor fixes and more documentation additions and revisions.


Following is a partial list of tasks or notational features that FOMUS automates:

  • Quantization (FOMUS chooses the notation that provide the “best fit” to the time/duration data given to it)
  • Rhythmic notation (including beams) and placement of tuplets
  • Note accidentals
  • Voice selections (FOMUS chooses which voice a note or group of notes belongs to)
  • Staff and clef selections (FOMUS chooses which staff and/or clef a note or group of notes belongs in based on which instruments are selected for the score)
  • Transpositions (FOMUS transposes parts automatically based on which instruments are selected)
  • Octave signs (based on which instruments are selected)
  • “Pruning” of overlapping note events
  • Metrical divisions
  • Score layouts (parts in orchestral scores are ordered and grouped automatically)
  • Help with trills, tremolos, harmonics, and other score symbols (based on which instruments are selected)


Input files and environments that FOMUS currently works with:

  • Command Line (MIDI and `.fms' files)
  • Lisp
  • Common Music/Grace
  • Pure Data
  • `.fms' Text File (FOMUS's native file format)
  • MIDI Files

FOMUS currently outputs the following file formats:

  • MusicXML (for import into graphical notation programs including Sibelius or Finale)
  • LilyPond
  • `.fms' Text File (FOMUS's native file format)

Planned Future Developments

  • Harp Pedals, Fret Diagrams and other instrument-specific features
  • MusicXML Input and other inputs/outputs
  • Meter Detection, Key Signature Detection and other algorithms necessary for a complete automatic notation library

Current Version

The current version of FOMUS is 0.1.18-alpha. A beta test release is expected sometime in the near future.


Binaries builds of the current version can be downloaded for the following architectures:

Simply run the installer app and follow the instructions to install FOMUS.

Source Tarball

Older Versions

Download older binaries and source code.

SVN Repository

Browse the repository here.

The SVN repository isn't recommended since it is often unstable and has many more dependencies than the source package. If you really want to compile from the repository source see the “Install” section of the documentation for instructions.

No screenshots at the moment.


Click here to browse the documentation on-line. Although much of it is incomplete at this point, there are many examples in several different languages/formats (Lisp, Common Music and FOMUS's native file format) that show how to control FOMUS's features.

Mailing List

Click on this link to subscribe to the fomus-user mailing list. The traffic is fairly low. This is the place for announcements, discussions, features requests, and bug reports.


FOMUS works directly with the following software/file specifications:

FOMUS is also used as a backend in the following software packages: