Ignore:
Timestamp:
Dec 7, 2013, 4:09:00 AM (7 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/constantq, feature/pitchshift, feature/pydocstrings, feature/timestretch, master, pitchshift, sampler, timestretch, yinfft+
Children:
3da8187
Parents:
44e94f3c
Message:

examples/: large refactoring, improve option management, remove old stuff, move blocking logic to jackio

File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/aubiomfcc.c

    r44e94f3c r466dff3  
    11/*
    2   Copyright (C) 2007-2009 Paul Brossier <piem@aubio.org>
     2  Copyright (C) 2007-2013 Paul Brossier <piem@aubio.org>
    33
    44  This file is part of aubio.
     
    2222#include "parse_args.h"
    2323
    24 /* mfcc objects */
    25 fvec_t * mfcc_out;
    26 aubio_mfcc_t * mfcc;
    27 aubio_pvoc_t *pv;
    28 cvec_t *fftgrain;
     24aubio_pvoc_t *pv;    // a phase vocoder
     25cvec_t *fftgrain;    // outputs a spectrum
     26aubio_mfcc_t * mfcc; // which the mfcc will process
     27fvec_t * mfcc_out;   // to get the output coefficients
    2928
    3029uint_t n_filters = 40;
    3130uint_t n_coefs = 13;
    3231
    33 unsigned int pos = 0; /*frames%dspblocksize*/
    34 
    35 static int aubio_process(smpl_t **input, smpl_t **output, int nframes) {
    36   unsigned int j;       /*frames*/
    37  
    38   for (j=0;j<(unsigned)nframes;j++) {
    39     if(usejack) {
    40       /* write input to datanew */
    41       fvec_write_sample(ibuf, input[0][j], pos);
    42       /* put synthnew in output */
    43       output[0][j] = fvec_read_sample(obuf, pos);
    44     }
    45     /*time for fft*/
    46     if (pos == overlap_size-1) {         
    47       /* block loop */
    48      
    49       //compute mag spectrum
    50       aubio_pvoc_do (pv, ibuf, fftgrain);
    51      
    52       //compute mfccs
    53       aubio_mfcc_do(mfcc, fftgrain, mfcc_out);
    54      
    55       /* end of block loop */
    56       pos = -1; /* so it will be zero next j loop */
    57     }
    58     pos++;
    59   }
    60   return 1;
     32static void
     33process_block(fvec_t *ibuf, fvec_t *obuf) {
     34  fvec_zeros(obuf);
     35  //compute mag spectrum
     36  aubio_pvoc_do (pv, ibuf, fftgrain);
     37  //compute mfccs
     38  aubio_mfcc_do(mfcc, fftgrain, mfcc_out);
    6139}
    6240
    6341static void process_print (void) {
    6442  /* output times in seconds and extracted mfccs */
    65   if (sink_uri == NULL) {
    66     outmsg("%f\t",frames*overlap_size/(float)samplerate);
    67     fvec_print(mfcc_out);
    68   }
     43  outmsg("%f\t",blocks*hop_size/(float)samplerate);
     44  fvec_print(mfcc_out);
    6945}
    7046
    7147int main(int argc, char **argv) {
    72   // params
     48  // change some default params
    7349  buffer_size  = 512;
    74   overlap_size = 256;
    75  
     50  hop_size = 256;
     51
    7652  examples_common_init(argc,argv);
    7753
    78   /* phase vocoder */
    79   pv = new_aubio_pvoc (buffer_size, overlap_size);
     54  verbmsg ("using source: %s at %dHz\n", source_uri, samplerate);
     55  verbmsg ("buffer_size: %d, ", buffer_size);
     56  verbmsg ("hop_size: %d\n", hop_size);
    8057
     58  pv = new_aubio_pvoc (buffer_size, hop_size);
    8159  fftgrain = new_cvec (buffer_size);
     60  mfcc = new_aubio_mfcc(buffer_size, n_filters, n_coefs, samplerate);
     61  mfcc_out = new_fvec(n_coefs);
    8262
    83   //populating the filter
    84   mfcc = new_aubio_mfcc(buffer_size, n_filters, n_coefs, samplerate);
    85  
    86   mfcc_out = new_fvec(n_coefs);
    87  
    88   //process
    89   examples_common_process(aubio_process,process_print);
    90  
    91   //destroying mfcc
     63  examples_common_process((aubio_process_func_t)process_block, process_print);
     64
    9265  del_aubio_pvoc (pv);
    9366  del_cvec (fftgrain);
     
    9669
    9770  examples_common_del();
    98   debug("End of program.\n");
    99   fflush(stderr);
    100  
    10171  return 0;
    10272}
Note: See TracChangeset for help on using the changeset viewer.