Ekmelily – Notation of Microtonal Music

Latest release: 3.10

Ekmelily is an extension for LilyPond that supports variable accidentals and key signatures for the notation of microtonal music in several equal-temperament tunings: 12, 19, 24, 31, 36, 48, 53, and 72-EDO. For this purpose, it introduces predefined and user-defined Notation Styles. Each style determines a set of symbols for the alterations up to the five-quarters-tone, at most. — For other music symbols, see Esmuflily.

Moreover, Ekmelily defines own note names based on the names for semi- and quarter-tones given in LilyPond.

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


  • Folder
    … all files of Ekmelily: LilyPond include files, short demos of the notation styles, old versions, et al
  • Zip Archive
    … with the LilyPond include files et al


The folder ly contains all available include files (*.ily).

  • 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. The first line can be omitted when using the Ekmelos font.

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


Ekmelily supports different tunings available by separate include files. Each provides its own set of languages and predefined notation styles. The first LANGUAGE and STYLENAME specified in the following table is the default in the respective tuning.

12ekmel-12.ilydeutsch english nederlands català (catalan) español (espanol) italiano français português (portugues) norsk suomi svenska vlaamsstd sag msag
19ekmel-19.ilydeutsch english nederlands català (catalan) español (espanol) italiano français português (portugues) norsk suomi svenska vlaamsstd sag msag
24ekmel-24.ilydeutsch english nederlands català (catalan) español (espanol) italiano français português (portugues) norsk suomi svenska vlaamsstc stz go stvt arrow sag msag arabic persian four haba
24 1ekmel-arabic.ilyitalianoarabic
31ekmel-31.ilydeutsch nederlands español (espanol) français italiano português (portugues)std sag msag stz sth
36ekmel-36.ilydeutsch english nederlands norsk suomi svenskago arrow sag msag wys bos haba
48ekmel-48.ilydeutsch englishsag msag
53ekmel-53.ilymakam thm ktm english numberaeu aeuek thm sag dia
72ekmel.ilydeutsch english nederlands norsk suomi svenskaarrow rhm sims hesse sag msag wys gostz gostc bos fern haba

Note: Ekmelily versions prior to 3.0 support only 72-EDO.


Each tuning supports several note name languages, which can be selected with the command

\language "LANGUAGE"

If LANGUAGE is not supported by the respective tuning, the default language is selected (usually "deutsch"). The note names are based on the names for semi- and quarter-tones given in LilyPond. See the Tables with all 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 ("deutsch"). 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 MIDI output.

Notation Styles

Predefined Notation Styles

Each tuning supports several predefined notation styles, which can be selected with the command

\ekmelicStyle STYLENAME

If STYLENAME is not supported by the respective tuning, the default notation style is selected. This can be overwritten with the command line option2


The following table shows all predefined notation styles. N indicates the default style in tuning N.
See the Tables with all alterations or the Ekmelos Documentation for details on the accidentals (code points, glyph names etc.).

STYLENAME TuningsAccidentals
stdStandard12 19
arrowArrow24 36 72
rhmRichter Herf / Maedel 372
hesseHesse 472
sagSagittal12 19 24 31 36 48 53 72
msagMixed Sagittal 512 19 24 31 36 48 72
wysWyschnegradsky36 72
goGould24 36
gostzGould / Stein / Zimmermann72
gostcGould / Stein / Couper72
stzStein / Zimmermann24 31
stcStein / Couper24
stvtStein / Van Blankenburg / Tartini24
sthStein / Half flat 631
bosBosanquet commatic36 72
arabicArabic 724
persianPersian 824
aeuArel-Ezgi-Uzdilek 953
thmTurkish folk music 1153
diaDiatonic 1253
fourDigit 424
 1336 72

User-defined Notation Styles

A new notation style derived from the current style can be created with the command

\ekmelicUserStyle MYNAME #'((ALTERATION ACC-ELEMENT …) …)

MYNAME is a freely chosen style name. If it is an empty string "", the current style name extended with the suffix -user is taken.

ALTERATION must be a rational number. For each specified ALTERATION, a new accidental is defined which is the concatenation of the ACC-ELEMENTs. For all other alterations where the previous accidental of ALTERATION appears likewise (usually in combination with further symbols), this accidental is also replaced by the new one. Therefore, the order of alterations in the definition list can be significant; in particular, when a replaced accidental is again defined but for another alteration (see the last example).

ACC-ELEMENT must be either a code point as an integer number (e.g. #xE262), or a character literal (e.g. #\b), or a string of any length (e.g. "bb"). Two or more ACC-ELEMENTs are juxtaposed with a padding of 0.12 staff units, but no extra space is inserted between the characters of a string. Note that in a SMuFL14 compliant font, accidental symbols have a zero side-bearing. This also applies to the Basic Latin (ASCII) characters in the Ekmelos font.


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

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 option2


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.


ekmelicFont = "Bravura"
\include "ekmel.ily"
\language "english"
\ekmelicStyle sims
This sets the predefined Sims notation for 72-EDO, selects the English note names, and draws the accidentals with the Bravura font.
\include "ekmel-24.ily"
\ekmelicStyle stz
\ekmelicUserStyle myNotation #'(
  (-3/4 #xE327)
  (1 #xE262 #xE262))
This sets the predefined Stein / Zimmermann notation (stz) for quarter-tones (24-EDO) and modifies it into a user-defined notation with the Sagittal flat 11 medium diesis down symbol (U+E327) for three-quarter-tones flat, amd a concatenation of two sharp symbols (U+E262) for double-sharp.
\include "ekmel-24.ily"
\ekmelicStyle stz
\ekmelicUserStyle myNotation #`(
  (,THREE-Q-FLAT #xE327)
  (,DOUBLE-SHARP #xE262 #xE262))
This is the same example but it makes use of the corresponding Scheme symbols.
\include "ekmel.ily"
\language "english"
\ekmelicUserStyle hewm #'(
  (1 #\x)
  (-1 #\b #\b)
  (1/2 #\#)
  (-1/2 #\b)
  (1/4 #\^)
  (-1/4 #\v)
  (1/6 #\>)
  (-1/6 #\<)
  (1/12 #\+)
  (-1/12 #\-))
This sets the HEWM (Helmholtz / Ellis / Wolf / Monzo) notation for 72-EDO and selects the English note names.
\include "ekmel-24.ily"
\language "nederlands"
\ekmelicStyle stz
\ekmelicUserStyle stockhausen #'(
  (1/4 #xED58)
  (-1/4 #xED59)
  (3/4 #xED5A)
  (-3/4 #xED59 #xE260))
This sets the notation after Karlheinz Stockhausen for 24-EDO with the fractional sharp symbols (U+ED58) and (U+ED5A), and the quarter-tone flat symbol (U+ED59), and selects the Dutch note names.
\include "ekmel.ily"
\ekmelicUserStyle smuflHesse #'(
  (1/4 #xE27A)
  (-1/4 #xE27B)
  (1/6 #xE2A4)
  (-1/6 #xE2A1)
  (1/12 #xE479)
  (-1/12 #xE47A))
This sets a variant of the Hesse notation for 72-EDO using SMuFL characters: Gould arrows   (U+E27A, U+E27B), Sims half arrows (hooks)   (U+E2A4, U+E2A1), and Bosanquet commatic symbols   (U+E479, U+E47A). It is very similar to the Arrow notation.
\include "ekmel-24.ily"
\ekmelicUserStyle diaQuarter #'(
  (1 #xF61C)
  (-1 #xF61D)
  (3/4 #xE265)
  (-3/4 #xE266)
  (1/2 #xE263)
  (-1/2 #xE264)
  (1/4 #xE262)
  (-1/4 #xE260)
  (5/4 #xF61C #xE262)
  (-5/4 #xF61D #xE260))
This sets the Standard Sharp / flat symbols, single thru quintuple, like the predefined Diatonic notation (dia) but for quarter-tones (24-EDO). The quadruple symbols (U+F61C, U+F61D) are private supplements in the Ekmelos font.
Note that here, the order of alterations is significant since the standard accidentals in the previous notation (stc) are rearranged.

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

What's New

  • Version 3.10 (): The Diatonic notation for 53-EDO and the Gould / Stein / Couper notation for 72-EDO is added. The Gould / Stein / Zimmermann notation is renamed to gostz. gost is now an alias name.
  • Version 3.9 (): The file ekmel-53.ily with note names and notations for Turkish music is added.
  • Version 3.8 (): The Hesse notation for 72-EDO is added.
  • Version 3.7 (): New languages are available in ekmel-36.ily and ekmel.ily ("norsk", "suomi", "svenska"). In ekmel-24.ily, some quarter-tone names of "suomi" are corrected.
  • Version 3.6 (): The note names are revised according to LilyPond 2.22. New languages are available in ekmel-24.ily ("catalan", "norsk", "suomi", "svenska", "vlaams"), in ekmel-36.ily ("nederlands"), and in ekmel.ily ("nederlands"). Native language names ("català", "español", "português") or their alias names can be used.
  • Version 3.5 (): ekmel-24.ily: The Hába notation for quarter-tones uses the SMuFL glyphs (U+EE64-U+EE69) and the default notation is stc instead of go.
  • Version 3.4 (): The Hába notation for quarter-tones (24-EDO) and for 1/3-, 1/6-, and 1/12-tones (36 and 72-EDO) is added.
  • Version 3.3 (): Definitions to adjust the size of accidentals on grace notes are removed (obsolete since 3.2).
  • Version 3.2 (): The output of accidentals is newly implemented (stencil instead of simple text) and the hair-space character (U+200A) is not used any more for padding in composite accidentals. The natural sign for restore and key cancellation now depends on the notation style (not always U+E261).
  • Version 3.1 (): Key signatures are now supported. The file ekmel-24.ily defines an alteration order for key signatures including quarter tones. A new file ekmel-arabic.ily is available for Arabic scores (24-EDO) including maqamat (taken from arabic.ly).
  • Version 3.0 (): A completely revised version that now supports different tunings (12, 19, 24, 31, 36, 48, 72-EDO) by separate include files. Arabic and Persian notation are added for 24-EDO.

See the file CHANGELOG.txt for older versions.

Author and License

Ekmelily was written by Thomas Richter, thomas-richteraonat

Copyright © 2013-2022 Thomas Richter

Ekmelily is licensed under the GNU General Public License, version 3 or later.
See the file LICENSE.txt. This license is also available at www.gnu.org/licenses.

  1. abThe file ekmel-arabic.ily is a variant of ekmel-24.ily for Arabic scores, like LilyPond's arabic.ly but with the correct accidentals (U+ED30 - U+ED38 in SMuFL). It supports Arabic maqamat and defines only the Arabic notation and Italian note names, so the commands \ekmelicStyle and \language are not required.
  2. 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.
  3. rhm uses optional glyphs (U+F600 - U+F605) for the accidentals after Franz Richter Herf and Rolf Maedel as they are not included in SMuFL. They are private supplements in the Ekmelos font.
  4. hesse uses optional glyphs (U+F606 - U+F60B) for the accidentals proposed by Horst-Peter Hesse as they are not included in SMuFL. They are private supplements in the Ekmelos font.
  5. msag uses the large double sharp (U+E47D in SMuFL). Hence it is different from std even for 12-EDO.
  6. sth uses optional glyphs (U+F612, U+F613) for the semi-flat symbols. They are private supplements in the Ekmelos font.
  7. arabic uses the Arabic accidentals (U+ED30 - U+ED38 in SMuFL). See the file ekmel-arabic.ily which supports Arabic maqamat.1
  8. persian uses the Persian accidentals Koron and Sori after Ali-Naghi Vaziri (probably) (U+E460, U+E461 in SMuFL). See Persian music notation by Kees van den Doel for proper Persian microtonal alterations, note names, keys, etc.
  9. aeu uses the accidentals for classical Turkish music (KTM) (U+E440 - U+E447 in SMuFL) and an optional glyph (U+F619) for the reversed slashed flat. This is a private supplement in the Ekmelos font. See LilyPond's turkish-makam.ly for key signature definitions.
  10. aeuek equals aeu but does not use the reversed slashed flat, i.e. eksik-bakiye = koma.
  11. thm uses the accidentals for Turkish folk music (THM) (U+E450 - U+E457 in SMuFL).
  12. dia uses optional glyphs (U+F61C, U+F61D) for the quadruple Sharp / flat symbols. They are private supplements in the Ekmelos font.
  13. haba in the 36- and 72-EDO tunings uses optional glyphs (U+F660 - U+F670). They are private supplements in the Ekmelos font.
  14. abSMuFL (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.