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 {
*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;

@ -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<double,float>(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<float*>(input), inscalar);

@ -32,7 +32,7 @@ namespace stn{
//Oh NO! Heap allocation! Make client object
m_client = new stn::SinesClient<double,float>(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<float*>(input), inscalar);

Loading…
Cancel
Save