diff --git a/include/fdNRTBase.hpp b/include/fdNRTBase.hpp index 3e8e0e1..7897705 100644 --- a/include/fdNRTBase.hpp +++ b/include/fdNRTBase.hpp @@ -110,8 +110,9 @@ namespace sc{ FluidTensorView samps(size_t offset, size_t nframes, size_t chanoffset) override { FluidTensorView v{mBuffer->data,0, static_cast(mBuffer->frames), static_cast(mBuffer->channels)}; - - return v(fluid::slice(offset,nframes), fluid::slice(chanoffset,1)).col(0); + + return v(fluid::Slice(offset, nframes), fluid::Slice(chanoffset, 1)) + .col(0); } size_t numFrames() const override @@ -179,8 +180,9 @@ namespace sc{ FluidTensorView samps(size_t offset, size_t nframes, size_t chanoffset) override { FluidTensorView v{mBuffer->data,0, static_cast(mBuffer->frames), static_cast(mBuffer->channels)}; - - return v(fluid::slice(offset,nframes), fluid::slice(chanoffset,1)).col(0); + + return v(fluid::Slice(offset, nframes), fluid::Slice(chanoffset, 1)) + .col(0); } size_t numFrames() const override @@ -310,8 +312,7 @@ namespace sc{ } cmd << ", "; - if(d.getType() == parameter::Type::Buffer) - { + if (d.getType() == parameter::Type::kBuffer) { if (count == 0) cmd << d.getName() << ".bufnum"; else @@ -325,9 +326,9 @@ namespace sc{ cmd << ");\n\n"; ss << ";\n\n\t\tserver = server ? Server.default\n;" ; - - if(Client::getParamDescriptors()[0].getType() == parameter::Type::Buffer) - { + + if (Client::getParamDescriptors()[0].getType() == + parameter::Type::kBuffer) { ss << "if("<(args->geti()); - if(bufnum >= 0){ - SCBufferView* buf = new SCBufferView(bufnum,inWorld); - p.setBuffer(buf); - } - break; + case parameter::Type::kBuffer: { + long bufnum = static_cast(args->geti()); + if (bufnum >= 0) { + SCBufferView *buf = new SCBufferView(bufnum, inWorld); + p.setBuffer(buf); } - case parameter::Type::Long: - { + break; + } + case parameter::Type::kLong: { p.setLong(static_cast(args->geti())); break; } - case parameter::Type::Float: - { + case parameter::Type::kFloat: { p.setFloat(args->getf()); break; } diff --git a/src/FluidBufExperiements/FluidBufExperiements.cpp b/src/FluidBufExperiements/FluidBufExperiements.cpp index c0bf3ea..0c39cf7 100644 --- a/src/FluidBufExperiements/FluidBufExperiements.cpp +++ b/src/FluidBufExperiements/FluidBufExperiements.cpp @@ -14,31 +14,33 @@ static InterfaceTable *ft; /buf_gen approach: Seems to work, but having to do the 'swap' bewteen NRT mirror buffer and RT buffer in the same thread seems smelly, given how the allocation sequeneces in SC_SequenceCommand seem to work. **/ -void BufferMatch(World *world, struct SndBuf *srcBuf, struct sc_msg_iter *msg) -{ - size_t srcFrameCount = srcBuf->frames; - size_t srcChanCount = srcBuf->channels; - - long dstBufNum = msg->geti(); - size_t rank = msg->geti(); - - if (dstBufNum == -1){ - Print("BufferMatch is not happy because there is no output buffer specified.\n"); - return; - } - //This sequence follows what I saw in SC_SequenceCommand.cpp. Pretty much. - //Get the NRT thread mirror buffer - SndBuf* dstBufNRT = World_GetNRTBuf(world, dstBufNum); - //Call the allocation function on that - SCErr err = ft->fBufAlloc(dstBufNRT, srcChanCount * rank, srcFrameCount,srcBuf->samplerate); - //If we were posh, we'd check for errors - //Norhing will happen, unless we (a) assign the allocated data back to the main buffer pool (b?) Tell the server the buffer has changed - //Get the RT buffer - SndBuf* dstBuf = World_GetBuf(world, dstBufNum); - //Assign value to our NRT buffer pointer's value - *dstBuf = *dstBufNRT; - //Ping the server - world->mSndBufUpdates[dstBufNum].writes ++ ; +void bufferMatch(World *world, struct SndBuf *srcBuf, struct sc_msg_iter *msg) { + size_t srcFrameCount = srcBuf->frames; + size_t srcChanCount = srcBuf->channels; + + long dstBufNum = msg->geti(); + size_t rank = msg->geti(); + + if (dstBufNum == -1) { + Print("BufferMatch is not happy because there is no output buffer " + "specified.\n"); + return; + } + // This sequence follows what I saw in SC_SequenceCommand.cpp. Pretty much. + // Get the NRT thread mirror buffer + SndBuf *dstBufNRT = World_GetNRTBuf(world, dstBufNum); + // Call the allocation function on that + SCErr err = ft->fBufAlloc(dstBufNRT, srcChanCount * rank, srcFrameCount, + srcBuf->samplerate); + // If we were posh, we'd check for errors + // Norhing will happen, unless we (a) assign the allocated data back to the + // main buffer pool (b?) Tell the server the buffer has changed Get the RT + // buffer + SndBuf *dstBuf = World_GetBuf(world, dstBufNum); + // Assign value to our NRT buffer pointer's value + *dstBuf = *dstBufNRT; + // Ping the server + world->mSndBufUpdates[dstBufNum].writes++; } /** @@ -56,82 +58,76 @@ struct BufferFunTimeCmdData }; //'Stage2()' happens in the NRT thread. Here we do our heavy stuff -bool ASyncBufferFun_NRTStage(World* world, void* inUserData) -{ - BufferFunTimeCmdData* data = (BufferFunTimeCmdData*) inUserData; - - SndBuf* src = World_GetNRTBuf(world, data->srcbuf); - SndBuf* dst = World_GetNRTBuf(world, data->dstbuf); - SCErr err = ft->fBufAlloc(dst, src->channels * data->rank, src->frames,src->samplerate); - data->newdst = dst; - return true; +bool aSyncBufferFunNrtStage(World *world, void *inUserData) { + BufferFunTimeCmdData *data = (BufferFunTimeCmdData *)inUserData; + + SndBuf *src = World_GetNRTBuf(world, data->srcbuf); + SndBuf *dst = World_GetNRTBuf(world, data->dstbuf); + SCErr err = ft->fBufAlloc(dst, src->channels * data->rank, src->frames, + src->samplerate); + data->newdst = dst; + return true; } //'Statge3()' happens back in the RT thread, here we swap our new buffers //SC will send the completion message after this -bool ASyncBufferFun_RTStage(World* world, void* inUserData) -{ - BufferFunTimeCmdData* data = (BufferFunTimeCmdData*) inUserData; - //Norhing will happen, unless we (a) assign the allocated data back to the main buffer pool (b?) Tell the server the buffer has changed - //Get the RT buffer - SndBuf* dstBuf = World_GetBuf(world, data->dstbuf); - //Assign value to our NRT buffer pointer's value - *dstBuf = *data->newdst; - //Ping the server - world->mSndBufUpdates[data->dstbuf].writes++; - return true; +bool aSyncBufferFunRtStage(World *world, void *inUserData) { + BufferFunTimeCmdData *data = (BufferFunTimeCmdData *)inUserData; + // Norhing will happen, unless we (a) assign the allocated data back to the + // main buffer pool (b?) Tell the server the buffer has changed Get the RT + // buffer + SndBuf *dstBuf = World_GetBuf(world, data->dstbuf); + // Assign value to our NRT buffer pointer's value + *dstBuf = *data->newdst; + // Ping the server + world->mSndBufUpdates[data->dstbuf].writes++; + return true; } //'Stage 4()' is back on the NRT, we don't have anything to do here. SC will send 'done' after this -bool ASyncBufferFun_FinalBit(World* world, void* inUserData) -{ - return true; -} +bool aSyncBufferFunFinalBit(World *world, void *inUserData) { return true; } //Here we free any resources, including the struct we made at the start -void ASyncBufferFun_CleanUp(World* world, void* inUserData) -{ - BufferFunTimeCmdData* data = (BufferFunTimeCmdData*)inUserData; - RTFree(world,data); - //scsynth will take care of the completion message +void aSyncBufferFunCleanUp(World *world, void *inUserData) { + BufferFunTimeCmdData *data = (BufferFunTimeCmdData *)inUserData; + RTFree(world, data); + // scsynth will take care of the completion message } //This is our entry point. We need to make a struct and populate it with good things -void ASyncBufferFun_Main(World *inWorld, void* inUserData, struct sc_msg_iter *msg, void *replyAddr) -{ - BufferFunTimeCmdData* data = (BufferFunTimeCmdData*)RTAlloc(inWorld, sizeof(BufferFunTimeCmdData)); - - data->srcbuf = msg->geti(); - data->dstbuf = msg->geti(); - data->rank = msg->geti(); - - bool ok = true; - - if(data->srcbuf < 0 ) - { - Print("No source buffer"); - ok = false; - } - - if(data->dstbuf < 0 ) - { - Print("No dst buffer"); - ok = false; - } - - if(!ok) - { - RTFree(inWorld,data); - return; - } - +void aSyncBufferFunMain(World *inWorld, void *inUserData, + struct sc_msg_iter *msg, void *replyAddr) { + BufferFunTimeCmdData *data = + (BufferFunTimeCmdData *)RTAlloc(inWorld, sizeof(BufferFunTimeCmdData)); + + data->srcbuf = msg->geti(); + data->dstbuf = msg->geti(); + data->rank = msg->geti(); + + bool ok = true; -// how to pass a string argument: [WILL BE USEFUL FOR WINDOW FUNCTIONS?] -// const char *name = msg->gets(); // get the string argument -// if (name) { -// data->name = (char*)RTAlloc(inWorld, strlen(name)+1); // allocate space, free it in cmdCleanup. -// strcpy(data->name, name); // copy the string -// } + if (data->srcbuf < 0) { + Print("No source buffer"); + ok = false; + } + + if (data->dstbuf < 0) { + Print("No dst buffer"); + ok = false; + } + + if (!ok) { + RTFree(inWorld, data); + return; + } + + // how to pass a string argument: [WILL BE USEFUL FOR WINDOW FUNCTIONS?] + // const char *name = msg->gets(); // get the string argument + // if (name) { + // data->name = (char*)RTAlloc(inWorld, strlen(name)+1); // allocate + // space, free it in cmdCleanup. strcpy(data->name, name); // copy the + // string + // } //Deal with completion message size_t completionMsgSize = msg->getbsize(); @@ -144,20 +140,18 @@ void ASyncBufferFun_Main(World *inWorld, void* inUserData, struct sc_msg_iter *m } //Now, set the wheels in motion - DoAsynchronousCommand(inWorld,replyAddr,"AsyncBufMatch", - data, - (AsyncStageFn)ASyncBufferFun_NRTStage, - (AsyncStageFn)ASyncBufferFun_RTStage, - (AsyncStageFn)ASyncBufferFun_FinalBit, - ASyncBufferFun_CleanUp, - completionMsgSize, completionMsgString); + DoAsynchronousCommand(inWorld, replyAddr, "AsyncBufMatch", data, + (AsyncStageFn)aSyncBufferFunNrtStage, + (AsyncStageFn)aSyncBufferFunRtStage, + (AsyncStageFn)aSyncBufferFunFinalBit, + aSyncBufferFunCleanUp, completionMsgSize, + completionMsgString); } PluginLoad(BufferFunTime) { ft = inTable; //BufGen version: all in the NRT thread - DefineBufGen("BufMatch", BufferMatch); + DefineBufGen("BufMatch", bufferMatch); //ASync version: swaps between NRT and RT threads - DefinePlugInCmd("AsyncBufMatch", ASyncBufferFun_Main, nullptr); - + DefinePlugInCmd("AsyncBufMatch", aSyncBufferFunMain, nullptr); } diff --git a/src/FluidGain/FluidGain.cpp b/src/FluidGain/FluidGain.cpp index 17f4399..c2cd134 100644 --- a/src/FluidGain/FluidGain.cpp +++ b/src/FluidGain/FluidGain.cpp @@ -28,7 +28,7 @@ public: parameter::lookupParam("winsize", params).setLong(in0(1)); parameter::lookupParam("hopsize", params).setLong(in0(1)); - mClient->set_host_buffer_size(bufferSize()); + mClient->setHostBufferSize(bufferSize()); mClient->reset(); inputSignals[0] = SignalPointer(new AudioSignal()); @@ -52,7 +52,7 @@ private: inputSignals[0]->set(const_cast(in(0)), in0(0)); inputSignals[1]->set(const_cast(in(2)), in0(2)); outputSignals[0]->set(out(0), out0(0)); - mClient->do_process(inputSignals.begin(),inputSignals.end(),outputSignals.begin(),outputSignals.end(),numsamples,2,1); + mClient->doProcess(inputSignals.begin(),inputSignals.end(),outputSignals.begin(),outputSignals.end(),numsamples,2,1); } ClientPointer mClient; diff --git a/src/FluidHPSS/FluidHPSS.cpp b/src/FluidHPSS/FluidHPSS.cpp index d40fae6..55c4e83 100644 --- a/src/FluidHPSS/FluidHPSS.cpp +++ b/src/FluidHPSS/FluidHPSS.cpp @@ -38,14 +38,14 @@ namespace hpss{ } - mClient->set_host_buffer_size(bufferSize()); + mClient->setHostBufferSize(bufferSize()); mClient->reset(); //Work out what signals we need. For now keep it simple: - input_signals[0] = SignalPointer(new AudioSignalWrapper()); - output_signals[0] = SignalPointer(new AudioSignalWrapper()); - output_signals[1] = SignalPointer(new AudioSignalWrapper()); - output_signals[2] = SignalPointer(new AudioSignalWrapper()); + inputSignals[0] = SignalPointer(new AudioSignalWrapper()); + outputSignals[0] = SignalPointer(new AudioSignalWrapper()); + outputSignals[1] = SignalPointer(new AudioSignalWrapper()); + outputSignals[2] = SignalPointer(new AudioSignalWrapper()); mCalcFunc = make_calc_function(); Unit* unit = this; @@ -66,32 +66,32 @@ namespace hpss{ continue; switch(p.getDescriptor().getType()) { - case parameter::Type::Long: - p.setLong(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Float: - { - - //We need to constrain threshold (normalised) frequency pairs at runtime. - std::string attrname = p.getDescriptor().getName(); - auto constraint = paramConstraints.find(attrname); - - if(constraint != paramConstraints.end()) - { - double limit = parameter::lookupParam(constraint->second.param, mClient->getParams()).getFloat(); - - if(!constraint->second.condition(in0(i+1),limit)) - { - return; - } + case parameter::Type::kLong: + p.setLong(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kFloat: { + + // We need to constrain threshold (normalised) frequency pairs at + // runtime. + std::string attrname = p.getDescriptor().getName(); + auto constraint = paramConstraints.find(attrname); + + if (constraint != paramConstraints.end()) { + double limit = parameter::lookupParam(constraint->second.param, + mClient->getParams()) + .getFloat(); + + if (!constraint->second.condition(in0(i + 1), limit)) { + return; } - - p.setFloat(in0(i+1)); - p.checkRange(); + } + + p.setFloat(in0(i + 1)); + p.checkRange(); } break; - case parameter::Type::Buffer: + case parameter::Type::kBuffer: // p.setBuffer( in0(i+1)); break; default: @@ -105,11 +105,11 @@ namespace hpss{ setParams(false); const float* input = in(0); const float inscalar = in0(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - output_signals[1]->set(out(1), out0(1)); - output_signals[2]->set(out(2), out0(2)); - mClient->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,3); + inputSignals[0]->set(const_cast(input), inscalar); + outputSignals[0]->set(out(0), out0(0)); + outputSignals[1]->set(out(1), out0(1)); + outputSignals[2]->set(out(2), out0(2)); + mClient->doProcess(std::begin(inputSignals),std::end(inputSignals),std::begin(outputSignals), std::end(outputSignals),numsamples,1,3); } struct Constraint{ @@ -126,8 +126,8 @@ namespace hpss{ ClientPointer mClient; - SignalArray<1> input_signals; - SignalArray<3> output_signals; + SignalArray<1> inputSignals; + SignalArray<3> outputSignals; }; } } diff --git a/src/FluidNMFMatch/FluidNMFMatch.cpp b/src/FluidNMFMatch/FluidNMFMatch.cpp index 7a950a2..8aec8b9 100644 --- a/src/FluidNMFMatch/FluidNMFMatch.cpp +++ b/src/FluidNMFMatch/FluidNMFMatch.cpp @@ -48,7 +48,7 @@ namespace nmf{ mRank = parameter::lookupParam("rank", mClient->getParams()).getLong(); - mClient->set_host_buffer_size(bufferSize()); + mClient->setHostBufferSize(bufferSize()); mClient->reset(); inputSignals[0] = SignalPointer(new AudioSignalWrapper()); @@ -76,18 +76,16 @@ namespace nmf{ continue; switch(p.getDescriptor().getType()) { - case parameter::Type::Long: - p.setLong(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Float: - { - p.setFloat(in0(i+1)); - p.checkRange(); + case parameter::Type::kLong: + p.setLong(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kFloat: { + p.setFloat(in0(i + 1)); + p.checkRange(); } break; - case parameter::Type::Buffer: - { + case parameter::Type::kBuffer: { long bufnum = static_cast(in0(i+1)); sc::RTBufferView* currentBuf = static_cast(p.getBuffer()); @@ -113,7 +111,7 @@ namespace nmf{ for(size_t i = 0; i < mRank; ++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); + mClient->doProcessNoOla(inputSignals.begin(),inputSignals.end(), outputSignals.begin(), outputSignals.end(), mWorld->mFullRate.mBufLength ,1,mRank); for(size_t i = 0; i < mRank; ++i) out0(i) = outputSignals[i]->next(); } diff --git a/src/FluidSTFTPass/FluidSTFTPass.cpp b/src/FluidSTFTPass/FluidSTFTPass.cpp index 7eb740b..c41cb7d 100644 --- a/src/FluidSTFTPass/FluidSTFTPass.cpp +++ b/src/FluidSTFTPass/FluidSTFTPass.cpp @@ -21,64 +21,63 @@ public: { //Order of args //Window size, Hop size, FFT Size - + //Get the window size - const float window_size = in0(1); - const float hop_size = in0(2); - const float fft_size = in0(3); - - + const float windowSize = in0(1); + const float hopSize = in0(2); + const float fftSize = in0(3); + //Oh NO! Heap allocation! Make client object - m_client = new audio::BaseSTFTClient(65536); - m_client->getParams()[0].setLong(window_size); - m_client->getParams()[1].setLong(hop_size); - m_client->getParams()[2].setLong(fft_size); - + mClient = new audio::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) = m_client->sanityCheck(); + + std::tie(isOK, feedback) = mClient->sanityCheck(); if(!isOK) { Print("fdSTFTPass Error: %s",feedback.c_str()); return; } - - - m_client->set_host_buffer_size(bufferSize()); - m_client->reset(); - + + + mClient->setHostBufferSize(bufferSize()); + mClient->reset(); + //Work out what signals we need. For now keep it simple: //in 0 => only audio //out 0 => only audio - input_signals[0] = new AudioSignalWrapper(); - output_signals[0] = new AudioSignalWrapper(); - + inputSignals[0] = new AudioSignalWrapper(); + outputSignals[0] = new AudioSignalWrapper(); + mCalcFunc = make_calc_function(); Unit* unit = this; ClearUnitOutputs(unit,1); } - + ~FDSTFTPass() { - delete input_signals[0]; - delete output_signals[0]; - delete m_client; + delete inputSignals[0]; + delete outputSignals[0]; + delete mClient; } - + private: void next(int numsamples) { const float* input = in(0); const float inscalar = in0(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,1); + 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); } - - audio::BaseSTFTClient* m_client; - SignalWrapper* input_signals[1]; - SignalWrapper* output_signals[1]; + + audio::BaseSTFTClient *mClient; + SignalWrapper *inputSignals[1]; + SignalWrapper *outputSignals[1]; }; } } @@ -87,7 +86,3 @@ PluginLoad(FluidSTFTUGen) { ft = inTable; registerUnit(ft, "FluidSTFTPass"); } - - - - diff --git a/src/FluidSines/FluidSines.cpp b/src/FluidSines/FluidSines.cpp index ca6b454..445e043 100644 --- a/src/FluidSines/FluidSines.cpp +++ b/src/FluidSines/FluidSines.cpp @@ -31,7 +31,7 @@ namespace stn{ // //Oh NO! Heap allocation! Make client object - m_client = new stn::SinesClient(65536); + mClient = new stn::SinesClient(65536); setParams(true); // m_client->getParams()[0].setLong(pfilter_size); @@ -43,7 +43,7 @@ namespace stn{ bool isOK; std::string feedback; - std::tie(isOK, feedback) = m_client->sanityCheck(); + std::tie(isOK, feedback) = mClient->sanityCheck(); if(!isOK) { Print("fdRTHPSS Error: %s",feedback.c_str()); @@ -51,15 +51,15 @@ namespace stn{ } - m_client->set_host_buffer_size(bufferSize()); - m_client->reset(); + mClient->setHostBufferSize(bufferSize()); + mClient->reset(); //Work out what signals we need. For now keep it simple: //in 0 => only audio //out 0 => only audio - input_signals[0] = new AudioSignalWrapper(); - output_signals[0] = new AudioSignalWrapper(); - output_signals[1] = new AudioSignalWrapper(); + inputSignals[0] = new AudioSignalWrapper(); + outputSignals[0] = new AudioSignalWrapper(); + outputSignals[1] = new AudioSignalWrapper(); mCalcFunc = make_calc_function(); Unit* unit = this; @@ -68,39 +68,39 @@ namespace stn{ ~FDRTSines() { - delete input_signals[0]; - delete output_signals[0]; - delete output_signals[1]; - delete m_client; + delete inputSignals[0]; + delete outputSignals[0]; + delete outputSignals[1]; + delete mClient; } private: void setParams(bool instantiation) { - assert(m_client); - for(size_t i = 0; i < m_client->getParams().size(); ++i) + assert(mClient); + for(size_t i = 0; i < mClient->getParams().size(); ++i) { - parameter::Instance& p = m_client->getParams()[i]; + parameter::Instance& p = mClient->getParams()[i]; if(!instantiation && p.getDescriptor().instantiation()) continue; switch(p.getDescriptor().getType()) { - case parameter::Type::Long: - p.setLong(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Float: - p.setFloat(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Buffer: -// p.setBuffer( in0(i+1)); - break; - default: - break; + case parameter::Type::kLong: + p.setLong(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kFloat: + p.setFloat(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kBuffer: + // p.setBuffer( in0(i+1)); + break; + default: + break; } } } @@ -111,15 +111,15 @@ namespace stn{ setParams(false); const float* input = in(0); const float inscalar = in0(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - output_signals[1]->set(out(1), out0(1)); - m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,2); + inputSignals[0]->set(const_cast(input), inscalar); + outputSignals[0]->set(out(0), out0(0)); + outputSignals[1]->set(out(1), out0(1)); + mClient->doProcess(std::begin(inputSignals),std::end(inputSignals),std::begin(outputSignals), std::end(outputSignals),numsamples,1,2); } - - stn::SinesClient* m_client; - SignalWrapper* input_signals[1]; - SignalWrapper* output_signals[2]; + + stn::SinesClient *mClient; + SignalWrapper *inputSignals[1]; + SignalWrapper *outputSignals[2]; }; } } diff --git a/src/FluidTransientSlice/FluidTransientSlice.cpp b/src/FluidTransientSlice/FluidTransientSlice.cpp index 9c466cd..0061978 100644 --- a/src/FluidTransientSlice/FluidTransientSlice.cpp +++ b/src/FluidTransientSlice/FluidTransientSlice.cpp @@ -13,90 +13,90 @@ namespace segmentation{ using audio_client = TransientsSlice; using AudioSignalWrapper = audio_client::AudioSignal; using SignalWrapper = audio_client::Signal; - + // using SignalPointer = std::unique_ptr; public: FluidSliceTransients() { - m_client = new audio_client(65536); + mClient = new audio_client(65536); setParams(true); bool isOK; std::string feedback; - - std::tie(isOK, feedback) = m_client->sanityCheck(); + + std::tie(isOK, feedback) = mClient->sanityCheck(); if(!isOK) { Print("FluidSliceTransients Error: %s",feedback.c_str()); return; } - - - m_client->set_host_buffer_size(bufferSize()); - m_client->reset(); - + + + mClient->setHostBufferSize(bufferSize()); + mClient->reset(); + //Work out what signals we need. For now keep it simple: //in 0 => only audio //out 0 => only audio - input_signals[0] = new AudioSignalWrapper(); - output_signals[0] = new AudioSignalWrapper(); - + inputSignals[0] = new AudioSignalWrapper(); + outputSignals[0] = new AudioSignalWrapper(); + mCalcFunc = make_calc_function(); Unit* unit = this; ClearUnitOutputs(unit,1); } - + ~FluidSliceTransients() { - delete input_signals[0]; - delete output_signals[0]; - delete m_client; + delete inputSignals[0]; + delete outputSignals[0]; + delete mClient; } - + private: - + void setParams(bool instantiation) { - assert(m_client); - for(size_t i = 0; i < m_client->getParams().size(); ++i) + assert(mClient); + for(size_t i = 0; i < mClient->getParams().size(); ++i) { - parameter::Instance& p = m_client->getParams()[i]; - + parameter::Instance& p = mClient->getParams()[i]; + if(!instantiation && p.getDescriptor().instantiation()) continue; - + switch(p.getDescriptor().getType()) { - case parameter::Type::Long: - p.setLong(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Float: - p.setFloat(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Buffer: -// p.setBuffer( in0(i+1)); - break; - default: - break; + case parameter::Type::kLong: + p.setLong(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kFloat: + p.setFloat(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kBuffer: + // p.setBuffer( in0(i+1)); + break; + default: + break; } } } - - + + void next(int numsamples) { setParams(false); const float* input = in(0); const float inscalar = in0(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,1); + 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); } - - audio_client* m_client; - SignalWrapper* input_signals[1]; - SignalWrapper* output_signals[1]; + + audio_client *mClient; + SignalWrapper *inputSignals[1]; + SignalWrapper *outputSignals[1]; }; } } diff --git a/src/FluidTransients/FluidTransients.cpp b/src/FluidTransients/FluidTransients.cpp index 517ddab..1f9f8d8 100644 --- a/src/FluidTransients/FluidTransients.cpp +++ b/src/FluidTransients/FluidTransients.cpp @@ -12,114 +12,113 @@ namespace stn{ { using AudioSignalWrapper = stn::TransientsClient::AudioSignal; using SignalWrapper = stn::TransientsClient::Signal; - + // using SignalPointer = std::unique_ptr; public: FluidTransients() { //Order of args //Window size, Hop size, FFT Size - + //Get the window size - - + + // const float hfilter_size = in0(1); // const float pfilter_size = in0(2); // const float window_size = in0(3); // const float hop_size = in0(4); // const float fft_size = in0(5); // - + //Oh NO! Heap allocation! Make client object - m_client = new stn::TransientsClient(65536); + mClient = new stn::TransientsClient(65536); setParams(true); - -// m_client->getParams()[0].setLong(pfilter_size); -// m_client->getParams()[1].setLong(hfilter_size); -// m_client->getParams()[2].setLong(window_size); -// m_client->getParams()[3].setLong(hop_size); -// m_client->getParams()[4].setLong(fft_size); - + +// mClient->geParams()[0].setLong(pfilter_size); +// mClient->geParams()[1].setLong(hfilter_size); +// mClient->geParams()[2].setLong(window_size); +// mClient->geParams()[3].setLong(hop_size); +// mClient->geParams()[4].setLong(fft_size); + bool isOK; std::string feedback; - - std::tie(isOK, feedback) = m_client->sanityCheck(); + + std::tie(isOK, feedback) = mClient->sanityCheck(); if(!isOK) { Print("fdRTHPSS Error: %s",feedback.c_str()); return; } - - - m_client->set_host_buffer_size(bufferSize()); - m_client->reset(); - + + + mClient->setHostBufferSize(bufferSize()); + mClient->reset(); + //Work out what signals we need. For now keep it simple: //in 0 => only audio //out 0 => only audio - input_signals[0] = new AudioSignalWrapper(); - output_signals[0] = new AudioSignalWrapper(); - output_signals[1] = new AudioSignalWrapper(); - + inputSignals[0] = new AudioSignalWrapper(); + outputSignals[0] = new AudioSignalWrapper(); + outputSignals[1] = new AudioSignalWrapper(); + mCalcFunc = make_calc_function(); Unit* unit = this; ClearUnitOutputs(unit,1); } - + ~FluidTransients() { - delete input_signals[0]; - delete output_signals[0]; - delete output_signals[1]; - delete m_client; + delete inputSignals[0]; + delete outputSignals[0]; + delete outputSignals[1]; + delete mClient; } - private: - + void setParams(bool instantiation) { - assert(m_client); - for(size_t i = 0; i < m_client->getParams().size(); ++i) + assert(mClient); + for(size_t i = 0; i < mClient->getParams().size(); ++i) { - parameter::Instance& p = m_client->getParams()[i]; - + parameter::Instance& p = mClient->getParams()[i]; + if(!instantiation && p.getDescriptor().instantiation()) continue; - + switch(p.getDescriptor().getType()) { - case parameter::Type::Long: - p.setLong(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Float: - p.setFloat(in0(i+1)); - p.checkRange(); - break; - case parameter::Type::Buffer: -// p.setBuffer( in0(i+1)); - break; - default: - break; + case parameter::Type::kLong: + p.setLong(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kFloat: + p.setFloat(in0(i + 1)); + p.checkRange(); + break; + case parameter::Type::kBuffer: + // p.setBuffer( in0(i+1)); + break; + default: + break; } } } - - + + void next(int numsamples) { setParams(false); const float* input = in(0); const float inscalar = in0(0); - input_signals[0]->set(const_cast(input), inscalar); - output_signals[0]->set(out(0), out0(0)); - output_signals[1]->set(out(1), out0(1)); - m_client->do_process(std::begin(input_signals),std::end(input_signals),std::begin(output_signals), std::end(output_signals),numsamples,1,2); + inputSignals[0]->set(const_cast(input), inscalar); + outputSignals[0]->set(out(0), out0(0)); + outputSignals[1]->set(out(1), out0(1)); + mClient->doProcess(std::begin(inputSignals),std::end(inputSignals),std::begin(outputSignals), std::end(outputSignals),numsamples,1,2); } - - stn::TransientsClient* m_client; - SignalWrapper* input_signals[1]; - SignalWrapper* output_signals[2]; + + stn::TransientsClient *mClient; + SignalWrapper *inputSignals[1]; + SignalWrapper *outputSignals[2]; }; } }