# Ekmelily – Notation of Microtonal Music

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 (part of the GNU Project) 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.

## Installation

• 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.

## Usage

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 …) …)

## Tunings

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.

## Languages

\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

-dekmelic-style=STYLENAME

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.

### 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.

## Fonts

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

-dekmelic-font=FONTNAME

\ekmelicOutputSuffix
Set the name of the current notation style as the output filename suffix for the current `\book` section.
\ekmelic-style-name
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.

## Examples

• 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`.

## Others

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.