From 7735d0634a5c8e7805c57414a32fc7d31e791c13 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Thu, 13 Dec 2018 16:09:50 +0100 Subject: [PATCH] [tests] factorise source tests --- tests/src/io/base-source_custom.h | 125 +++++++++++++++++++++++++++++++++ tests/src/io/test-source_apple_audio.c | 73 ++++++------------- tests/src/io/test-source_avcodec.c | 73 ++++++------------- tests/src/io/test-source_sndfile.c | 73 ++++++------------- tests/src/io/test-source_wavread.c | 73 ++++++------------- 5 files changed, 205 insertions(+), 212 deletions(-) create mode 100644 tests/src/io/base-source_custom.h diff --git a/tests/src/io/base-source_custom.h b/tests/src/io/base-source_custom.h new file mode 100644 index 00000000..3991160c --- /dev/null +++ b/tests/src/io/base-source_custom.h @@ -0,0 +1,125 @@ +// this should be included *after* custom functions have been defined + +#ifndef aubio_source_custom +#define aubio_source_custom "undefined" +#endif /* aubio_source_custom */ + +#ifdef HAVE_AUBIO_SOURCE_CUSTOM +int test_wrong_params(void); + +int base_main(int argc, char **argv) +{ + uint_t err = 0; + if (argc < 2) { + PRINT_ERR("not enough arguments, running tests\n"); + err = test_wrong_params(); + PRINT_MSG("read a wave file as a mono vector\n"); + PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); + PRINT_MSG("examples:\n"); + PRINT_MSG(" - read file.wav at original samplerate\n"); + PRINT_MSG(" %s file.wav\n", argv[0]); + PRINT_MSG(" - read file.wav at 32000Hz\n"); + PRINT_MSG(" %s file.aif 32000\n", argv[0]); + PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); + PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); + return err; + } + + uint_t samplerate = 0; + uint_t hop_size = 256; + uint_t n_frames = 0, read = 0; + if ( argc >= 3 ) samplerate = atoi(argv[2]); + if ( argc >= 4 ) hop_size = atoi(argv[3]); + + char_t *source_path = argv[1]; + + aubio_source_custom_t * s = + new_aubio_source_custom(source_path, samplerate, hop_size); + fvec_t *vec = new_fvec(hop_size); + if (!s || !vec) { err = 1; goto beach; } + + uint_t n_frames_expected = aubio_source_custom_get_duration(s); + + samplerate = aubio_source_custom_get_samplerate(s); + + do { + aubio_source_custom_do(s, vec, &read); + fvec_print (vec); + n_frames += read; + } while ( read == hop_size ); + + PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", + n_frames, n_frames_expected, samplerate, n_frames / hop_size, + source_path); + + // close the file (optional) + aubio_source_custom_close(s); + +beach: + if (vec) + del_fvec(vec); + if (s) + del_aubio_source_custom(s); + return err; +} + +int test_wrong_params(void) +{ + char_t *uri = DEFINEDSTRING(AUBIO_TESTS_SOURCE); + uint_t samplerate = 44100; + uint_t hop_size = 512; + uint_t channels, read = 0; + fvec_t *vec; + fmat_t *mat; + aubio_source_custom_t *s; + + if (new_aubio_source_custom(0, samplerate, hop_size)) return 1; + if (new_aubio_source_custom('\0', samplerate, hop_size)) return 1; + if (new_aubio_source_custom(uri, -1, hop_size)) return 1; + if (new_aubio_source_custom(uri, 0, 0)) return 1; + + s = new_aubio_source_custom(uri, samplerate, hop_size); + if (!s) return 1; + channels = aubio_source_custom_get_channels(s); + + // vector to read downmixed samples + vec = new_fvec(hop_size); + // matrix to read individual channels + mat = new_fmat(channels, hop_size); + + if (aubio_source_custom_get_samplerate(s) != samplerate) return 1; + + // read first hop_size frames + aubio_source_custom_do(s, vec, &read); + if (read != hop_size) return 1; + + // seek to 0 + if(aubio_source_custom_seek(s, 0)) return 1; + + // read again as multiple channels + aubio_source_custom_do_multi(s, mat, &read); + if (read != hop_size) return 1; + + // close the file (optional) + aubio_source_custom_close(s); + // test closing the file a second time + aubio_source_custom_close(s); + + del_aubio_source_custom(s); + del_fmat(mat); + del_fvec(vec); + + return run_on_default_source(base_main); +} + +#else /* HAVE_AUBIO_SOURCE_CUSTOM */ + +int base_main(int argc, char** argv) +{ + PRINT_ERR("aubio was not compiled with aubio_source_" + aubio_source_custom ", failed running %s with %d args\n", + argv[0], argc); + return 0; +} + +#endif /* HAVE_AUBIO_SOURCE_CUSTOM */ diff --git a/tests/src/io/test-source_apple_audio.c b/tests/src/io/test-source_apple_audio.c index b38ed95b..25fec53c 100644 --- a/tests/src/io/test-source_apple_audio.c +++ b/tests/src/io/test-source_apple_audio.c @@ -2,62 +2,29 @@ #include #include "utils_tests.h" +#define aubio_source_custom "apple_audio" + +#ifdef HAVE_SOURCE_APPLE_AUDIO +#define HAVE_AUBIO_SOURCE_CUSTOM +#define aubio_source_custom_t aubio_source_apple_audio_t +#define new_aubio_source_custom new_aubio_source_apple_audio +#define del_aubio_source_custom del_aubio_source_apple_audio +#define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate +#define aubio_source_custom_get_duration aubio_source_apple_audio_get_duration +#define aubio_source_custom_do aubio_source_apple_audio_do +#define aubio_source_custom_do_multi aubio_source_apple_audio_do_multi +#define aubio_source_custom_seek aubio_source_apple_audio_seek +#define aubio_source_custom_close aubio_source_apple_audio_close +#define aubio_source_custom_get_channels aubio_source_apple_audio_get_channels +#define aubio_source_custom_get_samplerate aubio_source_apple_audio_get_samplerate +#endif /* HAVE_SOURCE_APPLE_AUDIO */ + +#include "base-source_custom.h" + // this file uses the unstable aubio api, please use aubio_source instead // see src/io/source.h and tests/src/source/test-source.c int main (int argc, char **argv) { - uint_t err = 0; - if (argc < 2) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source(main); - PRINT_MSG("read a wave file as a mono vector\n"); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - PRINT_MSG("examples:\n"); - PRINT_MSG(" - read file.wav at original samplerate\n"); - PRINT_MSG(" %s file.wav\n", argv[0]); - PRINT_MSG(" - read file.aif at 32000Hz\n"); - PRINT_MSG(" %s file.aif 32000\n", argv[0]); - PRINT_MSG(" - read file.mp3 at original samplerate with 4096 blocks\n"); - PRINT_MSG(" %s file.mp3 0 4096 \n", argv[0]); - return err; - } - -#if HAVE_SOURCE_APPLE_AUDIO - uint_t samplerate = 0; - uint_t hop_size = 256; - uint_t n_frames = 0, read = 0; - if ( argc >= 3 ) samplerate = atoi(argv[2]); - if ( argc >= 4 ) hop_size = atoi(argv[3]); - - char_t *source_path = argv[1]; - - - aubio_source_apple_audio_t * s = - new_aubio_source_apple_audio(source_path, samplerate, hop_size); - if (!s) { err = 1; goto beach; } - fvec_t *vec = new_fvec(hop_size); - - uint_t n_frames_expected = aubio_source_apple_audio_get_duration(s); - - samplerate = aubio_source_apple_audio_get_samplerate(s); - - do { - aubio_source_apple_audio_do(s, vec, &read); - fvec_print (vec); - n_frames += read; - } while ( read == hop_size ); - - PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", - n_frames, n_frames_expected, samplerate, n_frames / hop_size, - source_path); - - del_fvec (vec); - del_aubio_source_apple_audio (s); -beach: -#else /* HAVE_SOURCE_APPLE_AUDIO */ - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_apple_audio\n"); -#endif /* HAVE_SOURCE_APPLE_AUDIO */ - return err; + return base_main(argc, argv); } diff --git a/tests/src/io/test-source_avcodec.c b/tests/src/io/test-source_avcodec.c index 962b578e..c2c2a138 100644 --- a/tests/src/io/test-source_avcodec.c +++ b/tests/src/io/test-source_avcodec.c @@ -2,62 +2,29 @@ #include #include "utils_tests.h" -// this file uses the unstable aubio api, please use aubio_source instead -// see src/io/source.h and tests/src/source/test-source.c - -int main (int argc, char **argv) -{ - uint_t err = 0; - if (argc < 2) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source(main); - PRINT_MSG("read a wave file as a mono vector\n"); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - PRINT_MSG("examples:\n"); - PRINT_MSG(" - read file.wav at original samplerate\n"); - PRINT_MSG(" %s file.wav\n", argv[0]); - PRINT_MSG(" - read file.wav at 32000Hz\n"); - PRINT_MSG(" %s file.aif 32000\n", argv[0]); - PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); - PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); - return err; - } +#define aubio_source_custom "avcodec" #ifdef HAVE_LIBAV - uint_t samplerate = 0; - uint_t hop_size = 256; - uint_t n_frames = 0, read = 0; - if ( argc >= 3 ) samplerate = atoi(argv[2]); - if ( argc >= 4 ) hop_size = atoi(argv[3]); - - char_t *source_path = argv[1]; - - - aubio_source_avcodec_t * s = - new_aubio_source_avcodec(source_path, samplerate, hop_size); - if (!s) { err = 1; goto beach; } - fvec_t *vec = new_fvec(hop_size); - - uint_t n_frames_expected = aubio_source_avcodec_get_duration(s); - - samplerate = aubio_source_avcodec_get_samplerate(s); +#define HAVE_AUBIO_SOURCE_CUSTOM +#define aubio_source_custom_t aubio_source_avcodec_t +#define new_aubio_source_custom new_aubio_source_avcodec +#define del_aubio_source_custom del_aubio_source_avcodec +#define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate +#define aubio_source_custom_get_duration aubio_source_avcodec_get_duration +#define aubio_source_custom_do aubio_source_avcodec_do +#define aubio_source_custom_do_multi aubio_source_avcodec_do_multi +#define aubio_source_custom_seek aubio_source_avcodec_seek +#define aubio_source_custom_close aubio_source_avcodec_close +#define aubio_source_custom_get_channels aubio_source_avcodec_get_channels +#define aubio_source_custom_get_samplerate aubio_source_avcodec_get_samplerate +#endif /* HAVE_LIBAV */ - do { - aubio_source_avcodec_do(s, vec, &read); - fvec_print (vec); - n_frames += read; - } while ( read == hop_size ); +#include "base-source_custom.h" - PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", - n_frames, n_frames_expected, samplerate, n_frames / hop_size, - source_path); +// this file uses the unstable aubio api, please use aubio_source instead +// see src/io/source.h and tests/src/source/test-source.c - del_fvec (vec); - del_aubio_source_avcodec (s); -beach: -#else /* HAVE_LIBAV */ - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_avcodec\n"); -#endif /* HAVE_LIBAV */ - return err; +int main (int argc, char **argv) +{ + return base_main(argc, argv); } diff --git a/tests/src/io/test-source_sndfile.c b/tests/src/io/test-source_sndfile.c index e50ae472..5c2c06fe 100644 --- a/tests/src/io/test-source_sndfile.c +++ b/tests/src/io/test-source_sndfile.c @@ -2,62 +2,29 @@ #include #include "utils_tests.h" +#define aubio_source_custom "sndfile" + +#ifdef HAVE_SNDFILE +#define HAVE_AUBIO_SOURCE_CUSTOM +#define aubio_source_custom_t aubio_source_sndfile_t +#define new_aubio_source_custom new_aubio_source_sndfile +#define del_aubio_source_custom del_aubio_source_sndfile +#define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate +#define aubio_source_custom_get_duration aubio_source_sndfile_get_duration +#define aubio_source_custom_do aubio_source_sndfile_do +#define aubio_source_custom_do_multi aubio_source_sndfile_do_multi +#define aubio_source_custom_seek aubio_source_sndfile_seek +#define aubio_source_custom_close aubio_source_sndfile_close +#define aubio_source_custom_get_channels aubio_source_sndfile_get_channels +#define aubio_source_custom_get_samplerate aubio_source_sndfile_get_samplerate +#endif /* HAVE_LIBAV */ + +#include "base-source_custom.h" + // this file uses the unstable aubio api, please use aubio_source instead // see src/io/source.h and tests/src/source/test-source.c int main (int argc, char **argv) { - uint_t err = 0; - if (argc < 2) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source(main); - PRINT_MSG("read a wave file as a mono vector\n"); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - PRINT_MSG("examples:\n"); - PRINT_MSG(" - read file.wav at original samplerate\n"); - PRINT_MSG(" %s file.wav\n", argv[0]); - PRINT_MSG(" - read file.wav at 32000Hz\n"); - PRINT_MSG(" %s file.aif 32000\n", argv[0]); - PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); - PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); - return err; - } - -#ifdef HAVE_SNDFILE - uint_t samplerate = 0; - uint_t hop_size = 256; - uint_t n_frames = 0, read = 0; - if ( argc >= 3 ) samplerate = atoi(argv[2]); - if ( argc >= 4 ) hop_size = atoi(argv[3]); - - char_t *source_path = argv[1]; - - - aubio_source_sndfile_t * s = - new_aubio_source_sndfile(source_path, samplerate, hop_size); - if (!s) { err = 1; goto beach; } - fvec_t *vec = new_fvec(hop_size); - - uint_t n_frames_expected = aubio_source_sndfile_get_duration(s); - - samplerate = aubio_source_sndfile_get_samplerate(s); - - do { - aubio_source_sndfile_do(s, vec, &read); - fvec_print (vec); - n_frames += read; - } while ( read == hop_size ); - - PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", - n_frames, n_frames_expected, samplerate, n_frames / hop_size, - source_path); - - del_fvec (vec); - del_aubio_source_sndfile (s); -beach: -#else - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_sndfile\n"); -#endif /* HAVE_SNDFILE */ - return err; + return base_main(argc, argv); } diff --git a/tests/src/io/test-source_wavread.c b/tests/src/io/test-source_wavread.c index a3363f03..81fa6a8f 100644 --- a/tests/src/io/test-source_wavread.c +++ b/tests/src/io/test-source_wavread.c @@ -2,62 +2,29 @@ #include #include "utils_tests.h" -// this file uses the unstable aubio api, please use aubio_source instead -// see src/io/source.h and tests/src/source/test-source.c - -int main (int argc, char **argv) -{ - uint_t err = 0; - if (argc < 2) { - PRINT_ERR("not enough arguments, running tests\n"); - err = run_on_default_source(main); - PRINT_MSG("read a wave file as a mono vector\n"); - PRINT_MSG("usage: %s [samplerate] [hop_size]\n", argv[0]); - PRINT_MSG("examples:\n"); - PRINT_MSG(" - read file.wav at original samplerate\n"); - PRINT_MSG(" %s file.wav\n", argv[0]); - PRINT_MSG(" - read file.wav at 32000Hz\n"); - PRINT_MSG(" %s file.aif 32000\n", argv[0]); - PRINT_MSG(" - read file.wav at original samplerate with 4096 blocks\n"); - PRINT_MSG(" %s file.wav 0 4096 \n", argv[0]); - return err; - } +#define aubio_source_custom "wavread" #ifdef HAVE_WAVREAD - uint_t samplerate = 0; - uint_t hop_size = 256; - uint_t n_frames = 0, read = 0; - if ( argc >= 3 ) samplerate = atoi(argv[2]); - if ( argc >= 4 ) hop_size = atoi(argv[3]); - - char_t *source_path = argv[1]; - - - aubio_source_wavread_t * s = - new_aubio_source_wavread(source_path, samplerate, hop_size); - if (!s) { err = 1; goto beach; } - fvec_t *vec = new_fvec(hop_size); - - uint_t n_frames_expected = aubio_source_wavread_get_duration(s); - - samplerate = aubio_source_wavread_get_samplerate(s); +#define HAVE_AUBIO_SOURCE_CUSTOM +#define aubio_source_custom_t aubio_source_wavread_t +#define new_aubio_source_custom new_aubio_source_wavread +#define del_aubio_source_custom del_aubio_source_wavread +#define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate +#define aubio_source_custom_get_duration aubio_source_wavread_get_duration +#define aubio_source_custom_do aubio_source_wavread_do +#define aubio_source_custom_do_multi aubio_source_wavread_do_multi +#define aubio_source_custom_seek aubio_source_wavread_seek +#define aubio_source_custom_close aubio_source_wavread_close +#define aubio_source_custom_get_channels aubio_source_wavread_get_channels +#define aubio_source_custom_get_samplerate aubio_source_wavread_get_samplerate +#endif /* HAVE_WAVREAD */ - do { - aubio_source_wavread_do(s, vec, &read); - fvec_print (vec); - n_frames += read; - } while ( read == hop_size ); +#include "base-source_custom.h" - PRINT_MSG("read %d frames (expected %d) at %dHz (%d blocks) from %s\n", - n_frames, n_frames_expected, samplerate, n_frames / hop_size, - source_path); +// this file uses the unstable aubio api, please use aubio_source instead +// see src/io/source.h and tests/src/source/test-source.c - del_fvec (vec); - del_aubio_source_wavread (s); -beach: -#else - err = 0; - PRINT_ERR("aubio was not compiled with aubio_source_wavread\n"); -#endif /* HAVE_WAVREAD */ - return err; +int main (int argc, char **argv) +{ + return base_main(argc, argv); } -- 2.11.0