Working on further tests
This commit is contained in:
@@ -679,4 +679,52 @@ BOOST_AUTO_TEST_CASE(impulses_2x_5up_offline_finer)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(final_realtime_faster)
|
||||||
|
{
|
||||||
|
int n = 10000;
|
||||||
|
float freq = 440.f;
|
||||||
|
int rate = 44100;
|
||||||
|
int blocksize = 700;
|
||||||
|
RubberBandStretcher stretcher
|
||||||
|
(rate, 1,
|
||||||
|
RubberBandStretcher::OptionEngineFaster |
|
||||||
|
RubberBandStretcher::OptionProcessRealTime);
|
||||||
|
|
||||||
|
stretcher.setTimeRatio(2.0);
|
||||||
|
|
||||||
|
int excess = 10000;
|
||||||
|
vector<float> in(n, 0.f), out(n * 2 + excess, 0.f);
|
||||||
|
|
||||||
|
for (int i = n - 100; i < n; ++i) {
|
||||||
|
in[i] = sinf(float(i) * freq * M_PI * 2.f / float(rate));
|
||||||
|
}
|
||||||
|
float *inp = in.data(), *outp = out.data();
|
||||||
|
|
||||||
|
stretcher.setMaxProcessSize(blocksize);
|
||||||
|
BOOST_TEST(stretcher.available() == 0);
|
||||||
|
|
||||||
|
int incount = 0, outcount = 0;
|
||||||
|
while (incount < n) {
|
||||||
|
|
||||||
|
int inbs = std::min(blocksize, n - incount);
|
||||||
|
BOOST_TEST(inbs > 0);
|
||||||
|
|
||||||
|
bool final = (incount + inbs >= n);
|
||||||
|
float *in = inp + incount;
|
||||||
|
stretcher.process(&in, inbs, final);
|
||||||
|
|
||||||
|
int avail = stretcher.available();
|
||||||
|
BOOST_TEST(avail >= 0);
|
||||||
|
BOOST_TEST(outcount + avail < n + excess);
|
||||||
|
|
||||||
|
float *out = outp + outcount;
|
||||||
|
size_t got = stretcher.retrieve(&out, avail);
|
||||||
|
BOOST_TEST(got == size_t(avail));
|
||||||
|
BOOST_TEST(stretcher.available() == 0);
|
||||||
|
|
||||||
|
incount += inbs;
|
||||||
|
outcount += got;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|||||||
Reference in New Issue
Block a user