Regular readers of this space (all five of you) will be aware that I’m fussy about intonation. And yet, I’ve acquired an analog modular synthesizer. Go figure. Analog synthesis is good at many things, but precise intonation is not one of them.

In order to integrate a computer with the modular synth, I’ve acquired Expert Sleepers ES-3 and ES-6 modules. These nifty devices can talk to a computer via ADAT lightpipe, with a very nice PreSonus 1818VSL interface shuttling the 24-bit audio back and forth.

The computer happens to be running Csound. One of my bright ideas is that I’d like to be able to write a fairly complex step sequencer in Csound (not especially difficult to do) and have it play the modular synth.

The oscillators in a modular system of this type are calibrated, in theory, so that when an incoming voltage rises by 1 volt, the oscillator’s frequency rises by one octave. This is called the 1-volt-per-octave standard. My oscillators have 1v/oct inputs.

The output of the ES-3 has a range of +/- 10 volts, and Csound’s audio signals are defined as having a maximum amplitude of +/- 1.000. From this, it’s easy to see that an increase of 0.1 in Csound’s audio output should raise an oscillator’s frequency by one octave. If we divide 0.1 by 12, we’ll find that an equal-tempered half-step in a 12-notes-per-octave tuning system will have a value in Csound of 0.008333….

That’s the theory. The reality turns out to be just a bit different.

To test this, I run two oscillators side by side, and listen to them both. One is entirely unmodulated, and is producing a sawtooth wave at a fairly low pitch. The other has an ES-3 output patched to its 1v/oct input. Before Csound starts, the second oscillator is carefully tuned to the first, by hand. Then Csound starts sending the second oscillator a stepped series of output values, causing its pitch to rise and then fall by octaves. Because I’m listening to both oscillators at once, because they’re nominally going to be playing octaves, and because a sawtooth wave is rich in overtones, I can easily hear any pitch discrepancies.

With ES-3 output 1 patched into the 1v/oct input of an Intellijel Rubicon oscillator, the actual value of a half-step is not 0.008333, but about 0.00793. The octave is about 0.09516.

These values are easily stored as global variables in Csound — so that solves the problem, right? Now I can write a step sequencer? Well, no. We’re not out of the woods at all. With ES-3 output 2 patched into the 1v/oct input of an Intellijel Dixie, the half-step is not 0.00793, it’s 0.00797. In other words, each combination of ES-3 output and oscillator may have a slightly different value for the half-step. With six oscillators and eight outputs, I may have to determine as many as 48 values with an accuracy of six decimal places. And any of these values might be subject to slight variations as the oscillator circuits warm up.

I know what you’re muttering to yourself: “Use a quantizer, dude.” Tried that. No help. Some of the “octaves” produced by Csound with an 0.1 value are minor ninths when they emerge from the Toppobrillo Quantimator … and not perfect minor ninths, at that.

This by no means negates the value of having Csound hanging off the side of the modular synth as an extra digital module. Csound can still do tons of useful stuff. For starters, sample playback. Multi-segment envelopes. LFOs with custom waveforms. Stereo reverb, chorus, delay, and other effects. Special types of filtering and waveshaping for which I have no hardware. Counting incoming gate signals so as to change an output value radically after a certain number of events have transpired. Playing complex rhythms.

Oh, and if I should feel in the mood, I can have my iPad send OSC messages wirelessly to Csound, which will translate them into digital audio, which the ES-3 will then translate into voltages, thus turning the iPad into a multi-touch expression controller for the modular. No, an integrated computer/analog system is far from being useless. But if I decide to write a complex step sequencer, I’ll have to do some careful calibration before I try to record the output. Either that, or just sequence a bunch of non-tonal bleeps and bloops so I don’t need to sweat over the intonation.

Advertisements

13 thoughts on “When Is a Volt Not a Volt?

  1. In the spirit of belated full disclosure, I should admit that a couple of years ago I got the ES-1 module and a couple of Doepfer modules, with the intention of putting a hybrid Csound setup together similar in kind (but not in scale) to what you have going now.

    Haven’t got around to getting it running beyond running Csound out through analog LPFs.and micing, now and then.

    What put that project on hold was working out how to play Csound using only acoustic instruments, solving the tuning complications/problems. So on the one hand, your Csound/modular journey makes me want to resume the project, and on the other hand, you’re confirming that the difficulties I found in my first trials are even greater than I thought.

    1. Not sure what you mean by playing Csound using only acoustic instruments. You could do that with the usual assortment of envelope followers and pitch detectors, I suppose. I’ve never tried pitch detection in Csound — couldn’t say how well it works, A quick scan of the manual doesn’t reveal any opcodes for doing that.

      Really, the only issue I’m dealing with is precise intonation. For every other purpose, the connection should be trouble-free. And even calling it “trouble” is a bit of an overstatement. Once a calibration value has been documented for a particular combination of ES-3 output and oscillator input, the results should be very acceptable. It’s just a hassle to find the correct values, that’s all.

      1. I guess, ultimately you could take the offending tracks and run them through melodyne or something similar and correct the pitch manually, after the parts are written.

      2. Using the pitchamdf (returns cps and rms) and follow2 (amplitude envelope) opcodes, the results are dead-on *if* you give pitchamdf a fairly accurate minimum, maximum, and expected first cps input. Bandpassing the input is often a good idea too.

        I haven’t used the score or MIDI on anything serious for a couple of years now. All my synthesized sounds I play with acoustic woodwinds, strings, singing, and whistling.

        That Csound is following accurately is easy to test by playing the original along with the synthetic “animated via motion capture” sound.

        That the acoustic pitches themselves are accurate is easy to test the usual ways, against a fixed reference, with tuners, and most importantly of course via the “Just Intonation” acoustic effects. Of course this would be more difficult with a very conditioned construct like 12-tET.

        As far as difficulty, I was also referring to accuracy of intonation. The analog oscillators within my financial reach most certainly do not have anything remotely like “Crystal tuning stability with +/-0.005% pitch tracking accuracy over 10 octaves ” (ModCan). But if you are getting things to work, that’s very encouraging!

      3. “… the results are dead-on *if* you give pitchamdf a fairly accurate minimum, maximum, and expected first cps input.” In my initial tests just now, pitchamdf proved entirely useless, for precisely this reason. I want to send it signals at several different frequencies (one at a time, of course) and view the resulting cps. I’m not aiming at a specific narrow range of frequencies within which I hope the signal will lie — I want to analyze anything from 25Hz up to 5kHz, all within a single test run. Having to reset the arguments to pitchamdf before switching the oscillator’s output to a new octave would just be horribly laborious.

        Guess I’ll have to keep on checking the intonation by ear.

      4. My experience with analog synthesizers is that even when you’ve got the intonation set, and you wait til it warms up, it’ll drift off over the months. So I think you can anticipate periodic fiddling with exact values through the years. But that’s no big deal, is it.

        Another option of course is to use Csound digital oscillators when you want precise pitch, and the analog oscillators when you don’t need it. Filter cuttoffs don’t have to be as exact as a fundamental frequency does, so you could send CVs to the analog filters to to control their cutoffs, resonance, etc. as they filter the precise digital oscillators.

      5. “Another option of course is to use Csound digital oscillators when you want precise pitch, and the analog oscillators when you don’t need it.” A reasonable suggestion, but the analog oscillators have features that a Csound oscillator doesn’t (and vice-versa). The Intellijel Rubicon, for instance, has both hard and soft sync, and the amount or strictness of the soft sync has a knob. The Make Noise DPO has a sub-oscillator that can track the pitch of the primary oscillator with variable exactitude, and also three types of waveshaping available from a separate jack. Patching, in every case, is fast — no need to write code. So yeah, for a basic sawtooth-wave tone, digital oscillators would work fine (and could be generated polyphonically, which ain’t gonna happen in analog world). There are lots of options!

  2. Jim,
    Here’s a silly question– have you tried using something like a Furman voltage regulator, to make sure that the 110 volts coming into the modular is clean? If nothing else, it would give you more of a constant value to work from as you do the math for the different pitches.
    Maybe I missed that in one of the earlier posts…

    1. A Furman would cost $800 or so. I could spend that kind of money for a solution, but not in order to investigate whether something might perhaps be a solution. I don’t think the power supply voltage is the root of the problem … although I did retest after adding a Tiptop uZeus auxiliary power supply to the system, because I was pulling too much voltage out of the main power supply for that cabinet, which may have been affecting matters.

      There’s a calibration routine that uses the Silent Way software plug-ins from Expert Sleepers, but I don’t have (and don’t need) those plug-ins. So I’m doing the calibration by hand and by ear, using Csound.

  3. Hi Jim, wonder if you could help me. I recently bought the power tools for synthesizer programming book from Amazon. But it has no cd. Could you guide me to where I could to get one? Sorry to bother you.
    Dan

    1. I guess the first question I’d ask is, did you complain to Amazon? Assuming it’s not a used copy, it should certainly have a CD. It’s also possible Hal Leonard has decided not to make any more copies with CDs, in order to increase their profit margin. That wouldn’t surprise me. But I have no contacts with them — they inherited the book from Backbeat eight years ago. You should ask them for the CD. If you take those steps first and have no luck, please email me and I’ll upload a copy of the data for you to grab.

  4. Why ever do you say you don’t need Silent Way ??? It exists precisely to correct the intonation problems you are referring to, and also gives you a massive amount of very well thought out modular specific functionality (that you can choose to exploit or not) IMHO, doing what you are trying to do, when already having the Expert Sleepers hardware ( and presumably several thousand dollars worth of eurorack modules) and NOT using the $50 Silent Way plugin to correct intonation is borderline masochism. Download the free demo and I think you will likely adopt it immediately.

    1. I should probably do that — thanks for the suggestion. For the record, though, Csound (which is what I was discussing above as a “back end” for the ES-3) doesn’t run plug-ins.

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 )

Google+ photo

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

Connecting to %s