* 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:
Chris Cannam
2010-05-16 10:44:38 +01:00
parent 8b3a5e4979
commit 3ed58ba356
16 changed files with 285 additions and 281 deletions

View File

@@ -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;
}
}

View File

@@ -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();
};

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);