Hi! I'm having some trouble wrapping my head around why tidal is behaving like it is.
Consider this simple example:
(
SynthDef.new(\SinTest, {
|out, pan, rell=1|
var sig, env;
env = EnvGen.kr(Env.new([0, 1, 0], [0.1, rell]), doneAction: 2);
sig = SinOsc.ar;
sig = sig*env;
OffsetOut.ar(out, DirtPan.ar (sig, ~dirt.numChannels,pan));
}) .add;
)
When I run this SynthDef in SC via x = Synth.new(\SinTest);
I get a tone with a gain dropoff from 1 to 0 over 1 second. If I run this in quick succession I get multiple tones running independent of one another as expected.
I would expect this (in tidal):
d1
$ struct "1*4"
$ s "SinTest"
# rell 1
To result in the same result as manually running x = Synth.new(\SinTest);
four times over one cycle but this is not the case.
It's like tidal is sending a doneAction message to the SynthDef making it kill the previous SynthDef resulting in a click effectively making the SynthDef monophonic.
I can get around this to some extent with this:
(
SynthDef.new(\SinTest, {
|out, pan, sustain=1, decvol=0.5, atk=0.1, dect=0.5, rell=0.1|
var sig, env, line, vol;
line = Line.ar(0, 1, sustain, doneAction:2);
env = Env.new(
levels:[0, 1, decvol, 0],
times: [atk, dect, rell],
curve: [-5, 0, -5]);
vol = IEnvGen.ar(env, line);
sig = SinOsc.ar;
sig = sig*vol;
OffsetOut.ar(out, DirtPan.ar (sig, ~dirt.numChannels,pan));
}) .add;
)
But this ^ adds some other issues. Like making the envelope duration dependent on the length of the event triggering it.
Is there a way to make tidal interact with SC in a way that doesn't effect the env? Ie removing the magical doneAction message maybe?