int main () { uint_t win_s = 64; // window size // create biquad filter with `b0`, `b1`, `b2`, `a1`, `a2` aubio_filter_t * o = new_aubio_filter_biquad(0.3,0.2,0.1,0.2,0.3); fvec_t * in_vec = new_fvec (win_s); // input buffer fvec_t * tmp_vec = new_fvec (win_s); // temporary buffer fvec_t * out_vec = new_fvec (win_s); // output buffer uint_t times = 100; while ( times-- ) { // copy to out, then filter out aubio_filter_do_outplace(o, in_vec, out_vec); // in-place filtering aubio_filter_do(o, in_vec); // in-place filtering aubio_filter_do_filtfilt(o, in_vec, out_vec); fvec_print(in_vec); } // memory clean-up, one for each new del_aubio_filter(o); del_fvec(in_vec); del_fvec(tmp_vec); del_fvec(out_vec); return 0; }
int main (void) { uint_t win_s = 16; // window size uint_t impulse_at = win_s / 2; fvec_t *in = new_fvec (win_s); // input buffer fvec_t *out = new_fvec (win_s); // input buffer aubio_filter_t *o = new_aubio_filter_c_weighting (44100); in->data[impulse_at] = 0.5; fvec_print (in); aubio_filter_do (o, in); fvec_print (in); del_aubio_filter (o); o = new_aubio_filter_a_weighting (32000); in->data[impulse_at] = 0.5; fvec_print (in); aubio_filter_do_outplace (o, in, out); fvec_print (out); aubio_filter_set_a_weighting (o, 32000); in->data[impulse_at] = 0.5; fvec_print (in); aubio_filter_do_filtfilt (o, in, out); fvec_print (out); del_fvec (in); del_fvec (out); del_aubio_filter (o); aubio_cleanup (); return 0; }
/* do method for each algorithm */ void aubio_pitch_do_mcomb (aubio_pitch_t * p, fvec_t * ibuf, fvec_t * obuf) { aubio_filter_do (p->filter, ibuf); aubio_pvoc_do (p->pv, ibuf, p->fftgrain); aubio_pitchmcomb_do (p->p_object, p->fftgrain, obuf); obuf->data[0] = aubio_bintofreq (obuf->data[0], p->samplerate, p->bufsize); }
/* The rough way: reset memory of filter between each run to avoid end effects. */ void aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp) { uint_t j; uint_t length = in->length; /* apply filtering */ aubio_filter_do (f, in); aubio_filter_do_reset (f); /* mirror */ for (j = 0; j < length; j++) tmp->data[length - j - 1] = in->data[j]; /* apply filtering on mirrored */ aubio_filter_do (f, tmp); aubio_filter_do_reset (f); /* invert back */ for (j = 0; j < length; j++) in->data[j] = tmp->data[length - j - 1]; }
void aubio_filter_do_outplace (aubio_filter_t * f, fvec_t * in, fvec_t * out) { fvec_copy (in, out); aubio_filter_do (f, out); }