Changeset 1cf031a for tests


Ignore:
Timestamp:
Nov 26, 2018, 11:34:45 AM (5 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master
Children:
ce323e4
Parents:
bcc5387 (diff), ef0a430 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'fix/bufoverflow_tempo' (thanks to @niugx)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/src/tempo/test-tempo.c

    rbcc5387 r1cf031a  
    11#include <aubio.h>
    22#include "utils_tests.h"
     3
     4int test_wrong_params(void);
    35
    46int main (int argc, char **argv)
     
    79  if (argc < 2) {
    810    err = 2;
    9     PRINT_ERR("not enough arguments\n");
    10     PRINT_MSG("read a wave file as a mono vector\n");
    11     PRINT_MSG("usage: %s <source_path> [samplerate] [win_size] [hop_size]\n", argv[0]);
     11    PRINT_WRN("no arguments, running tests\n");
     12    if (test_wrong_params() != 0) {
     13      PRINT_ERR("tests failed!\n");
     14      err = 1;
     15    } else {
     16      err = 0;
     17    }
     18    PRINT_MSG("usage: %s <source_path> [samplerate] [win_size] [hop_size]\n",
     19        argv[0]);
    1220    return err;
    1321  }
     
    2129
    2230  char_t *source_path = argv[1];
    23   aubio_source_t * source = new_aubio_source(source_path, samplerate, hop_size);
     31  aubio_source_t * source = new_aubio_source(source_path, samplerate,
     32      hop_size);
    2433  if (!source) { err = 1; goto beach; }
    2534
     
    3140
    3241  // create tempo object
    33   aubio_tempo_t * o = new_aubio_tempo("default", win_size, hop_size, samplerate);
     42  aubio_tempo_t * o = new_aubio_tempo("default", win_size, hop_size,
     43      samplerate);
     44
     45  if (!o) { err = 1; goto beach_tempo; }
    3446
    3547  do {
     
    4052    // do something with the beats
    4153    if (out->data[0] != 0) {
    42       PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2fbpm with confidence %.2f\n",
     54      PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2f bpm "
     55          "with confidence %.2f\n",
    4356          aubio_tempo_get_last_ms(o), aubio_tempo_get_last_s(o),
    44           aubio_tempo_get_last(o), aubio_tempo_get_bpm(o), aubio_tempo_get_confidence(o));
     57          aubio_tempo_get_last(o), aubio_tempo_get_bpm(o),
     58          aubio_tempo_get_confidence(o));
    4559    }
    4660    n_frames += read;
     
    5468  // clean up memory
    5569  del_aubio_tempo(o);
     70beach_tempo:
    5671  del_fvec(in);
    5772  del_fvec(out);
     
    6277  return err;
    6378}
     79
     80int test_wrong_params(void)
     81{
     82  uint_t win_size = 1024;
     83  uint_t hop_size = 256;
     84  uint_t samplerate = 44100;
     85  aubio_tempo_t *t;
     86  fvec_t* in, *out;
     87  uint_t i;
     88
     89  // test wrong method fails
     90  if (new_aubio_tempo("unexisting_method", win_size, hop_size, samplerate))
     91    return 1;
     92
     93  // test hop > win fails
     94  if (new_aubio_tempo("default", hop_size, win_size, samplerate))
     95    return 1;
     96
     97  // test null hop_size fails
     98  if (new_aubio_tempo("default", win_size, 0, samplerate))
     99    return 1;
     100
     101  // test 1 buf_size fails
     102  if (new_aubio_tempo("default", 1, 1, samplerate))
     103    return 1;
     104
     105  // test null samplerate fails
     106  if (new_aubio_tempo("default", win_size, hop_size, 0))
     107    return 1;
     108
     109  // test short sizes workaround
     110  t = new_aubio_tempo("default", 2048, 2048, 500);
     111  if (!t)
     112    return 1;
     113
     114  del_aubio_tempo(t);
     115
     116  t = new_aubio_tempo("default", win_size, hop_size, samplerate);
     117  if (!t)
     118    return 1;
     119
     120  in = new_fvec(hop_size);
     121  out = new_fvec(1);
     122
     123  // up to step = (next_power_of_two(5.8 * samplerate / hop_size ) / 4 )
     124  for (i = 0; i < 256 + 1; i++)
     125  {
     126    aubio_tempo_do(t,in,out);
     127    PRINT_MSG("beat at %.3fms, %.3fs, frame %d, %.2f bpm "
     128        "with confidence %.2f, was tatum %d\n",
     129        aubio_tempo_get_last_ms(t), aubio_tempo_get_last_s(t),
     130        aubio_tempo_get_last(t), aubio_tempo_get_bpm(t),
     131        aubio_tempo_get_confidence(t), aubio_tempo_was_tatum(t));
     132  }
     133
     134  del_aubio_tempo(t);
     135  del_fvec(in);
     136  del_fvec(out);
     137
     138  return 0;
     139}
Note: See TracChangeset for help on using the changeset viewer.