Comma Dial

Start from a just lattice. Each prime is a generator. Turn a dial to make a comma vanish. Two directions of the lattice become one direction. The rank drops by one. A scale closes. Built for Marcus Hobbs from his own explanation, on the hexany first.

THE IDEA

Each rank buys one comma

A generator per prime is just intonation itself. The hexany's lattice has four independent directions when you count the octave: 2, 3, 5 and 7. If every prime gets its own generator you have four generators, no error, no coincidences, and no two-step or three-step melody, because the scale never closes. Every time you temper one comma you fuse two of those directions into one and drop the rank by one, and that is where the melodic structure comes from. So the dial you are turning is how many commas vanish. Rank 4 is JI with zero commas. Rank 3 is two generators with one comma. Rank 2 is one generator with two commas. Rank 1 is equal temperament with three commas.
The explanation this page is built on. Session of 2026-10-12, after RANK3-001.

Station 1 shows the lattice with one generator per prime. Station 2 lists the commas. Station 3 is the dial. Station 4 shows the scales that close at each rank. Station 5 is the table of measured results. The page computes every number live from the monzos, except the receipts in station 5.

STATION 1

One generator per prime is just intonation

Each tone is a product of primes. Its monzo lists the exponent of each prime. To reach the tone, walk that many steps along each prime axis. The primes are the generators. The rank is the number of independent generators.

rank, with the octave
4
rank, octave-equivalent
3
generators
2, 3, 5, 7
tones
6
exact triads P / S
6 / 6
commas vanished
0

Two ways to count the rank. With the octave, the hexany is rank 4: generators 2, 3, 5 and 7. Octave-equivalent, it is rank 3: generators 3, 5 and 7, with pitch classes on a circle. The repo's SPEC.md counts octave-equivalent. This page counts with the octave, so that equal temperament is rank 1.

Just intonation never closes. Each new step of 3, 5 or 7 lands on a new pitch class. No finite scale contains the lattice and all its transpositions. So there is no MOS, no two-step pattern and no three-step pattern. The error is zero. The price is the open lattice.

lattice tone1/1, the rootlattice point that is not a tonelines: one step of a prime
tonecentsmonzo 2 · 3 · 5 · 7walk from 1/1
STATION 2

A comma is two routes to almost the same note

A comma is a lattice vector with a small pitch. Its positive exponents are one route. Its negative exponents are the other route. The two routes end a few cents apart. When the comma vanishes, the two ends are one note. Select a row to draw the comma on the lattice. Press Add to put it on the dial.

The list holds every comma under 60 cents. The box is |e3| ≤ 12, |e5| ≤ 6, |e7| ≤ 5. The Tenney height is at most 240. The page leaves out powers of a smaller comma.

Selected comma

Select a comma.

up route and its enddown route and its endarrow: the comma
commacentsmonzoup routedown routename
STATION 3

The dial: make a comma vanish

Each slot holds one comma and one slider. At 0 the comma is intact and the tuning is just. At 1 the comma is gone. Between 0 and 1 the comma shrinks and the tones move. The rank is discrete. It drops only when a slider reaches 1. Up to three independent commas can go.

The rule says how the comma's error is shared among the primes. The default matches the receipts in station 5. The prime rule is the usual minimax. The third rule keeps 3/2 pure when the commas permit it.

rank now
4
commas gone / shrinking
0 / 0
triads kept P / S
6 / 6
largest tone error
0.00¢

The lattice flattens along the comma. Points that differ by the comma slide together. At 1 they are one point and the lattice has one direction less.

just positiontone nowdial 1 routesdial 2 routesdial 3 routes

Generators now

primejust centstempered centserroras a sum of the generators

tonejustnowerror

Triads

A proportional triad has a middle tone at the arithmetic mean of the outer two frequencies, like 4:5:6. A subcontrary triad has a middle tone at the harmonic mean, like 10:12:15. The hexany has 6 of each. A triad survives when the tempered middle tone sits within the tolerance of its mean.

kindtriadmiddle to its mean, centsstatus
STATION 4

What closes now

STATION 5

What the receipts measured for the hexany

These rows come from the experiment logs. The page does not recompute them. Tolerance 2 cents. Triads are the exact proportional and subcontrary triads of the hexany, 12 in all. Each rank buys one comma. Each comma buys a smaller scale and costs some triads.

rankcommas gonegeneratorssmallest scaleerrortriads keptsource
4none2, 3, 5, 76 notes, the hexany itself012 of 12never closes
3225/224octave + two10 notes, three step sizes2.57¢4 of 12RANK3-001, 2026-10-12
31029/1024octave + two15 notes2.81¢10 of 12RANK3-001
365625/65536octave + two19 notes0.47¢12 of 12RANK3-001
32401/2400octave + two21 notes0.12¢12 of 12RANK3-001
332805/32768octave + two24 notes0.24¢12 of 12RANK3-001
22401/2400, 3136/3125octave + 193.787¢ (3→16, 5→2, 7→5)22 notes1.37¢10 of 12CPSFIT-001, 2026-10-10
22401/2400, 3136/3125the same31 notes0.74¢12 of 12CPSFIT-001
1threeone stepno ET from 5 to 72 notes holds the hexany within 2¢above 2¢not measuredCPSFIT-001, ET range 5 to 72
12401/2400, 3136/3125, 19683/19600one step of 9.231¢130-ET, the first ET within 2¢1.78¢see the dialcomputed on this page, not a receipt

The dekany CPS(5,2) on 1·3·5·7·9 has 41 exact triads. No one-generator chain below 37 notes holds all of them. Two generators hold the dekany in full at 29 notes within 0.65 cents, under the schisma 32805/32768.

RANK3-001, 2026-10-12.

The eikosany CPS(6,3) on 1·3·5·7·9·11 is rank 5 with the octave. Two generators stop at about 12 cents. It needs a third generator.

RANK3-001, 2026-10-12.

Marcus prefers fewer notes for melody. He would rather explore a 10-note scale than a 21-note scale. He does not need the generators to be nameable intervals. He wants to keep the triads. So the 10-note scale under 225/224 and the 15-note scale under 1029/1024 are the ones to explore first. The triad count is the price. The 10-note scale keeps 4 of 12. The 15-note scale keeps 10 of 12.

Session notes, 2026-10-12.
BACKGROUND

What the mathematics says

A val is an integer map from the primes to generator counts. A comma is a lattice vector that the val sends to zero. The set of all such vectors is the kernel of the val. Each independent comma in the kernel lowers the rank by one. With all primes free, the kernel is empty and the lattice is just intonation. This page builds the val from the chosen commas by integer column reduction, so the kernel is exactly the chosen commas and nothing smaller.

Standard regular temperament theory, in the vocabulary of experiments/lattice/SPEC.md.

Rank counts the independent generators. With the octave, a 7-limit lattice is rank 4 and equal temperament is rank 1. Octave-equivalent, the same lattice is rank 3 and an MOS is rank 1. The repo's SPEC.md uses the octave-equivalent count. This page uses the count with the octave. The difference is always one.

experiments/lattice/SPEC.md, "Rank accounting".

With two generators and the octave, the scales come from Viggo Brun's three-term algorithm. At each level the largest of three intervals is replaced by its difference with the second (calc AB) or the third (calc AC). Each step of the scale is an exact integer sum of the octave and the two generators. Erv Wilson described the algorithm in "Viggo Rhythm". Marcus Hobbs implemented it in the iOS Wilsonic in 2016 with a balance rule for the order of the two new pieces. This page ports that implementation from experiments/lattice/brun3.py.

Erv Wilson, anaphoria.com/ViggoRhythm.pdf. Wilsonic_v_1_8_6/Wilsonic/Brun/Brun3.m, 2016.

The tuning rule on this page keeps the octave pure. The default rule makes the largest error of any lattice tone as small as possible. For one comma this gives the error floors in the receipts. On the hexany, 225/224 gives 7.71/3 = 2.57 cents. 1029/1024 gives 8.43/3 = 2.81. 65625/65536 gives 2.35/5 = 0.47. 2401/2400 gives 0.72/6 = 0.12. The schisma gives 1.95/8 = 0.24. The prime rule shares the error over the primes instead. Between 0 and 1 the page shrinks the comma to the matching fraction of its size. The same rule applies. So one comma moves the tones in a straight line.

Checked by hand against RANK3-001, 2026-10-12.

The two generators of a rank-3 quotient are a coordinate choice. The comma is the invariant. The same temperament arrives from many generator pairs, and the Brun3 scale sizes depend on the pair. So station 4 searches small integer changes of basis and reports the pair with the smallest scale that holds the lattice.

RANK3-001 finding, 2026-10-12.

The receipts. CPSFIT-001 (2026-10-10): no equal temperament from 5 to 72 notes holds the hexany within 2 cents. One generator of 193.787 cents holds the hexany at 22 notes within 1.37 cents with 10 of 12 triads. The same generator holds it at 31 notes within 0.74 cents with all 12. RANK3-001 (2026-10-12): two generators hold the hexany at 10, 15, 19, 21 and 24 notes under one comma each. Two generators hold the dekany with 9 at 29 notes under the schisma. This page adds one computed fact. The first equal temperament within 2 cents of the hexany is 130-ET at 1.78 cents. 73-ET misses by 8.2 cents on 5/4. The session note that named 73 as the first misread the 5 to 72 range.

experiments/lattice/FINDINGS.md. 130-ET computed on this page from the patent val ⟨130 206 302 365].
HANDOFF

Prompt for the next session

This text describes the current state of the page in plain language. Copy it into Claude to continue the work.