- Timestamp:
- Jul 1, 2016, 3:27:47 PM (8 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
- Children:
- dd18484
- Parents:
- 4b9443c4
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
examples/aubionotes.c
r4b9443c4 rba303e8 19 19 */ 20 20 21 #define AUBIO_UNSTABLE 1 // for fvec_median22 21 #include "utils.h" 23 22 #define PROG_HAS_PITCH 1 … … 27 26 #include "parse_args.h" 28 27 29 uint_t median = 6; 30 31 fvec_t *note_buffer; 32 fvec_t *note_buffer2; 33 34 smpl_t curnote = 0.; 35 smpl_t newnote = 0.; 36 uint_t isready = 0; 37 38 aubio_pitch_t *pitch; 39 aubio_onset_t *o; 40 fvec_t *onset; 41 fvec_t *pitch_obuf; 42 43 /** append new note candidate to the note_buffer and return filtered value. we 44 * need to copy the input array as fvec_median destroy its input data.*/ 45 void note_append (fvec_t * note_buffer, smpl_t curnote); 46 uint_t get_note (fvec_t * note_buffer, fvec_t * note_buffer2); 28 aubio_notes_t *notes; 29 uint_t lastnote = 0; 47 30 48 31 void process_block (fvec_t *ibuf, fvec_t *obuf) 49 32 { 50 smpl_t new_pitch, curlevel; 51 fvec_zeros(obuf); 52 aubio_onset_do(o, ibuf, onset); 53 54 aubio_pitch_do (pitch, ibuf, pitch_obuf); 55 new_pitch = fvec_get_sample(pitch_obuf, 0); 56 if(median){ 57 note_append(note_buffer, new_pitch); 33 aubio_notes_do (notes, ibuf, obuf); 34 // did we get a note off? 35 if (obuf->data[2] != 0) { 36 send_noteon(obuf->data[2], 0); 58 37 } 59 60 /* curlevel is negatif or 1 if silence */ 61 curlevel = aubio_level_detection(ibuf, silence_threshold); 62 if (fvec_get_sample(onset, 0)) { 63 /* test for silence */ 64 if (curlevel == 1.) { 65 if (median) isready = 0; 66 /* send note off */ 67 send_noteon(curnote,0); 68 } else { 69 if (median) { 70 isready = 1; 71 } else { 72 /* kill old note */ 73 send_noteon(curnote,0); 74 /* get and send new one */ 75 send_noteon(new_pitch,127+(int)floor(curlevel)); 76 curnote = new_pitch; 77 } 78 } 79 } else { 80 if (median) { 81 if (isready > 0) 82 isready++; 83 if (isready == median) 84 { 85 /* kill old note */ 86 send_noteon(curnote,0); 87 newnote = get_note(note_buffer, note_buffer2); 88 curnote = newnote; 89 /* get and send new one */ 90 if (curnote>45){ 91 send_noteon(curnote,127+(int)floor(curlevel)); 92 } 93 } 94 } // if median 38 // did we get a note on? 39 if (obuf->data[0] != 0) { 40 send_noteon(obuf->data[0], obuf->data[1]); 41 lastnote = (uint_t) floor(obuf->data[0]); 95 42 } 96 43 } … … 99 46 { 100 47 //if (verbose) outmsg("%f\n",pitch_obuf->data[0]); 101 }102 103 void104 note_append (fvec_t * note_buffer, smpl_t curnote)105 {106 uint_t i = 0;107 for (i = 0; i < note_buffer->length - 1; i++) {108 note_buffer->data[i] = note_buffer->data[i + 1];109 }110 note_buffer->data[note_buffer->length - 1] = curnote;111 return;112 }113 114 uint_t115 get_note (fvec_t * note_buffer, fvec_t * note_buffer2)116 {117 uint_t i;118 for (i = 0; i < note_buffer->length; i++) {119 note_buffer2->data[i] = note_buffer->data[i];120 }121 return fvec_median (note_buffer2);122 48 } 123 49 … … 137 63 verbmsg ("tolerance: %f\n", pitch_tolerance); 138 64 139 o = new_aubio_onset (onset_method, buffer_size, hop_size, samplerate); 140 if (onset_threshold != 0.) aubio_onset_set_threshold (o, onset_threshold); 141 onset = new_fvec (1); 142 143 pitch = new_aubio_pitch (pitch_method, buffer_size * 4, hop_size, samplerate); 144 if (pitch_tolerance != 0.) aubio_pitch_set_tolerance (pitch, pitch_tolerance); 145 pitch_obuf = new_fvec (1); 146 147 if (median) { 148 note_buffer = new_fvec (median); 149 note_buffer2 = new_fvec (median); 150 } 65 notes = new_aubio_notes ("default", buffer_size, hop_size, samplerate); 151 66 152 67 examples_common_process((aubio_process_func_t)process_block, process_print); 153 68 154 69 // send a last note off 155 send_noteon ( curnote, 0);70 send_noteon (lastnote, 0); 156 71 157 del_aubio_pitch (pitch); 158 if (median) { 159 del_fvec (note_buffer); 160 del_fvec (note_buffer2); 161 } 162 del_fvec (pitch_obuf); 72 del_aubio_notes (notes); 163 73 164 74 examples_common_del();
Note: See TracChangeset
for help on using the changeset viewer.