Ekmelily – Notation of Microtonal Music

Ekmelily is an extension for LilyPond that supports the notation of microtonal music in the 72-tone equal-temperament system (72-EDO, Ekmelic System), as well as in the included sixth-, quarter-, and third-tone systems (36-,24-,18-EDO).
It defines Note names for all twelfth-tone degrees and supports variable notations in terms of predefined and user-defined Notation Styles. Each style uses a specific set of accidental symbols for the alterations up to the five-quarter-tone. See Alterations for details of the accidental symbols in the predefined styles.

Ekmelily requires LilyPond version 2.18 or higher. LilyPond is a free music typesetting program (part of the GNU Project) to automatically produce high-quality sheet music. It runs on GNU/Linux, OS X, and Windows.


See also the Ekmelos Font, as well as further files for Ekmelily and Scores with examples for the usage of Ekmelily.


  • Copy the file ekmel.ily into an appropriate folder, e.g. "LILYPOND/usr/share/lilypond/current/ly", with LILYPOND meaning the installation folder of LilyPond.
  • Copy one or both of the language files into the same folder as above:
    ekmel-en.ily for English note names, ekmel-de.ily for German note names; see Note names.
  • Install the Ekmelos Font if it shall be used for the accidental symbols in Ekmelily; see Fonts.


Add the following line near the top of your LilyPond input file:

\include "ekmel.ily"

and then optionally one of the \ekmelic*Style commands (or even both) for a predefined or user-defined notation style.

Predefined Notation Style

\ekmelicStyle STYLENAME

This sets the notation style STYLENAME. The default setting is arrow or the style specified with the command line option 1


The following styles are predefined (see Alterations for details of the accidental symbols):

  • arrowArrow notation
  • rhmRichter Herf / Maedel notation
  • simsSims notation  
  • sagSagittal notation' ' '
  • msagMixed Sagittal notation
  • wysWyschnegradsky notation' ' '' ' '
  • goGould notation for quarter-tones
  • gosGould notation for sixth-tones
  • gostGould + Stein / Zimmermann notation
  • stzStein / Zimmermann notation
  • stcStein / Couper notation
  • stvtStein / Van Blankenburg / Tartini notation
  • bosBosanquet commatic notation
  • fourDigit 4 notation
  • fernFerneyhough notation

User-defined Notation Style

\ekmelicUserStyle MYNAME #'((ALTERATION CHARACTER …) )

This creates a user-defined notation style with the name MYNAME, derived from the current style (usually a predefined notation style).

For each specified ALTERATION, a new accidental symbol consisting of one or more CHARACTERs is defined. For all other alterations where the previous accidental symbol of ALTERATION is found in combination with further symbols, this is also replaced by the new accidental symbol.

ALTERATION must be a rational number or one of the predefined Scheme symbols.
CHARACTER must be either a Unicode code point as an integer number, a character literal, or a string. Note: The code points supported by the Ekmelos Font are listed in Ekmelos.pdf.
If MYNAME is an empty string (""), the name of the current style extended with -user is taken.


The following example sets the predefined Stein / Couper notation (stc), and then modifies this into a user-defined notation with new accidental symbols for the quarter-tone degrees: sharp symbol with wiggly tail (code point U+E475) and filled reversed flat symbol (code point U+E480).

\ekmelicStyle stc
\ekmelicUserStyle MyName #'(
  (1/4 #xE475)
  (-1/4 #xE480))

or by making use of the corresponding Scheme symbols:

\ekmelicStyle stc
\ekmelicUserStyle MyName #`(
  (,SEMI-SHARP #xE475)
  (,SEMI-FLAT #xE480))

Please find further examples in the file user-styles.ly.

Additional Commands

Set the name of the current notation style as the output filename suffix for the current \book section.
Draw the name of the current notation style as markup.
\ekmelic-char #ALTERATION
Draw an accidental symbol according to the current notation style as markup. ALTERATION must be a rational number or one of the predefined Scheme symbols.
\ekmelic-fraction #ALTERATION
Draw ALTERATION as a fraction (arranged vertically, not just a string n/d), or as an integer if its denominator is 1, with a separate minus sign for a negative value. ALTERATION must be a rational number or one of the predefined Scheme symbols.

Note names

Ekmelily defines note names (pitch names) for all twelfth-tone degrees based on the English and German names for semitones and quarter-tones that are already given in LilyPond; see Table of all note names. The used language version depends on which language file exists, or if both exist, which language is selected in LilyPond: With \language english the English, else the German note names are used.

English Note names

Language file ekmel-en.ily: Each name consists of one of the letters c d e f g a b with a suffix for the alteration; e.g. c cts cxs cqs csaqf crs cfts cs csts ctrs ctqs cssaqf cfxs cets css ….

German Note names

Language file ekmel-de.ily: Each name consists of one of the letters c d e f g a h 2 with a suffix for the alteration; e.g. c cir cil cih ciseh cisel ciser cis cisir cisil cisih cisiseh cisisel cisiser cisis …. 3

Enharmonically equivalent Note names

The one-quarter-tone and three-quarter-tones degrees have two distinct, enharmonically equivalent accidentals in some notation styles like arrow, rhm, and sims. Therefore, Ekmelily defines two note names each, e.g. cqs and csaqf (English) or cih and ciseh (German). However, LilyPond does not support different accidentals for the same alteration. As a provisional solution, the combined note names (e.g. csaqf or ciseh) have slightly differing alterations and are therefore not suitable for transposition and MIDI output.


By default, Ekmelily uses the Ekmelos Font for the accidental symbols. Another font can be selected, either in the LilyPond input file before including ekmel.ily with the variable

ekmelicFont = FONTNAME

or with the command line option 1


When using a predefined notation style, the font should be compliant with SMuFL4; e.g. Bravura.

Other extensions

Other extensions for LilyPond for the notation of microtonal music, which also inspired Ekmelily:

  • microlily: by Graham Breed for Just Intonation et al with the Sagittal notation.
  • HE-Lily: by Torsten Anders for the Helmholtz-Ellis notation.
  1. ab LilyPond produces a warning "no such internal option", which can be ignored. Warnings can be suppressed with the command line option --loglevel=ERROR or --loglevel=NONE.
  2. The German h means the English b, and the German b (or hes) means bflat (bf).
  3. These note names correspond with those in Ekmelily versions prior to 1.9 without language files.
  4. SMuFL (Standard Music Font Layout) is a specification for music symbols, initiated by Steinberg and now developed by the W3C Music Notation Community Group. It uses the Unicode Private Use Area (PUA) in the Basic Multilingual Plane (BMP) starting at code point U+E000.