A rank-2 syntonic tuning system is determined by fixing the frequency ratio values of two linearly independent basis vectors. For almost all tuning systems, one of those basis vectors is the octave, P8, which we fix to a pure frequency ratio of two, t(P8) = 2/1, leaving us only one free parameter. If the second basis intervals of a rank-2 syntonic tuning system with pure octaves is set to a frequency ratio of 1, then an EDO is generated, i.e. we get a tuning system that divides the Octaves into logarithmically Equal Divisions. The most famous of these is 12 tone equal temperament, which can be generated by tempering out the diminished second, d2.
Setting that frequency ratio of the second basis value to 1 will be called "tempering out" throughout this post. We temper out d2 to get 12-TET.
Let's represent intervals in the (A1, d2) basis. This python code snippet might be of some help: it finds the name of a rank-2 interval with integral coefficients, for example, (7, 4) = P5 and (12, 7) = P8.
We can temper out any interval (a, b) besides (0, 0) = P1 to get an EDO tuning system. Oh, and of course you can't use P8 either if you've already set that to 2. And multiples of P8 don't work. Anyway. The number of divisions of the octave will be{edo_divisions = abs(a * 7 - b * 12) / gcd(a, b)}, where abs() is the absolute value function and gcd() is the greatest common divisor. We can substitute (a, b) = (0, 1) = d2 into this, and as expected we find that tempering out d2 produces a 12-EDO.
Interestingly, multiple intervals can be tempered out to generate EDO tuning systems with the same number of divisions. For example, tempering out any of these intervals
(49, 26) = AAAA27
(37, 19) = AAAA20
(25, 12) = AAAA13
(13, 5) = AAAA6
(-1, 2) = dddd3
(11, 9) = dddd10
(23, 16) = dddd17
(35, 23) = dddd24
(47, 30) = dddd31
will produce a 31-EDO. And maybe there are other intervals with larger coefficients that can do the same. Even more interestingly, they're not all the same EDO. They're all tuning systems that divide the octave into 31 logarithmically equal divisions, so they have the same pitches, but the tuning systems map different intervals to those pitches. For an example, let's look at how tempering out these intervals will map (7, 4) = P5 to the pitch space.
In general, to tune a rank-2 interval (m, n) in a tuning system, we start with our two basis intervals (a, b) and (c, d), and fixed values for them, t(a, b) = basis_value1 and t(c, d) = basis_value2. Then
frequency_ratio = t(m, n) = (basis_value1)^x * (basis_value2)^y
where
x = (d * m - c * n) / (a * d - b * c)
y = (a * n - b * m) / (a * d - b * c)
.
This simplifies a lot for EDOs. Since one of the basis vectors has a value of one, and one raised to a power is one, the frequency ratio formula just becomes:
frequency_ratio = 2^y
where
y = (a * n - b * m) / (a * 12 - b * 7)
.
With this, we're ready to calculate the frequency ratio for the perfect fifth (n, m) = P5 = (7, 4) when we temper out different intervals (a, b). I think this is the least messy way to show them:
AAAA27: 14/31
AAAA20: 15/31
AAAA13: 16/31
AAAA6: 17/31
dddd3: 18/31
dddd10: 19/31
dddd17: 20/31
dddd24: 21/31
dddd31: 22/31
.
The first line is to be read like this: tempering out a four times augmented 27th interval AAAA27, i.e. t(AAAA27) = 1, produces a 31-EDO tuning system in which the perfect fifth has a frequency ratio of t(P5) = 2^(14/31).
Isn't the spread on that table crazy? If you compose a song with a P1 and a P5, the ratio between them could be anywhere from 1.36 to 1.64 depending on the choice of tuning system. A ratio of 1.36 is like a P4 in 12-TET (or should I say, the 12-TET generated by tempering out d2?) and a ratio of 1.64 is like a M6. Four semitones! Holy shit.
When I first learned this, I thought, "Well, dang, I guess you can't compose music in interval space." But I can do anything. Let's take a song and hear what it sounds like in different 31 EDOs.
Here's a monophonic rendition of the folk tune "Down In The Valley" in a format I like to use that's heavily inspired by ABC notation: "G4,q C5,q D5,q | E5,d_h | C5,d_h | E5,q D5,q C5,q | D5,d_h | G4,q B4,q D5,q | F5,d_h | D5,d_h | B4,q C5,q D5,q | C5,d_h | G4,q C5,q D5,q | E5,d_h | C5,d_h | E5,q D5,q C5,q | D5,d_h | G4,q B4,q D5,q | F5,d_h | D5,d_h | B4,q C5,q D5,q | C5,d_h"
Notes consist of a pitch, like G4 or C5, a comma for a separator, and a note length, like q for quarter note or d_h for dotted half note. Bars are optionally separated by a pipe character |. I fixed C5 as the origin of my pitch space, despite it not being the lowest note in the song, so some of the song's pitches have associated intervals with 0 or negative ordinals, but it's fine:
"G4": "P-2",
"B4": "M0",
"C5": "P1",
"D5": "M2",
"E5": "M3",
"F5": "P4",
.
This mapping gives us a song in interval space: "P-2,q P1,q M2,q | M3,d_h | P1,d_h | M3,q M2,q P1,q | M2,d_h | P-2,q M0,q M2,q | P4,d_h | M2,d_h | M0,q P1,q M2,q | P1,d_h | P-2,q P1,q M2,q | M3,d_h | P1,d_h | M3,q M2,q P1,q | M2,d_h | P-2,q M0,q M2,q | P4,d_h | M2,d_h | M0,q P1,q M2,q | P1,d_h". Want to hear it rendered in the two most wildly differing 31-EDOs?
I thought I did too, but it's pretty bad. Tempering out the low end AAAA27 or the high end dddd31 both make the song fly all over the place. The familiar ordering of intervals from 12-TET is not preserved. Let's look at the table again:
(49, 26) = AAAA27
(37, 19) = AAAA20
(25, 12) = AAAA13
(13, 5) = AAAA6
(-1, 2) = dddd3
(11, 9) = dddd10
(23, 16) = dddd17
(35, 23) = dddd24
(47, 30) = dddd31
See how (-1, 2) = dddd3 has the smallest coefficients and the smallest ordinal in the interval name? That one works fine. Temper out dddd3 and it doesn't sound particularly different from 12-TET. Like I wouldn't have guessed if you'd randomly played it for me that it was in a microtonal tuning. I think there's some interesting mathematical investigation to be done here. There are some intervals like dddd3 that can be tempered out to produce tuning systems that sound something like 12-TET and there are others that make me regret getting up this morning. Heh heh, no it's not that bad.
Here's d2 (12-TET) in one ear and dddd3 in the other ear. It just has some nice width and warmth.
Here's AAAA27 in one ear and dddd31 in the other. It's something else.
Right now I think I can compose music in interval space rather than pitch space, but I need to find and target a class of related tuning systems that don't get too wibbly wobbly woo on me. But a little wibbly wobbly woo, that I'm okay with. Is there a class of tuning systems that induces the same 1D total ordering on 2D interval space as 12-TET? That's what I'm going to look for next. And they don't have to be EDOs, I just happened to see some EDOs with different P5s and thought it might make a good blog post.
Ooh! I just layered all four tuning systems together and got something approximately the right amount of spicy. Nice.
Huh! I tried some non-EDO tuning systems first (some of the ones named in ejlilley's Tuning.hs and two more that complete the pattern of using 5-limit just intonation values for rank-2 bases), and they all had the same total ordering over pitches as 12-TET, at least for the primitive rank-2 intervals (P1 m2 M2 m3 M3 P4 P5 m6 M6 m7 M7 P8).
Here are the values for the frequencies of the primitive rank-2 intervals above concert A, truncated to integers, for several non-EDO tuning systems. The values of 440 and 880 are omitted from all for brevity:
[463, 495, 521, 556, 586, 660, 695, 742, 782, 835]: 'P5', (3/2) # Pythagorean
[468, 492, 524, 552, 587, 658, 701, 737, 785, 826]: 'A4', (45/32) # Sixth-comma meantone
[469, 492, 525, 551, 588, 658, 702, 736, 786, 825]: 'm2', (16/15)
[470, 491, 526, 550, 588, 657, 704, 735, 787, 822]: 'M3', (5/4) # Quarter-comma meantone
[470, 492, 526, 550, 588, 658, 703, 736, 786, 823]: 'A6', (7/4) # Septimal
[473, 490, 528, 547, 589, 657, 706, 733, 788, 818]: 'm3', (6/5) # Third-comma meantone
[478, 488, 531, 543, 590, 655, 712, 728, 792, 809]: 'M2', (10/9)
[482, 486, 534, 538, 591, 654, 718, 724, 795, 801]: 'A5', (3/2) # Tetracot
.
So, that's pretty cool, right? Maybe it's not too hard to compose in interval space after all. Maybe things don't usually jump around too much. Next I'll look into EDOs that preserve the total order of the primitive intervals.
Okay! If you temper out these ones to make EDOs, they keep the same total ordering for primitive rank-2 intervals as 12-TET: [m2, d2, d3, dd2, dd3, dd4, ddd2, ddd3, ddd4, ddd5, ddd6, dddd2, dddd3, dddd4, dddd5, dddd6, dddd7, ddddd2, ddddd3, ddddd4, ddddd5, ddddd6, ddddd7, ddddd8, ddddd9, dddddd10, dddddd2, dddddd3, dddddd4, dddddd5, dddddd6, dddddd7, dddddd8, dddddd9, ddddddd10, ddddddd2, ddddddd3, ddddddd4, ddddddd5, ddddddd6, ddddddd7, ddddddd8, ddddddd9, dddddddd10, dddddddd2, dddddddd3, dddddddd4, dddddddd5, dddddddd6, dddddddd7, dddddddd8, dddddddd9, ddddddddd10, ddddddddd2, ddddddddd3, ddddddddd4, ddddddddd5, ddddddddd6, ddddddddd7, ddddddddd8, ddddddddd9, dddddddddd10, dddddddddd2, dddddddddd3, dddddddddd4, dddddddddd5, dddddddddd6, dddddddddd7, dddddddddd8, dddddddddd9, ddddddddddd10, ddddddddddd3, ddddddddddd4, ddddddddddd5, ddddddddddd6, ddddddddddd7, ddddddddddd8, ddddddddddd9, dddddddddddd10, dddddddddddd3, dddddddddddd4, dddddddddddd5, dddddddddddd6, dddddddddddd7, dddddddddddd8, dddddddddddd9, ddddddddddddd10, ddddddddddddd4, ddddddddddddd5, ddddddddddddd6, ddddddddddddd7, ddddddddddddd8, ddddddddddddd9, dddddddddddddd4, dddddddddddddd5, dddddddddddddd7, dddddddddddddd8]. They're all straight shooters.
And these ones, they have their own orders: [M2, m3, M3, P4, P5, m6, M6, m7, M7, m9, M10, A1, A2, A3, A4, A5, A6, A7, A8, A9, A11, AA1, AA2, AA3, AA4, AA5, AA6, AA7, AA8, AA9, AAA1, AAA2, AAA3, AAA4, AAA5, AAA6, AAA7, AAA8, AAAA1, AAAA13, AAAA2, AAAA20, AAAA27, AAAA3, AAAA4, AAAA5, AAAA6, AAAAA1, AAAAA2, AAAAA3, AAAAA4, AAAAAA1, AAAAAA2, AAAAAA3, AAAAAA4, AAAAAAA1, AAAAAAA2, AAAAAAAA1, AAAAAAAA2, AAAAAAAAA1, AAAAAAAAAA1, d1, d10, d11, d12, d13, d4, d5, d6, d7, d8, d9, dd1, dd10, dd11, dd12, dd5, dd6, dd7, dd8, dd9, ddd1, ddd10, ddd12, ddd7, ddd8, ddd9, dddd1, dddd10, dddd12, dddd17, dddd24, dddd31, dddd8, dddd9, ddddd1, ddddd10, dddddd1, ddddddd1, dddddddd1, ddddddddd1, dddddddddd1]. They're black sheep. Although for a few of them, the problem might just be that tempering out the interval results in an EDO with fewer divisions that 12, so some of the intervals end up having the same pitch, which means there's some ambiguity in the order when my sorting function looks at them. Like tempering out d1 produces a 7-EDO, and 7-EDO can sound totally badass.
Here are some black sheep that produce EDOs with 12 or more divisions: [AA2, AA4, AA5, AA6, AA7, AAA2, AAA3, AAA4, AAA6, AAA7, AAA8, AAAA13, AAAA2, AAAA20, AAAA27, AAAA3, AAAA5, AAAA6, AAAAA2, AAAAA3, AAAAA4, AAAAAA2, AAAAAA3, AAAAAA4, AAAAAAA2, AAAAAAAA2, dd10, dd12, dd5, dd6, dd8, dd9, ddd12, ddd7, ddd8, ddd9, dddd10, dddd12, dddd17, dddd24, dddd31, dddd8, dddd9, ddddd10]. I think they're legitimately unruly.
What EDOs do we get if we just look at the straight shooters above? A good number of them are repeated, like there's a regular series of increasingly diminished intervals that all produce 12-TETS, but if we just look at the shortest interval that tempers out to an n-EDO, then we have:
5-EDO: m2 = (1, 1)
12-EDO: d2 = (0, 1)
17-EDO: dd3 = (1, 2)
19-EDO: dd2 = (-1, 1)
26-EDO: ddd2 = (-2, 1)
27-EDO: dddd5 = (3, 4)
29-EDO: dddd4 = (1, 3)
31-EDO: dddd3 = (-1, 2)
33-EDO: dddd2 = (-3, 1)
37-EDO: ddddd7 = (5, 6)
39-EDO: ddddd6 = (3, 5)
40-EDO: ddddd2 = (-4, 1)
41-EDO: dddddd5 = (1, 4)
42-EDO: dddddd8 = (6, 7)
43-EDO: dddddd4 = (-1, 3)
45-EDO: dddddd3 = (-3, 2)
46-EDO: dddddd6 = (2, 5)
47-EDO: dddddd2 = (-5, 1)
49-EDO: ddddddd8 = (5, 7)
50-EDO: ddddddd4 = (-2, 3)
52-EDO: ddddddd10 = (8, 9)
53-EDO: ddddddd6 = (1, 5)
, and it keeps going up, but I think 53 is a good stopping point. Who ever needed more than 53 pitches per octave to make music? You probably know of someone if you're interesting in microtonal music, but still. Technically, if humans can just barely on average discriminate pitches that differ by 5 cents, then we could go up to 240-EDO, which has a step size of exactly 5 cents, but I won't.
For the black sheep intervals that produce EDOs with fewer than 12 divisions, I think these are the most likely to make cool music:
1-EDO: P5 = (7, 4)
2-EDO: M3 = (4, 2)
3-EDO: d5 = (6, 4)
3-EDO: m3 = (3, 2)
4-EDO: M10 = (16, 9)
4-EDO: d11 = (16, 10)
4-EDO: m6 = (8, 5)
5-EDO: M7 = (11, 6)
6-EDO: d12 = (18, 11)
7-EDO: d1 = (-1, 0)
8-EDO: d4 = (4, 3)
9-EDO: A2 = (3, 1)
10-EDO: d10 = (14, 9)
11-EDO: d6 = (7, 5)
, although that A2 for generating 9-EDO seems a little sus, since none of the other good intervals were augments.
There are some conspicuous gaps in the straight shooters. Like, examine:
12: d2
17: dd3
19: dd2
26: ddd2
Where are 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, and 25-EDO? Maybe those are unnatural tunings in some sense. Or maybe I need to use weirder intervals, like things that have negative ordinals, e.g. a diminished negative fourth. I don't know! It's fertile ground for inquiry. Edit from the distant future: A 22-EDO exists that has the same order for the primitive intervals as 12-TET. It's generated by ddd4. The rest are genuine gaps.
In the mean time, I feel confident that I can make good sounding music in [17, 19, 22, 26, 27, 29, 31, 33, 37, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 52, 53]-EDO by composing in pitch space and then tempering out the relevant straight-shooter interval. Rousing success! I wonder if they differ in their ordering of the diminished and augmented intervals.
Oh wow, there is a lot of structure in the straight shooters.
These increase by 5 divisions, effectively because they're increasing by 12 and decreasing by 7:
(0, 1) | 12-EDO: d2
(1, 2) | 17-EDO: dd3
(2, 3) | 22-EDO: ddd4
(3, 4) | 27-EDO: dddd5
(4, 5) | 32-EDO: dddd6
(5, 6) | 37-EDO: ddddd7
(6, 7) | 42-EDO: dddddd8
(7, 8) | 47-EDO: dddddd9
(8, 9) | 52-EDO: ddddddd10
.
These increase by 0 divisions:
(0, 1) | 12-EDO: d2
(0, 2) | 12-EDO: ddd3
(0, 3) | 12-EDO: ddddd4
(0, 4) | 12-EDO: ddddddd5
(0, 5) | 12-EDO: dddddddd6
(0, 6) | 12-EDO: dddddddddd7
(0, 7) | 12-EDO: dddddddddddd8
(0, 8) | 12-EDO: ddddddddddddd9
.
These increase by 0 divisions:
(1, 1) | 5-EDO: m2
(2, 2) | 5-EDO: d3
(3, 3) | 5-EDO: dd4
(4, 4) | 5-EDO: ddd5
(5, 5) | 5-EDO: ddd6
(6, 6) | 5-EDO: dddd7
(7, 7) | 5-EDO: ddddd8
(8, 8) | 5-EDO: ddddd9
(9, 9) | 5-EDO: dddddd10
.
These increase by 12 divisions:
(-1, 1) | 19-EDO: dd2
(-1, 2) | 31-EDO: dddd3
(-1, 3) | 43-EDO: dddddd4
(-1, 4) | 55-EDO: dddddddd5
(-1, 5) | 67-EDO: ddddddddd6
(-1, 6) | 79-EDO: ddddddddddd7
(-1, 7) | 91-EDO: ddddddddddddd8
.
These increase by 12 divisions:
(-7, 1) | 61-EDO: dddddddd2
(-7, 2) | 73-EDO: dddddddddd3
(-7, 3) | 85-EDO: dddddddddddd4
(-7, 4) | 97-EDO: dddddddddddddd5
.
These increase by 12 divisions:
(1, 1) | 5-EDO: m2
(1, 2) | 17-EDO: dd3
(1, 3) | 29-EDO: dddd4
(1, 4) | 41-EDO: dddddd5
(1, 5) | 53-EDO: ddddddd6
(1, 6) | 65-EDO: ddddddddd7
(1, 7) | 77-EDO: ddddddddddd8
(1, 8) | 89-EDO: dddddddddddd9
.
These increase by 7 divisions:
(0, 1) | 12-EDO: d2
(-1, 1) | 19-EDO: dd2
(-2, 1) | 26-EDO: ddd2
(-3, 1) | 33-EDO: dddd2
(-4, 1) | 40-EDO: ddddd2
(-5, 1) | 47-EDO: dddddd2
(-6, 1) | 54-EDO: ddddddd2
(-7, 1) | 61-EDO: dddddddd2
(-8, 1) | 68-EDO: ddddddddd2
(-9, 1) | 75-EDO: dddddddddd2
.
These decrease by 7 divisions:
(1, 7) | 77-EDO: ddddddddddd8
(2, 7) | 70-EDO: dddddddddd8
(3, 7) | 63-EDO: ddddddddd8
(4, 7) | 56-EDO: dddddddd8
(5, 7) | 49-EDO: ddddddd8
(6, 7) | 42-EDO: dddddd8
.
These would decrease by 7 divisions, except the components of (3, 9) have a common factor, so instead of an 87-EDO, they give us 87/3 = 29-EDO:
(2, 9) | 94-EDO: ddddddddddddd10
(3, 9) | 29-EDO: dddddddddddd10
(4, 9) | 80-EDO: ddddddddddd10
(5, 9) | 73-EDO: dddddddddd10
.
And so forth. I still don't know what makes an interval a straight shooter or a black sheep, except maybe d2 >= A1 to be a straight shooter. Let's look at the black sheep intervals that were diminished and gave EDOs of 12 divisions or more:
(5, 4) | 13-EDO: dd5
(6, 5) | 18-EDO: dd6
(7, 6) | 23-EDO: ddd7
(8, 7) | 28-EDO: dddd8
(9, 7) | 21-EDO: ddd8
(9, 8) | 33-EDO: dddd9
(10, 7) | 14-EDO: dd8
(10, 8) | 13-EDO: ddd9
(10, 9) | 38-EDO: ddddd10
(11, 8) | 19-EDO: dd9
(11, 9) | 31-EDO: dddd10
(13, 9) | 17-EDO: dd10
(15, 11) | 27-EDO: dddd12
(16, 11) | 20-EDO: ddd12
(17, 11) | 13-EDO: dd12
(23, 16) | 31-EDO: dddd17
(35, 23) | 31-EDO: dddd24
(47, 30) | 31-EDO: dddd31
Hey, hey! All of the A1s > d2s. ... And it works for all the other black sheep too, except for these guys:
(-1, 0) | 7-EDO: d1
(-2, 0) | 7-EDO: dd1
(-3, 0) | 7-EDO: ddd1
(-4, 0) | 7-EDO: dddd1
(-5, 0) | 7-EDO: ddddd1
(-6, 0) | 7-EDO: dddddd1
(-7, 0) | 7-EDO: ddddddd1
(-8, 0) | 7-EDO: dddddddd1
(-9, 0) | 7-EDO: ddddddddd1
(-10, 0) | 7-EDO: dddddddddd1
.
I hereby pronounce them "secretly good". And now we can make that badass 7-EDO song from the link! It was a cover of the theme song from House M.D, which is "Teardrop" by Massive Attack. Did you listen to it? Yeah, that's okay, you don't have to like it.
Things get ever so slightly more complicated if you allow negative b. If the tempered interval is (a, b) and b is negative, then it's always a black sheep unless a = b, in which case we get a 5-EDO:
(-1, -1) | 5-EDO: M0
(-2, -2) | 5-EDO: A-1
(-3, -3) | 5-EDO: AA-2
(-4, -4) | 5-EDO: AAA-3
(-5, -5) | 5-EDO: AAA-4
(-6, -6) | 5-EDO: AAAA-5
(-7, -7) | 5-EDO: AAAAA-6
(-8, -8) | 5-EDO: AAAAA-7
(-9, -9) | 5-EDO: AAAAAA-8
(-10, -10) | 5-EDO: AAAAAAA-9
.
The sequence [5, 7, 12, 17, 19, 22, 26, 27, 29, 31, 32, 33, 37, 39, 40, 41, 42, 43, 45, 46, 47, 49, ...] isn't in OEIS. Lemme double check its members before I give it a name that it shall carry for the rest of human history....
Here's the full sequence up to 240: [5, 7, 12, 17, 19, 22, 26, 27, 29, 31, 32, 33, 37, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 52, 53, 54, 55, 56, 57, 59, 61, 62, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, ...].
I hereby name this.... the EDO sequence. There appear to be finitely many missed EDOs. Up to 10,000-EDO, the sequence is only missing [1, 2, 3, 4, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 20, 21, 23, 24, 25, 28, 30, 34, 35, 36, 38, 44, 48, 51, 58, 60, 66, 78, 84, 108, 156] among the positive integers. This sequence is also not on OEIS. Chumps.
The missed EDOs contain 24-EDO (so there isn't an interval you can temper out to get quarter tone harmony that respects the order of primitive intervals in 12-TET) and a few other EDOs the number of octave divisions for which are small integer multiples of 12: 24, 36, 48, 60. The first integer multiple of 12 we get after 12-TET is 72-TET, which breaks each 12-TET step into 6 logarithmically equal pieces. So, uh, maybe quarter tone harmony should be analyzed as a subset of 72-EDO? That doesn't sound right. I'll have to make a post about quarter tone harmony where I figure out what's going on there.
Want a treat for getting to the end? The previous code snippet found names for intervals in the (A1, d2) basis.
This one does the opposite and finds intervals in the (A1, d2) basis if you supply the names.