mini notation

Microtonal Notation

Akkado supports microtonal pitch notation through micro-step operators (^, v, +) and the tune() function, which selects how those operators map to frequency.

Akkado supports microtonal pitch notation through micro-step operators (^, v, +) and the tune() function, which selects how those operators map to frequency.

Micro-Step Operators

Micro-step operators go between the note name/accidentals and the octave number:

OperatorMeaningExample
^Step upc^4 — C4 raised by one EDO step
vStep downcv4 — C4 lowered by one EDO step
+Step up (alias for ^)c+4 — same as c^4

Operators stack — c^^4 raises by two steps, cvvv4 lowers by three. Mixed operators cancel: c^v4 = c4.

Standard accidentals (#, b, x) remain unchanged and always shift by semitones. They can combine freely with micro-steps:

// Sharp + micro step up
pat("c#^4")   // C#4 + one EDO step

// Flat + micro step down
pat("Bbv4")   // Bb4 - one EDO step

The tune() Function

tune() wraps a pattern and sets the EDO tuning for micro-step resolution:

// 31-EDO: each ^ step = 38.7 cents
tune("31edo", pat("c4 c^4 c^^4")) |> ((f) -> osc("sin", f) * ar(trigger(3))) |> out(%, %)

// 24-EDO: each ^ step = 50 cents (quarter tone)
tune("24edo", pat("a4 a^4 a^^4")) |> ((f) -> osc("sin", f) * ar(trigger(3))) |> out(%, %)

Without tune(), the default is 12-EDO where each ^ step equals one semitone (100 cents) — so c^4 is the same as c#4.

Accepted formats: "31edo", "31-edo", "31-EDO".

How EDO Steps Work

An EDO system divides the octave (1200 cents) into N equal steps. The ^/v operators move by one step in the active tuning:

EDOStep size^ =Notes
12100.0 centssemitoneStandard Western tuning
1770.6 cents~3/4 semitoneNarrower intervals, wider major thirds
1963.2 cents~2/3 semitoneNear-just minor thirds
2450.0 centsquarter toneArabic/Turkish maqam music
3138.7 cents~1/3 semitoneNear-just thirds and sevenths
5322.6 centsHoldrian commaNear-just for all intervals

Important: Notes without micro-steps sound identical in all tunings. pat("c4 e4 g4") produces the same frequencies whether wrapped in tune("31edo", ...) or not — tune() only changes how ^ and v are resolved.

Micro-Step Arithmetic

Sharps/flats and micro-steps are independent axes:

// # shifts the MIDI note by a semitone (always 100 cents)
// ^ shifts by one EDO step (depends on tuning)
tune("31edo", pat("c4 c#4 c^4 c#^4"))
// c4   = 261.6 Hz (Middle C)
// c#4  = 277.2 Hz (+ 100 cents, semitone)
// c^4  = 267.5 Hz (+ 38.7 cents, one 31-EDO step)
// c#^4 = 283.3 Hz (+ 100 + 38.7 = 138.7 cents)

Example: Fur Elise Reimagined

The opening motif of Beethoven’s Fur Elise — the E/D# trill — is a perfect testbed for microtonal retuning, because the character of a trill depends entirely on interval size.

Standard (12-EDO)

The familiar version. The E-D# trill spans exactly 100 cents:

pat("e5 d#5 e5 d#5 e5 b4 d5 c5 a4@2 ~ c4 e4 a4 b4@2 ~ e4 g#4 b4 c5@2")
    |> ((f) -> osc("tri", f) * ar(trigger(20), 0.005, 0.3))
    |> out(%, %)

17-EDO: The Narrow Trill

In 17-EDO the semitone shrinks to 70.6 cents. D#-to-E becomes tighter and more restless — the trill wants to resolve but can’t quite settle:

tune("17edo", pat("e5 d#5 e5 d#5 e5 b4 d5 c5 a4@2 ~ c4 e4 a4 b4@2 ~ e4 g#4 b4 c5@2"))
    |> ((f) -> osc("tri", f) * ar(trigger(20), 0.005, 0.3))
    |> out(%, %)

Add micro-step ornaments for a xenharmonic flavor — e^5 and ev5 nudge notes by 70.6 cents:

tune("17edo", pat("e5 d#5 e^5 d#5 ev5 d#5 e5 b4 d5 c5 a4@2"))
    |> ((f) -> osc("tri", f) * ar(trigger(12), 0.005, 0.3))
    |> out(%, %)

31-EDO: Microtonal Cascade

In 31-EDO each step is 38.7 cents. Instead of a binary E/D# trill, replace it with a micro-step descent — each v lowers by a third of a semitone, creating a shimmering portamento-like effect:

tune("31edo", pat("e5 ev5 evv5 ev5 e5 b4 d5 c5 a4@2 ~ c4 e4 a4 b4@2"))
    |> ((f) -> osc("tri", f) * ar(trigger(14), 0.005, 0.3))
    |> out(%, %)

Deeper cascade with three micro-steps — a smooth glide spanning ~116 cents:

tune("31edo", pat("e5 ev5 evv5 evvv5 evv5 ev5 e5 b4 d5 c5 a4@2"))
    |> ((f) -> osc("tri", f) * ar(trigger(11), 0.005, 0.3))
    |> out(%, %)

Side-by-Side: The Trill

Minimal examples to hear the difference in trill character:

// 12-EDO: 100-cent trill (standard semitone)
pat("e5 d#5 e5 d#5 e5 d#5 e5 d#5")
    |> ((f) -> osc("sin", f) * ar(trigger(8), 0.005, 0.1))
    |> out(%, %)
// 17-EDO: 70.6-cent trill (narrow, restless)
tune("17edo", pat("e5 d#5 e5 d#5 e5 d#5 e5 d#5"))
    |> ((f) -> osc("sin", f) * ar(trigger(8), 0.005, 0.1))
    |> out(%, %)
// 31-EDO: 38.7-cent micro-step shimmer
tune("31edo", pat("e5 ev5 e5 ev5 e5 ev5 e5 ev5"))
    |> ((f) -> osc("sin", f) * ar(trigger(8), 0.005, 0.1))
    |> out(%, %)

Tips

  • Start with 24-EDO — quarter tones are the most intuitive entry point to microtonal music.
  • ^^ in 31-EDO (77.4 cents) is close to a quarter tone — useful as a mental anchor.
  • tune() only affects ^/v — standard notes, sharps, and flats are unchanged across all tunings.
  • Samples are unaffectedbd, sn, and other sample tokens ignore micro-step operators.
  • Velocity still worksc^4:0.5 is a micro-stepped note at half velocity.

Related: Mini-Notation Basics, Oscillators