Ekmelily – Notation of Microtonal Music

Download Ekmelily 3.0

Ekmelily is an extension for LilyPond that supports the notation of microtonal music in several equal-temperament tunings: 12, 19, 24, 31, 36, 48, and 72-EDO (Ekmelic System).

It defines note names based on the names for semi- and quarter-tones given in LilyPond, 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-quarters-tone.

Ekmelily 3.0 requires LilyPond version 2.19.22 or higher. LilyPond is a free music typesetting program to automatically produce high-quality sheet music. It runs on GNU/Linux, OS X, and Windows.

See also the complete Ekmelily project which contains, among others, a flavor of the latest version for use with LilyPond 2.18.x, and short demos of the notation styles.


  • Copy the include file(s) for the desired tuning(s) as well as the main include file ekmel-main.ily into an appropriate folder, e.g. "LILYPOND/usr/share/lilypond/current/ly", with LILYPOND meaning the installation folder of LilyPond.
  • Install the Ekmelos Font if it shall be used for the accidental symbols in Ekmelily; see Fonts.


Add the following lines near the top of your LilyPond input file. They are all optional – except for the include file of the desired tuning – but should be specified in this order.

ekmelicFont = FONTNAME \include "ekmel*.ily" \language "LANGUAGE" \ekmelicStyle STYLENAME \ekmelicUserStyle MYNAME #'((ALTERATION CHARACTER …) …)


Ekmelily now supports different tunings (not only 72-EDO), available by separate include files (.ily). Each provides its own set of note name languages and notation styles. The first specified language and style is the default.

TuningInclude fileLanguagesNotation Styles
12-EDOekmel-12.ilydeutsch english nederlands catalan espanol français italiano norsk portugues suomi svenska vlaamsstd sag msag
19-EDOekmel-19.ilydeutsch english nederlands catalan espanol français italiano norsk portugues suomi svenska vlaamsstd sag msag
24-EDOekmel-24.ilydeutsch english nederlands espanol français italiano portuguesgo stz stc stvt arrow sag msag arabic persian four
31-EDOekmel-31.ilydeutsch english nederlands catalan espanol français italiano norsk portugues suomi svenska vlaamsstd stz sth sag msag
36-EDOekmel-36.ilydeutsch englishgo arrow sag msag wys bos
48-EDOekmel-48.ilydeutsch englishsag msag
72-EDOekmel.ilydeutsch englisharrow rhm sims sag msag wys gost bos fern


\language "LANGUAGE"

This selects note names (pitch names) for LANGUAGE, provided that it is available for the respective tuning. Else, the default language is selected (this is always "deutsch"). The command should be placed after the include file. For backward compatibility, it can be placed before the include file, but only to specify "english" or "deutsch".

Ekmelily defines its own sets of note names based on the names for semi- and quarter-tones given in LilyPond. See the Tables for the note names.

Enharmonically equivalent Note names

Some notation styles support two distinct, enharmonically equivalent accidentals; e.g. the arrow, rhm, and sims notations for the one-quarter-tone and three-quarters-tone. 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.

Notation Styles

Predefined Notation Styles

\ekmelicStyle STYLENAME

This sets the predefined notation style STYLENAME. The default notation depends on the tuning or it is specified with the command line option1


The following table shows the predefined notation styles. X = Supported by a tuning. D = Default notation style in a tuning. See the Tables with the alterations for details on the accidental symbols.

STYLENAME 12192431364872 
rhm2Richter Herf / Maedel------X
msag3Mixed SagittalXXXXXXX
gostGould + Stein / Zimmermann------X
stzStein / Zimmermann--XX---
stcStein / Couper--X----
stvtStein / Van Blankenburg / Tartini--X----
sth4Stein / Half flat---X---
bosBosanquet commatic----X-X
fourDigit 4--X----

User-defined Notation Styles

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

This creates a user-defined notation style derived from the current style – possibly set by a previous \ekmelicStyle command – with the name MYNAME. If MYNAME is an empty string (""), the name of the current style extended with the suffix -user is taken.

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

CHARACTER must be either a code point as an integer number (e.g. #xE262), or a character literal (e.g. #\b), or a string (e.g. "bb"). See the Glyphs in the Ekmelos Font for code points.


Ekmelily requires a font for the accidental symbols as an extension to LilyPond's own Feta font. When using a predefined notation style, this font must be compliant with SMuFL.7

By default, the Ekmelos Font is used. Another font (e.g. Bravura) can be selected, either in the LilyPond input file before the include file with the variable

ekmelicFont = FONTNAME

or with the command line option1


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 according to the current notation style as markup. ALTERATION must be a rational number.
\ekmelic-fraction #ALTERATION
Draw ALTERATION as a fraction arranged vertically (not just a string num/denom) or as an integer if its denominator is 1, with a separate minus sign for a negative value. ALTERATION must be a rational number.


  • This sets the predefined Sims notation for 72-EDO, selects the English note names, and prints the accidentals with the Bravura font:
    ekmelicFont = "Bravura"
    \include "ekmel.ily"
    \language "english"
    \ekmelicStyle sims
  • This sets the predefined Stein / Zimmermann notation (stz) for quarter-tones (24-EDO) and modifies it into a user-defined notation with the three-quarters-tone flat symbol after Tartini (U+E487), amd a combination of the sharp symbol (U+E262) with the reversed sharp symbol (U+E481) instead of double-sharp:
    \include "ekmel-24.ily"
    \ekmelicStyle stz
    \ekmelicUserStyle myNotation #'(
      (-3/4 #xE487)
      (1 #xE262 #xE481))
  • This is the same example but making use of the corresponding Scheme symbols:
    \include "ekmel-24.ily"
    \ekmelicStyle stz
    \ekmelicUserStyle myNotation #`(
      (,THREE-Q-FLAT #xE487)
      (,DOUBLE-SHARP #xE262 #xE481))

Further examples of user-defined styles can be found in the file user-styles.ly.


Other extensions for LilyPond for the notation of microtonal music which also inspired Ekmelily are microlily by Graham Breed (Sagittal notation) and HE-Lily by Torsten Anders (Helmholtz-Ellis notation).

  1. abLilyPond 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. rhm uses optional glyphs (U+F600-U+F605) for the accidentals after Franz Richter Herf and Rolf Maedel. They are private supplements in the Ekmelos Font and subject to change.
  3. msag uses the large double sharp (U+E47D) defined in SMuFL. Hence it is different from std even for 12-EDO.
  4. sth uses optional glyphs (U+F612,U+F613) for the semi-flat symbols. They are private supplements in the Ekmelos Font and subject to change.
  5. arabic uses the Arabic accidentals (U+ED30-U+ED38) defined in SMuFL. See "arabic.ly" for Arabic maqamat etc., which also uses a different three-quarters-tone flat symbol.
  6. persian uses the Persian accidentals (U+E460, U+E461) defined in SMuFL for 24-EDO. See the Persian music notation by Kees van den Doel for proper Persian microtonal alterations, note names, keys, etc.
  7. SMuFL (Standard Music Font Layout) is a specification for music symbols, developed by the W3C Music Notation Community Group. It uses the Unicode Private Use Area (PUA) starting at code point U+E000.