M ladspa-lv2/RubberBandLivePitchShifter.cpp +1 -1
@@ 267,7 267,7 @@ RubberBandLivePitchShifter::RubberBandLi
m_shifter(new RubberBandLiveShifter
(sampleRate, channels,
RubberBandLiveShifter::OptionWindowLong |
- RubberBandLiveShifter::OptionPitchModeB |
+ RubberBandLiveShifter::OptionPitchModeA |
RubberBandLiveShifter::OptionChannelsTogether)),
m_sampleRate(sampleRate),
m_channels(channels),
M src/common/BQResampler.cpp +7 -0
@@ 201,6 201,13 @@ BQResampler::resampleInterleaved(float *
}
}
+ if (i < incount_samples) {
+ std::cerr << "only used " << i << " of " << incount_samples
+ << " samples to generate output count " << o
+ << " (outspace_samples was " << outspace_samples << ")"
+ << std::endl;
+ }
+
int fbufsize = m_fade->buffer.size();
int fi = 0, fo = 0;
while (fo < o && m_fade_count > 0) {
M src/finer/Guide.h +6 -5
@@ 552,11 552,12 @@ protected:
if (guidance.phaseReset.f0 < 100.0) {
guidance.phaseReset.f0 = 0.0;
}
-
-// if (guidance.phaseReset.f0 > 0.0) {
-// std::cout << unityCount << ": f0 = " << guidance.phaseReset.f0
-// << ", f1 = " << guidance.phaseReset.f1 << std::endl;
-// }
+/*
+ if (guidance.phaseReset.f0 > 0.0) {
+ std::cout << "unity: f0 = " << guidance.phaseReset.f0
+ << ", f1 = " << guidance.phaseReset.f1 << std::endl;
+ }
+*/
}
bool checkPotentialKick(const process_t *const magnitudes,
M src/finer/R3LiveShifter.cpp +27 -18
@@ 341,7 341,7 @@ R3LiveShifter::shift(const float *const
}
}
- int requiredInOutbuf = int(ceil(incount / outRatio));
+ int requiredInOutbuf = 1 + int(ceil(incount / outRatio));
generate(requiredInOutbuf);
int got = readOut(output, incount, 0);
@@ 615,6 615,8 @@ R3LiveShifter::readOut(float *const *out
int fromOutbuf = int(floor(outcount / outRatio));
+ m_log.log(2, "R3LiveShifter::readOut: origin and fromOutbuf", origin, fromOutbuf);
+
if (fromOutbuf == 0) {
fromOutbuf = 1;
}
@@ 630,9 632,6 @@ R3LiveShifter::readOut(float *const *out
}
got = std::min(got, std::max(gotHere, 0));
}
-
- m_channelAssembly.resampled[c] = cd->resampled.data();
- m_channelAssembly.mixdown[c] = output[c] + origin;
}
m_log.log(2, "R3LiveShifter::readOut: requested and got from outbufs", fromOutbuf, got);
@@ 641,6 640,13 @@ R3LiveShifter::readOut(float *const *out
int resampledCount = 0;
if (got > 0) {
+
+ for (int c = 0; c < m_parameters.channels; ++c) {
+ auto &cd = m_channelData.at(c);
+ m_channelAssembly.resampled[c] = cd->resampled.data();
+ m_channelAssembly.mixdown[c] = output[c] + origin;
+ }
+
resampledCount = m_outResampler->resample
(m_channelAssembly.mixdown.data(),
outcount,
@@ 648,6 654,17 @@ R3LiveShifter::readOut(float *const *out
got,
outRatio,
false);
+
+ if (useMidSide()) {
+ for (int i = 0; i < resampledCount; ++i) {
+ float m = output[0][origin + i];
+ float s = output[1][origin + i];
+ float l = m + s;
+ float r = m - s;
+ output[0][origin + i] = l;
+ output[1][origin + i] = r;
+ }
+ }
}
m_log.log(2, "R3LiveShifter::readOut: resampled to", resampledCount);
@@ 665,26 682,18 @@ R3LiveShifter::readOut(float *const *out
m_log.log(2, "R3LiveShifter::readOut: resampler left us short on first process, pre-padding output: expected and obtained", outcount, resampledCount);
int prepad = outcount - resampledCount;
for (int c = 0; c < m_parameters.channels; ++c) {
- v_move(m_channelAssembly.mixdown.data()[c] + prepad,
- m_channelAssembly.mixdown.data()[c], resampledCount);
- v_zero(m_channelAssembly.mixdown.data()[c], prepad);
+ v_move(output[c] + origin + prepad,
+ output[c] + origin,
+ resampledCount);
+ v_zero(output[c] + origin, prepad);
}
resampledCount = outcount;
} else {
m_log.log(0, "R3LiveShifter::readOut: WARNING: Failed to obtain enough samples from resampler", resampledCount, outcount);
}
}
-
- if (useMidSide()) {
- for (int i = 0; i < resampledCount; ++i) {
- float m = output[0][i];
- float s = output[1][i];
- float l = m + s;
- float r = m - s;
- output[0][i] = l;
- output[1][i] = r;
- }
- }
+
+ m_log.log(2, "R3LiveShifter::readOut: returning", resampledCount);
return resampledCount;
}
M src/test/TestLiveShifter.cpp +4 -2
@@ 52,6 52,8 @@ static void check_sinusoid_unchanged(int
RubberBandLiveShifter shifter(rate, 1, options);
+ shifter.setPitchScale(2.66968);
+
int blocksize = shifter.getBlockSize();
BOOST_TEST(blocksize == 512);
@@ 118,7 120,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_unchanged_
RubberBandLiveShifter::OptionPitchModeA;
int n = 100000;
- check_sinusoid_unchanged(n, 44100, 440.f, options, false);
+ check_sinusoid_unchanged(n, 44100, 440.f, options, true);
check_sinusoid_unchanged(n, 48000, 260.f, options, false);
}
@@ 128,7 130,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_unchanged_
RubberBandLiveShifter::OptionPitchModeB;
int n = 100000;
- check_sinusoid_unchanged(n, 44100, 440.f, options, true);
+ check_sinusoid_unchanged(n, 44100, 440.f, options, false);
check_sinusoid_unchanged(n, 48000, 260.f, options, false);
}