ref: cf7c76a0350408b569c08743c1bb1180b777140a
parent: a0fd4e4defd8dbe992d110774b8ee7f239b91e8c
author: Paul Brossier <piem@altern.org>
date: Mon Apr 11 12:31:48 EDT 2005
update pitchyin.[ch] and pitchdetection.c
--- a/src/pitchdetection.c
+++ b/src/pitchdetection.c
@@ -103,16 +103,12 @@
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);
--- a/src/pitchyin.c
+++ b/src/pitchyin.c
@@ -82,41 +82,39 @@
}
tau++;
} while (tau<yin->length);
- //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;c<input->channels;c++)
+ for (tau=0;tau<yin->length;tau++)
{
- for (tau=0;tau<yin->length;tau++)
+ yin->data[c][tau] = 0.;
+ }
+ for (tau=1;tau<yin->length;tau++)
+ {
+ for (j=0;j<yin->length;j++)
{
- yin->data[c][tau] = 0.;
+ tmp = input->data[c][j] - input->data[c][j+tau];
+ yin->data[c][tau] += SQR(tmp);
}
- for (tau=1;tau<yin->length;tau++)
- {
- for (j=0;j<yin->length;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;tau<yin->length;tau++)
- {
- tmp += yin->data[c][tau];
- yin->data[c][tau] *= tau/tmp;
- }
}
+ tmp2 = 0.;
+ yin->data[c][0] = 1.;
+ for (tau=1;tau<yin->length;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++;
}
--- a/src/pitchyin.h
+++ b/src/pitchyin.h
@@ -38,7 +38,7 @@
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
}