Write a supercollider synth to work with tidal

Hi all,

Trying to get started on implementing some custom synthdef's in supercollider to work with tidal and am trying to gather resources.

I found this thread that has some insight

Is this still relevant?

Any insight, tips, resources, examples, would be really helpful.

1 Like

My method for adding synths to my sound library is to write a synth using SynthDef, save it in an .scd file, and add to my ~/.local/share/SuperCollider/downloaded-quarks/SuperDirt/synths folder (or whatever is the equivalent on your operating system) either the file or a symbolic link to it (I like to do it with a symbolic link because it allows me to have my synths files handy in the same location as my tidal files).

On the topic of writing synths more specifically, I found this tutorial to be rather helpful.

Now, this is just my way of doing things, and there's always a risk that some of my ways are not the canonical ones!


Awesome. Do you know how to tidal talks to a synthdef? Are there specific parameters that tidal can access (like sustain, decay, release, somecustommod1) for a supercollider synth? Is there a way to setup custom parameters or a tutorial for that?

I don't know the specifics of how Tidal and SuperDirt interact on the topic of SynthDefs, but basically, any parameter that you include into your SynthDef will be usable as an effect.

For example, if you want to be able to change the frequency of your synth, you'll have to define the SynthDef like
(SynthDef(\mysynth, {|out, freq, ...|
// some operations that use freq when you want to define the frequency
and then you'll be able to use freq either directly by doing e.g. # freq 432 (you might need to define it by executing let freq = pF "freq" first), or through other parameters that make use of it (like up).

This also goes for other custom parameters, including some Tidal doesn't know yet of, but then you'll have to define the corresponding function with let myparam = pF "myparam" (if myparam takes a floating argument; you will have to replace it with pI or pS if it takes, respectively, an integer or a string as an argument).