From acd97d1038823180179882ebb3d3dc72da0fd3e3 Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Tue, 15 Oct 2013 22:57:38 +0200 Subject: [PATCH] src/mathutils.{c,h}: remove fvec_quadint, use fvec_quadratic_peak_pos --- src/mathutils.c | 13 +------------ src/mathutils.h | 3 --- src/onset/peakpicker.c | 2 +- src/tempo/beattracking.c | 10 +++++----- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/mathutils.c b/src/mathutils.c index 7d2424e0..00f7e090 100644 --- a/src/mathutils.c +++ b/src/mathutils.c @@ -367,20 +367,9 @@ smpl_t fvec_median (fvec_t * input) { } } -smpl_t fvec_quadint (fvec_t * x, uint_t pos) { - smpl_t s0, s1, s2; - uint_t x0 = (pos < 1) ? pos : pos - 1; - uint_t x2 = (pos + 1 < x->length) ? pos + 1 : pos; - if (x0 == pos) return (x->data[pos] <= x->data[x2]) ? pos : x2; - if (x2 == pos) return (x->data[pos] <= x->data[x0]) ? pos : x0; - s0 = x->data[x0]; - s1 = x->data[pos]; - s2 = x->data[x2]; - return pos + 0.5 * (s2 - s0 ) / (s2 - 2.* s1 + s0); -} - smpl_t fvec_quadratic_peak_pos (fvec_t * x, uint_t pos) { smpl_t s0, s1, s2; + if (pos == 0 || pos == x->length - 1) return pos; uint_t x0 = (pos < 1) ? pos : pos - 1; uint_t x2 = (pos + 1 < x->length) ? pos + 1 : pos; if (x0 == pos) return (x->data[pos] <= x->data[x2]) ? pos : x2; diff --git a/src/mathutils.h b/src/mathutils.h index fb425042..913c6d7d 100644 --- a/src/mathutils.h +++ b/src/mathutils.h @@ -231,9 +231,6 @@ and in the Public Domain. */ smpl_t fvec_median (fvec_t * v); -/** finds exact peak index by quadratic interpolation*/ -smpl_t fvec_quadint (fvec_t * x, uint_t pos); - /** finds exact peak index by quadratic interpolation See [Quadratic Interpolation of Spectral diff --git a/src/onset/peakpicker.c b/src/onset/peakpicker.c index 010c9a63..73561c7c 100644 --- a/src/onset/peakpicker.c +++ b/src/onset/peakpicker.c @@ -124,7 +124,7 @@ aubio_peakpicker_do (aubio_peakpicker_t * p, fvec_t * onset, fvec_t * out) onset_peek->data[2] = thresholded->data[0]; out->data[0] = (p->pickerfn) (onset_peek, 1); if (out->data[0]) { - out->data[0] = fvec_quadint (onset_peek, 1); + out->data[0] = fvec_quadratic_peak_pos (onset_peek, 1); } } diff --git a/src/tempo/beattracking.c b/src/tempo/beattracking.c index 0efb6fd5..7ec0e4ec 100644 --- a/src/tempo/beattracking.c +++ b/src/tempo/beattracking.c @@ -170,7 +170,7 @@ aubio_beattracking_do (aubio_beattracking_t * bt, fvec_t * dfframe, /* find non-zero Rayleigh period */ maxindex = fvec_max_elem (bt->acfout); - bt->rp = maxindex ? fvec_quadint (bt->acfout, maxindex) : 1; + bt->rp = maxindex ? fvec_quadratic_peak_pos (bt->acfout, maxindex) : 1; //rp = (maxindex==127) ? 43 : maxindex; //rayparam bt->rp = (maxindex == bt->acfout->length - 1) ? bt->rayparam : maxindex; //rayparam @@ -203,7 +203,7 @@ aubio_beattracking_do (aubio_beattracking_t * bt, fvec_t * dfframe, #endif /* AUBIO_BEAT_WARNINGS */ phase = step - bt->lastbeat; } else { - phase = fvec_quadint (bt->phout, maxindex); + phase = fvec_quadratic_peak_pos (bt->phout, maxindex); } /* take back one frame delay */ phase += 1.; @@ -305,7 +305,7 @@ aubio_beattracking_checkstate (aubio_beattracking_t * bt) } } fvec_weight (acfout, bt->gwv); - gp = fvec_quadint (acfout, fvec_max_elem (acfout)); + gp = fvec_quadratic_peak_pos (acfout, fvec_max_elem (acfout)); /* while(gp<32) gp =gp*2; while(gp>64) gp = gp/2; @@ -408,8 +408,8 @@ aubio_beattracking_checkstate (aubio_beattracking_t * bt) smpl_t aubio_beattracking_get_bpm (aubio_beattracking_t * bt) { - if (bt->timesig != 0 && bt->counter == 0 && bt->flagstep == 0) { - return 5168. / fvec_quadint (bt->acfout, bt->bp); + if (bt->bp != 0 && bt->timesig != 0 && bt->counter == 0 && bt->flagstep == 0) { + return 5168. / fvec_quadratic_peak_pos (bt->acfout, bt->bp); } else { return 0.; } -- 2.11.0