* Add OptionPitchHighConsistency

This commit is contained in:
Chris Cannam
2008-07-01 20:49:24 +00:00
parent 7e7e998ce5
commit 6b277bd8dd
4 changed files with 69 additions and 47 deletions

View File

@@ -524,7 +524,9 @@ RubberBandStretcher::Impl::configure()
m_studyFFT->initFloat();
}
if (m_pitchScale != 1.0 || m_realtime) {
if (m_pitchScale != 1.0 ||
(m_options & OptionPitchHighConsistency) ||
m_realtime) {
for (size_t c = 0; c < m_channels; ++c) {
@@ -708,7 +710,9 @@ RubberBandStretcher::Impl::setPitchOption(Options options)
Options prior = m_options;
int mask = (OptionPitchHighQuality | OptionPitchHighSpeed);
int mask = (OptionPitchHighQuality |
OptionPitchHighSpeed |
OptionPitchHighConsistency);
m_options &= ~mask;
options &= mask;
m_options |= options;
@@ -989,8 +993,6 @@ RubberBandStretcher::Impl::process(const float *const *input, size_t samples, bo
while (!allConsumed) {
// cerr << "process looping" << endl;
//#ifndef NO_THREADING
// if (m_threaded) {
// pthread_mutex_lock(&m_inputProcessedMutex);
@@ -1052,6 +1054,9 @@ RubberBandStretcher::Impl::process(const float *const *input, size_t samples, bo
}
*/
}
if (!allConsumed) cerr << "process looping" << endl;
}
// cerr << "process returning" << endl;

View File

@@ -110,6 +110,8 @@ RubberBandStretcher::Impl::resampleBeforeStretching() const
if (m_options & OptionPitchHighQuality) {
return (m_pitchScale < 1.0); // better sound
} else if (m_options & OptionPitchHighConsistency) {
return false;
} else {
return (m_pitchScale > 1.0); // better performance
}
@@ -145,6 +147,8 @@ RubberBandStretcher::Impl::consumeChannel(size_t c, const float *input,
}
// std::cerr << "resampling on INPUT" << std::endl;
toWrite = cd.resampler->resample(&input,
&cd.resamplebuf,
samples,
@@ -1009,7 +1013,9 @@ RubberBandStretcher::Impl::writeChunk(size_t channel, size_t shiftIncrement, boo
bool resampledAlready = resampleBeforeStretching();
if (!resampledAlready && m_pitchScale != 1.0 && cd.resampler) {
if (!resampledAlready &&
(m_pitchScale != 1.0 || m_options & OptionPitchHighConsistency) &&
cd.resampler) {
size_t reqSize = int(ceil(si / m_pitchScale));
if (reqSize > cd.resamplebufSize) {
@@ -1024,6 +1030,8 @@ RubberBandStretcher::Impl::writeChunk(size_t channel, size_t shiftIncrement, boo
}
// std::cerr << "resampling on OUTPUT" << std::endl;
size_t outframes = cd.resampler->resample(&cd.accumulator,
&cd.resamplebuf,
si,