Skip to content

Custom TET Systems

RMT Compose allows you to create custom equal temperament systems beyond the built-in 12-TET, 19-TET, 31-TET, and Bohlen-Pierce.

The Basic Formula

Any TET system follows this pattern:

javascript
// N-TET: Divide interval I into N equal steps
// Step ratio = I^(1/N)

// For octave-based TET:
new Fraction(2).pow(new Fraction(1, N))

// For tritave-based (like BP):
new Fraction(3).pow(new Fraction(1, N))

// For any interval:
new Fraction(I).pow(new Fraction(1, N))

Creating a Custom TET

Step 1: Choose Your Parameters

ParameterDescriptionExample
IntervalThe repeating interval2 (octave), 3 (tritave)
DivisionsHow many steps17, 22, 24, 53...

Step 2: Write the Step Expression

javascript
// Example: 17-TET (17 equal divisions of the octave)
new Fraction(2).pow(new Fraction(1, 17))

// Example: 53-TET (very close to just intonation)
new Fraction(2).pow(new Fraction(1, 53))

// Example: 5-TET (pentatonic equal temperament)
new Fraction(2).pow(new Fraction(1, 5))

Step 3: Build the Scale

Each note references the previous:

javascript
// 17-TET scale
note1.frequency = baseNote.frequency
note2.frequency = note1.frequency.mul(new Fraction(2).pow(new Fraction(1, 17)))
note3.frequency = note2.frequency.mul(new Fraction(2).pow(new Fraction(1, 17)))
// ... continue for all 17 notes

Interesting TET Systems

5-TET (Pentatonic ET)

PropertyValue
Steps5
Step size240 cents
CharacterIndonesian slendro-like
javascript
new Fraction(2).pow(new Fraction(1, 5))

7-TET (Thai-like)

PropertyValue
Steps7
Step size171.4 cents
CharacterSimilar to Thai classical music
javascript
new Fraction(2).pow(new Fraction(1, 7))

22-TET (Shruti Scale)

PropertyValue
Steps22
Step size54.5 cents
CharacterClose to Indian classical shrutis
javascript
new Fraction(2).pow(new Fraction(1, 22))

24-TET (Quarter Tones)

PropertyValue
Steps24
Step size50 cents (quarter tone)
CharacterArabic maqam approximations
javascript
new Fraction(2).pow(new Fraction(1, 24))

53-TET (Mercator's)

PropertyValue
Steps53
Step size22.6 cents
CharacterExtremely close to just intonation
javascript
new Fraction(2).pow(new Fraction(1, 53))

53-TET is famous for nearly perfect fifths and thirds!

72-TET (Twelfth Tones)

PropertyValue
Steps72
Step size16.7 cents
CharacterIncludes 12-TET as subset, very fine control
javascript
new Fraction(2).pow(new Fraction(1, 72))

Non-Octave Systems

You can create TET systems based on any interval:

8-EDTri (8 Equal Divisions of the Tritave)

javascript
// 8 divisions of the 3:1 tritave
new Fraction(3).pow(new Fraction(1, 8))

5-ED5 (5 Equal Divisions of the Pentave)

javascript
// 5 divisions of the 5:1 "pentave"
new Fraction(5).pow(new Fraction(1, 5))

Golden Ratio TET

javascript
// Using phi (≈1.618) as the interval
// Note: This requires a decimal approximation
new Fraction(1618, 1000).pow(new Fraction(1, 7))

Saving Custom TET Modules

  1. Create your scale using the expressions above
  2. Test with playback
  3. Menu > Save Module
  4. Add to your Module Bar (see Module Bar)

Example Module JSON

json
{
  "baseNote": {
    "frequency": "new Fraction(440)",
    "startTime": "new Fraction(0)",
    "tempo": "new Fraction(60)",
    "beatsPerMeasure": "new Fraction(4)"
  },
  "notes": [
    {
      "id": 1,
      "frequency": "module.baseNote.getVariable('frequency')",
      "startTime": "module.baseNote.getVariable('startTime')",
      "duration": "new Fraction(1)",
      "instrument": "sine-wave"
    },
    {
      "id": 2,
      "frequency": "module.getNoteById(1).getVariable('frequency').mul(new Fraction(2).pow(new Fraction(1, 17)))",
      "startTime": "module.getNoteById(1).getVariable('startTime').add(module.getNoteById(1).getVariable('duration'))",
      "duration": "new Fraction(1)",
      "instrument": "sine-wave"
    }
  ]
}

Comparing TET Systems

How Many Steps Equal Common Intervals?

IntervalJust12-TET19-TET31-TET53-TET
Perfect fifth3/27111831
Major third5/4461017
Minor third6/535814

Higher divisions generally mean closer approximations to just intervals.

Tips

  1. Start with existing TET - Modify 12-TET, 19-TET, etc.
  2. Use small divisions first - 5-TET and 7-TET are easier to grasp
  3. Listen, don't calculate - Let your ears guide you
  4. Document your system - Note which intervals you're targeting
  5. Share your discoveries - Custom TET modules can be valuable to others

Mathematical Background

Why These Numbers?

Certain divisions of the octave approximate just intervals well:

  • 12: Good fifths, passable thirds
  • 19: Better thirds, slightly worse fifths
  • 31: Excellent thirds, good fifths
  • 53: Nearly perfect fifths AND thirds

The mathematical reason involves continued fractions of log₂(3/2) and log₂(5/4).

The Comma Problem

No equal temperament perfectly matches all just intervals. The difference is called a "comma":

CommaSizeDescription
Pythagorean23.5 cents12 fifths vs 7 octaves
Syntonic21.5 cents4 fifths vs major third + 2 octaves

Different TET systems distribute these commas differently.

Next Steps

Released under the RMT Personal Non-Commercial License