Skip to content

Equal Temperament ​

Equal temperament divides an interval into equal steps. Twelve equal divisions of the octave give you a piano. Nineteen give you better thirds. Thirteen equal divisions of the tritave give you Bohlen–Pierce.

In RMT Compose a TET step is an exponent: 2 ^ (1/12) is a semitone, 3 ^ (1/13) is a Bohlen–Pierce step. You write them in the expression; the app keeps the power term intact rather than flattening it to a decimal.

Why temper at all ​

Pure fifths do not close a circle. Stack twelve of them:

(3/2)^12 = 129.746…

Stack seven octaves:

2^7 = 128

They miss by 23.46 cents — the Pythagorean comma. You cannot have twelve pure fifths and pure octaves in the same instrument. Equal temperament spends that comma evenly: every fifth is narrowed by about 2 cents, every key ends up equally usable, and modulation stops being a trap.

Every temperament is a different answer to "what do I compromise?" 12-TET protects the fifth and sacrifices the third. 19-TET does the opposite. 31-TET protects almost everything and costs you 31 notes per octave.

The step formula ​

To divide interval I into N equal steps, one step is I^(1/N):

2 ^ (1/12)          # one 12-TET semitone
2 ^ (1/19)          # one 19-TET step
2 ^ (1/31)          # one 31-TET step
3 ^ (1/13)          # one Bohlen-Pierce step (tritave-based)

k steps is I^(k/N):

2 ^ (7/12)          # 12-TET perfect fifth
2 ^ (6/19)          # 19-TET major third

^ binds tighter than *, so base.f * 2 ^ (7/12) means base.f * (2^(7/12)). No extra parentheses needed.

base.f * 2 ^ (4/12)     # a 12-TET major third above the BaseNote
[1].f * 2 ^ (1/12)      # one semitone above note 1
Legacy JavaScript syntax
javascript
module.baseNote.getVariable('frequency').mul(new Fraction(2).pow(new Fraction(4, 12)))
module.getNoteById(1).getVariable('frequency').mul(new Fraction(2).pow(new Fraction(1, 12)))

Chaining a scale ​

Every shipped TET module is built the same way: note 1 is base.f, and every later note is the previous note times one step.

# note 1
base.f
# note 2
[1].f * 2 ^ (1/12)
# note 3
[2].f * 2 ^ (1/12)
# … and so on

Only note 1 touches base. That makes the scale a chain: lift one note and every note after it follows. It also means an N-TET module has N + 1 notes — one full period plus the note you started on.

What stays exact, and what does not ​

This is the part that matters, and it is narrower than it looks.

The expression stays symbolic. 2 ^ (1/12) is stored as a power term, not as 1.0594630943592953. It survives saving, loading, dragging and the ▲/▼ arrows.

Like bases merge on save. Type 2^(1/12) * 2^(1/12) * base.f, press Save, and the simplifier stores 2^(1/6) * base.f. Twelve semitones collapse to 2, exactly.

Perfect roots resolve. 4^(1/2) * base.f saves as 2 * base.f. The note is no longer irrational, and the ≈ marker disappears.

Only positive integer bases stay symbolic. MusicValue.pow creates a symbolic power for bases like 2, 3 and 5. A non-integer base — say (1618/1000) for a golden-ratio scale — takes the float path instead and every step downstream is ordinary floating-point arithmetic.

The evaluated number is still an approximation

Keeping 2^(1/12) in the expression is not the same as evaluating it exactly. When the app computes a note's actual frequency, an irrational power is converted straight back to an approximating rational for the audio and render pipeline, and the note is flagged as corrupted. The algebra is exact; the number you hear is a very good approximation of it. Do not expect a TET note to report a closed-form value.

The ≈ marker ​

A note whose frequency involves an irrational power is corrupted — the app's word for "this value is not a rational number".

  • On the canvas, the note is cross-hatched and its fraction label is prefixed with ≈. Notes that merely depend on a corrupted note get a single diagonal hatch and the same ≈ prefix.
  • The fraction shown next to ≈ is the note's ratio to the BaseNote, approximated with a maximum denominator of 8192. It is a readable landmark, not the stored value.
  • In the note widget, the Evaluated: line shows ≈ followed by the approximated value, in italic amber.

Load any TET module and every note but the first will carry the ≈. That is correct and expected. A scale made of pure ratios — such as the Tesla module — shows plain fractions and no hatching, because it never raises anything to a fractional power.

The Scale Systems section ​

The library ships six scale modules in a section called Scale Systems. It sits in the library bar under the top bar, below Melodies — which holds seven public-domain tunes, not scales. Everything on this page lives in Scale Systems.

ModuleNotesBaseTempoStep
12-TET13(263/4) ≈ 65.75 Hz100× 2 ^ (1/12)
19-TET20440 Hz100× 2 ^ (1/19)
31-TET32440 Hz120× 2 ^ (1/31)
Bohlen–Pierce14440 Hz80× 3 ^ (1/13)
Tesla81131.5 Hz260odd-harmonic ratios (no powers)
Mixed-Base12440 Hz90alternating 2-, 3- and 5-based steps

The tiles show the module name, not the filename. TET-12.json is what's on disk; 12-TET is what you click.

Tesla is an 81-note base-3 odd-harmonic scale — the odd numbers 9, 11, 13 … 169, each over 9, stored as a chain of ratios (11/9, then 13/11, then 15/13, …). It is not an equal temperament and it does not repeat at the octave: it spans 169/9 ≈ 5077 cents ≈ 4.23 octaves, and the steps taper from 347.4¢ down to 20.6¢. Because every step is rational, no Tesla note is corrupted.

Mixed-Base is a 12-note experiment that alternates step bases — 2^(1/12), then 3^(1/13), then 2^(1/12) again, with a 5^(1/7) thrown in — and jumps straight back to base.f on note 12. It works because RMT keeps base-2, base-3 and base-5 powers as separate terms instead of collapsing them into one number.

Loading one ​

  1. Find Scale Systems in the library bar, or click the magnifier and search — the microtonal tag surfaces 19-TET and 31-TET immediately.
  2. Set the drop mode — Start (⇤) or End (⇥) — with the icon buttons next to Undo/Redo in the module bar's toolbar.
  3. Drag the tile onto a note or onto the BaseNote circle.

The module bar with its six sections, including Scale Systems

The drop must land on something

Dropping on empty canvas is rejected — "Drop onto a note or the BaseNote circle to import a module." Dropping on a silence is rejected too. On a successful drop, the module's base references are rewritten to the note you dropped on, so the whole scale re-roots there.

Arrows and TET ​

The ▲/▼ arrows on a note multiply its frequency by a ratio you configure in Settings → Arrows. On a TET note the factor folds into the rational coefficient and leaves the power term alone:

base.f * 2^(7/12)          →  ▲  →   2 * base.f * 2^(7/12)

The note stays a 12-TET fifth; it just moves up an octave.

You cannot make an arrow a TET step

Arrow intervals must be a ratio of positive integers in [1/16, 16]. 2^(1/12) is not expressible as one. If you want to walk a note by semitones, edit the exponent in the expression.

Playing TET back ​

Every instrument handles arbitrary frequencies. The sampled piano and violin pitch-shift their zones by frequency / rootHz, so a 31-TET scale plays back at the pitches you wrote — they are not snapped to a keyboard. The synth voices are oscillators and take any number at all.

Set the default in Settings → Audio → Default instrument. The shipped TET modules set instrument to sine-wave on their BaseNote, which is the cleanest way to hear small pitch differences.

Choosing a system ​

UseWhen
Pure ratiosmaximum consonance, one tonal centre, historical tunings
12-TETmatching conventional instruments and recordings
19-TETyou want the thirds fixed and can live with a flat fifth
31-TETyou want thirds and septimal intervals, and 31 notes doesn't scare you
Bohlen–Pierceyou want to leave the octave behind entirely
Customanything else — any base, any number of divisions

Next steps ​

Released under the MIT License