* 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;
|
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 void setWindowSize(size_t newSize);
|
||||||
|
|
||||||
virtual float process(const float *R__ mag, size_t increment);
|
virtual float process(const float *R__ mag, size_t increment);
|
||||||
|
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -51,5 +51,19 @@ HighFrequencyAudioCurve::process(const float *R__ mag, size_t increment)
|
|||||||
return result;
|
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 void setWindowSize(size_t newSize);
|
||||||
|
|
||||||
virtual float process(const float *R__ mag, size_t increment);
|
virtual float process(const float *R__ mag, size_t increment);
|
||||||
|
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ PercussiveAudioCurve::process(const float *R__ mag, size_t increment)
|
|||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
PercussiveAudioCurve::process(const double *R__ mag, size_t increment)
|
PercussiveAudioCurve::processDouble(const double *R__ mag, size_t increment)
|
||||||
{
|
{
|
||||||
Profiler profiler("PercussiveAudioCurve::process");
|
Profiler profiler("PercussiveAudioCurve::process");
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public:
|
|||||||
virtual void setWindowSize(size_t newSize);
|
virtual void setWindowSize(size_t newSize);
|
||||||
|
|
||||||
virtual float process(const float *R__ mag, size_t increment);
|
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();
|
virtual void reset();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ SilentAudioCurve::process(const float *R__ mag, size_t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
float
|
float
|
||||||
SilentAudioCurve::process(const double *R__ mag, size_t)
|
SilentAudioCurve::processDouble(const double *R__ mag, size_t)
|
||||||
{
|
{
|
||||||
const int hs = m_windowSize / 2;
|
const int hs = m_windowSize / 2;
|
||||||
static double threshold = pow(10.0, -6);
|
static double threshold = pow(10.0, -6);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public:
|
|||||||
virtual void setWindowSize(size_t newSize);
|
virtual void setWindowSize(size_t newSize);
|
||||||
|
|
||||||
virtual float process(const float *R__ mag, size_t increment);
|
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();
|
virtual void reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -65,5 +65,19 @@ SpectralDifferenceAudioCurve::process(const float *R__ mag, size_t increment)
|
|||||||
return result;
|
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 void setWindowSize(size_t newSize);
|
||||||
|
|
||||||
virtual float process(const float *R__ mag, size_t increment);
|
virtual float process(const float *R__ mag, size_t increment);
|
||||||
|
virtual float processDouble(const double *R__ mag, size_t increment);
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -587,6 +587,7 @@ RubberBandStretcher::Impl::configure()
|
|||||||
|
|
||||||
delete m_phaseResetAudioCurve;
|
delete m_phaseResetAudioCurve;
|
||||||
m_phaseResetAudioCurve = new PercussiveAudioCurve
|
m_phaseResetAudioCurve = new PercussiveAudioCurve
|
||||||
|
// m_phaseResetAudioCurve = new SpectralDifferenceAudioCurve
|
||||||
(m_sampleRate, m_windowSize);
|
(m_sampleRate, m_windowSize);
|
||||||
|
|
||||||
delete m_silentAudioCurve;
|
delete m_silentAudioCurve;
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ RubberBandStretcher::Impl::ProcessThread::run()
|
|||||||
|
|
||||||
m_dataAvailable.lock();
|
m_dataAvailable.lock();
|
||||||
if (!m_s->testInbufReadSpace(m_channel) && !m_abandoning) {
|
if (!m_s->testInbufReadSpace(m_channel) && !m_abandoning) {
|
||||||
m_dataAvailable.wait();
|
m_dataAvailable.wait(50000); // bounded in case of abandonment
|
||||||
} else {
|
} else {
|
||||||
m_dataAvailable.unlock();
|
m_dataAvailable.unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user