examples/aubiopitch.c: added c version of aubiopitch, more renaming
authorPaul Brossier <piem@piem.org>
Mon, 19 Oct 2009 08:59:32 +0000 (10:59 +0200)
committerPaul Brossier <piem@piem.org>
Mon, 19 Oct 2009 08:59:32 +0000 (10:59 +0200)
examples/aubionotes.c
examples/aubiopitch.c [new file with mode: 0644]
tests/python/src/pitch/pitchdetection.py

index 75983462ca07c7134addfd22c40e4528d2b7df9f..676985aaab705df10f6f1864b4162709992a5342 100644 (file)
@@ -24,7 +24,7 @@ smpl_t pitch = 0.;
 uint_t median = 6;
 smpl_t curlevel = 0.;
 
-aubio_pitchdetection_t *pitchdet;
+aubio_pitch_t *pitchdet;
 
 fvec_t *note_buffer = NULL;
 fvec_t *note_buffer2 = NULL;
@@ -34,7 +34,7 @@ smpl_t newnote = 0.;
 uint_t isready = 0;
 unsigned int pos = 0; /*frames%dspblocksize*/
 
-aubio_pitchdetection_t *pitchdet;
+aubio_pitch_t *pitchdet;
 aubio_onset_t *o;
 fvec_t *onset;
 fvec_t *pitch_obuf;
@@ -61,7 +61,7 @@ static int aubio_process(smpl_t **input, smpl_t **output, int nframes) {
       /* block loop */
       aubio_onset_do(o, ibuf, onset);
       
-      aubio_pitchdetection_do (pitchdet, ibuf, pitch_obuf);
+      aubio_pitch_do (pitchdet, ibuf, pitch_obuf);
       pitch = fvec_read_sample(pitch_obuf, 0, 0);
       if(median){
               note_append(note_buffer, pitch);
@@ -149,9 +149,9 @@ int main(int argc, char **argv) {
           samplerate);
   onset = new_fvec (1, channels);
 
-  pitchdet = new_aubio_pitchdetection (pitch_mode, buffer_size * 4,
+  pitchdet = new_aubio_pitch (pitch_mode, buffer_size * 4,
           overlap_size, channels, samplerate);
-  aubio_pitchdetection_set_tolerance (pitchdet, 0.7);
+  aubio_pitch_set_tolerance (pitchdet, 0.7);
   pitch_obuf = new_fvec (1, channels);
   if (median) {
       note_buffer = new_fvec (median, 1);
@@ -161,7 +161,7 @@ int main(int argc, char **argv) {
   examples_common_process(aubio_process, process_print);
 
   send_noteon (curnote, 0);
-  del_aubio_pitchdetection (pitchdet);
+  del_aubio_pitch (pitchdet);
   if (median) {
       del_fvec (note_buffer);
       del_fvec (note_buffer2);
diff --git a/examples/aubiopitch.c b/examples/aubiopitch.c
new file mode 100644 (file)
index 0000000..c362c01
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "utils.h"
+
+unsigned int pos = 0; /*frames%dspblocksize*/
+
+aubio_pitch_t *o;
+fvec_t *pitch;
+
+static int aubio_process(smpl_t **input, smpl_t **output, int nframes) {
+  unsigned int i;       /*channels*/
+  unsigned int j;       /*frames*/
+  for (j=0;j<(unsigned)nframes;j++) {
+    if(usejack) {
+      for (i=0;i<channels;i++) {
+        /* write input to datanew */
+        fvec_write_sample(ibuf, input[i][j], i, pos);
+        /* put synthnew in output */
+        output[i][j] = fvec_read_sample(obuf, i, pos);
+      }
+    }
+    /*time for fft*/
+    if (pos == overlap_size-1) {         
+      /* block loop */
+      aubio_pitch_do (o, ibuf, pitch);
+      if (fvec_read_sample(pitch, 0, 0)) {
+        for (pos = 0; pos < overlap_size; pos++){
+          obuf->data[0][pos] = woodblock->data[0][pos];
+        }
+      } else {
+        for (pos = 0; pos < overlap_size; pos++) {
+          obuf->data[0][pos] = 0.;
+        }
+      }
+      /* end of block loop */
+      pos = -1; /* so it will be zero next j loop */
+    }
+    pos++;
+  }
+  return 1;
+}
+
+static void process_print (void) {
+      if (!verbose && usejack) return;
+      smpl_t pitch_found = fvec_read_sample(pitch, 0, 0);
+      outmsg("%f %f\n",(frames) 
+              *overlap_size/(float)samplerate, pitch_found);
+}
+
+int main(int argc, char **argv) {
+  examples_common_init(argc,argv);
+
+  o = new_aubio_pitch (onset_mode, buffer_size, overlap_size, channels,
+          samplerate);
+  pitch = new_fvec (1, channels);
+
+  examples_common_process(aubio_process,process_print);
+
+  del_aubio_pitch (o);
+  del_fvec (pitch);
+
+  examples_common_del();
+  debug("End of program.\n");
+  fflush(stderr);
+  return 0;
+}
+
index 7372ea01964f57f1b2b6c7d90bdac018d131635d..da98a73401ba4e2a31788d334c9b0d5a147fd21b 100644 (file)
@@ -94,19 +94,19 @@ class pitch_test_case(unittest.TestCase):
     del vec
 
 """
-class pitch_yin_test_case(pitchdetection_test_case):
+class pitch_yin_test_case(pitch_test_case):
   def setUp(self, type = aubio_pitch_yin):
     self.create(type=type)
 
-class pitch_fcomb_test_case(pitchdetection_test_case):
+class pitch_fcomb_test_case(pitch_test_case):
   def setUp(self, type = aubio_pitch_fcomb):
     self.create(type=type)
 
-class pitch_mcomb_test_case(pitchdetection_test_case):
+class pitch_mcomb_test_case(pitch_test_case):
   def setUp(self, type = aubio_pitch_mcomb):
     self.create(type=type)
 
-class pitch_schmitt_test_case(pitchdetection_test_case):
+class pitch_schmitt_test_case(pitch_test_case):
   def setUp(self, type = aubio_pitch_schmitt):
     self.create(type=type)
 """