Just in Time Tuning

From the 1930s on, composers in the U.S. and Europe have been exploring alternate tunings. There has been a widespread feeling that the harmonic and melodic resources of 12-note equal temperament (“12ET” for short) have been pretty thoroughly mapped out. The development of jazz harmony during that same period might suggest that the problem was overstated. Nonetheless, 12ET is a highly artificial tuning system. It’s extremely useful, but the intervals don’t actually sound very good. And by now, jazz harmony is pretty well explored too.

Composers like Harry Partch and Lou Harrison responded, back in the day, by building their own instruments that were tuned to other scales. Of course, that’s a time-consuming process — and when you’ve finished building an instrument, you’ll be the only one who can play your music, because no one else will have that instrument. Or you can retune a piano, but how many of us have the skills to do that?

In the past few years, computer synthesis has made the process of exploring alternate tunings almost infinitely easier. Almost. But not quite.

I’d love to compose some music in other tuning systems. I’ve done a few sketches. But even the latest technology doesn’t really facilitate the process. I can choose between two systems, both computer-based. One makes the composition process very friendly, but puts serious restrictions on the tuning side. In the other system, the tuning possibilities are wide open, but the composition process is horrible.

A number of software synthesizers, including my personal fave, u-he Zebra, can load tuning files in the .tun format. You can create a .tun file (if you know the secret handshake) using a terrific free software system called Scala. This file can define, with high precision, the pitch of each and every key on a MIDI keyboard. Load the file into Zebra, and your controller keyboard’s tuning is transformed.

But there are two bottlenecks. First, you’ll have to play the tuning scale on a 12-note black-and-white keyboard. If your tuning happens to need 23 different pitches, this will get extremely awkward. Trust me, I’ve tried it. Second, once you’ve loaded a .tun file, that synthesizer can only play those pitches and no others. The tuning is set in stone. If you discover you need a pitch that you forgot to include, all of your options are messy. You can edit the .tun file to add another note, but then all of your existing sequence tracks will have to be edited, because the pitches will be in different places on the keyboard. Or you can create a second .tun file and load it into a separate instance of your favorite softsynth … but now a single musical line will be split between two (or more) tracks in the sequencer. Editing the music will turn into a nightmare. And the tuning will still be fixed; it will just have more notes. Pretty soon you’ll have so many notes, you won’t know what’s what.

The other alternative is, I can use Csound. In Csound, it’s quite easy to write an algorithm in which the pitch of each and every note can be specified from the score. If you’re working in Just Intonation (which has some wonderful advantages in terms of sonority and expressive potential) and you suddenly discover that you need a note that’s 32/25 over the tonic, just type “32 25” and you’ve got the note. That’s Just In Time Tuning. It’s sweet.

But yes, I did say “type.” The downfall of Csound is that developing a complete piece of music in it involves typing hundreds upon hundreds of lines of code. Plus, you can’t use any of those great software synthesizer plug-ins with their stunning presets: You have to create your own instrument, again by writing code. And frankly, your instrument is not likely to sound nearly as good as Zebra.

My experience with trying to compose in Csound is that the inspiration quickly evaporates. There are too many options, and they all involve typing columns of fiddly numbers. I’ve written one “pure sound” piece in Csound, and I rather like it, but it involved extremely long, slowly moving notes. The entire score was only 31 “notes” in length.

What I want is to use a conventional piano-roll edit window in a sequencer, and to be able to redefine the meaning (that is, the pitch) of any horizontal line at any point in the track. “Okay, for the next three measures, I want this F# to play a ratio of 7/5 over the fundamental. Then, for two bars after that, F# will be 11/8. Then 45/32.” This is not conceptually esoteric, but nobody has written any software that will do it. The reason is not hard to see: It would be a huge job, and there’s no demand for it.

Also, can we talk about pitch-bending? Even if you’ve loaded a .tun file into a software synth, the pitch-bend depth will still be set in equal-tempered half-steps, which makes the pitch-bend mechanism entirely useless for music in Just Intonation. You can play notes, but you can’t bend them, not reliably. With music that’s about pitch, this is a frustrating limitation.

It’s not impossible to create a pitch-bend mechanism that bends a certain number of scale steps, no matter how large or small those might be. In fact, I’ve done that too, by creating my own synthesizer in Native Instruments Reaktor. But no commercial synth that I’m aware of is capable of intelligent pitch-bending when an alternate tuning is loaded. In Csound, bending the pitch of a sounding note by an arbitrary frequency ratio is rather easy (once you’ve built the algorithm). But you can’t perform the bends by moving a nice MIDI pitch wheel; you have to add them to the score by typing lines of code, a process that gets really old, really quickly.

I wonder if I could talk a software developer into … nah. There’d be no demand for it.

This entry was posted in music, technology and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s