diff --git a/release-packaging/Classes/FluidDataSet.sc b/release-packaging/Classes/FluidDataSet.sc index a49ef5d..06499ea 100644 --- a/release-packaging/Classes/FluidDataSet.sc +++ b/release-packaging/Classes/FluidDataSet.sc @@ -32,7 +32,7 @@ FluidDataSet : FluidManipulationClient { serverCaches.initCache(server); serverCaches.put(server,id,this); } - + *asUGenInput { |input| var ascii = input.asString.ascii; ^[ascii.size].addAll(ascii) @@ -43,23 +43,28 @@ FluidDataSet : FluidManipulationClient { ^"FluidDataSet(%)".format(id).asString; } + asSymbol { + ^id.asSymbol + } + addPoint{|label, buffer, action| - this.prSendMsg(\addPoint,[label.asString,buffer.asUGenInput],action); + this.prSendMsg(\addPoint,[label.asSymbol,buffer.asUGenInput],action); } getPoint{|label, buffer, action| - this.prSendMsg(\getPoint,[label.asString,buffer.asUGenInput],action); + this.prSendMsg(\getPoint,[label.asSymbol,buffer.asUGenInput],action); } updatePoint{|label, buffer, action| - this.prSendMsg(\updatePoint,[label.asString,buffer.asUGenInput],action); + this.prSendMsg(\updatePoint,[label.asSymbol,buffer.asUGenInput],action); } deletePoint{|label, action| - this.prSendMsg(\deletePoint,[label.asString],action); + this.prSendMsg(\deletePoint,[label.asSymbol],action); } cols {|action| + action ?? {action = postit}; this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]); } @@ -72,6 +77,7 @@ FluidDataSet : FluidManipulationClient { } size { |action| + action ?? {action = postit}; this.prSendMsg(\size,[],action,[numbers(FluidMessageResponse,_,1,_)]); } diff --git a/release-packaging/Classes/FluidKDTree.sc b/release-packaging/Classes/FluidKDTree.sc index 0f97a09..71306d7 100644 --- a/release-packaging/Classes/FluidKDTree.sc +++ b/release-packaging/Classes/FluidKDTree.sc @@ -12,7 +12,8 @@ FluidKDTree : FluidManipulationClient { } fit{|dataset,action| - this.prSendMsg(\fit,[dataset.asUGenInput],action); + dataset.asSymbol.postln; + this.prSendMsg(\fit,[dataset.asSymbol],action); } kNearest{ |buffer, k,action| @@ -24,6 +25,9 @@ FluidKDTree : FluidManipulationClient { } cols { |action| + + action ?? {action = postit}; + this.prSendMsg(\cols,[],action,[numbers(FluidMessageResponse,_,1,_)]); } diff --git a/release-packaging/Classes/FluidKMeans.sc b/release-packaging/Classes/FluidKMeans.sc index 24c6cc1..22b95f7 100644 --- a/release-packaging/Classes/FluidKMeans.sc +++ b/release-packaging/Classes/FluidKMeans.sc @@ -1,7 +1,7 @@ FluidKMeans : FluidManipulationClient { var <>k; - + *new {|server| var uid = UniqueID.next; ^super.new(server,uid)!?{|inst|inst.init(uid);inst} @@ -10,24 +10,20 @@ FluidKMeans : FluidManipulationClient { init {|uid| id = uid; } - + fit{|dataset,k, maxIter = 100, buffer, action| buffer = buffer ? -1; this.k = k; - this.prSendMsg(\fit,[dataset.asString, k,maxIter, buffer.asUGenInput],action,[numbers(FluidMessageResponse,_,k,_)]); + this.prSendMsg(\fit,[dataset.asSymbol, k,maxIter, buffer.asUGenInput],action,[numbers(FluidMessageResponse,_,k,_)]); } fitPredict{|dataset,labelset, k, maxIter = 100, action| this.k = k; - this.pr_sendMsg(\fitPredict,[dataset.asString,labelset.asString, k,maxIter],action,[numbers(FluidMessageResponse,_,k,_)]); + this.prSendMsg(\fitPredict,[dataset.asSymbol,labelset.asSymbol, k,maxIter],action,[numbers(FluidMessageResponse,_,k,_)]); } predict{ |dataset, labelset,action| - this.prSendMsg(\predict,[dataset.asString, labelset.asString],action,[numbers(FluidMessageResponse,_,this.k,_)]); - } - - getClusters{ |dataset, labelset,action| - this.prSendMsg(\getClusters,[dataset.asString, labelset.asString],action); + this.prSendMsg(\predict,[dataset.asSymbol, labelset.asSymbol],action,[numbers(FluidMessageResponse,_,this.k,_)]); } predictPoint { |buffer, action| @@ -35,6 +31,7 @@ FluidKMeans : FluidManipulationClient { } cols { |action| + action ?? action = postit; this.prSendMsg(\cols,[],action,[number(FluidMessageResponse,_,_)]); } diff --git a/release-packaging/Classes/FluidLabelSet.sc b/release-packaging/Classes/FluidLabelSet.sc index 645e918..398d972 100644 --- a/release-packaging/Classes/FluidLabelSet.sc +++ b/release-packaging/Classes/FluidLabelSet.sc @@ -22,7 +22,7 @@ FluidLabelSet : FluidManipulationClient { } init { |name| - this.id = name; + id = name; this.cache; } @@ -35,7 +35,12 @@ FluidLabelSet : FluidManipulationClient { ^"FluidLabelSet(%)".format(id).asString; } - + asSymbol { + ^id + } + + + *asUGenInput { |input| var ascii = input.asString.ascii; ^[ascii.size].addAll(ascii) @@ -45,6 +50,11 @@ FluidLabelSet : FluidManipulationClient { this.prSendMsg(\addLabel,[id.asString, label.asString],action); } + updateLabel{|id, label, action| + this.prSendMsg(\updateLabel,[id.asString, label.asString],action); + } + + getLabel{|id, action| this.prSendMsg(\getLabel,[id.asString],action,[string(FluidMessageResponse,_,_)]); } @@ -54,6 +64,7 @@ FluidLabelSet : FluidManipulationClient { } cols {|action| + action ?? {action = postit}; this.prSendMsg(\cols,[],action,[number(FluidMessageResponse,_,_)]); } @@ -66,6 +77,7 @@ FluidLabelSet : FluidManipulationClient { } size { |action| + action ?? {action = postit}; this.prSendMsg(\size,[],action,[number(FluidMessageResponse,_,_)]); } @@ -77,8 +89,8 @@ FluidLabelSet : FluidManipulationClient { serverCaches.remove(server,id); super.free; } - + *freeAll { |server| serverCaches.do(server,{|x|x.free;}); } -} +} diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index e57bd7d..552aa23 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -24,6 +24,9 @@ FluidManipulationClient { var defName, def; var onSynthFree, persist; + var postit; + var < ready; + *prServerString{ |s| var ascii = s.ascii; ^[ascii.size].addAll(ascii) @@ -45,29 +48,35 @@ FluidManipulationClient { baseinit { |...args| var makeFirstSynth; id = UniqueID.next; + postit = {|x| x.postln;}; defName = (this.class.name.asString ++ id).asSymbol; - + ready = Condition(false); def = SynthDef(defName,{ var ugen = FluidProxyUgen.kr(this.class.name, *args); this.ugen = ugen; ugen - }).add; - + }); persist = true; onSynthFree = { + ready.test = false; synth = nil; if(persist){ //If we don't sync here, cmd-. doesn't reset properly (but server.freeAll does) - fork { + forkIfNeeded { server.sync; synth = Synth(defName,target: RootNode(server)); synth.onFree{onSynthFree.value}; + ready.test = true; + ready.signal; } } }; - - server.doWhenBooted{onSynthFree.value}; + forkIfNeeded{ + def.add; + server.sync; + onSynthFree.value; + } } free{ @@ -79,6 +88,7 @@ FluidManipulationClient { prSendMsg { |msg, args, action,parser| if(this.server.serverRunning.not,{(this.asString + "– server not running").error; ^nil}); + synth ?? {"Not ready".warn}; synth !? { OSCFunc( { |msg| @@ -134,8 +144,8 @@ FluidServerCache { } clearCache { |server| - cache.postln; cache[server] !? { cache.removeAt(server) }; } + } diff --git a/release-packaging/Classes/FluidMessageResponse.sc b/release-packaging/Classes/FluidMessageResponse.sc index 51ba197..60b97f7 100644 --- a/release-packaging/Classes/FluidMessageResponse.sc +++ b/release-packaging/Classes/FluidMessageResponse.sc @@ -20,7 +20,7 @@ FluidMessageResponse : Object var split = a.find([0],offset); var res; if(split.isNil) {"ERROR: can't parse string from server".throw}; - ^[[a.copyRange(offset,split-1).keep(split).collectAs({|x|x.asInt.asAscii},String)], split + 1] + ^[[a.copyRange(offset,split-1).keep(split).collectAs({|x|x.asInteger.asAscii},String)], split + 1] } *numbers{ |a, n, offset|