[Edit:] In the initial post the SynthDef segment was forgotten. But this is what my answer referred to.
Hello @Francesco_Corvi, I will answer this question in more detail, and try to describe all possible types of SuperDirt SynthDef variants (as far as I understand). I hope it helps you to solve your problem.
I would also be happy if someone could help me with the terminology.
There are three types of synths:
- Standalone SynthDefs
- SynthDefs as global effects
- Functions
Standalone SynthDefs
If you want to use your own SynthDef, you just need to give it a name (like \sin) and determine the parameters you want to control via TidalCycles. A minimal example could be this:
(
SynthDef(\sin, {|out, freq = 440.0, pan|
var sound = SinOsc.ar(freq);
Out.ar(out, DirtPan.ar(sound, ~dirt.numChannels, pan));
}).add
)
Now you can use it in TidalCycles:
d1 $ n "c a f e" # s "sin"
SynthDefs as global effects
What you practically create with your code above is a responder for a SynthDef, which might not exist.
The addModule function is in my understanding primarily used to add effects. What is generally missing is a SynthDef called 'tanh2' with a parameter param
(for demonstration) like:
(
SynthDef('tanh' ++ ~dirt.numChannels, {|param=2|
var signal;
signal = In.ar(out, ~dirt.numChannels);
...
ReplaceOut.ar(out, signal)
}).add
)
The 2
in the SynthDef name is the result of adding ~dirt.numChannels
using the ++ operator.
The responder should then look something like this:
(
~dirt.addModule('tanh', { |dirtEvent|
dirtEvent.sendSynth('tanh' ++ ~dirt.numChannels,
[
param: ~param,
out: ~out
]
)
}, {~param.notNil})
);
By the way, as effects the SynthDefs are only indirectly controlled when a function is used in TidalCycles. The condition with the notNil determines when the SynthDef is used.
The above example could be used in TidalCycles as
param = pI "param"
d1 $ s "808" # param 4
Note that I have not used tanh directly.
For a more detailed example you can check the adding-effects
file in the SuperDirt hack folder (https://github.com/musikinformatik/SuperDirt/blob/develop/hacks/adding-effects.scd)
Functions
To complete the list: a last variant is the adding of functions.
You can simply add every kind of functions with ~dirt.soundLibrary.addSynth(\name, (play: {}));
A minimal example could be
~dirt.soundLibrary.addSynth(\test, (play: { "Hello World".postln }));
Now you can trigger the function in TidalCycles with
d1 $ s "test"
For a more detailed example you can check the function-hacks
file in the SuperDirt hack folder (https://github.com/musikinformatik/SuperDirt/blob/develop/hacks/function-hacks.scd)