From b687b5649da174f411fc2cebdff076a54b207fce Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 25 Jun 2020 16:38:55 +0100 Subject: [PATCH] Add KMeansClient RT support --- include/FluidSCWrapper.hpp | 8 ++ release-packaging/Classes/FluidKMeans.sc | 11 +-- .../Classes/FluidManipulationClient.sc | 84 +++++++++++++++++-- .../HelpSource/Classes/FluidKMeans.schelp | 33 +++++++- src/FluidManipulation/FluidManipulation.cpp | 2 +- 5 files changed, 121 insertions(+), 17 deletions(-) diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index 6d16c28..02c053b 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -92,6 +92,14 @@ struct IsModel>> using type = typename ClientWrapper::isModelObject; }; + +template +struct IsModel> +{ + using type = typename ClientWrapper::isModelObject; +}; + + template using IsModel_t = typename IsModel::type; diff --git a/release-packaging/Classes/FluidKMeans.sc b/release-packaging/Classes/FluidKMeans.sc index 5ebd7cb..dca6794 100644 --- a/release-packaging/Classes/FluidKMeans.sc +++ b/release-packaging/Classes/FluidKMeans.sc @@ -1,16 +1,7 @@ -FluidKMeans : FluidManipulationClient { +FluidKMeans : FluidDataClient { var <>k; - *new {|server| - var uid = UniqueID.next; - ^super.new(server,uid)!?{|inst|inst.init(uid);inst} - } - - init {|uid| - id = uid; - } - fit{|dataset,k, maxIter = 100, action| this.k = k; this.prSendMsg(\fit, diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index 541a87e..fd0315d 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -9,6 +9,7 @@ FluidProxyUgen : UGen { init { |pluginname...args| this.pluginname = pluginname; inputs = args++Done.none++0; + rate = inputs.rate; } name{ @@ -50,17 +51,23 @@ FluidManipulationClient { ^super.newCopyArgs(server ?? {Server.default}).baseinit(*args) } + makeDef { |defName...args| + ^SynthDef(defName,{ + var ugen = FluidProxyUgen.kr(this.class.name, *args); + this.ugen = ugen; + ugen + }); + } + + updateSynthControls {} + baseinit { |...args| var makeFirstSynth,synthMsg; id = UniqueID.next; postit = {|x| x.postln;}; keepAlive = true; defName = (this.class.name.asString ++ id).asSymbol; - def = SynthDef(defName,{ - var ugen = FluidProxyUgen.kr(this.class.name, *args); - this.ugen = ugen; - ugen - }); + def = this.makeDef(defName,*args); synth = Synth.basicNew(def.name, server); synthMsg = synth.newMsg(RootNode(server)); def.doSend(server,synthMsg); @@ -70,10 +77,12 @@ FluidManipulationClient { if(keepAlive){ synth = Synth(defName,target: RootNode(server)); synth.onFree{clock.sched(0,onSynthFree)}; + this.updateSynthControls; } }; CmdPeriod.add({synth = nil}); synth.onFree{clock.sched(0,onSynthFree)}; + this.updateSynthControls; } free{ @@ -118,6 +127,71 @@ FluidManipulationClient { } } +FluidDataClient : FluidManipulationClient { + + var ("FluidDataSetQuery",ft); makeSCWrapper("FluidLabelSet",ft); makeSCWrapper("FluidKDTree",ft); - makeSCWrapper("FluidKMeans",ft); + makeSCWrapper("FluidKMeans",ft); makeSCWrapper("FluidKNNClassifier",ft); makeSCWrapper("FluidKNNRegressor",ft); makeSCWrapper("FluidNormalize",ft);