tests/src/spectral/: improve examples
authorPaul Brossier <piem@piem.org>
Sun, 3 Mar 2013 18:37:43 +0000 (13:37 -0500)
committerPaul Brossier <piem@piem.org>
Sun, 3 Mar 2013 18:37:43 +0000 (13:37 -0500)
tests/src/spectral/test-fft.c
tests/src/spectral/test-filterbank.c
tests/src/spectral/test-filterbank_mel.c
tests/src/spectral/test-mfcc.c
tests/src/spectral/test-phasevoc-jack.c
tests/src/spectral/test-phasevoc.c
tests/src/spectral/test-specdesc.c
tests/src/spectral/test-tss.c

index a17b977863a68be738469b8d78ddb3e1bbf0b404..101c406541db52807b79ec6e4c13b45c5cf8d4a0 100644 (file)
@@ -1,34 +1,38 @@
-
 #include <aubio.h>
 
-int main(){
-        /* allocate some memory */
-        uint_t win_s      = 8;                       /* window size        */
-        fvec_t * in       = new_fvec (win_s); /* input buffer       */
-        cvec_t * fftgrain = new_cvec (win_s); /* fft norm and phase */
-        fvec_t * out      = new_fvec (win_s); /* output buffer      */
-        in->data[0] = 1;
-        in->data[1] = 2;
-        in->data[2] = 3;
-        in->data[3] = 4;
-        in->data[4] = 5;
-        in->data[5] = 6;
-        in->data[6] = 5;
-        in->data[7] = 6;
-        /* allocate fft and other memory space */
-        aubio_fft_t * fft = new_aubio_fft(win_s);
-        /* fill input with some data */
-        fvec_print(in);
-        /* execute stft */
-        aubio_fft_do (fft,in,fftgrain);
-        cvec_print(fftgrain);
-        /* execute inverse fourier transform */
-        aubio_fft_rdo(fft,fftgrain,out);
-        fvec_print(out);
-        del_aubio_fft(fft);
-        del_fvec(in);
-        del_cvec(fftgrain);
-        del_fvec(out);
-        aubio_cleanup();
-        return 0;
+int main ()
+{
+  uint_t win_s = 8; // window size
+  fvec_t * in = new_fvec (win_s); // input buffer
+  cvec_t * fftgrain = new_cvec (win_s); // fft norm and phase
+  fvec_t * out = new_fvec (win_s); // output buffer
+  // create fft object
+  aubio_fft_t * fft = new_aubio_fft(win_s);
+
+  // fill input with some data
+  in->data[0] = 1;
+  in->data[1] = 2;
+  in->data[2] = 3;
+  in->data[3] = 4;
+  in->data[4] = 5;
+  in->data[5] = 6;
+  in->data[6] = 5;
+  in->data[7] = 6;
+  fvec_print(in);
+
+  // execute stft
+  aubio_fft_do (fft,in,fftgrain);
+  cvec_print(fftgrain);
+
+  // execute inverse fourier transform
+  aubio_fft_rdo(fft,fftgrain,out);
+
+  // cleam up
+  fvec_print(out);
+  del_aubio_fft(fft);
+  del_fvec(in);
+  del_cvec(fftgrain);
+  del_fvec(out);
+  aubio_cleanup();
+  return 0;
 }
index 9b1db722ea77cbbb38f27479306d2f671b7e1bae..679e6cded6828cc59dc963bd4c6578e1c24b4a1e 100644 (file)
@@ -1,40 +1,28 @@
-#define AUBIO_UNSTABLE 1
-
-#include <stdio.h>
 #include <aubio.h>
 
-int main (void) {
+int main ()
+{
   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); // vector output */
-  fmat_t *coeffs = NULL;
 
-  // create filterbank
+  cvec_t *in_spec = new_cvec (win_s); // input vector of samples
+  fvec_t *out_filters = new_fvec (n_filters); // per-band outputs
+  fmat_t *coeffs; // pointer to the coefficients
+
+  // create filterbank object
   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_spec, out_filters);
 
-  aubio_filterbank_do (o, in, out);
+  // fmat_print (coeffs);
+  // cvec_print(in_spec);
+  // fvec_print(out_filters);
 
   del_aubio_filterbank (o);
-  del_cvec (in);
-  del_fvec (out);
+  del_cvec (in_spec);
+  del_fvec (out_filters);
   aubio_cleanup ();
 
   return 0;
index 1d0caf097f6503b13a9a9b380b679e94dd0a2b9e..89f6e774ac685179fc189ae8e93ee7eeb642c50a 100644 (file)
@@ -1,35 +1,28 @@
-#define AUBIO_UNSTABLE 1
-
-#include <stdio.h>
 #include <aubio.h>
 
-int
-main (void)
+int main ()
 {
-  /* allocate some memory */
+  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 buffer */
-  fvec_t *out_filters = new_fvec (n_filters); // output coeffs */
-  fmat_t *coeffs = NULL;
-  smpl_t samplerate = 16000.;
 
-  /* allocate fft and other memory space */
+  cvec_t *in_spec = new_cvec (win_s); // input vector of samples
+  fvec_t *out_filters = new_fvec (n_filters); // per-band outputs
+  fmat_t *coeffs; // pointer to the coefficients
+
+  // create filterbank object
   aubio_filterbank_t *o = new_aubio_filterbank (n_filters, win_s);
 
-  /* assign Mel-frequency coefficients */
+  // assign Mel-frequency coefficients
   aubio_filterbank_set_mel_coeffs_slaney (o, samplerate);
 
   coeffs = aubio_filterbank_get_coeffs (o);
 
-  fmat_print (coeffs);
-
-  //fprintf(stderr, "%f\n", fvec_sum(coeffs));
-
   aubio_filterbank_do (o, in_spec, out_filters);
 
-  fvec_print(in_spec);
-  fvec_print(out_filters);
+  // fmat_print (coeffs);
+  // cvec_print(in_spec);
+  // fvec_print(out_filters);
 
   del_aubio_filterbank (o);
   del_cvec (in_spec);
index c724d1049878c3cf9e0fe5ad2e1da46bd36a079d..2584ec6e76572f1843a59a306023e4e907913aa5 100644 (file)
@@ -1,26 +1,26 @@
 #include <aubio.h>
 
-int
-main (void)
+int main ()
 {
-  /* allocate some memory */
-  uint_t win_s = 512;           /* fft size */
-  uint_t n_filters = 40;        /* number of filters */
-  uint_t n_coefs = 13;          /* number of coefficients */
-  cvec_t *in = new_cvec (win_s);      /* input buffer */
-  fvec_t *out = new_fvec (n_coefs);     /* input buffer */
-  smpl_t samplerate = 16000.;
+  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
 
-  /* allocate fft and other memory space */
+  // create mfcc object
   aubio_mfcc_t *o = new_aubio_mfcc (win_s, n_filters, n_coefs, samplerate);
 
   cvec_set (in, 1.);
-
   aubio_mfcc_do (o, in, out);
   fvec_print (out);
+
+  cvec_set (in, .5);
   aubio_mfcc_do (o, in, out);
   fvec_print (out);
 
+  // clean up
   del_aubio_mfcc (o);
   del_cvec (in);
   del_fvec (out);
index d1b8f1959352abdf620c99a6fcde8fda81bfe18a..3528e1390799542359771d0b99736ba9d391ce68 100644 (file)
 #include "jackio.h"
 #endif /* HAVE_JACK */
 
-uint_t testing  = 0;  /* change this to 1 to listen        */
+uint_t testing  = 0;  // change this to 1 to listen
 
-uint_t win_s    = 512;/* window size                       */
-uint_t hop_s    = 128;/* hop size                          */
-uint_t channels = 2;  /* number of audio channels          */
-uint_t midiin   = 4;  /* number of midi input channels     */
-uint_t midiout  = 2;  /* number of midi output channels    */
-uint_t pos      = 0;  /* frames%dspblocksize for jack loop */
+uint_t win_s    = 512; // window size
+uint_t hop_s    = 128; // hop size
+uint_t channels = 2; // number of audio channels
+uint_t midiin   = 4; // number of midi input channels
+uint_t midiout  = 2; // number of midi output channels
+uint_t pos      = 0; // frames%dspblocksize for jack loop
 
 fvec_t * in[2];
 cvec_t * fftgrain[2];
@@ -31,40 +31,41 @@ aubio_pvoc_t * pv[2];
 
 int aubio_process(float **input, float **output, int nframes);
 
-int main(){
-        /* allocate some memory */
+int main ()
+{
+  /* allocate some memory */
   uint_t i;
-    for (i=0;i<channels;i++) {
-        in[i]       = new_fvec (hop_s); /* input buffer       */
-        fftgrain[i] = new_cvec (win_s); /* fft norm and phase */
-        out[i]      = new_fvec (hop_s); /* output buffer      */
-        /* allocate fft and other memory space */
-        pv[i] = new_aubio_pvoc(win_s,hop_s);
-    }
+  for (i=0;i<channels;i++) {
+    in[i]       = new_fvec (hop_s); /* input buffer       */
+    fftgrain[i] = new_cvec (win_s); /* fft norm and phase */
+    out[i]      = new_fvec (hop_s); /* output buffer      */
+    /* allocate fft and other memory space */
+    pv[i] = new_aubio_pvoc(win_s,hop_s);
+  }
 
 #ifdef HAVE_JACK
-        aubio_jack_t * jack_setup;
-        jack_setup  = new_aubio_jack(channels, channels, 
-            midiin, midiout,
-            (aubio_process_func_t)aubio_process);
-        aubio_jack_activate(jack_setup);
-        /* stay in main jack loop for 1 seconds only */
-        do {
-          sleep(1);
-        } while(testing);
-        aubio_jack_close(jack_setup);
+  aubio_jack_t * jack_setup;
+  jack_setup  = new_aubio_jack(channels, channels, 
+      midiin, midiout,
+      (aubio_process_func_t)aubio_process);
+  aubio_jack_activate(jack_setup);
+  /* stay in main jack loop for 1 seconds only */
+  do {
+    sleep(1);
+  } while(testing);
+  aubio_jack_close(jack_setup);
 #else
-        fprintf(stderr, "WARNING: no jack support\n");
+  fprintf(stderr, "WARNING: no jack support\n");
 #endif
-        
-    for (i=0;i<channels;i++) {
-        del_aubio_pvoc(pv[i]);
-        del_cvec(fftgrain[i]);
-        del_fvec(in[i]);
-        del_fvec(out[i]);
-    }
-        aubio_cleanup();
-        return 0;
+
+  for (i=0;i<channels;i++) {
+    del_aubio_pvoc(pv[i]);
+    del_cvec(fftgrain[i]);
+    del_fvec(in[i]);
+    del_fvec(out[i]);
+  }
+  aubio_cleanup();
+  return 0;
 }
 
 int aubio_process(float **input, float **output, int nframes) {
@@ -80,19 +81,19 @@ int aubio_process(float **input, float **output, int nframes) {
     /*time for fft*/
     if (pos == hop_s-1) {
       /* block loop */
-    for (i=0;i<channels;i++) {
-      aubio_pvoc_do (pv[i], in[i], fftgrain[i]);
-      // zero phases of first channel
-      for (i=0;i<fftgrain[i]->length;i++) fftgrain[0]->phas[i] = 0.; 
-      // double phases of second channel
-      for (i=0;i<fftgrain[i]->length;i++) {
-        fftgrain[1]->phas[i] = 
-          aubio_unwrap2pi (fftgrain[1]->phas[i] * 2.); 
+      for (i=0;i<channels;i++) {
+        aubio_pvoc_do (pv[i], in[i], fftgrain[i]);
+        // zero phases of first channel
+        for (i=0;i<fftgrain[i]->length;i++) fftgrain[0]->phas[i] = 0.; 
+        // double phases of second channel
+        for (i=0;i<fftgrain[i]->length;i++) {
+          fftgrain[1]->phas[i] = 
+            aubio_unwrap2pi (fftgrain[1]->phas[i] * 2.); 
+        }
+        // copy second channel to third one
+        aubio_pvoc_rdo(pv[i], fftgrain[i], out[i]);
+        pos = -1;
       }
-      // copy second channel to third one
-      aubio_pvoc_rdo(pv[i], fftgrain[i], out[i]);
-      pos = -1;
-    }
     }
     pos++;
   }
index 6bea4c39c879f1fa6450b4d40917695ee0870ce5..56cd4e4eaa209c89e1f188235d850cb73b4ac5cc 100644 (file)
@@ -1,30 +1,47 @@
-/* test sample for phase vocoder */
-
-#include <stdio.h>
 #include <aubio.h>
 
-int main(){
-        uint_t win_s    = 1024; /* window size                       */
-        uint_t hop_s    = 256;  /* hop size                          */
-        /* allocate some memory */
-        fvec_t * in       = new_fvec (hop_s); /* input buffer       */
-        cvec_t * fftgrain = new_cvec (win_s); /* fft norm and phase */
-        fvec_t * out      = new_fvec (hop_s); /* output buffer      */
-        /* allocate fft and other memory space */
-        aubio_pvoc_t * pv = new_aubio_pvoc(win_s,hop_s);
-        /* fill input with some data */
-        printf("initialised\n");
-        /* execute stft */
-        aubio_pvoc_do (pv,in,fftgrain);
-        printf("computed forward\n");
-        /* execute inverse fourier transform */
-        aubio_pvoc_rdo(pv,fftgrain,out);
-        printf("computed backard\n");
-        del_aubio_pvoc(pv);
-        del_fvec(in);
-        del_cvec(fftgrain);
-        del_fvec(out);
-        aubio_cleanup();
-        printf("memory freed\n");
-        return 0;
+int main ()
+{
+  uint_t n = 6; // compute n times
+  uint_t win_s = 32; // window size
+  uint_t hop_s = win_s / 4; // hop size
+
+  fvec_t * in = new_fvec (hop_s); // input buffer
+  cvec_t * fftgrain = new_cvec (win_s); // fft norm and phase
+  fvec_t * out = new_fvec (hop_s); // output buffer
+
+  // allocate fft and other memory space
+  aubio_pvoc_t * pv = new_aubio_pvoc(win_s,hop_s);
+
+  // fill input with some data
+  fvec_set (in, 1.);
+  fvec_print (in);
+
+  while ( n-- ) {
+    // get some fresh input data
+    // ..
+
+    // execute phase vocoder
+    aubio_pvoc_do (pv,in,fftgrain);
+
+    // do something with fftgrain
+    // ...
+    cvec_print (fftgrain);
+
+    // optionnaly rebuild the signa
+    aubio_pvoc_rdo(pv,fftgrain,out);
+
+    // and do something with the result
+    // ...
+    fvec_print (out);
+  }
+
+  // clean up
+  del_fvec(in);
+  del_cvec(fftgrain);
+  del_fvec(out);
+  del_aubio_pvoc(pv);
+  aubio_cleanup();
+
+  return 0;
 }
index fe1b71b76a8effd658d3f4d2cf17c8bd96ebf2ab..b99ea16a1a2063ca3c3b661e1d59d07e6271c46e 100644 (file)
@@ -1,17 +1,13 @@
-
-#define AUBIO_UNSTABLE 1
-
 #include <aubio.h>
 
-int
-main ()
+int main ()
 {
-  uint_t win_s = 1024;          /* window size */
-  cvec_t *in = new_cvec (win_s);      /* input buffer */
-  fvec_t *out = new_fvec (1); /* input buffer */
+  uint_t win_s = 1024; // window size
+  cvec_t *in = new_cvec (win_s); // input buffer
+  fvec_t *out = new_fvec (1); // output spectral descriptor
 
   aubio_specdesc_t *o;
-  
+
   o = new_aubio_specdesc ("energy", win_s);
   aubio_specdesc_do (o, in, out);
   del_aubio_specdesc (o);
index c0600ec79e4d90170a25206298e1ce33163be2d8..201d35b8d3755031359e2de6cc54f034ad3cd541 100644 (file)
@@ -1,41 +1,37 @@
-/* test sample for phase vocoder 
- *
- * this program should start correctly using JACK_START_SERVER=true and
- * reconstruct each audio input frame perfectly on the corresponding input with
- * a delay equal to the window size, hop_s.
- */
-
-#include <stdio.h>
-#define AUBIO_UNSTABLE 1
 #include <aubio.h>
 
-int main(){
-  int i;
-  uint_t win_s    = 1024; /* window size                       */
-  uint_t hop_s    = 256;  /* hop size                          */
-
-  /* allocate some memory */
-  fvec_t * in       = new_fvec (hop_s); /* input buffer       */
-  cvec_t * fftgrain = new_cvec (win_s); /* fft norm and phase */
-  cvec_t * cstead   = new_cvec (win_s); /* fft norm and phase */
-  cvec_t * ctrans   = new_cvec (win_s); /* fft norm and phase */
-  fvec_t * stead    = new_fvec (hop_s); /* output buffer      */
-  fvec_t * trans    = new_fvec (hop_s); /* output buffer      */
-  /* allocate phase vocoders and transient steady-state separation */
+int main ()
+{
+  uint_t n = 10; // compute n times
+  uint_t win_s = 1024; // window size
+  uint_t hop_s = 256;  // hop size
+
+  // create some vectors
+  fvec_t * in       = new_fvec (hop_s); // input buffer
+  cvec_t * fftgrain = new_cvec (win_s); // fft norm and phase
+  cvec_t * cstead   = new_cvec (win_s); // fft norm and phase
+  cvec_t * ctrans   = new_cvec (win_s); // fft norm and phase
+  fvec_t * stead    = new_fvec (hop_s); // output buffer
+  fvec_t * trans    = new_fvec (hop_s); // output buffer
+
+  // create phase vocoder for analysis of input signal 
   aubio_pvoc_t * pv = new_aubio_pvoc (win_s,hop_s);
+  // create transient/steady-state separation object
+  aubio_tss_t *  tss = new_aubio_tss(win_s,hop_s);
+  // create phase vocoder objects for synthesis of output signals
   aubio_pvoc_t * pvt = new_aubio_pvoc(win_s,hop_s);
   aubio_pvoc_t * pvs = new_aubio_pvoc(win_s,hop_s);
-  aubio_tss_t *  tss = new_aubio_tss(win_s,hop_s);
-
-  /* fill input with some data */
-  printf("initialised\n");
 
   /* execute stft */
-  for (i = 0; i < 10; i++) {
-    aubio_pvoc_do (pv,in,fftgrain);
-    aubio_tss_do  (tss,fftgrain,ctrans,cstead);
-    aubio_pvoc_rdo(pvt,cstead,stead);
-    aubio_pvoc_rdo(pvs,ctrans,trans);
+  while ( n-- ) {
+    // fftgrain = pv(in)
+    aubio_pvoc_do (pv, in, fftgrain);
+    // ctrans, cstead = tss (fftgrain)
+    aubio_tss_do (tss, fftgrain, ctrans, cstead);
+    // stead = pvt_inverse (cstead)
+    // trans = pvt_inverse (ctrans)
+    aubio_pvoc_rdo (pvt, cstead, stead);
+    aubio_pvoc_rdo (pvs, ctrans, trans);
   }
 
   del_aubio_pvoc(pv);
@@ -49,7 +45,8 @@ int main(){
   del_cvec(ctrans);
   del_fvec(stead);
   del_fvec(trans);
+
   aubio_cleanup();
-  printf("memory freed\n");
+
   return 0;
 }