int main () { uint_t win_s = 512; // fft size uint_t n_filters = 40; // number of filters uint_t n_coefs = 13; // number of coefficients smpl_t samplerate = 16000.; // samplerate cvec_t *in = new_cvec (win_s); // input buffer fvec_t *out = new_fvec (n_coefs); // output coefficients // create mfcc object aubio_mfcc_t *o = new_aubio_mfcc (win_s, n_filters, n_coefs, samplerate); cvec_set_all_norm (in, 1.); aubio_mfcc_do (o, in, out); fvec_print (out); cvec_set_all_norm (in, .5); aubio_mfcc_do (o, in, out); fvec_print (out); // clean up del_aubio_mfcc (o); del_cvec (in); del_fvec (out); aubio_cleanup (); return 0; }
static int aubio_process(smpl_t **input, smpl_t **output, int nframes) { unsigned int j; /*frames*/ for (j=0;j<(unsigned)nframes;j++) { if(usejack) { /* write input to datanew */ fvec_write_sample(ibuf, input[0][j], pos); /* put synthnew in output */ output[0][j] = fvec_read_sample(obuf, pos); } /*time for fft*/ if (pos == overlap_size-1) { /* block loop */ //compute mag spectrum aubio_pvoc_do (pv, ibuf, fftgrain); //compute mfccs aubio_mfcc_do(mfcc, fftgrain, mfcc_out); /* end of block loop */ pos = -1; /* so it will be zero next j loop */ } pos++; } return 1; }
void process_block (fvec_t *ibuf, fvec_t *obuf) { fvec_zeros(obuf); //compute mag spectrum aubio_pvoc_do (pv, ibuf, fftgrain); //compute mfccs aubio_mfcc_do(mfcc, fftgrain, mfcc_out); }
int main (int argc, char** argv) { sint_t err = 0; if (argc < 2) { err = 2; PRINT_WRN("no arguments, running tests\n"); err = test_wrong_params(); PRINT_MSG("usage: %s <input_path> [samplerate] [hop_size]\n", argv[0]); return err; } uint_t win_s; // fft size uint_t hop_s = 256; // block size uint_t samplerate = 0; // samplerate uint_t n_filters = 40; // number of filters uint_t n_coeffs = 13; // number of coefficients uint_t read = 0; char_t *source_path = argv[1]; if ( argc >= 3 ) samplerate = atoi(argv[2]); if ( argc >= 4 ) hop_s = atoi(argv[3]); win_s = 2 * hop_s; aubio_source_t *source = 0; aubio_pvoc_t *pv = 0; aubio_mfcc_t *mfcc = 0; fvec_t *in = new_fvec (hop_s); // phase vocoder input cvec_t *fftgrain = new_cvec (win_s); // pvoc output / mfcc input fvec_t *out = new_fvec (n_coeffs); // mfcc output if (!in || !fftgrain || !out) { err = 1; goto failure; } // source source = new_aubio_source(source_path, samplerate, hop_s); if (!source) { err = 1; goto failure; } if (samplerate == 0) samplerate = aubio_source_get_samplerate(source); // phase vocoder pv = new_aubio_pvoc(win_s, hop_s); if (!pv) { err = 1; goto failure; } // mfcc object mfcc = new_aubio_mfcc (win_s, n_filters, n_coeffs, samplerate); if (!mfcc) { err = 1; goto failure; } // processing loop do { aubio_source_do(source, in, &read); aubio_pvoc_do(pv, in, fftgrain); aubio_mfcc_do(mfcc, fftgrain, out); fvec_print(out); } while (read == hop_s); failure: if (mfcc) del_aubio_mfcc(mfcc); if (pv) del_aubio_pvoc(pv); if (source) del_aubio_source(source); if (in) del_fvec(in); if (fftgrain) del_cvec(fftgrain); if (out) del_fvec(out); aubio_cleanup(); return err; }