From 088f900f708d6fff32417c0fd98a60fdec7cafc9 Mon Sep 17 00:00:00 2001 From: Owen Green Date: Thu, 1 Nov 2018 11:37:03 +0000 Subject: [PATCH] release-packaging/Classes/FluidNMFMatch.sc: Class definition changed rank -> maxrank src/FluidNMFMatch/FluidNMFMatch.cpp: Use maxrank, check for actual rank in next() src/FluidNMFMatch/test.scd: test explicitly with maxrank --- release-packaging/Classes/FluidNMFMatch.sc | 4 ++-- src/FluidNMFMatch/FluidNMFMatch.cpp | 25 ++++++++++++++++------ src/FluidNMFMatch/test.scd | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/release-packaging/Classes/FluidNMFMatch.sc b/release-packaging/Classes/FluidNMFMatch.sc index c34b730..cb4fa92 100644 --- a/release-packaging/Classes/FluidNMFMatch.sc +++ b/release-packaging/Classes/FluidNMFMatch.sc @@ -1,7 +1,7 @@ FluidNMFMatch : MultiOutUGen { - *kr { arg in = 0, dictBufNum, rank = 1, nIter = 10, winSize = 1024, hopSize = 256, fftSize = -1; - ^this.multiNew('control', in, dictBufNum, rank, nIter, winSize, hopSize, fftSize); + *kr { arg in = 0, dictBufNum, maxrank = 1, nIter = 10, winSize = 1024, hopSize = 256, fftSize = -1; + ^this.multiNew('control', in, dictBufNum, maxrank, nIter, winSize, hopSize, fftSize); } init {arg ...theInputs; diff --git a/src/FluidNMFMatch/FluidNMFMatch.cpp b/src/FluidNMFMatch/FluidNMFMatch.cpp index 7a950a2..048015a 100644 --- a/src/FluidNMFMatch/FluidNMFMatch.cpp +++ b/src/FluidNMFMatch/FluidNMFMatch.cpp @@ -45,7 +45,7 @@ namespace nmf{ return; } - mRank = parameter::lookupParam("rank", mClient->getParams()).getLong(); + mMaxRank = parameter::lookupParam("maxrank", mClient->getParams()).getLong(); mClient->set_host_buffer_size(bufferSize()); @@ -53,8 +53,8 @@ namespace nmf{ inputSignals[0] = SignalPointer(new AudioSignalWrapper()); - outputSignals.resize(mRank); - for(size_t i = 0; i < mRank; ++i) + outputSignals.resize(mMaxRank); + for(size_t i = 0; i < mMaxRank; ++i) outputSignals[i].reset(new Client::ScalarSignal()); mCalcFunc = make_calc_function(); @@ -106,21 +106,32 @@ namespace nmf{ void next(int numsamples) { + auto filters = parameter::lookupParam("filterbuf", mClient->getParams()).getBuffer(); + + if(!filters) return; + setParams(false); const float* input = zin(0); const float inscalar = in0(0); inputSignals[0]->set(const_cast(input), inscalar); - for(size_t i = 0; i < mRank; ++i) + + for(size_t i = 0; i < mMaxRank; ++i) outputSignals[i]->set(out(i),out0(i)); - mClient->do_process_noOLA(inputSignals.begin(),inputSignals.end(), outputSignals.begin(), outputSignals.end(), mWorld->mFullRate.mBufLength ,1,mRank); - for(size_t i = 0; i < mRank; ++i) + mClient->do_process_noOLA(inputSignals.begin(),inputSignals.end(), outputSignals.begin(), outputSignals.end(), mWorld->mFullRate.mBufLength ,1,mMaxRank); + + parameter::BufferAdaptor::Access buf(filters); + long actualRank = buf.numChans(); + for(size_t i = 0; i < actualRank; ++i) + out0(i) = outputSignals[i]->next(); + + for(size_t i = actualRank; i < mMaxRank; ++i) out0(i) = outputSignals[i]->next(); } - size_t mRank; + size_t mMaxRank; ClientPointer mClient; SignalArray<1> inputSignals; SignalVector outputSignals; diff --git a/src/FluidNMFMatch/test.scd b/src/FluidNMFMatch/test.scd index 7ec2850..b7173e4 100644 --- a/src/FluidNMFMatch/test.scd +++ b/src/FluidNMFMatch/test.scd @@ -37,5 +37,5 @@ Routine{ }.play; ) -{DelayN.ar(PlayBuf.ar(1,b.bufnum),0.1,1024/44100, FluidNMFMatch.kr(PlayBuf.ar(1,b.bufnum),e.bufnum,2))}.play +{DelayN.ar(PlayBuf.ar(1,b.bufnum),0.1,1024/44100, FluidNMFMatch.kr(PlayBuf.ar(1,b.bufnum),e.bufnum,maxrank:2))}.play