RT Sines and HPSS: adapt to use parameter system and expose new adjustable parameters in algorithms

nix
Owen Green 7 years ago
parent 6c6f573494
commit 07e9ace26d

@ -1,6 +1,6 @@
FDRTHPSS : MultiOutUGen { FDRTHPSS : MultiOutUGen {
*ar { arg in = 0, harmonicFilterSize = 17, percussiveFilterSize = 17, windowSize= 1024, hopSize= 256, fftSize= -1; *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,windowSize, hopSize, fftSize) ^this.multiNew('audio', in.asAudioRateInput(this),harmonicFilterSize,percussiveFilterSize,percussiveThreshold,harmonicThreshold,windowSize, hopSize, fftSize)
} }
init { arg ... theInputs; init { arg ... theInputs;
inputs = theInputs; inputs = theInputs;

@ -18,24 +18,20 @@ namespace hpss{
FDRTHPSS() FDRTHPSS()
{ {
//Order of args //Order of args
//Window size, Hop size, FFT Size //psize hszie pthresh hthresh Window size, Hop size, FFT Size
//Get the window size //Get the window size
const float hfilter_size = in0(1); // const float hfilter_size = in0(1);
const float pfilter_size = in0(2); // const float pfilter_size = in0(2);
const float window_size = in0(3); // const float window_size = in0(3);
const float hop_size = in0(4); // const float hop_size = in0(4);
const float fft_size = in0(5); // const float fft_size = in0(5);
//Oh NO! Heap allocation! Make client object //Oh NO! Heap allocation! Make client object
m_client = new hpss::HPSSClient<double,float>(65536); m_client = new hpss::HPSSClient<double,float>(65536);
m_client->getParams()[0].setLong(pfilter_size); setParams(true);
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);
bool isOK; bool isOK;
std::string feedback; std::string feedback;
@ -72,8 +68,37 @@ namespace hpss{
} }
private: 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) void next(int numsamples)
{ {
setParams(false);
const float* input = in(0); const float* input = in(0);
const float inscalar = in0(0); const float inscalar = in0(0);
input_signals[0]->set(const_cast<float*>(input), inscalar); input_signals[0]->set(const_cast<float*>(input), inscalar);

@ -32,7 +32,7 @@ namespace stn{
//Oh NO! Heap allocation! Make client object //Oh NO! Heap allocation! Make client object
m_client = new stn::SinesClient<double,float>(65536); m_client = new stn::SinesClient<double,float>(65536);
setParams(); setParams(true);
// m_client->getParams()[0].setLong(pfilter_size); // m_client->getParams()[0].setLong(pfilter_size);
// m_client->getParams()[1].setLong(hfilter_size); // m_client->getParams()[1].setLong(hfilter_size);
@ -76,19 +76,25 @@ namespace stn{
private: private:
void setParams() void setParams(bool instantiation)
{ {
assert(m_client); assert(m_client);
for(size_t i = 0; i < m_client->getParams().size(); ++i) for(size_t i = 0; i < m_client->getParams().size(); ++i)
{ {
parameter::Instance& p = m_client->getParams()[i]; parameter::Instance& p = m_client->getParams()[i];
if(!instantiation && p.getDescriptor().instatiation())
continue;
switch(p.getDescriptor().getType()) switch(p.getDescriptor().getType())
{ {
case parameter::Type::Long: case parameter::Type::Long:
p.setLong(in0(i+1)); p.setLong(in0(i+1));
p.checkRange();
break; break;
case parameter::Type::Float: case parameter::Type::Float:
p.setFloat(in0(i+1)); p.setFloat(in0(i+1));
p.checkRange();
break; break;
case parameter::Type::Buffer: case parameter::Type::Buffer:
// p.setBuffer( in0(i+1)); // p.setBuffer( in0(i+1));
@ -102,7 +108,7 @@ namespace stn{
void next(int numsamples) void next(int numsamples)
{ {
setParams(); setParams(false);
const float* input = in(0); const float* input = in(0);
const float inscalar = in0(0); const float inscalar = in0(0);
input_signals[0]->set(const_cast<float*>(input), inscalar); input_signals[0]->set(const_cast<float*>(input), inscalar);

Loading…
Cancel
Save