From d73a82d0699b143e98a25e636303ec28ee8e6753 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 13 May 2020 22:48:50 +0100 Subject: [PATCH 1/4] Fix memory leak, and NRT housekeeping --- include/FluidSCWrapper.hpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/include/FluidSCWrapper.hpp b/include/FluidSCWrapper.hpp index 6b530dc..2c4c1e0 100644 --- a/include/FluidSCWrapper.hpp +++ b/include/FluidSCWrapper.hpp @@ -276,6 +276,7 @@ public: // we want to poll thread roughly every 20ms checkThreadInterval = static_cast(0.02 / controlDur()); set_calc_function(); + Wrapper::getInterfaceTable()->fClearUnitOutputs(this, 1); }; /// The calc function. Checks to see if we've cancelled, spits out progress, @@ -452,7 +453,7 @@ private: protected: ParamSetType mParams; Client mClient; - bool mSynchronous{true}; + bool mSynchronous{false}; bool mQueueEnabled{false}; bool mCheckingForDone{false}; // only write to this from RT thread kthx bool mCancelled{false}; @@ -604,9 +605,11 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase { // first is string size, then chars index size = static_cast(args.next()); + + auto ft = FluidSCWrapper::getInterfaceTable(); + char* chunk = - static_cast(FluidSCWrapper::getInterfaceTable()->fRTAlloc( - w, asUnsigned(size + 1))); + static_cast(ft->fRTAlloc(w, asUnsigned(size + 1))); if (!chunk) { @@ -619,8 +622,9 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase chunk[i] = static_cast(args.next()); chunk[size] = 0; // terminate string - - return std::string{chunk}; + auto res = std::string{chunk}; + ft->fRTFree(w,chunk); + return res; } From ee666fe7cfb2b8e1b3a3f7b8b00f615a003148a5 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 13 May 2020 22:49:11 +0100 Subject: [PATCH 2/4] All frames as 2D view from Buffer --- include/SCBufferAdaptor.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/SCBufferAdaptor.hpp b/include/SCBufferAdaptor.hpp index df85474..775c330 100644 --- a/include/SCBufferAdaptor.hpp +++ b/include/SCBufferAdaptor.hpp @@ -106,6 +106,21 @@ public: bool exists() const override { return mBuffer && mBuffer->data; } + FluidTensorView allFrames() override + { + + FluidTensorView v{mBuffer->data, 0, mBuffer->frames, + mBuffer->channels}; + return v.transpose(); + } + + FluidTensorView allFrames() const override + { + FluidTensorView v{mBuffer->data, 0, mBuffer->frames, + mBuffer->channels}; + return v.transpose(); + } + FluidTensorView samps(index channel) override { FluidTensorView v{mBuffer->data, 0, mBuffer->frames, From a3e85b502fa821e39796fa31be755274423b7904 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 13 May 2020 22:49:48 +0100 Subject: [PATCH 3/4] BufMFCC.sc: Remove rogue parameter from kr call --- release-packaging/Classes/FluidBufMFCC.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-packaging/Classes/FluidBufMFCC.sc b/release-packaging/Classes/FluidBufMFCC.sc index 458e327..5c336a4 100644 --- a/release-packaging/Classes/FluidBufMFCC.sc +++ b/release-packaging/Classes/FluidBufMFCC.sc @@ -16,7 +16,7 @@ FluidBufMFCC : UGen{ } *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, features, numCoeffs = 13, numBands = 40, minFreq = 20, maxFreq = 20000, windowSize = 1024, hopSize = -1, fftSize = -1, doneAction = 0| - ^this.multiNew(\control, source, startFrame, numFrames, startChan, numChans, features, numCoeffs, numBands, minFreq, maxFreq, numCoeffs, windowSize, hopSize, fftSize, doneAction); + ^this.multiNew(\control, source, startFrame, numFrames, startChan, numChans, features, numCoeffs, numBands, minFreq, maxFreq, windowSize, hopSize, fftSize, doneAction); } *process { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, features, numCoeffs = 13, numBands = 40, minFreq = 20, maxFreq = 20000, windowSize = 1024, hopSize = -1, fftSize = -1, action | From 368e7af7d22f498ab3cb4677f278e82847dad994 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Wed, 13 May 2020 23:05:49 +0100 Subject: [PATCH 4/4] Add asUGeninput for dataset and labelset --- release-packaging/Classes/FluidDataSet.sc | 6 ++++++ release-packaging/Classes/FluidLabelSet.sc | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/release-packaging/Classes/FluidDataSet.sc b/release-packaging/Classes/FluidDataSet.sc index dc1d074..7f7c6d3 100644 --- a/release-packaging/Classes/FluidDataSet.sc +++ b/release-packaging/Classes/FluidDataSet.sc @@ -2,6 +2,12 @@ FluidDataSet : FluidManipulationClient { var <>synth, <>server, <>id; + *asUGenInput { |input| + var ascii = input.asString.ascii; + ^[ascii.size].addAll(ascii) + } + + *kr{ |name| ^this.new1('control',name); } diff --git a/release-packaging/Classes/FluidLabelSet.sc b/release-packaging/Classes/FluidLabelSet.sc index 147c3a5..313f21a 100644 --- a/release-packaging/Classes/FluidLabelSet.sc +++ b/release-packaging/Classes/FluidLabelSet.sc @@ -21,6 +21,12 @@ FluidLabelSet : FluidManipulationClient { ^id.asString; } + + *asUGenInput { |input| + var ascii = input.asString.ascii; + ^[ascii.size].addAll(ascii) + } + addLabel{|id, label, action| this.pr_sendMsg(\addLabel,[id.asString, label.asString],action); } @@ -52,4 +58,4 @@ FluidLabelSet : FluidManipulationClient { clear { |action| this.pr_sendMsg(\clear,[],action); } -} \ No newline at end of file +}