Monday, February 2, 2026

Just Keep Going

The piece I posted a few days sounded fun enough, so I thought I would make another piece in the same tuning and scale:

87edo 4x4x4x4 scale 26.

Both pieces have 256 measures. The earlier piece had the pieces arranged in a 16x16 square, which provides plenty of room for wandering around the tuning space. The 4x4x4x4 arrangement of the new piece constrains things to be more orderly, to provide more structure for the ear to recognize. This piece is also a snapshot of the thermodynamic evolution at a somewhat cooler point relative to the phase transition, which should also provide more structure.

My fascination with phase transitions goes back to my sophomore year in college. Professor Stephen Schnatterly gave a wonderful demo of an inverted pendulum showing a transition and spontaneous symmetry breaking, as an analogy for a phase transition. That got me to look into Stanley's book Introduction to Phase Transitions and Critical Phenomena. In that book there are some images from a computer simulation of the Ising model. Nowadays, of course, computer simulations are not so exotic as they were in the early 1970s! Professor Dan Schroeder has a nice one on the web: Ising Model Simulation.

My interests in software and phase transitions led me to work under Professor Elliott Lieb for my first semester junior independent research. Lieb's idea was to look at the partition functions for lattice gasses. Lattice gasses are similar to the Ising model. Their partition functions are polynomials. If the zeroes of these polynomials approach the positive real axis as the size of the system increases, that would be a sign of a phase transition. Lieb pointed to a theorem in Marden's book Geometry of Polynomials: one can construct a set of matrices from the coefficients of a polynomial; if the determinants of these matrices all have, hmmm, some particular sign, then the zeroes of the polynomial will be in the negative half plane, i.e. will not be anywhere near the positive real line. If I could compute these determinants from the partition functions of larger and larger lattice gasses, and they all showed zeroes in the negative half plane, well, that'd be good evidence that lattice gasses don't have phase transitions! Ha, I do wonder how much of this am I remembering correctly!

So my research project was to compute determinants for a bunch of largish matrices. I had told Lieb that I was a computer programmer. Well, one with very limited skills, it turned out! The textbook formula for determinants has a daunting computational complexity, growing as the factorial of the size of the matrix. That's the formula I ended up using, which limited me to very small matrices. That was pretty much the end of my physics career!

Here's a curious later development, if anyone wants to pick up the ball. Some 25 years after that disastrous semester, I found myself once again in the land of large matrices. I don't remember the exact details, but we were computing reached states in finite state machines, using binary decision diagrams. Professor Edmund Clarke noticed a similarity to Gaussian elimination in sparse matrices. His observation led me to the theory of Tree Decomposition, a part of graph theory.

Gaussian elimination is how one should properly compute determinants. Gaussian elimination can transform a matrix to half-diagonal form, and then one simply multiplies the matrix elements along the diagonal. Gaussian elimination can still be a bit costly for large matrices. If the matrix can be kept sparse the cost can stay low. Tree decomposition is a way to see how the sparsity of a matrix can be preserved during Gaussian elimination. Tree width is the measure of this preservable sparsity.

So here is a grand research proposal: those matrices of Marden, whose determinants I was to compute - how does their tree width grow as the size of the lattice gas system grow? Ha, I am still trying to salvage my physics career, fifty years later!

Here is someone poking around in this general territory, as a starting point: Phase Transition of Tractability in Constraint Satisfaction and Bayesian Network Inference

Monday, January 26, 2026

1029:1024

Dividing octaves into 87 equal steps, 87edo, has some quite precise approximations for consonant intervals. But the details of how these approximations combine, the algebra of the intervals, is worth exploring too.

This is a tonnetz diagram for 87edo. Each cell represents a pitch class, i.e. a pitch with octaves treated as equivalent. To the right of a 0 cell is a 51 cell: a perfect fifth is 51 steps of 87edo. Above a 0 cell is a 28 cell: a major third is 28 steps of 87edo. 87edo also has a good approximation for the less conventional 8:7 interval: 17 steps. A nice feature of all this is that 3*17 = 51, i.e. moving by 8:7 three times, one arrives at 3:2, at least as those intervals are approximated by 87edo. This is the same as saying that 87edo tempers out the comma 1029:1024.

This feature of 87edo can be used to construct a nice scale, as highlighted in the diagram above. This scale is generated by the 17 step approximation of 8:7. The scale has 26 notes per octave, with the gaps between the scale notes being 2 and 9 steps of 87edo. 87edo also tempers out 245:243, which this scale also traverses. So there are nine different major thirds in the scale: three clusters of three major thirds. Each cluster is in the shape of a diatonic scale. So this scale looks like three diatonic scales with a bit of connective tissue.

87edo does not temper out the syntonic comma, so conventional music will not work very well in this tuning system. The diatonic clusters have some unresolved tension. We can associate the white keys on a piano with some pitch classes on this tonnetz diagram: F=0, C=51, G=15, A=28, E=79, B=43. The challenge is with the D. It could be 64, to make it a perfect fourth from A. Or it could be 66, to make it a perfect fifth from G. This gap of two steps of 87edo is how 87edo represents the syntonic comma.

Some sound: 87edo scale 26.

Sunday, January 25, 2026

Tamp It Down

I am always hunting for a balance between order and chaos in the music I create. The software I have been tweaking for the last several years always builds music from a sequence of measures of equal length. I can have many short measures or fewer long measures, but the measures in a single piece have the same length.

The measures are broken up into a rhythmic pattern of notes. The measures in a piece will often have a variety of patterns. In today's piece there are 8 different patterns for the measures. There are 216 measures in the piece. This piece introduces a new bit of code, which decides how to distribute the 8 patterns across the 216 measures. In the past, I used a sort of random walk. This new approach uses a recursive approach that provides a lot more repetition: a lot more order. The pattern sequence looks a bit like DDCDDCBDDCDDCBA.

Another source of increased order is how the rhythmic patterns are correlated between the voices. In the past, the random walks were independent between the voices. In the new code, the rhythmic patterns vary the same way in all the voices.

This piece is in 87edo, using a consonance function based on the primes 2, 3, 5, and 7: 87edo recurse.

Thursday, January 22, 2026

Lost in Space

There are many parameters in the computer code that I've written to generate musical scores. Really the whole program is one big parameter! Someday maybe I will have a single program that can read a parameter file, so there will be a clear distinction between the code and the parameters that control it. But what I do instead is just edit the program itself for each new piece.

The program uses a random number generator to decide many of the details in the score. The random number generator is controlled by a seed. I can just change the seed to get multiple pieces that are all similar, with the same gross structure.

A fundamental parameter is the tuning system. I have some code that can work with more general tuning systems, but most of the code is limited to dividing octaves into some number of equal steps. So the number of steps per octave is a fundamental parameter. The piece linked below uses the tuning system where octaves are divided into 53 equal steps.

A table of interval scores is constructed based on a set of prime numbers. So another parameter is the prime numbers that are to define consonance. The primes 2, 3, and 5 are a common choice, which is used in the piece linked below. Sometimes I will add the prime 7. So far the largest prime I have used is 19, but the code isn't really limited. The construction of the interval score table does slow down as the number of primes increases, though. The table construction code has some other paramters that I'll tweak. The program writes the table to a file, so I can check that file to see if the table looks reasonable. If it doesn't, I can tweak some parameters in the code to make the table look better. Mostly it's just a matter of getting a good range of scores, so some intervals will be much preferred over other intervals. But the range shouldn't be too extreme, or the pitch selection algorithm can get stuck too easily.

The rhythmic topology is another key parameter. The basic rhythmic parameters are the length of each measure and the number of measures. The measures are arranged in a cubical array of arbitrary dimensionality. In the piece linked below, each measure is about 35 seconds long, and there are 64 measures, arranged as a 4x4x4 array.

Measures are divided into individual notes of varying length. I have used several different algorithms to divide up measures, each of which has multiple parameters.

The number of voices in the piece is another parameter. Here I am using 3 voices.

That's a sketch of the control I have over what gets generated! Here's the latest output: 53edo 4x4x4 scale 34.

Saturday, January 17, 2026

Neutral Thirds

I saw some discussion on a facebook tuning group about neutral thirds in Persian music, attributed to Mansour Zalzal in the 9th Century. A neutral third is between a major third and a minor third. Since a major third and a minor third combine to form a perfect fifth, a neutral third should be about half of a perfect fifth. Zalzal evidently proposed 27:22 as a neutral third. Squaring this gives 729:484. A perfect fifth would be 726:484, so Zalzal's neutral third is quite accurate.

This looked worth exploring. What equal divisions of the octave work well with ratios involving the prime number 11? 87edo is very good, but it is a bit strange: it doesn't temper the schisma, it has three circles of fifths, etc. 65edo looks good, though!

The Persian scales discussed in the tuning group have 17 notes per octave. The neutral third corresponds to 19 steps of 65edo, or 19\65. A 17 note scale generated by neutral thirds has the Moment of Symmetry property, e.g. the scale has two different step sizes: 3\65 and 5\65.

This is a table of the 17 notes, in terms of cents.

Here's an example of what it sounds like: 65edo scale 17.

Friday, January 9, 2026

114edo Tweak

In yesterday's post I mentioned that the scale there could probably get straightened out a bit, so that's what I did. The simpler structure has a simpler description, too! The scale is built of two similar sequences generated by the interval of 5 steps of 114edo. The pitch classes in the scale thus go 0, 5, 10, 15, ..., 55, and then 57, 62, 67, 72, ..., 112. So there are two intervals of 2 steps seperating the two sequences of 5 steps. The tonnetz diagram above looks much the same as yesterday's, but just a little more symmetric.

I made a new piece with this tweaked scale: 114edo 24b. I used a somewhat different process to make this. Both today's and yesterday's piece use my usual thermodynamic algorithm. Yesterday I started the simulation at a very high temperature and gradually cooled in until global order emerged spontaneously. The piece is a snapshot from around the transition temperature. In today's simulation, I just fixed the temperature at the transition temperature that I observed in yesterday's piece. I initialized the system with a traversal of the comma 245:243. This traversal is repeated eight times over the course of the piece.

Thursday, January 8, 2026

114edo

I've been exploring diaschismic tunings, tunings that temper out the diaschisma comma, 2048:2025. 2025 = 25 * 81, so the comma gets tempered by making both perfect fifths and major thirds a bit sharp. A few days ago I looked at 90edo, which has a perfect fifth sharp enough to do all the work, leaving the major third very close to just. Today's exploration is 114edo, which has perfect fifths and major thirds equally sharp, sharing the workload.

Looking at the tuning errors of 114edo, in the upper left area one can see that 3:1 and 5:1, corresponding to perfect fifths and major thirds, are not so accurate, being sharp enough to temper out the diaschisma. Since they are equally sharp, minor thirds, 5:3, are quite precise. But what jumped out at me with this table of errors is that 114edo has a quite accurate approximation for 7:1. That should spice things up!

Staring at the tonnetz diagram for a while and contemplating 7:1 which corresponds to 92 steps of 114... well, two steps of 7:1 would be 70 steps, which comes back near the the starting point. This corresponds to the comma 245:243, which I see people call the minor Bohlen-Pierce diesis. I looked for a scale that would support traversals of this and the diaschisma. I came up with the 24 note scale highlighted above. This is the union of two scales generated by the interval of 62 steps of 114edo, the two scales offset by 67 steps. As I have thought more about this, probably offsetting the scales by 5 steps would have been better, but I got pretty far down the road with the 67 step offset, so that's what I have here.

The tonnetz diagram layout shows perfect fifths, moving from a cell to its neighbor on the right, and major thirds, moving from a cell to its neighbor above. I used colors to show movement by 7:1. Each blue cell can move to a purple cell by a 7:1 interval. So an example of a traversal of 245:243 would be to start at a (blue) 0 cell and leap to a (purple) 92 cell, moving with a 7:1 interval. Then move by two perfect fourths, stepping left two cells, to a (blue) 72 cell. Leap by 7:1 again to a (purple) 50 cell. From there, move left three cells, three perfect fourths, to a 77 cell, and then up one cell, a major third, which brings one back to a 0 cell where the traversal started.

Here's what the scale sounds like: 114edo scale 24.