The code in this repo builds a microtonal control plugin which makes extended Just Intonation easy to explore on regular 12-note interfaces. A baseline was put down by BaconPaul in early 2023, which I (Andreya) have been building on in the second half of 2024. It is currently in Alpha. More on that below.
Lattices works by tuning nearby synths to Just Intonation by acting as an MTS-ESP source (for more info on what that means, click here), and displaying a lattice pattern that help navigate the harmonic possibilities.
These lattice graphics have been used (drawn in slightly different ways) by lots of folks over the years. My most direct inspiration comes from W.A. Mathieu's wonderful book Harmonic Experience (Thanks Allaudin!), and the wonderful work of Gary Garett (thanks Gary!).
Compared to most other MTS-ESP sources (listed in the link above), this one is very limited in scope. It has one particular purpose which it aims to excel at. Non-12 note scales and non-octave scales (while wonderful in their own way) are out of scope here. That, plus a few other specific assumptions, allows us to navigate a theoretically infinite set of pitches with a fairly simple set of controls.
I recommend using it with a regular ordinary MIDI keyboard, plus any MIDI controller that has at least 5 buttons capable of sending momentary CC messages. I've been using a Launchpad Mini while developing it, but anything goes really.
Load Lattices in your DAW, alongside some compatible instrument of your choice. Many are listed in the link above. If you don't have any, I recommend Surge.
By default, Lattices will tune your synths, to a Just Intonation scale known in many places in the world under different names, but which I'm calling Duodene. The Lattices graphic you see represents the infinite pitch space of Just Intonation. The red sphere reading 1/1, represents the tonic (C, by default). Horizontal neighbors are a fifth apart, diagonally up-right is always a major third up, down-right a minor third up. (Octave-reduced... blablablabla, this text will be improved eventually)
You should see a pattern of twelve spheres near the middle which are lit up (while the rest are dimmed). That's the 12-note (octave-repeating) Duodene scale which currently will be sent to your synths.If you've never played in it before, you can quickly discover the (subjective) upside and downside it has over the common 12-equal tuning: Play a C major chord followed by a Bb major chord. Assuming everything has loaded and connected correctly, the C should sound extremely stable and the BB should sound distinctly challenged.
Send Lattices a momentary trigger message (max value for a short moment) at MIDI CC 5 on channel 1. The lit-up section on the lattice should move one step to the east. Now the Bb chord will sound stable! :)
Some other chord will now sound out-of-tune instead, but that's ok! The point is, in anticipation of a sour chord, we can shift the mapping around. This way we can make perfectly in-tune music with more than 12-notes, but using common 12-note tools! This invites new ways to explore harmony. Etc etc blablabla. More to come. :)
Other usage notes:
- "Tuning Settings" tab bottom right has controls to select which note is the 1/1, and which frequency it should have. (Changing root note also sets the frequency to that currently held by that note). It also has a mode switch which requires some more explanation... will get to it eventually.
- "Midi Settings" bottom left lets you choose which CCs trigger the tuning changes. "Home" here means "return to where we startred"
For now it only does 5-limit tuning. But the default Duodene mode will eventually will allow interdimensional visitors. :) Stay tuned!
Here's what that means in this case:
- The overall design is pretty finished, but almost every feature is still very half-baked.
- The process of baking them is still pretty volatile! Everything is subject to change!
- Streaming stability is a definite maybe. This is not as dangerous with an MTS-ESP plug as with a synth (and no current features will be outright removed), but still, know that stuff will change and loading an old project with a new version may not work.
- Many planned features are missing. The issue list here has the planned features mostly sketched out. Check that before making feature requests (feature requests are welcome though).
This works on Mac and Linux. Probably on Windows. You can also grab a nightly build from releases.
git clone https://github.com/Andreya-Autumn/lattices.git
cd lattices
git submodule update --init --recursive
cmake -Bignore/build -DCMAKE_BUILD_TYPE=RELEASE
cmake --build ignore/build
Contributions welcome! The best ways to get in touch is to look up the tuning channel in the Surge Synth Team Discord and ping Andreya there. Otherwise make an issue or PR on Github.
This is MIT licensed but if you use the GPL3 juce as opposed to a licensed juce to distribute it the combined work is distributed under GPL3.