Skip to content

Microtonal Composition

Explore music beyond the standard 12-note scale using RMT Compose's powerful ratio and equal temperament systems.

What is Microtonal Music?

Microtonal music uses intervals smaller than the standard semitone, or uses tuning systems that divide the octave differently than the familiar 12-tone equal temperament (12-TET).

RMT Compose excels at microtonal composition because it works with exact ratios rather than fixed pitch values.

Pure Intervals vs Equal Temperament

The Problem with 12-TET

Standard 12-TET divides the octave into 12 equal parts. Each semitone is exactly 2^(1/12) = ~1.0595. This creates slight deviations from pure ratios:

IntervalPure RatioPure Cents12-TET CentsDifference
Major Third5/4386.3400+13.7
Perfect Fifth3/2702.0700-2.0
Minor Seventh7/4968.81000+31.2

Pure Ratios in RMT Compose

Use exact ratios for pure, beatless intervals:

// Pure major third (5:4)
base.f * (5/4)

// Pure perfect fifth (3:2)
base.f * (3/2)

// Pure harmonic seventh (7:4)
base.f * (7/4)
Legacy JavaScript syntax
javascript
// Pure major third (5:4)
module.baseNote.getVariable('frequency').mul(new Fraction(5, 4))

// Pure perfect fifth (3:2)
module.baseNote.getVariable('frequency').mul(new Fraction(3, 2))

// Pure harmonic seventh (7:4)
module.baseNote.getVariable('frequency').mul(new Fraction(7, 4))

Alternative Equal Temperaments

19-TET

Divides the octave into 19 equal parts. Better approximation of pure thirds than 12-TET.

// 19-TET semitone
2^(1/19)

// 19-TET major third (6 steps)
base.f * 2^(6/19)

// 19-TET perfect fifth (11 steps)
base.f * 2^(11/19)
Legacy JavaScript syntax
javascript
// 19-TET semitone
new Fraction(2).pow(new Fraction(1, 19))

// 19-TET major third (6 steps)
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(6, 19)))

// 19-TET perfect fifth (11 steps)
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(11, 19)))

31-TET

Divides the octave into 31 equal parts. Excellent approximation of many pure intervals.

// 31-TET semitone
2^(1/31)

// 31-TET major third (10 steps)
base.f * 2^(10/31)

// 31-TET perfect fifth (18 steps)
base.f * 2^(18/31)
Legacy JavaScript syntax
javascript
// 31-TET semitone
new Fraction(2).pow(new Fraction(1, 31))

// 31-TET major third (10 steps)
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(10, 31)))

// 31-TET perfect fifth (18 steps)
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(18, 31)))

24-TET (Quarter Tones)

Divides the octave into 24 equal parts, adding quarter tones between standard semitones.

// Quarter tone up from A
base.f * 2^(1/24)

// Standard semitone in 24-TET
base.f * 2^(2/24)
Legacy JavaScript syntax
javascript
// Quarter tone up from A
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(1, 24)))

// Standard semitone in 24-TET
module.baseNote.getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(2, 24)))

Bohlen-Pierce Scale

A unique non-octave scale based on the 3:1 ratio (tritave) divided into 13 equal parts.

// Bohlen-Pierce step
3^(1/13)

// Example: 5 BP steps above base
base.f * 3^(5/13)
Legacy JavaScript syntax
javascript
// Bohlen-Pierce step
new Fraction(3).pow(new Fraction(1, 13))

// Example: 5 BP steps above base
module.baseNote.getVariable('frequency')
  .mul(new Fraction(3).pow(new Fraction(5, 13)))

Why Bohlen-Pierce?

  • Built around 3:1 instead of 2:1
  • Better approximation of odd harmonics (3:1, 5:3, 7:3)
  • Completely different sound palette from octave-based scales

Just Intonation

Pure intervals derived from simple ratios. Build scales using only whole-number ratios.

5-Limit Just Intonation

Uses ratios with prime factors 2, 3, and 5 only:

javascript
// Just major scale
C:  1/1     // Unison
D:  9/8     // Major second
E:  5/4     // Major third
F:  4/3     // Perfect fourth
G:  3/2     // Perfect fifth
A:  5/3     // Major sixth
B:  15/8    // Major seventh
C': 2/1     // Octave
// E (major third)
base.f * (5/4)

// G (perfect fifth)
base.f * (3/2)

// A (major sixth)
base.f * (5/3)
Legacy JavaScript syntax
javascript
// E (major third)
module.baseNote.getVariable('frequency').mul(new Fraction(5, 4))

// G (perfect fifth)
module.baseNote.getVariable('frequency').mul(new Fraction(3, 2))

// A (major sixth)
module.baseNote.getVariable('frequency').mul(new Fraction(5, 3))

7-Limit Just Intonation

Adds the seventh harmonic for bluesy intervals:

// Harmonic seventh (flat seventh)
base.f * (7/4)

// Septimal minor third
base.f * (7/6)

// Septimal tritone
base.f * (7/5)
Legacy JavaScript syntax
javascript
// Harmonic seventh (flat seventh)
module.baseNote.getVariable('frequency').mul(new Fraction(7, 4))

// Septimal minor third
module.baseNote.getVariable('frequency').mul(new Fraction(7, 6))

// Septimal tritone
module.baseNote.getVariable('frequency').mul(new Fraction(7, 5))

Building a Microtonal Composition

Tip: Use the Module Bar's "Drop at:" toggle to speed up composition:

  • End mode: Chain notes sequentially (great for scales and melodies)
  • Start mode: Stack notes at the same time (great for chords)

Example: 19-TET Melody

// Note 1: Root
frequency: base.f
startTime: 0
duration: 1

// Note 2: 19-TET major second (3 steps)
frequency: [1].f * 2^(3/19)
startTime: [1].t + [1].d
duration: 1

// Note 3: 19-TET major third (6 steps)
frequency: [1].f * 2^(6/19)
startTime: [2].t + [2].d
duration: 1

// Note 4: 19-TET perfect fourth (8 steps)
frequency: [1].f * 2^(8/19)
startTime: [3].t + [3].d
duration: 1
Legacy JavaScript syntax
javascript
// Note 1: Root
frequency: module.baseNote.getVariable('frequency')
startTime: new Fraction(0)
duration: new Fraction(1)

// Note 2: 19-TET major second (3 steps)
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(3, 19)))
startTime: module.getNoteById(1).getVariable('startTime')
  .add(module.getNoteById(1).getVariable('duration'))
duration: new Fraction(1)

// Note 3: 19-TET major third (6 steps)
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(6, 19)))
startTime: module.getNoteById(2).getVariable('startTime')
  .add(module.getNoteById(2).getVariable('duration'))
duration: new Fraction(1)

// Note 4: 19-TET perfect fourth (8 steps)
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(2).pow(new Fraction(8, 19)))
startTime: module.getNoteById(3).getVariable('startTime')
  .add(module.getNoteById(3).getVariable('duration'))
duration: new Fraction(1)

Example: Just Intonation Chord

// Root
frequency: base.f
startTime: 0
duration: 2

// Pure major third
frequency: [1].f * (5/4)
startTime: [1].t
duration: [1].d

// Pure perfect fifth
frequency: [1].f * (3/2)
startTime: [1].t
duration: [1].d

// Harmonic seventh (for a dominant seventh chord)
frequency: [1].f * (7/4)
startTime: [1].t
duration: [1].d
Legacy JavaScript syntax
javascript
// Root
frequency: module.baseNote.getVariable('frequency')
startTime: new Fraction(0)
duration: new Fraction(2)

// Pure major third
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(5, 4))
startTime: module.getNoteById(1).getVariable('startTime')
duration: module.getNoteById(1).getVariable('duration')

// Pure perfect fifth
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(3, 2))
startTime: module.getNoteById(1).getVariable('startTime')
duration: module.getNoteById(1).getVariable('duration')

// Harmonic seventh (for a dominant seventh chord)
frequency: module.getNoteById(1).getVariable('frequency')
  .mul(new Fraction(7, 4))
startTime: module.getNoteById(1).getVariable('startTime')
duration: module.getNoteById(1).getVariable('duration')

The ≈ Symbol

When you use irrational values (like 2^(1/12)), RMT Compose displays ≈ before the frequency value:

≈ 466.16 Hz

This indicates the displayed value is an approximation of an algebraically exact value. The internal computation preserves full precision through the SymbolicPower system.

Comparing Tuning Systems

Hear the Difference

Create the same melody in different tunings:

  1. 12-TET version: Use 2^(N/12)
  2. Just intonation version: Use pure ratios like 5/4, 3/2
  3. 19-TET version: Use 2^(N/19)

Compare the sound quality, especially on sustained chords.

Interval Comparison Table

IntervalPure12-TET19-TET31-TET
Major 2nd9/82^(2/12)2^(3/19)2^(5/31)
Major 3rd5/42^(4/12)2^(6/19)2^(10/31)
Perfect 4th4/32^(5/12)2^(8/19)2^(13/31)
Perfect 5th3/22^(7/12)2^(11/19)2^(18/31)
Major 6th5/32^(9/12)2^(14/19)2^(23/31)

Tips for Microtonal Composition

1. Start with Familiar Structures

Build chords and scales you know, then substitute microtonal intervals.

2. Trust Your Ears

Numbers guide you, but the sound is what matters. Experiment!

3. Use Pure Intervals for Sustained Sounds

Irrational TET intervals can cause subtle beating on long notes. Pure ratios sound smoother.

4. Explore the Module Library

Load pre-built TET scales from the Module Bar to experiment quickly.

5. Document Your Discoveries

Save interesting microtonal modules with descriptive names for future use.

Next Steps

Released under the RMT Personal Non-Commercial License