Outputting Control Voltages (CV) with SuperCollider



So I recently decided to actually start building a modular synth in the eurorack format. Modular synths are expensive and I am really going to have to take my time saving up and selecting modules, etc. So in the meantime, I am looking for ways to get more functionality out of single modules (or very few modules). One way to save money on modules initially is to only purchase sound producing or processing modules (oscillators, filters, effects, etc) versus purchasing control based modules (envelopes, lfos, etc). I learned a while ago that certain audio interfaces that are DC-coupled are capable of outputting the same kinds of control voltages that modular synths can use. If you are interested in reading more about this I suggest checking out the Expert Sleepers site and especially reading about their Silent Way plug-ins.
But I want to show you all how to output control voltage quickly and easily using everyone’s favorite audio programming language SuperCollider. Also this post by Andrea Valle on the SuperCollider Users list was very helpful in getting me started with this.
First a checklist of things you need:
- a synth module and power source (I have the Abstract Data ADE-20 Filter)
- DC-coupled audio interface, see list of supported interfaces here
- floating-ring 1/4” to 1/8” cables
- SuperCollider
The floating ring cables are important because if you attempt to send CV signals out from your audio interface with normal cables you could damage your interface. You can make these cables yourself or purchase them. I purchased mine from Control in Brooklyn, a really great modular synth store. I have a MOTU Traveler audio interface with 1/4” outputs on the back. I plugged channel 1 into the filter (using a 1/4” to 1/8” cable) and then plugged my two floating ring cables into outputs 3 and 4 on my interface and then into the frequency cutoff CV and resonance CV inputs on the filter.
First, I send some sound into the filter (a basic saw wave)
SynthDef(\saw, { | out=0, freq=100, amp=0.2 |
Out.ar(out, Saw.ar(freq, amp));
}).add;
~saw = Synth(\saw, [\freq, 100, \amp, 1]);
Note I am sending this saw wave out with a lot of amplitude because I don’t have an audio input module for my synth yet that will amplify line level signals from the computer up to modular levels.
Next let’s create an LFO synth and start it running out of output 3
SynthDef(\lfo, { | out = 2, rate = 1, amp=1 |
Out.ar(out, K2A.ar(SinOsc.ar(rate, amp)));
}).add;
~lfo1 = Synth(\lfo, [\out, 2, \rate, 0.5]);
We can send another LFO out of output 4
~lfo2 = Synth(\lfo, [\out, 3, \rate, 0.4]);
One thing that is really fun and interesting is modulating up into audio levels to get FM effects.
~lfo1.set(\rate, 40);
~lfo2.set(\rate, 0.5);
Listen to this code being run through my filter below, or click here to listen on SoundCloud.
It is really quite simple, any signal that you could listen to, if you slow it down enough it can become a usable control voltage. You could build all sorts of modules in SuperCollider to create different kinds of interactions.