From 46a1e34d5888da40de92ef6d507b9d97c51ba6d3 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sun, 16 Dec 2018 03:46:53 +0100 Subject: [PATCH] [tests] factorise sink tests --- tests/src/io/base-sink_custom.h | 79 ++++++++++++++++++++++++++++++++++++ tests/src/io/test-sink_apple_audio.c | 74 ++++++++------------------------- tests/src/io/test-sink_sndfile.c | 74 ++++++++------------------------- tests/src/io/test-sink_wavwrite.c | 74 ++++++++------------------------- 4 files changed, 130 insertions(+), 171 deletions(-) create mode 100644 tests/src/io/base-sink_custom.h diff --git a/tests/src/io/base-sink_custom.h b/tests/src/io/base-sink_custom.h new file mode 100644 index 00000000..44e1e201 --- /dev/null +++ b/tests/src/io/base-sink_custom.h @@ -0,0 +1,79 @@ +// this should be included *after* custom functions have been defined + +#ifndef aubio_sink_custom +#define aubio_sink_custom "undefined" +#endif /* aubio_sink_custom */ + +#ifdef HAVE_AUBIO_SINK_CUSTOM +int test_wrong_params(void); + +int base_main(int argc, char **argv) +{ + uint_t err = 0; + if (argc < 3 || argc >= 6) { + PRINT_ERR("wrong number of arguments, running tests\n"); + err = test_wrong_params(); + PRINT_MSG("usage: %s [samplerate] [hop_size]\n", + argv[0]); + return err; + } + + uint_t samplerate = 0; + uint_t hop_size = 512; + uint_t n_frames = 0, read = 0; + + char_t *source_path = argv[1]; + char_t *sink_path = argv[2]; + + if ( argc >= 4 ) samplerate = atoi(argv[3]); + if ( argc >= 5 ) hop_size = atoi(argv[4]); + + fvec_t *vec = new_fvec(hop_size); + + aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); + if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); + + aubio_sink_custom_t *o = new_aubio_sink_custom(sink_path, samplerate); + + if (!vec || !i || !o) { err = 1; goto failure; } + + do { + aubio_source_do(i, vec, &read); + aubio_sink_custom_do(o, vec, read); + n_frames += read; + } while ( read == hop_size ); + + PRINT_MSG("%d frames at %dHz (%d blocks) read from %s, wrote to %s\n", + n_frames, samplerate, n_frames / hop_size, + source_path, sink_path); + + // close sink now (optional) + aubio_sink_custom_close(o); + +failure: + if (o) + del_aubio_sink_custom(o); + if (i) + del_aubio_source(i); + if (vec) + del_fvec(vec); + + return err; +} + +int test_wrong_params(void) +{ + return run_on_default_source_and_sink(base_main); +} + +#else /* HAVE_AUBIO_SINK_CUSTOM */ + +int base_main(int argc, char** argv) +{ + PRINT_ERR("aubio was not compiled with aubio_sink_" + aubio_sink_custom ", failed running %s with %d args\n", + argv[0], argc); + return 0; +} + +#endif /* HAVE_AUBIO_SINK_CUSTOM */ diff --git a/tests/src/io/test-sink_apple_audio.c b/tests/src/io/test-sink_apple_audio.c index 2200d500..bcffb10a 100644 --- a/tests/src/io/test-sink_apple_audio.c +++ b/tests/src/io/test-sink_apple_audio.c @@ -2,66 +2,26 @@ #include #include "utils_tests.h" -// this file uses the unstable aubio api, please use aubio_sink instead -// see src/io/sink.h and tests/src/sink/test-sink.c - -int main (int argc, char **argv) -{ - sint_t err = 0; - - if (argc < 3) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source_and_sink(main); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - return err; - } +#define aubio_sink_custom "apple_audio" #ifdef HAVE_SINK_APPLE_AUDIO - uint_t samplerate = 0; - uint_t hop_size = 512; - uint_t n_frames = 0, read = 0; - - char_t *source_path = argv[1]; - char_t *sink_path = argv[2]; - - if ( argc >= 4 ) samplerate = atoi(argv[3]); - if ( argc >= 5 ) hop_size = atoi(argv[4]); - if ( argc >= 6 ) { - err = 2; - PRINT_ERR("too many arguments\n"); - return err; - } - - fvec_t *vec = new_fvec(hop_size); - if (!vec) { err = 1; goto beach_fvec; } - - aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); - if (!i) { err = 1; goto beach_source; } - - if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); - - aubio_sink_apple_audio_t *o = new_aubio_sink_apple_audio(sink_path, samplerate); - if (!o) { err = 1; goto beach_sink; } +#define HAVE_AUBIO_SINK_CUSTOM +#define aubio_sink_custom_t aubio_sink_apple_audio_t +#define new_aubio_sink_custom new_aubio_sink_apple_audio +#define del_aubio_sink_custom del_aubio_sink_apple_audio +#define aubio_sink_custom_do aubio_sink_apple_audio_do +#define aubio_sink_custom_do_multi aubio_sink_apple_audio_do_multi +#define aubio_sink_custom_close aubio_sink_apple_audio_close +#define aubio_sink_custom_preset_samplerate aubio_sink_apple_audio_preset_samplerate +#define aubio_sink_custom_preset_channels aubio_sink_apple_audio_preset_channels +#endif /* HAVE_SINK_APPLE_AUDIO */ - do { - aubio_source_do(i, vec, &read); - aubio_sink_apple_audio_do(o, vec, read); - n_frames += read; - } while ( read == hop_size ); +#include "base-sink_custom.h" - PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", - n_frames, samplerate, n_frames / hop_size, - source_path, sink_path); +// this file uses the unstable aubio api, please use aubio_sink instead +// see src/io/sink.h and tests/src/sink/test-sink.c - del_aubio_sink_apple_audio(o); -beach_sink: - del_aubio_source(i); -beach_source: - del_fvec(vec); -beach_fvec: -#else /* HAVE_SINK_APPLE_AUDIO */ - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); -#endif /* HAVE_SINK_APPLE_AUDIO */ - return err; +int main (int argc, char **argv) +{ + return base_main(argc, argv); } diff --git a/tests/src/io/test-sink_sndfile.c b/tests/src/io/test-sink_sndfile.c index 1ecbba5c..0cd02088 100644 --- a/tests/src/io/test-sink_sndfile.c +++ b/tests/src/io/test-sink_sndfile.c @@ -2,66 +2,26 @@ #include #include "utils_tests.h" -// this file uses the unstable aubio api, please use aubio_sink instead -// see src/io/sink.h and tests/src/sink/test-sink.c - -int main (int argc, char **argv) -{ - sint_t err = 0; - - if (argc < 3) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source_and_sink(main); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - return err; - } +#define aubio_sink_custom "sndfile" #ifdef HAVE_SNDFILE - uint_t samplerate = 0; - uint_t hop_size = 512; - uint_t n_frames = 0, read = 0; - - char_t *source_path = argv[1]; - char_t *sink_path = argv[2]; - - if ( argc >= 4 ) samplerate = atoi(argv[3]); - if ( argc >= 5 ) hop_size = atoi(argv[4]); - if ( argc >= 6 ) { - err = 2; - PRINT_ERR("too many arguments\n"); - return err; - } - - fvec_t *vec = new_fvec(hop_size); - if (!vec) { err = 1; goto beach_fvec; } - - aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); - if (!i) { err = 1; goto beach_source; } - - if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); - - aubio_sink_sndfile_t *o = new_aubio_sink_sndfile(sink_path, samplerate); - if (!o) { err = 1; goto beach_sink; } +#define HAVE_AUBIO_SINK_CUSTOM +#define aubio_sink_custom_t aubio_sink_sndfile_t +#define new_aubio_sink_custom new_aubio_sink_sndfile +#define del_aubio_sink_custom del_aubio_sink_sndfile +#define aubio_sink_custom_do aubio_sink_sndfile_do +#define aubio_sink_custom_do_multi aubio_sink_sndfile_do_multi +#define aubio_sink_custom_close aubio_sink_sndfile_close +#define aubio_sink_custom_preset_samplerate aubio_sink_sndfile_preset_samplerate +#define aubio_sink_custom_preset_channels aubio_sink_sndfile_preset_channels +#endif /* HAVE_SNDFILE */ - do { - aubio_source_do(i, vec, &read); - aubio_sink_sndfile_do(o, vec, read); - n_frames += read; - } while ( read == hop_size ); +#include "base-sink_custom.h" - PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", - n_frames, samplerate, n_frames / hop_size, - source_path, sink_path); +// this file uses the unstable aubio api, please use aubio_sink instead +// see src/io/sink.h and tests/src/sink/test-sink.c - del_aubio_sink_sndfile(o); -beach_sink: - del_aubio_source(i); -beach_source: - del_fvec(vec); -beach_fvec: -#else - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); -#endif /* HAVE_SNDFILE */ - return err; +int main (int argc, char **argv) +{ + return base_main(argc, argv); } diff --git a/tests/src/io/test-sink_wavwrite.c b/tests/src/io/test-sink_wavwrite.c index f1a8006e..6385be7c 100644 --- a/tests/src/io/test-sink_wavwrite.c +++ b/tests/src/io/test-sink_wavwrite.c @@ -2,66 +2,26 @@ #include #include "utils_tests.h" -// this file uses the unstable aubio api, please use aubio_sink instead -// see src/io/sink.h and tests/src/sink/test-sink.c - -int main (int argc, char **argv) -{ - sint_t err = 0; - - if (argc < 3) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source_and_sink(main); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - return err; - } +#define aubio_sink_custom "wavwrite" #ifdef HAVE_WAVWRITE - uint_t samplerate = 0; - uint_t hop_size = 512; - uint_t n_frames = 0, read = 0; - - char_t *source_path = argv[1]; - char_t *sink_path = argv[2]; - - if ( argc >= 4 ) samplerate = atoi(argv[3]); - if ( argc >= 5 ) hop_size = atoi(argv[4]); - if ( argc >= 6 ) { - err = 2; - PRINT_ERR("too many arguments\n"); - return err; - } - - fvec_t *vec = new_fvec(hop_size); - if (!vec) { err = 1; goto beach_fvec; } - - aubio_source_t *i = new_aubio_source(source_path, samplerate, hop_size); - if (!i) { err = 1; goto beach_source; } - - if (samplerate == 0 ) samplerate = aubio_source_get_samplerate(i); - - aubio_sink_wavwrite_t *o = new_aubio_sink_wavwrite(sink_path, samplerate); - if (!o) { err = 1; goto beach_sink; } +#define HAVE_AUBIO_SINK_CUSTOM +#define aubio_sink_custom_t aubio_sink_wavwrite_t +#define new_aubio_sink_custom new_aubio_sink_wavwrite +#define del_aubio_sink_custom del_aubio_sink_wavwrite +#define aubio_sink_custom_do aubio_sink_wavwrite_do +#define aubio_sink_custom_do_multi aubio_sink_wavwrite_do_multi +#define aubio_sink_custom_close aubio_sink_wavwrite_close +#define aubio_sink_custom_preset_samplerate aubio_sink_wavwrite_preset_samplerate +#define aubio_sink_custom_preset_channels aubio_sink_wavwrite_preset_channels +#endif /* HAVE_WAVWRITE */ - do { - aubio_source_do(i, vec, &read); - aubio_sink_wavwrite_do(o, vec, read); - n_frames += read; - } while ( read == hop_size ); +#include "base-sink_custom.h" - PRINT_MSG("read %d frames at %dHz (%d blocks) from %s written to %s\n", - n_frames, samplerate, n_frames / hop_size, - source_path, sink_path); +// this file uses the unstable aubio api, please use aubio_sink instead +// see src/io/sink.h and tests/src/sink/test-sink.c - del_aubio_sink_wavwrite(o); -beach_sink: - del_aubio_source(i); -beach_source: - del_fvec(vec); -beach_fvec: -#else - err = 0; - PRINT_ERR("aubio was not compiled with aubio_sink_wavwrite\n"); -#endif /* HAVE_WAVWRITE */ - return err; +int main (int argc, char **argv) +{ + return base_main(argc, argv); } -- 2.11.0