* Separate out analysis and synthesis window sizes from FFT size.
This is an internal change only, so far -- results should be unchanged from 1.5.0.
This commit is contained in:
@@ -23,7 +23,7 @@ static const int MaxPerceivedFreq = 16000;
|
||||
|
||||
AudioCurveCalculator::AudioCurveCalculator(Parameters parameters) :
|
||||
m_sampleRate(parameters.sampleRate),
|
||||
m_windowSize(parameters.windowSize)
|
||||
m_fftSize(parameters.fftSize)
|
||||
{
|
||||
recalculateLastPerceivedBin();
|
||||
}
|
||||
@@ -40,9 +40,9 @@ AudioCurveCalculator::setSampleRate(int newRate)
|
||||
}
|
||||
|
||||
void
|
||||
AudioCurveCalculator::setWindowSize(int newSize)
|
||||
AudioCurveCalculator::setFftSize(int newSize)
|
||||
{
|
||||
m_windowSize = newSize;
|
||||
m_fftSize = newSize;
|
||||
recalculateLastPerceivedBin();
|
||||
}
|
||||
|
||||
@@ -53,9 +53,9 @@ AudioCurveCalculator::recalculateLastPerceivedBin()
|
||||
m_lastPerceivedBin = 0;
|
||||
return;
|
||||
}
|
||||
m_lastPerceivedBin = ((MaxPerceivedFreq * m_windowSize) / m_sampleRate);
|
||||
if (m_lastPerceivedBin > m_windowSize/2) {
|
||||
m_lastPerceivedBin = m_windowSize/2;
|
||||
m_lastPerceivedBin = ((MaxPerceivedFreq * m_fftSize) / m_sampleRate);
|
||||
if (m_lastPerceivedBin > m_fftSize/2) {
|
||||
m_lastPerceivedBin = m_fftSize/2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,29 +27,29 @@ class AudioCurveCalculator
|
||||
{
|
||||
public:
|
||||
struct Parameters {
|
||||
Parameters(int _sampleRate, int _windowSize) :
|
||||
Parameters(int _sampleRate, int _fftSize) :
|
||||
sampleRate(_sampleRate),
|
||||
windowSize(_windowSize)
|
||||
fftSize(_fftSize)
|
||||
{ }
|
||||
int sampleRate;
|
||||
int windowSize;
|
||||
int fftSize;
|
||||
};
|
||||
|
||||
AudioCurveCalculator(Parameters parameters);
|
||||
virtual ~AudioCurveCalculator();
|
||||
|
||||
int getSampleRate() const { return m_sampleRate; }
|
||||
int getWindowSize() const { return m_windowSize; }
|
||||
int getFftSize() const { return m_fftSize; }
|
||||
|
||||
virtual void setSampleRate(int newRate);
|
||||
virtual void setWindowSize(int newSize);
|
||||
virtual void setFftSize(int newSize);
|
||||
|
||||
Parameters getParameters() const {
|
||||
return Parameters(m_sampleRate, m_windowSize);
|
||||
return Parameters(m_sampleRate, m_fftSize);
|
||||
}
|
||||
void setParameters(Parameters p) {
|
||||
setSampleRate(p.sampleRate);
|
||||
setWindowSize(p.windowSize);
|
||||
setFftSize(p.fftSize);
|
||||
}
|
||||
|
||||
// You may not mix calls to the various process functions on a
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
|
||||
protected:
|
||||
int m_sampleRate;
|
||||
int m_windowSize;
|
||||
int m_fftSize;
|
||||
int m_lastPerceivedBin;
|
||||
void recalculateLastPerceivedBin();
|
||||
};
|
||||
|
||||
@@ -58,11 +58,11 @@ CompoundAudioCurve::reset()
|
||||
}
|
||||
|
||||
void
|
||||
CompoundAudioCurve::setWindowSize(int newSize)
|
||||
CompoundAudioCurve::setFftSize(int newSize)
|
||||
{
|
||||
m_percussive.setWindowSize(newSize);
|
||||
m_hf.setWindowSize(newSize);
|
||||
m_windowSize = newSize;
|
||||
m_percussive.setFftSize(newSize);
|
||||
m_hf.setFftSize(newSize);
|
||||
m_fftSize = newSize;
|
||||
m_lastHf = 0.0;
|
||||
m_lastResult = 0.0;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public:
|
||||
};
|
||||
virtual void setType(Type);
|
||||
|
||||
virtual void setWindowSize(int newSize);
|
||||
virtual void setFftSize(int newSize);
|
||||
|
||||
virtual float processFloat(const float *R__ mag, int increment);
|
||||
virtual double processDouble(const double *R__ mag, int increment);
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace RubberBand
|
||||
PercussiveAudioCurve::PercussiveAudioCurve(Parameters parameters) :
|
||||
AudioCurveCalculator(parameters)
|
||||
{
|
||||
m_prevMag = allocate_and_zero<double>(m_windowSize/2 + 1);
|
||||
m_prevMag = allocate_and_zero<double>(m_fftSize/2 + 1);
|
||||
}
|
||||
|
||||
PercussiveAudioCurve::~PercussiveAudioCurve()
|
||||
@@ -37,14 +37,14 @@ PercussiveAudioCurve::~PercussiveAudioCurve()
|
||||
void
|
||||
PercussiveAudioCurve::reset()
|
||||
{
|
||||
v_zero(m_prevMag, m_windowSize/2 + 1);
|
||||
v_zero(m_prevMag, m_fftSize/2 + 1);
|
||||
}
|
||||
|
||||
void
|
||||
PercussiveAudioCurve::setWindowSize(int newSize)
|
||||
PercussiveAudioCurve::setFftSize(int newSize)
|
||||
{
|
||||
m_prevMag = reallocate(m_prevMag, m_windowSize, newSize);
|
||||
AudioCurveCalculator::setWindowSize(newSize);
|
||||
m_prevMag = reallocate(m_prevMag, m_fftSize, newSize);
|
||||
AudioCurveCalculator::setFftSize(newSize);
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
|
||||
virtual ~PercussiveAudioCurve();
|
||||
|
||||
virtual void setWindowSize(int newSize);
|
||||
virtual void setFftSize(int newSize);
|
||||
|
||||
virtual float processFloat(const float *R__ mag, int increment);
|
||||
virtual double processDouble(const double *R__ mag, int increment);
|
||||
|
||||
@@ -42,11 +42,11 @@ SpectralDifferenceAudioCurve::reset()
|
||||
}
|
||||
|
||||
void
|
||||
SpectralDifferenceAudioCurve::setWindowSize(int newSize)
|
||||
SpectralDifferenceAudioCurve::setFftSize(int newSize)
|
||||
{
|
||||
deallocate(m_tmpbuf);
|
||||
deallocate(m_mag);
|
||||
AudioCurveCalculator::setWindowSize(newSize);
|
||||
AudioCurveCalculator::setFftSize(newSize);
|
||||
m_mag = allocate<double>(m_lastPerceivedBin + 1);
|
||||
m_tmpbuf = allocate<double>(m_lastPerceivedBin + 1);
|
||||
reset();
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
|
||||
virtual ~SpectralDifferenceAudioCurve();
|
||||
|
||||
virtual void setWindowSize(int newSize);
|
||||
virtual void setFftSize(int newSize);
|
||||
|
||||
virtual float processFloat(const float *R__ mag, int increment);
|
||||
virtual double processDouble(const double *R__ mag, int increment);
|
||||
|
||||
Reference in New Issue
Block a user