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);
}
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++)
- {
- 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++)
+ yin->data[c][tau] = 0.;
+ }
+ for (tau=1;tau<yin->length;tau++)
+ {
+ for (j=0;j<yin->length;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;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++;
}