From d3f56ab023c4202eaf0285af4526d165ffaac04a Mon Sep 17 00:00:00 2001 From: weefuzzy Date: Tue, 3 May 2022 16:50:13 +0100 Subject: [PATCH 1/2] All scalers: replace 'invert' parameter with `inverseTransform` messages --- release-packaging/Classes/FluidNormalize.sc | 35 +++++++++++++++---- release-packaging/Classes/FluidRobustScale.sc | 32 +++++++++++++---- release-packaging/Classes/FluidStandardize.sc | 31 ++++++++++++---- 3 files changed, 78 insertions(+), 20 deletions(-) diff --git a/release-packaging/Classes/FluidNormalize.sc b/release-packaging/Classes/FluidNormalize.sc index 21cdea4c..6147d6fa 100644 --- a/release-packaging/Classes/FluidNormalize.sc +++ b/release-packaging/Classes/FluidNormalize.sc @@ -2,13 +2,13 @@ FluidNormalize : FluidModelObject { var <>min, <>max, <>invert; - *new {|server, min = 0, max = 1, invert = 0| - ^super.new(server,[min,max,invert]) - .min_(min).max_(max).invert_(invert); + *new {|server, min = 0, max = 1| + ^super.new(server,[min,max]) + .min_(min).max_(max); } prGetParams{ - ^[this.id, this.min,this.max,this.invert,-1,-1]; + ^[this.id, this.min,this.max,-1,-1]; } @@ -52,16 +52,37 @@ FluidNormalize : FluidModelObject { this.prSendMsg(this.transformPointMsg(sourceBuffer, destBuffer)); } + inverseTransformMsg{|sourceDataSet, destDataSet| + ^this.prMakeMsg(\inverseTransform,id,sourceDataSet.id,destDataSet.id); + } + + inverseTransform{|sourceDataSet, destDataSet, action| + actions[\inverseTransform] = [nil,action]; + this.prSendMsg(this.inverseTransformMsg(sourceDataSet, destDataSet)); + } + + inverseTransformPointMsg{|sourceBuffer, destBuffer| + ^this.prMakeMsg(\inverseTransformPoint,id, + this.prEncodeBuffer(sourceBuffer), + this.prEncodeBuffer(destBuffer), + ["/b_query",destBuffer.asUGenInput] + ); + } + + inverseTransformPoint{|sourceBuffer, destBuffer, action| + actions[\inverseTransformPoint] = [nil,{action.value(destBuffer)}]; + this.prSendMsg(this.inverseTransformPointMsg(sourceBuffer, destBuffer)); + } + kr{|trig, inputBuffer,outputBuffer,min = 0 ,max = 1,invert = 0| min = min ? this.min; max = max ? this.max; - invert = invert ? this.invert; - this.min_(min).max_(max).invert_(invert); + this.min_(min).max_(max); ^FluidNormalizeQuery.kr(trig, - this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), this.min, this.max, this.invert); + this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), this.min, this.max, invert); } diff --git a/release-packaging/Classes/FluidRobustScale.sc b/release-packaging/Classes/FluidRobustScale.sc index 3e7d34f9..0126f306 100644 --- a/release-packaging/Classes/FluidRobustScale.sc +++ b/release-packaging/Classes/FluidRobustScale.sc @@ -1,14 +1,14 @@ FluidRobustScale : FluidModelObject { - var <>low, <>high, <>invert; + var <>low, <>high; *new {|server, low = 25, high = 75, invert = 0| ^super.new(server,[low,high,invert]) - .low_(low).high_(high).invert_(invert); + .low_(low).high_(high); } prGetParams{ - ^[this.id,this.low,this.high,this.invert]; + ^[this.id,this.low,this.high]; } @@ -52,13 +52,31 @@ FluidRobustScale : FluidModelObject { this.prSendMsg(this.transformPointMsg(sourceBuffer, destBuffer)); } - kr{|trig, inputBuffer,outputBuffer,invert| + inverseTransformMsg{|sourceDataSet, destDataSet| + ^this.prMakeMsg(\inverseTransform,id,sourceDataSet.id,destDataSet.id); + } + + inverseTransform{|sourceDataSet, destDataSet, action| + actions[\inverseTransform] = [nil,action]; + this.prSendMsg(this.inverseTransformMsg(sourceDataSet, destDataSet)); + } + + inverseTransformPointMsg{|sourceBuffer, destBuffer| + ^this.prMakeMsg(\inverseTransformPoint,id, + this.prEncodeBuffer(sourceBuffer), + this.prEncodeBuffer(destBuffer), + ["/b_query",destBuffer.asUGenInput] + ); + } - invert = invert ? this.invert; + inverseTransformPoint{|sourceBuffer, destBuffer, action| + actions[\inverseRransformPoint] = [nil,{action.value(destBuffer)}]; + this.prSendMsg(this.inverseTransformPointMsg(sourceBuffer, destBuffer)); + } - // this.invert_(invert); + kr{|trig, inputBuffer,outputBuffer,invert = 0| - ^FluidRobustScaleQuery.kr(trig,this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), invert,); + ^FluidRobustScaleQuery.kr(trig,this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), invert); } diff --git a/release-packaging/Classes/FluidStandardize.sc b/release-packaging/Classes/FluidStandardize.sc index b4127b89..2e5e9ca1 100644 --- a/release-packaging/Classes/FluidStandardize.sc +++ b/release-packaging/Classes/FluidStandardize.sc @@ -3,11 +3,11 @@ FluidStandardize : FluidModelObject { var <>invert; *new {|server, invert = 0| - ^super.new(server,[invert]).invert_(invert); + ^super.new(server,[]); } prGetParams{ - ^[this.id, this.invert]; + ^[this.id]; } fitMsg{|dataSet| @@ -47,12 +47,31 @@ FluidStandardize : FluidModelObject { this.prSendMsg(this.transformPointMsg(sourceBuffer,destBuffer)); } - kr{|trig, inputBuffer,outputBuffer,invert| + inverseTransformMsg{|sourceDataSet, destDataSet| + ^this.prMakeMsg(\inverseTransform,id,sourceDataSet.id,destDataSet.id); + } + + inverseTransform{|sourceDataSet, destDataSet, action| + actions[\inverseTransform] = [nil,action]; + this.prSendMsg(this.inverseTransformMsg(sourceDataSet, destDataSet)); + } + + inverseTransformPointMsg{|sourceBuffer, destBuffer| + ^this.prMakeMsg(\inverseTransformPoint,id, + this.prEncodeBuffer(sourceBuffer), + this.prEncodeBuffer(destBuffer), + ["/b_query",destBuffer.asUGenInput] + ); + } + + inverseTransformPoint{|sourceBuffer, destBuffer, action| + actions[\inverseRransformPoint] = [nil,{action.value(destBuffer)}]; + this.prSendMsg(this.inverseTransformPointMsg(sourceBuffer, destBuffer)); + } - invert = invert ? this.invert; - this.invert_(invert); + kr{|trig, inputBuffer,outputBuffer,invert = 0| - ^FluidStandardizeQuery.kr(trig,this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), this.invert); + ^FluidStandardizeQuery.kr(trig,this, this.prEncodeBuffer(inputBuffer), this.prEncodeBuffer(outputBuffer), invert); } } From 11d07c4337bab2cfbf7165470a8577b5004292df Mon Sep 17 00:00:00 2001 From: weefuzzy Date: Tue, 3 May 2022 16:51:07 +0100 Subject: [PATCH 2/2] Wrapper: Work around 32 char limit for plugin commands If too long, remove vowels. Sorry. Better ideas welcome --- include/wrapper/Messaging.hpp | 25 +++++++++++++++++-- .../Classes/FluidServerObject.sc | 7 +++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/include/wrapper/Messaging.hpp b/include/wrapper/Messaging.hpp index 08c04f6c..7e8f173c 100644 --- a/include/wrapper/Messaging.hpp +++ b/include/wrapper/Messaging.hpp @@ -35,6 +35,22 @@ struct FluidSCMessaging{ }; +private: + static bool is_vowel(const char p_char) + { + constexpr char vowels[] = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' }; + return std::find(std::begin(vowels), std::end(vowels), p_char) != std::end(vowels); + } + + static std::string remove_vowel(std::string st) + { + auto to_erase = std::remove_if(st.begin(), st.end(), is_vowel); + st.erase(to_erase, st.end()); + return st; + } + + +public: template struct SetupMessageCmd { @@ -42,8 +58,13 @@ struct FluidSCMessaging{ void operator()(const T& message) { static std::string messageName = std::string{getName()} + '/' + message.name; - auto ft = getInterfaceTable(); - ft->fDefinePlugInCmd(messageName.c_str(), doMessage,(void*)messageName.c_str()); + + if(messageName.size() >= 32u) + messageName = remove_vowel(messageName); + + auto ft = getInterfaceTable(); + if(!ft->fDefinePlugInCmd(messageName.c_str(), doMessage,(void*)messageName.c_str())) + std::cout << "ERROR: failed to register command \"" << messageName << "\"\n"; } }; diff --git a/release-packaging/Classes/FluidServerObject.sc b/release-packaging/Classes/FluidServerObject.sc index 66625fc0..0bf1479d 100644 --- a/release-packaging/Classes/FluidServerObject.sc +++ b/release-packaging/Classes/FluidServerObject.sc @@ -56,7 +56,12 @@ FluidServerObject } prMakeMsg{|msg,id...args| - ^['/cmd',"%/%".format(this.class.objectClassName,msg),id].addAll(args); + + var commandName = "%/%".format(this.class.objectClassName,msg); + + if(commandName.size >= 32) { commandName = commandName.select{|c|c.isVowel.not}}; + + ^['/cmd',commandName,id].addAll(args); } freeMsg {