From 2da661c06c945b2fb3521bbabcc7e81d63dabdd7 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 26 Aug 2016 20:46:51 +0200 Subject: [PATCH] Add a correctness test to the audio benchmark. --- benchmark_audio_mixer.cpp | 129 ++++++++++++++++++++++++++++++-------- ref.raw | Bin 0 -> 81920 bytes 2 files changed, 103 insertions(+), 26 deletions(-) create mode 100644 ref.raw diff --git a/benchmark_audio_mixer.cpp b/benchmark_audio_mixer.cpp index f100920..8fe4710 100644 --- a/benchmark_audio_mixer.cpp +++ b/benchmark_audio_mixer.cpp @@ -7,11 +7,13 @@ #include #include #include "audio_mixer.h" +#include "db.h" #include "timebase.h" #define NUM_BENCHMARK_CARDS 4 #define NUM_WARMUP_FRAMES 100 #define NUM_BENCHMARK_FRAMES 1000 +#define NUM_TEST_FRAMES 10 #define NUM_CHANNELS 8 #define NUM_SAMPLES 1024 @@ -24,6 +26,21 @@ uint8_t samples16[(NUM_SAMPLES * NUM_CHANNELS + 1024) * sizeof(uint16_t)]; // 24-bit samples, white noise at low volume (-48 dB). uint8_t samples24[(NUM_SAMPLES * NUM_CHANNELS + 1024) * 3]; +static uint32_t seed = 1234; + +// We use our own instead of rand() to get deterministic behavior. +// Quality doesn't really matter much. +uint32_t lcgrand() +{ + seed = seed * 1103515245u + 12345u; + return seed; +} + +void reset_lcgrand() +{ + seed = 1234; +} + void callback(float level_lufs, float peak_db, std::vector bus_levels, float global_level_lufs, float range_low_lufs, float range_high_lufs, @@ -33,19 +50,27 @@ void callback(float level_lufs, float peak_db, // Empty. } -int main(void) +vector process_frame(unsigned frame_num, AudioMixer *mixer) { - for (unsigned i = 0; i < NUM_SAMPLES * NUM_CHANNELS + 1024; ++i) { - samples16[i * 2] = rand() & 0xff; - samples16[i * 2 + 1] = rand() & 0xff; - - samples24[i * 3] = rand() & 0xff; - samples24[i * 3 + 1] = rand() & 0xff; - samples24[i * 3 + 2] = 0; + // Feed the inputs. + for (unsigned card_index = 0; card_index < NUM_BENCHMARK_CARDS; ++card_index) { + bmusb::AudioFormat audio_format; + audio_format.bits_per_sample = card_index == 3 ? 24 : 16; + audio_format.num_channels = NUM_CHANNELS; + + unsigned num_samples = NUM_SAMPLES + (lcgrand() % 9) - 5; + bool ok = mixer->add_audio(DeviceSpec{InputSourceType::CAPTURE_CARD, card_index}, + card_index == 3 ? samples24 : samples16, num_samples, audio_format, + NUM_SAMPLES * TIMEBASE / OUTPUT_FREQUENCY); + assert(ok); } - AudioMixer mixer(NUM_BENCHMARK_CARDS); - mixer.set_audio_level_callback(callback); + double pts = double(frame_num) * NUM_SAMPLES / OUTPUT_FREQUENCY; + return mixer->get_output(pts, NUM_SAMPLES, ResamplingQueue::ADJUST_RATE); +} + +void init_mapping(AudioMixer *mixer) +{ InputMapping mapping; InputMapping::Bus bus1; @@ -60,30 +85,64 @@ int main(void) bus2.source_channel[1] = 4; mapping.buses.push_back(bus2); - mixer.set_input_mapping(mapping); + mixer->set_input_mapping(mapping); +} + +void do_test(const char *filename) +{ + AudioMixer mixer(NUM_BENCHMARK_CARDS); + mixer.set_audio_level_callback(callback); + init_mapping(&mixer); + + reset_lcgrand(); + + vector output; + for (unsigned i = 0; i < NUM_TEST_FRAMES; ++i) { + vector frame_output = process_frame(i, &mixer); + output.insert(output.end(), frame_output.begin(), frame_output.end()); + } + + FILE *fp = fopen(filename, "rb"); + if (fp == nullptr) { + fprintf(stderr, "%s not found, writing new reference.\n", filename); + fp = fopen(filename, "wb"); + fwrite(&output[0], output.size() * sizeof(float), 1, fp); + fclose(fp); + return; + } + + vector ref; + ref.resize(output.size()); + fread(&ref[0], output.size() * sizeof(float), 1, fp); + fclose(fp); + + float max_err = 0.0f, sum_sq_err = 0.0f; + for (unsigned i = 0; i < output.size(); ++i) { + float err = output[i] - ref[i]; + max_err = max(max_err, fabs(err)); + sum_sq_err += err * err; + } + + printf("Largest error: %.6f (%+.1f dB)\n", max_err, to_db(max_err)); + printf("RMS error: %+.1f dB\n", to_db(sqrt(sum_sq_err) / output.size())); +} + +void do_benchmark() +{ + AudioMixer mixer(NUM_BENCHMARK_CARDS); + mixer.set_audio_level_callback(callback); + init_mapping(&mixer); size_t out_samples = 0; + reset_lcgrand(); + steady_clock::time_point start, end; for (unsigned i = 0; i < NUM_WARMUP_FRAMES + NUM_BENCHMARK_FRAMES; ++i) { if (i == NUM_WARMUP_FRAMES) { start = steady_clock::now(); } - // Feed the inputs. - for (unsigned card_index = 0; card_index < NUM_BENCHMARK_CARDS; ++card_index) { - bmusb::AudioFormat audio_format; - audio_format.bits_per_sample = card_index == 3 ? 24 : 16; - audio_format.num_channels = NUM_CHANNELS; - - unsigned num_samples = NUM_SAMPLES + (rand() % 9) - 5; - bool ok = mixer.add_audio(DeviceSpec{InputSourceType::CAPTURE_CARD, card_index}, - card_index == 3 ? samples24 : samples16, num_samples, audio_format, - NUM_SAMPLES * TIMEBASE / OUTPUT_FREQUENCY); - assert(ok); - } - - double pts = double(i) * NUM_SAMPLES / OUTPUT_FREQUENCY; - vector output = mixer.get_output(pts, NUM_SAMPLES, ResamplingQueue::ADJUST_RATE); + vector output = process_frame(i, &mixer); if (i >= NUM_WARMUP_FRAMES) { out_samples += output.size(); } @@ -95,3 +154,21 @@ int main(void) printf("%ld samples produced in %.1f ms (%.1f%% CPU, %.1fx realtime).\n", out_samples, elapsed * 1e3, 100.0 * elapsed / simulated, simulated / elapsed); } + +int main(int argc, char **argv) +{ + for (unsigned i = 0; i < NUM_SAMPLES * NUM_CHANNELS + 1024; ++i) { + samples16[i * 2] = lcgrand() & 0xff; + samples16[i * 2 + 1] = lcgrand() & 0xff; + + samples24[i * 3] = lcgrand() & 0xff; + samples24[i * 3 + 1] = lcgrand() & 0xff; + samples24[i * 3 + 2] = 0; + } + + if (argc == 2) { + do_test(argv[1]); + } + do_benchmark(); +} + diff --git a/ref.raw b/ref.raw new file mode 100644 index 0000000000000000000000000000000000000000..210b8c324f3bde3820b857218192760fe0c1b6ae GIT binary patch literal 81920 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 literal 0 HcmV?d00001 -- 2.39.2