First, about my general spring model. It is an analog of the physical world; there, springs behave as follows: resisting force is proportional to displacement times spring constant. The energy held by a spring is the integral of force over distance of displacement, which works out to being proportional to the square of displacement.
In my model, energy is the analog of pain, refering to the displeasure of our ears to out-of-tune intervals (chords being represented in this model as a set of dyads, with some awareness of otonal vs. utonal chords). Displacement is the analog of tuning motion, with the rest point being exact just intonation.
By setting up a big spring matrix and relaxing it successively, I can minimize pain and hope to approach a nicely tuned piece (it can be shown that minimum energy is equivalent to each node of the matrix relaxing fully; i.e., having zero net force). For each sequence read into the program, I create three kinds of springs:
There's more, of course: a minor third in 12-tET is either 6/5 or 7/6, and a major second has three possible just intonation values (10/9, 9/8, or 8/7). And, even a major third might be 9/7 rather than 5/4! A part of the program that is not always fully ideal at the moment makes the decision about what JI intervals to shoot for in setting up the vertical intervals in the spring matrix. At present, I do not modify the target tuning of a spring once it is created.
The tonalsoft.com website is almost entirely the work of one person: me, Joe Monzo. Please reward me for my knowledge and effort by choosing your preferred level of financial support. Thank you.