Changeset 1cf031a
- Timestamp:
- Nov 26, 2018, 11:34:45 AM (6 years ago)
- 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. - Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tempo/tempo.c
rbcc5387 r1cf031a 129 129 130 130 uint_t aubio_tempo_set_delay_ms(aubio_tempo_t * o, smpl_t delay) { 131 o->delay = 1000. * delay * o->samplerate; 132 return AUBIO_OK; 131 return aubio_tempo_set_delay_s(o, delay / 1000.); 133 132 } 134 133 … … 142 141 143 142 smpl_t aubio_tempo_get_delay_ms(aubio_tempo_t * o) { 144 return o->delay / (smpl_t)(o->samplerate) /1000.;143 return aubio_tempo_get_delay_s(o) * 1000.; 145 144 } 146 145 … … 169 168 { 170 169 aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t); 171 char_t specdesc_func[ 20];170 char_t specdesc_func[PATH_MAX]; 172 171 o->samplerate = samplerate; 173 172 // check parameters are valid … … 204 203 aubio_peakpicker_set_threshold (o->pp, o->threshold); 205 204 if ( strcmp(tempo_mode, "default") == 0 ) { 206 str cpy(specdesc_func, "specflux");205 strncpy(specdesc_func, "specflux", PATH_MAX - 1); 207 206 } else { 208 strcpy(specdesc_func, tempo_mode); 207 strncpy(specdesc_func, tempo_mode, PATH_MAX - 1); 208 specdesc_func[PATH_MAX - 1] = '\0'; 209 209 } 210 210 o->od = new_aubio_specdesc(specdesc_func,buf_size); … … 216 216 onset2 = new_fvec(1); 217 217 }*/ 218 if (!o->dfframe || !o->fftgrain || !o->out || !o->pv || 219 !o->pp || !o->od || !o->of || !o->bt || !o->onset) { 220 AUBIO_ERR("tempo: failed creating tempo object\n"); 221 goto beach; 222 } 218 223 o->last_tatum = 0; 219 224 o->tatum_signature = 4; … … 221 226 222 227 beach: 223 AUBIO_FREE(o);228 del_aubio_tempo(o); 224 229 return NULL; 225 230 } … … 278 283 void del_aubio_tempo (aubio_tempo_t *o) 279 284 { 280 del_aubio_specdesc(o->od); 281 del_aubio_beattracking(o->bt); 282 del_aubio_peakpicker(o->pp); 283 del_aubio_pvoc(o->pv); 284 del_fvec(o->out); 285 del_fvec(o->of); 286 del_cvec(o->fftgrain); 287 del_fvec(o->dfframe); 288 del_fvec(o->onset); 285 if (o->od) 286 del_aubio_specdesc(o->od); 287 if (o->bt) 288 del_aubio_beattracking(o->bt); 289 if (o->pp) 290 del_aubio_peakpicker(o->pp); 291 if (o->pv) 292 del_aubio_pvoc(o->pv); 293 if (o->out) 294 del_fvec(o->out); 295 if (o->of) 296 del_fvec(o->of); 297 if (o->fftgrain) 298 del_cvec(o->fftgrain); 299 if (o->dfframe) 300 del_fvec(o->dfframe); 301 if (o->onset) 302 del_fvec(o->onset); 289 303 AUBIO_FREE(o); 290 return; 291 } 304 } -
tests/src/tempo/test-tempo.c
rbcc5387 r1cf031a 1 1 #include <aubio.h> 2 2 #include "utils_tests.h" 3 4 int test_wrong_params(void); 3 5 4 6 int main (int argc, char **argv) … … 7 9 if (argc < 2) { 8 10 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]); 12 20 return err; 13 21 } … … 21 29 22 30 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); 24 33 if (!source) { err = 1; goto beach; } 25 34 … … 31 40 32 41 // 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; } 34 46 35 47 do { … … 40 52 // do something with the beats 41 53 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", 43 56 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)); 45 59 } 46 60 n_frames += read; … … 54 68 // clean up memory 55 69 del_aubio_tempo(o); 70 beach_tempo: 56 71 del_fvec(in); 57 72 del_fvec(out); … … 62 77 return err; 63 78 } 79 80 int 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.