int main (void) { /* allocate some memory */ uint_t win_s = 512; /* fft size */ uint_t n_filters = 40; /* number of filters */ cvec_t *in = new_cvec (win_s); /* input buffer */ fvec_t *out = new_fvec (win_s); /* input buffer */ fmat_t *coeffs = NULL; smpl_t samplerate = 16000.; /* allocate fft and other memory space */ aubio_filterbank_t *o = new_aubio_filterbank (n_filters, win_s); /* assign Mel-frequency coefficients */ aubio_filterbank_set_mel_coeffs_slaney (o, samplerate); coeffs = aubio_filterbank_get_coeffs (o); if (coeffs == NULL) { return -1; } //fmat_print (coeffs); //fprintf(stderr, "%f\n", fvec_sum(coeffs)); aubio_filterbank_do (o, in, out); del_aubio_filterbank (o); del_cvec (in); del_fvec (out); aubio_cleanup (); return 0; }
void ofxAubioMelBands::setup(string method, int buf_s, int hop_s, int samplerate) { ofxAubioBlock::setup(method, buf_s, hop_s, samplerate); pv = new_aubio_pvoc(buf_s, hop_s); spectrum = new_cvec(buf_s); fb = new_aubio_filterbank(40, buf_s); aubio_filterbank_set_mel_coeffs_slaney(fb, samplerate); bands = new_fvec(40); energies = bands->data; if (pv && fb) { ofLogNotice() << "created ofxAubioMelBands(" << method << ", " << buf_size << ", " << hop_size << ", " << samplerate << ")"; } }
int main (void) { /* allocate some memory */ uint_t win_s = 1024; /* window size */ uint_t n_filters = 13; /* number of filters */ cvec_t *in = new_cvec (win_s); /* input buffer */ fvec_t *out = new_fvec (win_s); /* input buffer */ fmat_t *coeffs = NULL; /* allocate fft and other memory space */ aubio_filterbank_t *o = new_aubio_filterbank (n_filters, win_s); coeffs = aubio_filterbank_get_coeffs (o); if (coeffs == NULL) { return -1; } /* if (fvec_max (coeffs) != 0.) { return -1; } if (fvec_min (coeffs) != 0.) { return -1; } */ fmat_print (coeffs); aubio_filterbank_do (o, in, out); del_aubio_filterbank (o); del_cvec (in); del_fvec (out); aubio_cleanup (); return 0; }
aubio_mfcc_t * new_aubio_mfcc (uint_t win_s, uint_t n_filters, uint_t n_coefs, uint_t samplerate) { /* allocate space for mfcc object */ aubio_mfcc_t *mfcc = AUBIO_NEW (aubio_mfcc_t); uint_t i, j; mfcc->win_s = win_s; mfcc->samplerate = samplerate; mfcc->n_filters = n_filters; mfcc->n_coefs = n_coefs; /* filterbank allocation */ mfcc->fb = new_aubio_filterbank (n_filters, mfcc->win_s); aubio_filterbank_set_mel_coeffs_slaney (mfcc->fb, samplerate); /* allocating buffers */ mfcc->in_dct = new_fvec (n_filters); mfcc->dct_coeffs = new_fmat (n_coefs, n_filters); /* compute DCT transform dct_coeffs[i][j] as cos ( j * (i+.5) * PI / n_filters ) */ smpl_t scaling = 1. / SQRT (n_filters / 2.); for (i = 0; i < n_filters; i++) { for (j = 0; j < n_coefs; j++) { mfcc->dct_coeffs->data[i][j] = scaling * COS (j * (i + 0.5) * PI / n_filters); } mfcc->dct_coeffs->data[i][0] *= SQRT (2.) / 2.; } return mfcc; };
int main () { uint_t win_s = 1024; // window size uint_t n_filters = 13; // number of filters cvec_t *in_spec = new_cvec (win_s); // input vector of samples fvec_t *out_filters = new_fvec (n_filters); // per-band outputs // create filterbank object aubio_filterbank_t *o = new_aubio_filterbank (n_filters, win_s); // apply filterbank ten times uint_t n = 10; while (n) { aubio_filterbank_do (o, in_spec, out_filters); n--; } // print out filterbank coeffs fmat_t *coeffs; // pointer to the coefficients coeffs = aubio_filterbank_get_coeffs (o); fmat_print (coeffs); aubio_filterbank_set_coeffs (o, coeffs); coeffs = aubio_filterbank_get_coeffs (o); fmat_print (coeffs); //fvec_print (out_filters); // clean up del_aubio_filterbank (o); del_cvec (in_spec); del_fvec (out_filters); aubio_cleanup (); return 0; }
int main (void) { uint_t samplerate = 16000; // samplerate of signal to filter uint_t win_s = 512; // fft size uint_t n_filters = 40; // number of filters cvec_t *in_spec = new_cvec (win_s); // input vector of samples fvec_t *out_filters = new_fvec (n_filters); // per-band outputs // create filterbank object aubio_filterbank_t *o = new_aubio_filterbank (n_filters, win_s); // assign Mel-frequency coefficients aubio_filterbank_set_mel_coeffs_slaney (o, samplerate); // apply filterbank ten times uint_t n = 10; while (n) { aubio_filterbank_do (o, in_spec, out_filters); n--; } // print out filter coefficients fmat_t *coeffs; // pointer to the coefficients coeffs = aubio_filterbank_get_coeffs (o); fmat_print (coeffs); //fvec_print (out_filters); del_aubio_filterbank (o); del_cvec (in_spec); del_fvec (out_filters); aubio_cleanup (); return 0; }