From 188f0f913376076487e8a66aaac3c94ee0d5fdc8 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 7 May 2020 13:12:01 +0100 Subject: [PATCH] KISS-erer: No trickery with Synth.basicNew because we can't communicate with the Node afterwards --- release-packaging/Classes/FluidDataSet.sc | 9 +++-- .../Classes/FluidManipulationClient.sc | 34 +++++++++---------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/release-packaging/Classes/FluidDataSet.sc b/release-packaging/Classes/FluidDataSet.sc index 6d270cd..db80afe 100644 --- a/release-packaging/Classes/FluidDataSet.sc +++ b/release-packaging/Classes/FluidDataSet.sc @@ -78,11 +78,14 @@ FluidDataSet : FluidManipulationClient { free { |action| serverCaches.remove(server,id); - if(server.serverRunning){this.prSendMsg(\free,[],action)}; - super.free; + fork{ + if(server.serverRunning){this.prSendMsg(\free,[],action)}; + server.sync; + super.free; + } } *freeAll { |server| serverCaches.tryPerform(\clearCache,server); } -} +} diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index 2522bf8..cbbcf1e 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -29,6 +29,11 @@ FluidManipulationClient { ^[ascii.size].addAll(ascii) } + *newFromDesc { arg rate, numOutputs, inputs, specialIndex; + ^FluidProxyUgen.newFromDesc(rate, numOutputs, inputs, specialIndex) + } + + *new{ |server...args| server = server ? Server.default; if(server.serverRunning.not,{ @@ -46,34 +51,29 @@ FluidManipulationClient { var ugen = FluidProxyUgen.kr(this.class.name, *args); this.ugen = ugen; ugen - }); + }).add; + - synth = Synth.basicNew(defName,server); persist = true; onSynthFree = { + synth = nil; if(persist){ - synth = Synth.after(server.defaultGroup,defName); - synth.onFree(onSynthFree); + //If we don't sync here, cmd-. doesn't reset properly (but server.freeAll does) + fork { + server.sync; + synth = Synth(defName,target: RootNode(server)); + synth.onFree{onSynthFree.value}; + } } }; - synth.onFree(onSynthFree); - CmdPeriod.add(onSynthFree); - - makeFirstSynth ={ - var synthMsg= synth.newMsg(server.defaultGroup,\addAfter); - def.send(server,synthMsg); - }; - - if(server.serverRunning) - { makeFirstSynth.value} - {server.doWhenBooted(makeFirstSynth)}; + server.doWhenBooted{onSynthFree.value}; } free{ persist = false; - CmdPeriod.remove(onSynthFree); - synth = nil; + synth.tryPerform(\free); + ^nil } prSendMsg { |msg, args, action,parser|