diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index 515b469..c3e00e4 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -307,7 +307,7 @@ public: auto& client = mWrapper->client(); auto& params = mWrapper->params(); const Unit* unit = this; - bool trig = IsModel_t::value ? mPrevTrig && in0(0) > 0 : false; + bool trig = IsModel_t::value ? !mPrevTrig && in0(0) > 0 : false; bool shouldProcess = IsModel_t::value ? trig : true; mPrevTrig = trig; @@ -318,7 +318,7 @@ public: Wrapper::setParams(mWrapper, params, mWrapper->mControlsIterator); // forward on inputs N + audio inputs as params params.constrainParameterValues(); - + } for (index i = 0; i < client.audioChannelsIn(); ++i) { if (mInputConnections[asUnsigned(i)]) @@ -337,7 +337,7 @@ public: mOutputs[asUnsigned(i)].reset(out(static_cast(i)), 0, 1); } client.process(mAudioInputs, mOutputs, mContext); - } +// } } private: std::vector mInputConnections; @@ -594,7 +594,7 @@ public: return true; } - static void destroy(World* world, void* data) + static void destroy(World* /*world*/, void* data) { if(!data) return; auto& s = *static_cast*>(data); @@ -995,17 +995,17 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase return std::string(recv ? recv : ""); } - static auto fromArgs(Unit* x, FloatControlsIter& args, std::string, int) + static auto fromArgs(Unit* /*x*/, FloatControlsIter& args, std::string, int) { // first is string size, then chars index size = static_cast(args.next()); - auto ft = FluidSCWrapper::getInterfaceTable(); - auto w = x->mWorld; +// auto ft = FluidSCWrapper::getInterfaceTable(); +// auto w = x->mWorld; // char* chunk = // static_cast(ft->fRTAlloc(w, asUnsigned(size + 1))); std::string res; - res.resize(size); + res.resize(asUnsigned(size)); // if (!chunk) // { @@ -1015,7 +1015,7 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase // } for (index i = 0; i < size; ++i) - res[i] = static_cast(args.next()); + res[asUnsigned(i)] = static_cast(args.next()); // res[size] = 0; // terminate string // auto res = std::string{chunk}; @@ -1415,7 +1415,7 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase return true; }, nullptr, // NRT Thread: No-op - [](World* w, void* data) // RT thread: clean up + [](World* /*w*/, void* data) // RT thread: clean up { MessageData* m = static_cast(data); // m->~MessageData(); @@ -1451,7 +1451,7 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase // float* values = static_cast( // ft->fRTAlloc(x->mNode->mWorld, asUnsigned(numArgs) * sizeof(float))); - float* values = new float[numArgs]; + float* values = new float[asUnsigned(numArgs)]; // copy return data ToFloatArray::convert(values, static_cast(result)); @@ -1492,7 +1492,7 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase // float* values = static_cast( // ft->fRTAlloc(x->mNode->mWorld, asUnsigned(numArgs) * sizeof(float))); - float* values = new float[numArgs]; + float* values = new float[asUnsigned(numArgs)]; ToFloatArray::convert(values, std::tuple(result), offsets, std::index_sequence_for()); diff --git a/release-packaging/Classes/FluidDataSet.sc b/release-packaging/Classes/FluidDataSet.sc index cccfdd7..6d1dea1 100644 --- a/release-packaging/Classes/FluidDataSet.sc +++ b/release-packaging/Classes/FluidDataSet.sc @@ -48,15 +48,18 @@ FluidDataSet : FluidManipulationClient { } addPoint{|label, buffer, action| - this.prSendMsg(\addPoint,[label.asSymbol,buffer.asUGenInput],action); + buffer = this.prEncodeBuffer(buffer); + this.prSendMsg(\addPoint,[label.asSymbol,buffer],action); } getPoint{|label, buffer, action| - this.prSendMsg(\getPoint,[label.asSymbol,buffer.asUGenInput],action); + buffer = this.prEncodeBuffer(buffer); + this.prSendMsg(\getPoint,[label.asSymbol,buffer],action,outputBuffers:[buffer]); } updatePoint{|label, buffer, action| - this.prSendMsg(\updatePoint,[label.asSymbol,buffer.asUGenInput],action); + buffer = this.prEncodeBuffer(buffer); + this.prSendMsg(\updatePoint,[label.asSymbol,buffer],action,outputBuffers:[buffer]); } deletePoint{|label, action| diff --git a/release-packaging/Classes/FluidKMeans.sc b/release-packaging/Classes/FluidKMeans.sc index fba3e2d..da2a5ed 100644 --- a/release-packaging/Classes/FluidKMeans.sc +++ b/release-packaging/Classes/FluidKMeans.sc @@ -26,9 +26,10 @@ FluidKMeans : FluidRTDataClient { } predictPoint { |buffer, action| + buffer = this.prEncodeBuffer(buffer); this.prSendMsg(\predictPoint, - [buffer.asUGenInput], action, - [number(FluidMessageResponse,_,_)] + [buffer], action, + [number(FluidMessageResponse,_,_)],outputBuffers:[buffer] ); } } diff --git a/release-packaging/Classes/FluidKNNClassifier.sc b/release-packaging/Classes/FluidKNNClassifier.sc index 89e54d8..8d845b8 100644 --- a/release-packaging/Classes/FluidKNNClassifier.sc +++ b/release-packaging/Classes/FluidKNNClassifier.sc @@ -15,9 +15,10 @@ FluidKNNClassifier : FluidRTDataClient { } predictPoint {|buffer, action| + buffer = this.prEncodeBuffer(buffer); this.prSendMsg(\predictPoint, [buffer.asUGenInput], action, - [string(FluidMessageResponse,_,_)] + [string(FluidMessageResponse,_,_)],outputBuffers:[buffer] ); } } diff --git a/release-packaging/Classes/FluidKNNRegressor.sc b/release-packaging/Classes/FluidKNNRegressor.sc index befb11d..c4fd6d4 100644 --- a/release-packaging/Classes/FluidKNNRegressor.sc +++ b/release-packaging/Classes/FluidKNNRegressor.sc @@ -18,7 +18,8 @@ FluidKNNRegressor : FluidRTDataClient { } predictPoint { |buffer, action| - this.prSendMsg(\predictPoint, [buffer.asUGenInput], action, - [number(FluidMessageResponse,_,_)]); + buffer = this.prEncodeBuffer(buffer); + this.prSendMsg(\predictPoint, [buffer], action, + [number(FluidMessageResponse,_,_)],outputBuffers:[buffer]); } } diff --git a/release-packaging/Classes/FluidMLP.sc b/release-packaging/Classes/FluidMLP.sc index a981e5b..16a262b 100644 --- a/release-packaging/Classes/FluidMLP.sc +++ b/release-packaging/Classes/FluidMLP.sc @@ -44,8 +44,10 @@ FluidMLPRegressor : FluidRTDataClient { } predictPoint { |sourceBuffer, targetBuffer, action| + sourceBuffer = this.prEncodeBuffer(sourceBuffer); + targetBuffer = this.prEncodeBuffer(targetBuffer); this.prSendMsg(\predictPoint, - [sourceBuffer.asUGenInput, targetBuffer.asUGenInput], action); + [sourceBuffer.asUGenInput, targetBuffer.asUGenInput], action,outputBuffers:[targetBuffer]); } } @@ -94,7 +96,8 @@ FluidMLPClassifier : FluidRTDataClient { } predictPoint { |sourceBuffer, action| + sourceBuffer = this.prEncodeBuffer(sourceBuffer); this.prSendMsg(\predictPoint, - [sourceBuffer.asUGenInput], action, string(FluidMessageResponse,_,_)); + [sourceBuffer], action, string(FluidMessageResponse,_,_)); } } diff --git a/release-packaging/Classes/FluidManipulationClient.sc b/release-packaging/Classes/FluidManipulationClient.sc index 5449e07..82ee858 100644 --- a/release-packaging/Classes/FluidManipulationClient.sc +++ b/release-packaging/Classes/FluidManipulationClient.sc @@ -116,7 +116,9 @@ FluidManipulationClient { this.prSendMsg(\size,[],action,[numbers(FluidMessageResponse,_,1,_)]); } - prSendMsg { |msg, args, action,parser| + prEncodeBuffer { |buf| buf !? {^buf.asUGenInput} ?? {^-1} } + + prSendMsg { |msg, args, action,parser,outputBuffers| if(this.server.serverRunning.not,{(this.asString + "– server not running").error; ^nil}); forkIfNeeded{ synth ?? {onSynthFree.value; server.sync}; @@ -125,7 +127,16 @@ FluidManipulationClient { defer{ var result; result = FluidMessageResponse.collectArgs(parser,msg.drop(3)); - if(action.notNil){action.value(result)}{action.value}; + if(outputBuffers.notNil) { + forkIfNeeded { + outputBuffers.collectInPlace{ |b| + server.cachedBufferAt(b) !? {|x| x.updateInfo} + }; + server.sync; + if(action.notNil){action.value(*(outputBuffers++result))}{action.value}; + }; + } + {if(action.notNil){action.value(result)}{action.value};} } },'/'++msg, server.addr, nil,[synth.nodeID]).oneShot; server.listSendMsg(['/u_cmd', synth.nodeID, ugen.synthIndex, msg].addAll(args)); diff --git a/release-packaging/Classes/FluidNormalize.sc b/release-packaging/Classes/FluidNormalize.sc index 2962d5d..8881930 100644 --- a/release-packaging/Classes/FluidNormalize.sc +++ b/release-packaging/Classes/FluidNormalize.sc @@ -21,8 +21,11 @@ FluidNormalize : FluidRTDataClient { } transformPoint{|sourceBuffer, destBuffer, action| + sourceBuffer = this.prEncodeBuffer(sourceBuffer); + destBuffer = this.prEncodeBuffer(destBuffer); this.prSendMsg(\transformPoint, - [sourceBuffer.asUGenInput, destBuffer.asUGenInput], action + [sourceBuffer, destBuffer], action, + outputBuffers:[destBuffer] ); } } diff --git a/release-packaging/Classes/FluidPCA.sc b/release-packaging/Classes/FluidPCA.sc index 45dcd47..899d6e0 100644 --- a/release-packaging/Classes/FluidPCA.sc +++ b/release-packaging/Classes/FluidPCA.sc @@ -17,6 +17,8 @@ FluidPCA : FluidRTDataClient { } transformPoint{|sourceBuffer, destBuffer, action| - this.prSendMsg(\transformPoint,[sourceBuffer.asUGenInput, destBuffer.asUGenInput], action); + sourceBuffer = this.prEncodeBuffer(sourceBuffer); + destBuffer = this.prEncodeBuffer(destBuffer); + this.prSendMsg(\transformPoint,[sourceBuffer, destBuffer], action, outputBuffers:[destBuffer]); } } diff --git a/release-packaging/Classes/FluidStandardize.sc b/release-packaging/Classes/FluidStandardize.sc index 010c2ef..a01c643 100644 --- a/release-packaging/Classes/FluidStandardize.sc +++ b/release-packaging/Classes/FluidStandardize.sc @@ -20,8 +20,10 @@ FluidStandardize : FluidRTDataClient { } transformPoint{|sourceBuffer, destBuffer, action| + sourceBuffer = this.prEncodeBuffer(sourceBuffer); + destBuffer = this.prEncodeBuffer(destBuffer); this.prSendMsg(\transformPoint, - [sourceBuffer.asUGenInput, destBuffer.asUGenInput], action + [sourceBuffer, destBuffer], action, outputBuffers:[destBuffer] ); } } diff --git a/release-packaging/HelpSource/Classes/FluidKMeans.schelp b/release-packaging/HelpSource/Classes/FluidKMeans.schelp index 1239669..a25f167 100644 --- a/release-packaging/HelpSource/Classes/FluidKMeans.schelp +++ b/release-packaging/HelpSource/Classes/FluidKMeans.schelp @@ -186,8 +186,7 @@ code:: //pitching { var trig = Impulse.kr(MouseX.kr(0,1).exprange(0.5,ControlRate.ir / 2)); - var step = Stepper.kr(trig,max:3); - var point = TRand.kr(-0.1, [0.1, 0.1], trig) + [step.mod(2).linlin(0,1,-0.6,0.6),step.div(2).linlin(0,1,-0.6,0.6)] ; + var point = 2.collect{ TIRand.kr(0,3,trig).linlin(0,3,-1,1) }; point.collect{|p,i| BufWr.kr([p],~inpPoint,i)}; Out.kr(~ib.index,[trig]); T2A.ar(trig)*0.1; diff --git a/release-packaging/HelpSource/Classes/FluidKNNClassifier.schelp b/release-packaging/HelpSource/Classes/FluidKNNClassifier.schelp index ba84a1c..96dce16 100644 --- a/release-packaging/HelpSource/Classes/FluidKNNClassifier.schelp +++ b/release-packaging/HelpSource/Classes/FluidKNNClassifier.schelp @@ -182,8 +182,7 @@ code:: //pitching { var trig = Impulse.kr(MouseX.kr(0,1).exprange(0.5,ControlRate.ir /2).poll); - var step = Stepper.kr(trig,max:3); - var point = TRand.kr(-0.1, [0.1, 0.1], trig) + [step.mod(2).linlin(0,1,-0.6,0.6),step.div(2).linlin(0,1,-0.6,0.6)] ; + var point = 2.collect{TIRand.kr(0,3,trig).linlin(0,3,-1,1)}; point.collect{|p,i| BufWr.kr([p],~inpPoint,i)}; Out.kr(~ib.index,[trig]); T2A.ar(trig)*0.1; diff --git a/release-packaging/HelpSource/Classes/FluidMLPClassifier.schelp b/release-packaging/HelpSource/Classes/FluidMLPClassifier.schelp index f2ffda8..a406b71 100644 --- a/release-packaging/HelpSource/Classes/FluidMLPClassifier.schelp +++ b/release-packaging/HelpSource/Classes/FluidMLPClassifier.schelp @@ -192,8 +192,7 @@ code:: //pitching { var trig = Impulse.kr(MouseX.kr(0,1).exprange(0.5,ControlRate.ir /2).poll); - var step = Stepper.kr(trig,max:3); - var point = TRand.kr(-0.1, [0.1, 0.1], trig) + [step.mod(2).linlin(0,1,-0.6,0.6),step.div(2).linlin(0,1,-0.6,0.6)] ; + var point = 2.collect{TIRand.kr(0,3,trig).linlin(0,3,-1,1)}; point.collect{|p,i| BufWr.kr([p],~inpPoint,i)}; Out.kr(~ib.index,[trig]); T2A.ar(trig)*0.1;