Add test with longer blocksize in realtime mode

This commit is contained in:
Chris Cannam
2023-05-31 09:10:52 +01:00
parent 7d5b101d27
commit 488de631a0

View File

@@ -310,13 +310,14 @@ static vector<float> process_realtime(RubberBandStretcher &stretcher,
static void sinusoid_realtime(RubberBandStretcher::Options options, static void sinusoid_realtime(RubberBandStretcher::Options options,
double timeRatio, double timeRatio,
double pitchScale, double pitchScale,
bool printDebug) int bs = 512,
bool printDebug = false)
{ {
int n = (timeRatio < 1.0 ? 80000 : 40000); int n = (timeRatio < 1.0 ? 80000 : 40000);
if (n < bs * 2) n = bs * 2;
int nOut = int(ceil(n * timeRatio)); int nOut = int(ceil(n * timeRatio));
float freq = 441.f; float freq = 441.f;
int rate = 44100; int rate = 44100;
int bs = 512;
// This test simulates block-by-block realtime processing with // This test simulates block-by-block realtime processing with
// latency compensation, and checks that the output is all in the // latency compensation, and checks that the output is all in the
@@ -431,24 +432,21 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_finer)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
8.0, 1.0, 8.0, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_finer) BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_finer)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
0.5, 1.0, 0.5, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hqpitch)
@@ -456,8 +454,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hcpitch)
@@ -465,16 +462,14 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hqpitch)
@@ -482,8 +477,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch)
@@ -491,16 +485,14 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hqpitch)
@@ -508,8 +500,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hcpitch)
@@ -517,8 +508,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_finer_short) BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_finer_short)
@@ -526,8 +516,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_finer_short)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort, RubberBandStretcher::OptionWindowShort,
8.0, 1.0, 8.0, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_finer_short) BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_finer_short)
@@ -535,8 +524,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_finer_short)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort, RubberBandStretcher::OptionWindowShort,
0.5, 1.0, 0.5, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short)
@@ -544,8 +532,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort, RubberBandStretcher::OptionWindowShort,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short_hcpitch)
@@ -554,8 +541,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_finer_short_hcpitch)
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort | RubberBandStretcher::OptionWindowShort |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_short) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_short)
@@ -563,8 +549,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_short)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort, RubberBandStretcher::OptionWindowShort,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch_short) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch_short)
@@ -573,8 +558,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_finer_hcpitch_short)
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort | RubberBandStretcher::OptionWindowShort |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short)
@@ -582,8 +566,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short)
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner | sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort, RubberBandStretcher::OptionWindowShort,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short_hcpitch)
@@ -592,32 +575,28 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_finer_short_hcpitch)
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionWindowShort | RubberBandStretcher::OptionWindowShort |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_faster) BOOST_AUTO_TEST_CASE(sinusoid_slow_samepitch_realtime_faster)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
8.0, 1.0, 8.0, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_faster) BOOST_AUTO_TEST_CASE(sinusoid_fast_samepitch_realtime_faster)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
0.5, 1.0, 0.5, 1.0);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hqpitch)
@@ -625,8 +604,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hcpitch)
@@ -634,16 +612,14 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_higher_realtime_faster_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
4.0, 1.5, 4.0, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hqpitch)
@@ -651,8 +627,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hcpitch)
@@ -660,16 +635,14 @@ BOOST_AUTO_TEST_CASE(sinusoid_fast_higher_realtime_faster_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
0.5, 1.5, 0.5, 1.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster)
{ {
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime, RubberBandStretcher::OptionProcessRealTime,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hqpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hqpitch)
@@ -677,8 +650,7 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hqpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighQuality, RubberBandStretcher::OptionPitchHighQuality,
8.0, 0.5, 8.0, 0.5);
false);
} }
BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hcpitch) BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hcpitch)
@@ -686,8 +658,23 @@ BOOST_AUTO_TEST_CASE(sinusoid_slow_lower_realtime_faster_hcpitch)
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster | sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime | RubberBandStretcher::OptionProcessRealTime |
RubberBandStretcher::OptionPitchHighConsistency, RubberBandStretcher::OptionPitchHighConsistency,
8.0, 0.5, 8.0, 0.5);
false); }
BOOST_AUTO_TEST_CASE(sinusoid_realtime_long_blocksize_faster)
{
sinusoid_realtime(RubberBandStretcher::OptionEngineFaster |
RubberBandStretcher::OptionProcessRealTime,
1.1, 1.1,
80000);
}
BOOST_AUTO_TEST_CASE(sinusoid_realtime_long_blocksize_finer)
{
sinusoid_realtime(RubberBandStretcher::OptionEngineFiner |
RubberBandStretcher::OptionProcessRealTime,
1.1, 1.1,
80000);
} }
BOOST_AUTO_TEST_CASE(impulses_2x_offline_faster) BOOST_AUTO_TEST_CASE(impulses_2x_offline_faster)