diff --git a/release-packaging/Classes/FluidSTFTPass.sc b/release-packaging/Classes/FluidSTFTPass.sc index 6b86f5e..d9cd1f2 100644 --- a/release-packaging/Classes/FluidSTFTPass.sc +++ b/release-packaging/Classes/FluidSTFTPass.sc @@ -1,5 +1,5 @@ FluidSTFTPass : UGen { - *ar { arg in = 0, windowSize= 1024, hopSize= 256, fftSize= -1; - ^this.multiNew('audio', in.asAudioRateInput(this),windowSize, hopSize, fftSize) + *ar { arg in = 0, windowSize= 1024, hopSize= 256, fftSize= -1, maxWinSize= 16384; + ^this.multiNew('audio', in.asAudioRateInput(this),windowSize, hopSize, fftSize, maxWinSize) } } diff --git a/src/FluidSTFTPass/FluidSTFTPass.cpp b/src/FluidSTFTPass/FluidSTFTPass.cpp index 3ef3cef..b39840e 100644 --- a/src/FluidSTFTPass/FluidSTFTPass.cpp +++ b/src/FluidSTFTPass/FluidSTFTPass.cpp @@ -1,88 +1,13 @@ // A tool from the FluCoMa project, funded by the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 725899) -#include "SC_PlugIn.hpp" -#include "data/FluidTensor.hpp" -#include "clients/rt/BaseSTFTClient.hpp" +#include +#include static InterfaceTable *ft; -namespace fluid { - namespace stft{ - - -class FDSTFTPass: public SCUnit -{ - using AudioSignalWrapper = client::BaseSTFTClient::AudioSignal; - using SignalWrapper = client::BaseSTFTClient::Signal; - -// using SignalPointer = std::unique_ptr; -public: - FDSTFTPass() - { - //Order of args - //Window size, Hop size, FFT Size - - //Get the window size - const float windowSize = in0(1); - const float hopSize = in0(2); - const float fftSize = in0(3); - - //Oh NO! Heap allocation! Make client object - mClient = new client::BaseSTFTClient(65536); - mClient->getParams()[0].setLong(windowSize); - mClient->getParams()[1].setLong(hopSize); - mClient->getParams()[2].setLong(fftSize); - - bool isOK; - std::string feedback; - - std::tie(isOK, feedback) = mClient->sanityCheck(); - if(!isOK) - { - Print("fdSTFTPass Error: %s",feedback.c_str()); - return; - } - - - mClient->setHostBufferSize(bufferSize()); - mClient->reset(); - - //Work out what signals we need. For now keep it simple: - //in 0 => only audio - //out 0 => only audio - inputSignals[0] = new AudioSignalWrapper(); - outputSignals[0] = new AudioSignalWrapper(); - - mCalcFunc = make_calc_function(); - Unit* unit = this; - ClearUnitOutputs(unit,1); - } - - ~FDSTFTPass() - { - delete inputSignals[0]; - delete outputSignals[0]; - delete mClient; - } - -private: - void next(int numsamples) - { - const float* input = in(0); - const float inscalar = in0(0); - inputSignals[0]->set(const_cast(input), inscalar); - outputSignals[0]->set(out(0), out0(0)); - mClient->doProcess(std::begin(inputSignals),std::end(inputSignals),std::begin(outputSignals), std::end(outputSignals),numsamples,1,1); - } - - client::BaseSTFTClient *mClient; - SignalWrapper *inputSignals[1]; - SignalWrapper *outputSignals[1]; -}; -} -} PluginLoad(FluidSTFTUGen) { ft = inTable; - registerUnit(ft, "FluidSTFTPass"); + using namespace fluid::client; + makeSCWrapper>(ft, "FluidSTFTPass",STFTParams); }