From cf7c76a0350408b569c08743c1bb1180b777140a Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Mon, 11 Apr 2005 16:31:48 +0000 Subject: [PATCH] update pitchyin.[ch] and pitchdetection.c --- src/pitchdetection.c | 6 +----- src/pitchyin.c | 42 ++++++++++++++++++++---------------------- src/pitchyin.h | 2 +- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/pitchdetection.c b/src/pitchdetection.c index d5eb72da..038988a0 100644 --- a/src/pitchdetection.c +++ b/src/pitchdetection.c @@ -103,16 +103,12 @@ smpl_t aubio_pitchdetection(aubio_pitchdetection_t *p, fvec_t * ibuf) { p->buf->data[i][j] = ibuf->data[i][j]; } } - /* get the autocorr and pitch */ - aubio_pitchyin_diff(p->buf,p->yin); - aubio_pitchyin_getcum(p->yin); - pitch = aubio_pitchyin_getpitch(p->yin); + pitch = aubio_pitchyin_getpitchfast(p->buf,p->yin, 0.5); if (pitch>0) { pitch = p->srate/(pitch+0.); } else { pitch = 0.; } - //fprintf(stderr,"%f\n",pitch); break; case mcomb: aubio_filter_do(p->filter,ibuf); diff --git a/src/pitchyin.c b/src/pitchyin.c index bbfeb2b2..15d64b15 100644 --- a/src/pitchyin.c +++ b/src/pitchyin.c @@ -82,41 +82,39 @@ uint_t aubio_pitchyin_getpitch(fvec_t * yin) { } tau++; } while (taulength); - //AUBIO_DBG("No pitch found"); + AUBIO_DBG("No pitch found"); return 0; } /* all the above in one */ -uint_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t * yin){ - uint_t c,j,tau = 0; +uint_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t * yin, smpl_t tol){ + uint_t c=0,j,tau = 0; smpl_t tmp = 0, tmp2; - for (c=0;cchannels;c++) + for (tau=0;taulength;tau++) { - for (tau=0;taulength;tau++) - { - yin->data[c][tau] = 0.; - } - for (tau=1;taulength;tau++) - { - for (j=0;jlength;j++) - { - tmp = input->data[c][j] - input->data[c][j+tau]; - yin->data[c][tau] += SQR(tmp); - } - } - tmp2 = 0.; - yin->data[c][0] = 1.; - for (tau=1;taulength;tau++) + yin->data[c][tau] = 0.; + } + for (tau=1;taulength;tau++) + { + for (j=0;jlength;j++) { - tmp += yin->data[c][tau]; - yin->data[c][tau] *= tau/tmp; + tmp = input->data[c][j] - input->data[c][j+tau]; + yin->data[c][tau] += SQR(tmp); } } + tmp2 = 0.; + yin->data[c][0] = 1.; + for (tau=1;taulength;tau++) + { + tmp += yin->data[c][tau]; + yin->data[c][tau] *= tau/tmp; + } /* should merge the following with above */ + tau = 1; do { - if(yin->data[c][tau] < 0.1) { + if(yin->data[c][tau] < tol) { while (yin->data[c][tau+1] < yin->data[c][tau]) { tau++; } diff --git a/src/pitchyin.h b/src/pitchyin.h index 653631e8..b50de01a 100644 --- a/src/pitchyin.h +++ b/src/pitchyin.h @@ -38,7 +38,7 @@ void aubio_pitchyin_getcum(fvec_t * yinbuf); uint_t aubio_pitchyin_getpitch(fvec_t *yinbuf); -uint_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t *yinbuf); +uint_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t *yinbuf, smpl_t tol); #ifdef __cplusplus } -- 2.26.2