Anyone who has read my blog knows how much I love both Supercollider and Renoise but the two have always occupied two different areas of my workflow. I have decided it was finally time to start combining the strengths of the two. Supercollider is amazing for sound design and renoise is a very good sequencer.

NOTE: Despite the Renoise focus of this tutorial much of this could apply to the DAW of your choice with a little modification.

Despite the fact that both programs can use the OSC protocol Renoise does not have a good way to send note data over OSC. I decided to use Reaktor as the glue between the programs as it can run as a VST plugin and send OSC data.

Start Supercollider and boot your server and then start Renoise. Create a new instrument within Renoise and assign it to Reaktor. Open up the Reaktor instrument you have created and choose File->Osc Settings… from the dropdown menu.

Create a new OSC target, name it “Supercollider”, type “localhost” for the IP Address and assign it to the port of your choice. The IP address should automatically change to show your local IP address. If it does not you can find this information on the OSC Receive tab of this dialog box. Picking a port number can be a complicated topic, if you are not sure just try 8001. Make sure the OSC Activate checkbox is enabled and then close the window. Once this has been done you should not have to redo the OSC Settings window in the future unless your IP Address changes.

Back in the main Reaktor window create and save a new ensemble file. Reaktor will need to locate this ensemble file whenever you wish to play back this song. Inside the ensemble file and instrument you can optionally delete any audio inputs and outputs as they will not be needed.

Inside of the instrument create a NotePitch object and a OSC Send object and connect them. Set the NotePitch to mono on the functions page. Set the OSC Send object to always active on its function page. On the connect page for the OSC Send object hit Add Target and choose Supercollider. This is the OSC Connection we set up previously. For the send address pattern enter “/Supercollider/Inst/Syn”. We will later create a receiver in Supercollider that is looking for this pattern. Verify that both modules display an orange light in the lower right corner and that there is no red X on the input to the OSC Send module. You can now close the Reaktor window

Within Renoise create some test notes sending to the instrument you created. For variety i am using the YX MaYbe command. Start the sequence playing. We will use this to test our connection.

Within Supercollider run the following two lines:

( thisProcess.openUDPPort(8001); n = NetAddr("127.0.0.1", 8001); )

This will open port 8001 and create a new network address object to receive data on port 8001. Once this is complete you can run the following to turn on OSC debugging:

OSCFunc.trace(true);

You will see quite a bit of activity in your post window. Much of it will be on port 57110, this is internal traffic between the Supercollider language and server. If you see activity on port 8001 you have successfully made all the needed connections. Example of the message we are looking for:

OSC Message Received: time: 2085978496 address: a NetAddr(172.16.10.103, 10000) recvPort: 8001 msg: [ /Supercollider/Inst/Syn, 60 ]

Once you are done with this step you can turn OSC Debugging off using the following command:

OSCFunc.trace(false);

Next we create a very simple SynthDef that expects a frequency:

SynthDef(\syn, { |out = 0, freq = 440, gate = 1| var sin = SinOsc.ar(freq); var env = EnvGen.ar(Env.perc, gate, doneAction: 2); Out.ar(out, sin * env!2 * 0.1); }).add;

And then we create an OSCdef that is looking for our message and will trigger a new instance of the SynthDef each time it is received:

OSCdef(\syn, {|msg, time, addr, recvPort| Synth(\syn, [\freq, msg[1].midicps])}, '/Supercollider/Inst/Syn');

If everything has been hooked together correctly you should now hear your results. You can modify the SynthDef while Renoise is still running the sequence in order to experiment with it.

This is obviously only the tip of the iceberg on what you can accomplish by hooking these two programs together. Each Reaktor OSC message can send up to 40 parameters and you could hook multiple Renoise instruments to multiple SynthDefs.