uint_t aubio_pitch_set_tolerance (aubio_pitch_t * p, smpl_t tol) { switch (p->type) { case aubio_pitcht_yin: aubio_pitchyin_set_tolerance (p->p_object, tol); break; case aubio_pitcht_yinfft: aubio_pitchyinfft_set_tolerance (p->p_object, tol); break; default: break; } return AUBIO_OK; }
int main(){ /* allocate some memory */ uint_t win_s = 1024; /* window size */ fvec_t * in = new_fvec (win_s); /* input buffer */ fvec_t * out = new_fvec (1); /* output pitch periods */ aubio_pitchyinfft_t * o = new_aubio_pitchyinfft(win_s); aubio_pitchyinfft_set_tolerance (o, 0.2); uint_t i = 0; while (i < 10) { aubio_pitchyinfft_do (o,in,out); i++; }; del_aubio_pitchyinfft(o); del_fvec(in); del_fvec(out); aubio_cleanup(); return 0; }
aubio_pitch_t * new_aubio_pitch (const char_t * pitch_mode, uint_t bufsize, uint_t hopsize, uint_t samplerate) { aubio_pitch_t *p = AUBIO_NEW (aubio_pitch_t); aubio_pitch_type pitch_type; if (strcmp (pitch_mode, "mcomb") == 0) pitch_type = aubio_pitcht_mcomb; else if (strcmp (pitch_mode, "yinfft") == 0) pitch_type = aubio_pitcht_yinfft; else if (strcmp (pitch_mode, "yin") == 0) pitch_type = aubio_pitcht_yin; else if (strcmp (pitch_mode, "schmitt") == 0) pitch_type = aubio_pitcht_schmitt; else if (strcmp (pitch_mode, "fcomb") == 0) pitch_type = aubio_pitcht_fcomb; else if (strcmp (pitch_mode, "specacf") == 0) pitch_type = aubio_pitcht_specacf; else if (strcmp (pitch_mode, "default") == 0) pitch_type = aubio_pitcht_default; else { AUBIO_ERR ("unknown pitch detection method %s, using default.\n", pitch_mode); pitch_type = aubio_pitcht_default; } // check parameters are valid if ((sint_t)hopsize < 1) { AUBIO_ERR("pitch: got hopsize %d, but can not be < 1\n", hopsize); goto beach; } else if ((sint_t)bufsize < 1) { AUBIO_ERR("pitch: got buffer_size %d, but can not be < 1\n", bufsize); goto beach; } else if (bufsize < hopsize) { AUBIO_ERR("pitch: hop size (%d) is larger than win size (%d)\n", bufsize, hopsize); goto beach; } else if ((sint_t)samplerate < 1) { AUBIO_ERR("pitch: samplerate (%d) can not be < 1\n", samplerate); goto beach; } p->samplerate = samplerate; p->type = pitch_type; aubio_pitch_set_unit (p, "default"); p->bufsize = bufsize; p->silence = DEFAULT_PITCH_SILENCE; p->conf_cb = NULL; switch (p->type) { case aubio_pitcht_yin: p->buf = new_fvec (bufsize); p->p_object = new_aubio_pitchyin (bufsize); p->detect_cb = aubio_pitch_do_yin; p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchyin_get_confidence; aubio_pitchyin_set_tolerance (p->p_object, 0.15); break; case aubio_pitcht_mcomb: p->filtered = new_fvec (hopsize); p->pv = new_aubio_pvoc (bufsize, hopsize); p->fftgrain = new_cvec (bufsize); p->p_object = new_aubio_pitchmcomb (bufsize, hopsize); p->filter = new_aubio_filter_c_weighting (samplerate); p->detect_cb = aubio_pitch_do_mcomb; break; case aubio_pitcht_fcomb: p->buf = new_fvec (bufsize); p->p_object = new_aubio_pitchfcomb (bufsize, hopsize); p->detect_cb = aubio_pitch_do_fcomb; break; case aubio_pitcht_schmitt: p->buf = new_fvec (bufsize); p->p_object = new_aubio_pitchschmitt (bufsize); p->detect_cb = aubio_pitch_do_schmitt; break; case aubio_pitcht_yinfft: p->buf = new_fvec (bufsize); p->p_object = new_aubio_pitchyinfft (samplerate, bufsize); p->detect_cb = aubio_pitch_do_yinfft; p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchyinfft_get_confidence; aubio_pitchyinfft_set_tolerance (p->p_object, 0.85); break; case aubio_pitcht_specacf: p->buf = new_fvec (bufsize); p->p_object = new_aubio_pitchspecacf (bufsize); p->detect_cb = aubio_pitch_do_specacf; p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitchspecacf_get_tolerance; aubio_pitchspecacf_set_tolerance (p->p_object, 0.85); break; default: break; } return p; beach: AUBIO_FREE(p); return NULL; }