* Avoid virtual method hiding warnings
* Avoid potential deadlock in thread join when processing has been abandoned
This commit is contained in:
@@ -43,5 +43,11 @@ ConstantAudioCurve::process(const float *R__, size_t)
|
||||
return 1.f;
|
||||
}
|
||||
|
||||
float
|
||||
ConstantAudioCurve::processDouble(const double *R__, size_t)
|
||||
{
|
||||
return 1.f;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
virtual void setWindowSize(size_t newSize);
|
||||
|
||||
virtual float process(const float *R__ mag, size_t increment);
|
||||
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||
virtual void reset();
|
||||
};
|
||||
|
||||
|
||||
@@ -51,5 +51,19 @@ HighFrequencyAudioCurve::process(const float *R__ mag, size_t increment)
|
||||
return result;
|
||||
}
|
||||
|
||||
float
|
||||
HighFrequencyAudioCurve::processDouble(const double *R__ mag, size_t increment)
|
||||
{
|
||||
float result = 0.0;
|
||||
|
||||
const int sz = m_windowSize / 2;
|
||||
|
||||
for (int n = 0; n <= sz; ++n) {
|
||||
result = result + (float)mag[n] * n;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
virtual void setWindowSize(size_t newSize);
|
||||
|
||||
virtual float process(const float *R__ mag, size_t increment);
|
||||
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||
virtual void reset();
|
||||
};
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ PercussiveAudioCurve::process(const float *R__ mag, size_t increment)
|
||||
}
|
||||
|
||||
float
|
||||
PercussiveAudioCurve::process(const double *R__ mag, size_t increment)
|
||||
PercussiveAudioCurve::processDouble(const double *R__ mag, size_t increment)
|
||||
{
|
||||
Profiler profiler("PercussiveAudioCurve::process");
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
virtual void setWindowSize(size_t newSize);
|
||||
|
||||
virtual float process(const float *R__ mag, size_t increment);
|
||||
virtual float process(const double *R__ mag, size_t increment);
|
||||
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||
virtual void reset();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -53,7 +53,7 @@ SilentAudioCurve::process(const float *R__ mag, size_t)
|
||||
}
|
||||
|
||||
float
|
||||
SilentAudioCurve::process(const double *R__ mag, size_t)
|
||||
SilentAudioCurve::processDouble(const double *R__ mag, size_t)
|
||||
{
|
||||
const int hs = m_windowSize / 2;
|
||||
static double threshold = pow(10.0, -6);
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
virtual void setWindowSize(size_t newSize);
|
||||
|
||||
virtual float process(const float *R__ mag, size_t increment);
|
||||
virtual float process(const double *R__ mag, size_t increment);
|
||||
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||
virtual void reset();
|
||||
};
|
||||
|
||||
|
||||
@@ -65,5 +65,19 @@ SpectralDifferenceAudioCurve::process(const float *R__ mag, size_t increment)
|
||||
return result;
|
||||
}
|
||||
|
||||
float
|
||||
SpectralDifferenceAudioCurve::processDouble(const double *R__ mag, size_t increment)
|
||||
{
|
||||
float result = 0.0;
|
||||
|
||||
for (size_t n = 0; n <= m_windowSize / 2; ++n) {
|
||||
result += sqrtf(fabsf((mag[n] * mag[n]) -
|
||||
(m_prevMag[n] * m_prevMag[n])));
|
||||
m_prevMag[n] = (float)mag[n];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
virtual void setWindowSize(size_t newSize);
|
||||
|
||||
virtual float process(const float *R__ mag, size_t increment);
|
||||
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||
virtual void reset();
|
||||
|
||||
protected:
|
||||
|
||||
@@ -587,6 +587,7 @@ RubberBandStretcher::Impl::configure()
|
||||
|
||||
delete m_phaseResetAudioCurve;
|
||||
m_phaseResetAudioCurve = new PercussiveAudioCurve
|
||||
// m_phaseResetAudioCurve = new SpectralDifferenceAudioCurve
|
||||
(m_sampleRate, m_windowSize);
|
||||
|
||||
delete m_silentAudioCurve;
|
||||
|
||||
@@ -66,7 +66,7 @@ RubberBandStretcher::Impl::ProcessThread::run()
|
||||
|
||||
m_dataAvailable.lock();
|
||||
if (!m_s->testInbufReadSpace(m_channel) && !m_abandoning) {
|
||||
m_dataAvailable.wait();
|
||||
m_dataAvailable.wait(50000); // bounded in case of abandonment
|
||||
} else {
|
||||
m_dataAvailable.unlock();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user