From 07e9ace26d696196cbc64d4c99d87fb65d4af78d Mon Sep 17 00:00:00 2001 From: Owen Green Date: Tue, 11 Sep 2018 22:25:12 +0100 Subject: [PATCH] RT Sines and HPSS: adapt to use parameter system and expose new adjustable parameters in algorithms --- release-packaging/Classes/fdRTHPSS.sc | 4 +-- src/fdRTHPSS/fdRTHPSS.cpp | 47 ++++++++++++++++++++------- src/fdRTSines/fdRTSines.cpp | 12 +++++-- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/release-packaging/Classes/fdRTHPSS.sc b/release-packaging/Classes/fdRTHPSS.sc index 0b956e0..20dda1e 100644 --- a/release-packaging/Classes/fdRTHPSS.sc +++ b/release-packaging/Classes/fdRTHPSS.sc @@ -1,6 +1,6 @@ FDRTHPSS : MultiOutUGen { - *ar { arg in = 0, harmonicFilterSize = 17, percussiveFilterSize = 17, windowSize= 1024, hopSize= 256, fftSize= -1; - ^this.multiNew('audio', in.asAudioRateInput(this),harmonicFilterSize,percussiveFilterSize,windowSize, hopSize, fftSize) + *ar { arg in = 0, percussiveFilterSize = 17, harmonicFilterSize = 17, percussiveThreshold = 50, harmonicThreshold = 50, windowSize= 1024, hopSize= 256, fftSize= -1; + ^this.multiNew('audio', in.asAudioRateInput(this),harmonicFilterSize,percussiveFilterSize,percussiveThreshold,harmonicThreshold,windowSize, hopSize, fftSize) } init { arg ... theInputs; inputs = theInputs; diff --git a/src/fdRTHPSS/fdRTHPSS.cpp b/src/fdRTHPSS/fdRTHPSS.cpp index 8cac3cc..4c55983 100644 --- a/src/fdRTHPSS/fdRTHPSS.cpp +++ b/src/fdRTHPSS/fdRTHPSS.cpp @@ -18,24 +18,20 @@ namespace hpss{ FDRTHPSS() { //Order of args - //Window size, Hop size, FFT Size + //psize hszie pthresh hthresh 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); +// 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 hpss::HPSSClient(65536); - 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); + setParams(true); bool isOK; std::string feedback; @@ -72,8 +68,37 @@ namespace hpss{ } private: + + void setParams(bool instantiation) + { + assert(m_client); + for(size_t i = 0; i < m_client->getParams().size(); ++i) + { + parameter::Instance& p = m_client->getParams()[i]; + if(!instantiation && p.getDescriptor().instatiation()) + 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; + } + } + } + void next(int numsamples) { + setParams(false); const float* input = in(0); const float inscalar = in0(0); input_signals[0]->set(const_cast(input), inscalar); diff --git a/src/fdRTSines/fdRTSines.cpp b/src/fdRTSines/fdRTSines.cpp index ba73d10..f263b1a 100644 --- a/src/fdRTSines/fdRTSines.cpp +++ b/src/fdRTSines/fdRTSines.cpp @@ -32,7 +32,7 @@ namespace stn{ //Oh NO! Heap allocation! Make client object m_client = new stn::SinesClient(65536); - setParams(); + setParams(true); // m_client->getParams()[0].setLong(pfilter_size); // m_client->getParams()[1].setLong(hfilter_size); @@ -76,19 +76,25 @@ namespace stn{ private: - void setParams() + void setParams(bool instantiation) { assert(m_client); for(size_t i = 0; i < m_client->getParams().size(); ++i) { parameter::Instance& p = m_client->getParams()[i]; + + if(!instantiation && p.getDescriptor().instatiation()) + 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)); @@ -102,7 +108,7 @@ namespace stn{ void next(int numsamples) { - setParams(); + setParams(false); const float* input = in(0); const float inscalar = in0(0); input_signals[0]->set(const_cast(input), inscalar);