Small Intervals in 5-Limit Just Intonation

I've never seen two tables give all the same names for intervals in 5-limit just intonation. The Xenharmonic wiki differs from Wikipedia differs from Anatomy Of An Octave. So of course I'm adding another system to the mix. It is ejlilley's system (Haskell code here) except that he uses historical names for some of the 2nd intervals ("lesser major seconds", "greater major seconds", and variations of those) where I'm just going for straight simplicity, unencumbered by historical names. Tremendous praise to ejlilley for his work. No one has ever explained just intonation to me in words a tenth as well as he did in code.

Motivation: 5-limit just intonation is a rank-3 tuning system (i.e. represented by vectors with three component numbers), and the interval names should naturally extend those of rank-2 tuning system (the naming system and algebra for which I also learned from ejlilley). In particular, all of the intervals here either have rank-2 names, or they have rank-2 names preceded by "Grave" or "Acute" (or repetitions of one of those, like "Grave grave diminished second"). In this system, we don't need a random mix of extra adjectives like narrow, wide, semi-augmented, semi-diminished, Pythagorean, classic, greater, or lesser. We also don't need extra nouns like diesis, comma, and limma. It's so nice and tidy.

Here's the general structure of names: An interval has zero or more "Grave"s and "Acute"s at the front, but not both. Then the interval has zero or more "diminished"s and "augmented"s, but not both. Then the interval has one of three sonorities (Major, Minor, or Perfect), and finally there's an ordinal number (First, Second, Third, Fourth, ...). The Perfect and Minor sonorities are omitted for brevity when preceded by a diminution. The Perfect and Major sonorities are also omitted when preceded by an augmentation. The Perfect sonority is also omitted when immediately preceded by an Acute or Grave. For even more brevity, we write "Acdd2" for "acute diminished diminished second" and "GrM6" for "grave major sixth" and "Acm6" for "acute minor sixth" and so on.

Ejlilley's code shows the logic for assigning names to intervals represented in the (Ac1, A1, d2) basis, and this post is mostly just showing off how beautiful his system is. He walks you through building up all the intervals from the basis vectors, and then he condenses it all down and generalizes it in the jToQual function/switch-case thing. The only changes you need to make to jToQual so that the 2nd intervals are as regular and beautiful as the others is to replace Lesser with Maj on line 242, and then delete line 243. I didn't actually run his code ever, I just translated it line for line into Python. But it worked in Python.

The more common basis for representing 5-limit just intonation intervals is the [P8, P5, M3] basis. The square brackets around these basis vectors aren't doing anything different from the parentheses; I just like to distinguish the two bases that way. 

From knowing that a diminished fourth is [1, 0, -2] in the [P8, P5, M3] basis, and that the frequency ratios associated with the basis vectors in 5-limit just intonation are (2/1), (3/2), and (5/4) respectively, you can find d4's frequency ratio as (2/1)^(1) * (3/2)^(0) * (5/4)^(-2) = 32/25.

You can also calculate frequency ratios using the (Ac1, A1, d2) basis. The frequency ratios for the basis vectors are (81/80), (25/24), and (128/125) respectively, and you just raise those to the appropriate exponents and multiply together like before. The vector for the diminished fourth is (1, 4, 3) in the (Ac1, A1, d2) basis, so the frequency ratio is (81/80)^(1) * (25/24)^(4) * (128/125)^(3) = 32/25, just as before.

Below I give lots of intervals by their names, by their (Ac1, A1, d2) basis representations, by their [P8, P5, M3] basis representations, and by their frequency ratios. I've limited myself to intervals with small names, in the sense that they don't have repetitions of "grave"s, "acute"s, "diminished"s or "augmented"s.

Grd1 : (-1, -1, 0) :: [2, -3, -1] = 128/135
Gr1 : (-1, 0, 0) :: [2, -4, 1] = 80/81
Grd2 : (-1, 0, 1) :: [3, -4, -2] = 2048/2025
GrA1 : (-1, 1, 0) :: [2, -5, 3] = 250/243
Grm2 : (-1, 1, 1) :: [3, -5, 0] = 256/243
GrM2 : (-1, 2, 1) :: [3, -6, 2] = 800/729
GrA2 : (-1, 3, 1) :: [3, -7, 4] = 2500/2187
d1 : (0, -1, 0) :: [0, 1, -2] = 24/25
P1 : (0, 0, 0) :: [0, 0, 0] = 1/1
d2 : (0, 0, 1) :: [1, 0, -3] = 128/125
A1 : (0, 1, 0) :: [0, -1, 2] = 25/24
m2 : (0, 1, 1) :: [1, -1, -1] = 16/15
M2 : (0, 2, 1) :: [1, -2, 1] = 10/9
Grd3 : (0, 2, 2) :: [2, -2, -2] = 256/225
A2 : (0, 3, 1) :: [1, -3, 3] = 125/108
Grm3 : (0, 3, 2) :: [2, -3, 0] = 32/27
GrM3 : (0, 4, 2) :: [2, -4, 2] = 100/81
Grd4 : (0, 4, 3) :: [3, -4, -1] = 512/405
GrA3 : (0, 5, 2) :: [2, -5, 4] = 625/486
Gr4 : (0, 5, 3) :: [3, -5, 1] = 320/243
GrA4 : (0, 6, 3) :: [3, -6, 3] = 1000/729
Acd1 : (1, -1, 0) :: [-2, 5, -3] = 243/250
Ac1 : (1, 0, 0) :: [-2, 4, -1] = 81/80
Acd2 : (1, 0, 1) :: [-1, 4, -4] = 648/625
AcA1 : (1, 1, 0) :: [-2, 3, 1] = 135/128
Acm2 : (1, 1, 1) :: [-1, 3, -2] = 27/25
AcM2 : (1, 2, 1) :: [-1, 2, 0] = 9/8
d3 : (1, 2, 2) :: [0, 2, -3] = 144/125
AcA2 : (1, 3, 1) :: [-1, 1, 2] = 75/64
m3 : (1, 3, 2) :: [0, 1, -1] = 6/5
M3 : (1, 4, 2) :: [0, 0, 1] = 5/4
d4 : (1, 4, 3) :: [1, 0, -2] = 32/25
A3 : (1, 5, 2) :: [0, -1, 3] = 125/96
P4 : (1, 5, 3) :: [1, -1, 0] = 4/3
A4 : (1, 6, 3) :: [1, -2, 2] = 25/18
Grd5 : (1, 6, 4) :: [2, -2, -1] = 64/45
Gr5 : (1, 7, 4) :: [2, -3, 1] = 40/27
Grd6 : (1, 7, 5) :: [3, -3, -2] = 1024/675
GrA5 : (1, 8, 4) :: [2, -4, 3] = 125/81
Grm6 : (1, 8, 5) :: [3, -4, 0] = 128/81
GrM6 : (1, 9, 5) :: [3, -5, 2] = 400/243
GrA6 : (1, 10, 5) :: [3, -6, 4] = 1250/729
Acd3 : (2, 2, 2) :: [-2, 6, -4] = 729/625
Acm3 : (2, 3, 2) :: [-2, 5, -2] = 243/200
AcM3 : (2, 4, 2) :: [-2, 4, 0] = 81/64
Acd4 : (2, 4, 3) :: [-1, 4, -3] = 162/125
AcA3 : (2, 5, 2) :: [-2, 3, 2] = 675/512
Ac4 : (2, 5, 3) :: [-1, 3, -1] = 27/20
AcA4 : (2, 6, 3) :: [-1, 2, 1] = 45/32
d5 : (2, 6, 4) :: [0, 2, -2] = 36/25
P5 : (2, 7, 4) :: [0, 1, 0] = 3/2
d6 : (2, 7, 5) :: [1, 1, -3] = 192/125
A5 : (2, 8, 4) :: [0, 0, 2] = 25/16
m6 : (2, 8, 5) :: [1, 0, -1] = 8/5
M6 : (2, 9, 5) :: [1, -1, 1] = 5/3
Grd7 : (2, 9, 6) :: [2, -1, -2] = 128/75
A6 : (2, 10, 5) :: [1, -2, 3] = 125/72
Grm7 : (2, 10, 6) :: [2, -2, 0] = 16/9
GrM7 : (2, 11, 6) :: [2, -3, 2] = 50/27
Grd8 : (2, 11, 7) :: [3, -3, -1] = 256/135
GrA7 : (2, 12, 6) :: [2, -4, 4] = 625/324
Gr8 : (2, 12, 7) :: [3, -4, 1] = 160/81
GrA8 : (2, 13, 7) :: [3, -5, 3] = 500/243
Acd5 : (3, 6, 4) :: [-2, 6, -3] = 729/500
Ac5 : (3, 7, 4) :: [-2, 5, -1] = 243/160
Acd6 : (3, 7, 5) :: [-1, 5, -4] = 972/625
AcA5 : (3, 8, 4) :: [-2, 4, 1] = 405/256
Acm6 : (3, 8, 5) :: [-1, 4, -2] = 81/50
AcM6 : (3, 9, 5) :: [-1, 3, 0] = 27/16
d7 : (3, 9, 6) :: [0, 3, -3] = 216/125
AcA6 : (3, 10, 5) :: [-1, 2, 2] = 225/128
m7 : (3, 10, 6) :: [0, 2, -1] = 9/5
M7 : (3, 11, 6) :: [0, 1, 1] = 15/8
d8 : (3, 11, 7) :: [1, 1, -2] = 48/25
A7 : (3, 12, 6) :: [0, 0, 3] = 125/64
P8 : (3, 12, 7) :: [1, 0, 0] = 2/1
A8 : (3, 13, 7) :: [1, -1, 2] = 25/12
Acd7 : (4, 9, 6) :: [-2, 7, -4] = 2187/1250
Acm7 : (4, 10, 6) :: [-2, 6, -2] = 729/400
AcM7 : (4, 11, 6) :: [-2, 5, 0] = 243/128
Acd8 : (4, 11, 7) :: [-1, 5, -3] = 243/125
AcA7 : (4, 12, 6) :: [-2, 4, 2] = 2025/1024
Ac8 : (4, 12, 7) :: [-1, 4, -1] = 81/40
AcA8 : (4, 13, 7) :: [-1, 3, 1] = 135/64

Conversion between the (Ac1, A1, d2) and [P8, P5, M3] bases is straightforward if you know the representations of the basis vectors in the other system - in particular, if you know that:

    Ac1 = (1, 0, 0) :: [-2, 4, -1]
    A1 = (0, 1, 0) :: [0, -1, 2]
    d2 = (0, 0, 1) :: [1, 0, -3]

and that

    P8 = [1, 0, 0] =  (3, 12, 7)
    P5 = [0, 1, 0] = (2, 7, 4)
    M3 = [0, 0, 1] = (1, 4, 2)
.

If we call the components of a vector in the (Ac1, A1, d2) representation (m, n, o) and we call the components of a vector in the [P8, P5, M3] basis [p, q, r], then converting from (m, n, o) to [p, q, r] requires only:

p = -2*m + 0*n + 1*o
q = 4*m + -1*n + 0*o
r = -1*m + 2*n - 3*o

You can see that the columns of coefficients are just the (Ac1, A1, d2) basis vectors represented in the [P8, P5, M3] basis.

Likewise, to convert from [p, q, r] to (m, n, o), we only require:

m = 3*p + 2*q + 1*r
n = 12*p + 7*q + 4*r
o = 7*p + 4*q + 2*r

And likewise here, the columns are [P8, P5, M3] in the (Ac1, A1, d2) basis.


Let me say that another way: to convert from one basis to a second, you find the old basis vectors in the new basis, and then convert the rows of those vectors into columns in a little matrix function.

I have some other nice functions for playing with Just Intonation, like for finding [p, q, r] tuples from frequency ratios, but I think that's a good place to stop. I wanted to show you that there's a simple system for naming these things, and that everyone else looks ridiculous compared to the upright, shining example of ejlilley.

No comments:

Post a Comment