It’s not hard to discover how to replace a running Synth using the object interface, e.g.
y = Synth(\default);
(SynthDef(\beep2, {
var out = \out.ir(0), amp = \amp.kr(0.5), freq = \freq.kr(440);
Out.ar(out, amp * SinOsc.ar(freq).dup);
}).add;)
y = Synth.replace(y, \beep2, [\amp, 0.1], sameID: true);
If you’re using Event type set
in combo with long-running synths (which is bit more flexible than Pmono, when it comes to combining with other events, e.g. using the new type \composite
), you may sometime want to replace a long-running synth definition entirely.
It turns out it’s possible to do this using event type on
with addAction:4
, which does node replacement (it’s basically how Synth.replace
is implemented, i.e. calls into Synth.new with that addAction: \addReplace
), albeit it’s a little tricky in terms of passing the arguments in events:
(type: \on, instrument: \default, id: y.nodeID, addAction: 4).play
// FAILURE IN SERVER /s_new duplicate node ID
In an Event \group
is the target
-equivalent argument of Synth.replace, even when you are doing synth replacements.
// here ~nid gets the new auto-generated id,
// i.e. this is like Synth.replace(sameID: false)
~nid = (type: \on, instrument: \default, group: y.nodeID, addAction: 4).play.at(\id)
// could use ~nid to instantiate a new Node with basicNew
// if also need use the object interface
y = Node.basicNew(s, ~nid)
More simply though, keeping the same node id, one needs to specify both group
and id
and making them the same:
(type: \on, instrument: \beep2, group: y.nodeID, id: y.nodeID, addAction: 4).play
A bit of an aside, \instrument
can be function in Events, which gets evaluated asDefName
, i.e. sent to server as a synth, so you even can do something like:
((type: \on, instrument: { Out.ar(0, 0.1 * SinOsc.ar(900!2)) },
group: y.nodeID, id: y.nodeID, addAction: 4).play