I’m trying to write a Ndef comprising a setsource
pattern and drive this ensemble like a pattern.
Ideally something like this:
Ndef(\a).clear;
Ndef(\a).fadeTime=0.2;
Ndef(\a,\setsrc -> Pbind(\source,
Pseq([
{ |freq=440| SinOsc.ar(freq) * 0.1 },
{ Pulse.ar(40 + [0,1]) * 0.1 },
], 1),
\dur, Pseq([2,2])
));
Pbind(\instrument, \a, \freq, Pseq([220,440,880]), \dur,6).play;
This fails at several levels:
-
Pbind(\instrument, \a,
is not allowed - \setsource pattern starts immediately, not waiting for any “play” or “send” action.
- the
\freq
parameter is not received by the SinOsc - the Ndef does not stop when its \setsource pattern is over (despite adding a EnvGate in the 2nd function)
For (1)+(2), based on the example here (that however I don’t understand why this code acts like a triggering pattern) I wrote this:
p=Pbind(\source,
Pseq([
{ |freq=440| SinOsc.ar(freq) * 0.1 },
{ |gate=1| Pulse.ar(40 + [0,1]) * EnvGate.new(gate: gate) * 0.1 },
], 1),
\dur, Pseq([2,2])
);
Ndef(\a).clear;
Ndef(\a).fadeTime=0.2;
Ndef(\a).play;
Ndef(\a).put(0, \setsrc -> Pn(p,4));
But (4) isn’t resolved.
I tried to rewrite the \setsource pattern like this without a lot of success:
p=Pbind(\source,
Pseq([
{ |freq=440| SinOsc.ar(freq) * 0.1 },
{ |gate=1| Pulse.ar(40 + [0,1]) * EnvGate.new(gate: gate) * 0.1 },
{ Ndef(\a).release(Ndef(\a).fadeTime);},
// { Ndef(\a).stop(Ndef(\a).fadeTime); FreeSelf.kr(Impulse.ar(1)); }, // Self release
// { Ndef(\a).release(Ndef(\a).fadeTime); FreeSelf.kr(Impulse.ar(1)); }, // Self release
// { Ndef(\a).release(Ndef(\a).fadeTime); FreeSelf.kr(TDelay(Impulse.ar(1),Ndef(\a).fadeTime)); },
], 1),
\dur, Pseq([2,2],inf)
);
For solving (3) I tried this without many more success:
(
Ndef(\a).put(1, \xset -> Pbind( \freq, Pseq([220,440,880]), \dur,4)); // Ceci retrigge le
Ndef(\a).put(0, \setsrc -> Pn(p,4));
)
I’m new with Ndef. What am I doing wrong ?