| @@ -22,20 +22,20 @@ · 21 unmodified lines |
| 22 | 22 | #include "fvec.h" |
| 23 | 23 | #include "cvec.h" |
| 24 | 24 | #include "spectral/fft.h" |
| 25 | +#include "spectral/specdesc.h" |
| 25 | 26 | #include "mathutils.h" |
| 26 | 27 | #include "utils/hist.h" |
| 27 | | −#include "onset/onsetdetection.h" |
| 28 | 28 | |
| 29 | 29 | /** Energy based onset detection function |
| 30 | 30 | |
| 31 | 31 | This function calculates the local energy of the input spectral frame. |
| 32 | 32 | |
| 33 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 33 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 34 | 34 | \param fftgrain input spectral frame |
| 35 | 35 | \param onset output onset detection function |
| 36 | 36 | |
| 37 | 37 | */ |
| 38 | | −void aubio_onsetdetection_energy(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 38 | +void aubio_specdesc_energy(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 39 | 39 | /** High Frequency Content onset detection function |
| 40 | 40 | |
| 41 | 41 | This method computes the High Frequency Content (HFC) of the input spectral |
| @@ -44,24 +44,24 @@ void aubio_onsetdetection_energy(aubio_onsetdetection_t *o, cvec_t * fftgrain, f · 2 unmodified lines |
| 44 | 44 | Paul Masri. Computer modeling of Sound for Transformation and Synthesis of |
| 45 | 45 | Musical Signal. PhD dissertation, University of Bristol, UK, 1996. |
| 46 | 46 | |
| 47 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 47 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 48 | 48 | \param fftgrain input spectral frame |
| 49 | 49 | \param onset output onset detection function |
| 50 | 50 | |
| 51 | 51 | */ |
| 52 | | −void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 52 | +void aubio_specdesc_hfc(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 53 | 53 | /** Complex Domain Method onset detection function |
| 54 | 54 | |
| 55 | 55 | Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Complex domain |
| 56 | 56 | onset detection for musical signals. In Proceedings of the Digital Audio |
| 57 | 57 | Effects Conference, DAFx-03, pages 90-93, London, UK, 2003. |
| 58 | 58 | |
| 59 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 59 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 60 | 60 | \param fftgrain input spectral frame |
| 61 | 61 | \param onset output onset detection function |
| 62 | 62 | |
| 63 | 63 | */ |
| 64 | | −void aubio_onsetdetection_complex(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 64 | +void aubio_specdesc_complex(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 65 | 65 | /** Phase Based Method onset detection function |
| 66 | 66 | |
| 67 | 67 | Juan-Pablo Bello, Mike P. Davies, and Mark B. Sandler. Phase-based note onset |
| @@ -69,60 +69,60 @@ void aubio_onsetdetection_complex(aubio_onsetdetection_t *o, cvec_t * fftgrain, · 1 unmodified line |
| 69 | 69 | Conference on Acoustics Speech and Signal Processing, pages 441444, |
| 70 | 70 | Hong-Kong, 2003. |
| 71 | 71 | |
| 72 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 72 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 73 | 73 | \param fftgrain input spectral frame |
| 74 | 74 | \param onset output onset detection function |
| 75 | 75 | |
| 76 | 76 | */ |
| 77 | | −void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 77 | +void aubio_specdesc_phase(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 78 | 78 | /** Spectral difference method onset detection function |
| 79 | 79 | |
| 80 | 80 | Jonhatan Foote and Shingo Uchihashi. The beat spectrum: a new approach to |
| 81 | 81 | rhythm analysis. In IEEE International Conference on Multimedia and Expo |
| 82 | 82 | (ICME 2001), pages 881884, Tokyo, Japan, August 2001. |
| 83 | 83 | |
| 84 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 84 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 85 | 85 | \param fftgrain input spectral frame |
| 86 | 86 | \param onset output onset detection function |
| 87 | 87 | |
| 88 | 88 | */ |
| 89 | | −void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 89 | +void aubio_specdesc_specdiff(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 90 | 90 | /** Kullback-Liebler onset detection function |
| 91 | 91 | |
| 92 | 92 | Stephen Hainsworth and Malcom Macleod. Onset detection in music audio |
| 93 | 93 | signals. In Proceedings of the International Computer Music Conference |
| 94 | 94 | (ICMC), Singapore, 2003. |
| 95 | 95 | |
| 96 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 96 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 97 | 97 | \param fftgrain input spectral frame |
| 98 | 98 | \param onset output onset detection function |
| 99 | 99 | |
| 100 | 100 | */ |
| 101 | | −void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 101 | +void aubio_specdesc_kl(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 102 | 102 | /** Modified Kullback-Liebler onset detection function |
| 103 | 103 | |
| 104 | 104 | Paul Brossier, ``Automatic annotation of musical audio for interactive |
| 105 | 105 | systems'', Chapter 2, Temporal segmentation, PhD thesis, Centre for Digital |
| 106 | 106 | music, Queen Mary University of London, London, UK, 2006. |
| 107 | 107 | |
| 108 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 108 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 109 | 109 | \param fftgrain input spectral frame |
| 110 | 110 | \param onset output onset detection function |
| 111 | 111 | |
| 112 | 112 | */ |
| 113 | | −void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 113 | +void aubio_specdesc_mkl(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 114 | 114 | /** Spectral Flux |
| 115 | 115 | |
| 116 | 116 | Simon Dixon, Onset Detection Revisited, in ``Proceedings of the 9th |
| 117 | 117 | International Conference on Digital Audio Effects'' (DAFx-06), Montreal, |
| 118 | 118 | Canada, 2006. |
| 119 | 119 | |
| 120 | | − \param o onset detection object as returned by new_aubio_onsetdetection() |
| 120 | + \param o onset detection object as returned by new_aubio_specdesc() |
| 121 | 121 | \param fftgrain input spectral frame |
| 122 | 122 | \param onset output onset detection function |
| 123 | 123 | |
| 124 | 124 | */ |
| 125 | | −void aubio_onsetdetection_specflux(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 125 | +void aubio_specdesc_specflux(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset); |
| 126 | 126 | |
| 127 | 127 | /** onsetdetection types */ |
| 128 | 128 | typedef enum { |
| @@ -135,13 +135,13 @@ typedef enum { · 6 unmodified lines |
| 135 | 135 | aubio_onset_mkl, /**< modified Kullback Liebler */ |
| 136 | 136 | aubio_onset_specflux, /**< spectral flux */ |
| 137 | 137 | aubio_onset_default = aubio_onset_hfc, /**< default mode, set to hfc */ |
| 138 | | −} aubio_onsetdetection_type; |
| 138 | +} aubio_specdesc_type; |
| 139 | 139 | |
| 140 | 140 | /** structure to store object state */ |
| 141 | | −struct _aubio_onsetdetection_t { |
| 142 | | − aubio_onsetdetection_type onset_type; /**< onset detection type */ |
| 143 | | − /** Pointer to aubio_onsetdetection_<type> function */ |
| 144 | | − void (*funcpointer)(aubio_onsetdetection_t *o, |
| 141 | +struct _aubio_specdesc_t { |
| 142 | + aubio_specdesc_type onset_type; /**< onset detection type */ |
| 143 | + /** Pointer to aubio_specdesc_<type> function */ |
| 144 | + void (*funcpointer)(aubio_specdesc_t *o, |
| 145 | 145 | cvec_t * fftgrain, fvec_t * onset); |
| 146 | 146 | smpl_t threshold; /**< minimum norm threshold for phase and specdiff */ |
| 147 | 147 | fvec_t *oldmag; /**< previous norm vector */ |
| @@ -153,7 +153,7 @@ struct _aubio_onsetdetection_t { · 5 unmodified lines |
| 153 | 153 | |
| 154 | 154 | |
| 155 | 155 | /* Energy based onset detection function */ |
| 156 | | −void aubio_onsetdetection_energy (aubio_onsetdetection_t *o UNUSED, |
| 156 | +void aubio_specdesc_energy (aubio_specdesc_t *o UNUSED, |
| 157 | 157 | cvec_t * fftgrain, fvec_t * onset) { |
| 158 | 158 | uint_t i,j; |
| 159 | 159 | for (i=0;i<fftgrain->channels;i++) { |
| @@ -165,7 +165,7 @@ void aubio_onsetdetection_energy (aubio_onsetdetection_t *o UNUSED, · 5 unmodified lines |
| 165 | 165 | } |
| 166 | 166 | |
| 167 | 167 | /* High Frequency Content onset detection function */ |
| 168 | | −void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o UNUSED, |
| 168 | +void aubio_specdesc_hfc(aubio_specdesc_t *o UNUSED, |
| 169 | 169 | cvec_t * fftgrain, fvec_t * onset){ |
| 170 | 170 | uint_t i,j; |
| 171 | 171 | for (i=0;i<fftgrain->channels;i++) { |
| @@ -178,7 +178,7 @@ void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o UNUSED, · 6 unmodified lines |
| 178 | 178 | |
| 179 | 179 | |
| 180 | 180 | /* Complex Domain Method onset detection function */ |
| 181 | | −void aubio_onsetdetection_complex (aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset) { |
| 181 | +void aubio_specdesc_complex (aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset) { |
| 182 | 182 | uint_t i, j; |
| 183 | 183 | uint_t nbins = fftgrain->length; |
| 184 | 184 | for (i=0;i<fftgrain->channels; i++) { |
| @@ -203,7 +203,7 @@ void aubio_onsetdetection_complex (aubio_onsetdetection_t *o, cvec_t * fftgrain, · 18 unmodified lines |
| 203 | 203 | |
| 204 | 204 | |
| 205 | 205 | /* Phase Based Method onset detection function */ |
| 206 | | −void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, |
| 206 | +void aubio_specdesc_phase(aubio_specdesc_t *o, |
| 207 | 207 | cvec_t * fftgrain, fvec_t * onset){ |
| 208 | 208 | uint_t i, j; |
| 209 | 209 | uint_t nbins = fftgrain->length; |
| @@ -235,7 +235,7 @@ void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, · 25 unmodified lines |
| 235 | 235 | } |
| 236 | 236 | |
| 237 | 237 | /* Spectral difference method onset detection function */ |
| 238 | | −void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o, |
| 238 | +void aubio_specdesc_specdiff(aubio_specdesc_t *o, |
| 239 | 239 | cvec_t * fftgrain, fvec_t * onset){ |
| 240 | 240 | uint_t i, j; |
| 241 | 241 | uint_t nbins = fftgrain->length; |
| @@ -266,7 +266,7 @@ void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o, · 24 unmodified lines |
| 266 | 266 | /* Kullback Liebler onset detection function |
| 267 | 267 | * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid |
| 268 | 268 | * negative (1.+) and infinite values (+1.e-10) */ |
| 269 | | −void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 269 | +void aubio_specdesc_kl(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 270 | 270 | uint_t i,j; |
| 271 | 271 | for (i=0;i<fftgrain->channels;i++) { |
| 272 | 272 | onset->data[i][0] = 0.; |
| @@ -282,7 +282,7 @@ void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_ · 9 unmodified lines |
| 282 | 282 | /* Modified Kullback Liebler onset detection function |
| 283 | 283 | * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid |
| 284 | 284 | * negative (1.+) and infinite values (+1.e-10) */ |
| 285 | | −void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 285 | +void aubio_specdesc_mkl(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 286 | 286 | uint_t i,j; |
| 287 | 287 | for (i=0;i<fftgrain->channels;i++) { |
| 288 | 288 | onset->data[i][0] = 0.; |
| @@ -295,7 +295,7 @@ void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec · 6 unmodified lines |
| 295 | 295 | } |
| 296 | 296 | |
| 297 | 297 | /* Spectral flux */ |
| 298 | | −void aubio_onsetdetection_specflux(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 298 | +void aubio_specdesc_specflux(aubio_specdesc_t *o, cvec_t * fftgrain, fvec_t * onset){ |
| 299 | 299 | uint_t i, j; |
| 300 | 300 | for (i=0;i<fftgrain->channels;i++) { |
| 301 | 301 | onset->data[i][0] = 0.; |
| @@ -309,7 +309,7 @@ void aubio_onsetdetection_specflux(aubio_onsetdetection_t *o, cvec_t * fftgrain, · 7 unmodified lines |
| 309 | 309 | |
| 310 | 310 | /* Generic function pointing to the choosen one */ |
| 311 | 311 | void |
| 312 | | −aubio_onsetdetection_do (aubio_onsetdetection_t *o, cvec_t * fftgrain, |
| 312 | +aubio_specdesc_do (aubio_specdesc_t *o, cvec_t * fftgrain, |
| 313 | 313 | fvec_t * onset) { |
| 314 | 314 | o->funcpointer(o,fftgrain,onset); |
| 315 | 315 | } |
| @@ -317,12 +317,12 @@ aubio_onsetdetection_do (aubio_onsetdetection_t *o, cvec_t * fftgrain, · 1 unmodified line |
| 317 | 317 | /* Allocate memory for an onset detection |
| 318 | 318 | * depending on the choosen type, allocate memory as needed |
| 319 | 319 | */ |
| 320 | | −aubio_onsetdetection_t * |
| 321 | | −new_aubio_onsetdetection (char_t * onset_mode, |
| 320 | +aubio_specdesc_t * |
| 321 | +new_aubio_specdesc (char_t * onset_mode, |
| 322 | 322 | uint_t size, uint_t channels){ |
| 323 | | − aubio_onsetdetection_t * o = AUBIO_NEW(aubio_onsetdetection_t); |
| 323 | + aubio_specdesc_t * o = AUBIO_NEW(aubio_specdesc_t); |
| 324 | 324 | uint_t rsize = size/2+1; |
| 325 | | − aubio_onsetdetection_type onset_type; |
| 325 | + aubio_specdesc_type onset_type; |
| 326 | 326 | if (strcmp (onset_mode, "energy") == 0) |
| 327 | 327 | onset_type = aubio_onset_energy; |
| 328 | 328 | else if (strcmp (onset_mode, "specdiff") == 0) |
| @@ -388,28 +388,28 @@ new_aubio_onsetdetection (char_t * onset_mode, · 59 unmodified lines |
| 388 | 388 | |
| 389 | 389 | switch(onset_type) { |
| 390 | 390 | case aubio_onset_energy: |
| 391 | | − o->funcpointer = aubio_onsetdetection_energy; |
| 391 | + o->funcpointer = aubio_specdesc_energy; |
| 392 | 392 | break; |
| 393 | 393 | case aubio_onset_hfc: |
| 394 | | − o->funcpointer = aubio_onsetdetection_hfc; |
| 394 | + o->funcpointer = aubio_specdesc_hfc; |
| 395 | 395 | break; |
| 396 | 396 | case aubio_onset_complex: |
| 397 | | − o->funcpointer = aubio_onsetdetection_complex; |
| 397 | + o->funcpointer = aubio_specdesc_complex; |
| 398 | 398 | break; |
| 399 | 399 | case aubio_onset_phase: |
| 400 | | − o->funcpointer = aubio_onsetdetection_phase; |
| 400 | + o->funcpointer = aubio_specdesc_phase; |
| 401 | 401 | break; |
| 402 | 402 | case aubio_onset_specdiff: |
| 403 | | − o->funcpointer = aubio_onsetdetection_specdiff; |
| 403 | + o->funcpointer = aubio_specdesc_specdiff; |
| 404 | 404 | break; |
| 405 | 405 | case aubio_onset_kl: |
| 406 | | − o->funcpointer = aubio_onsetdetection_kl; |
| 406 | + o->funcpointer = aubio_specdesc_kl; |
| 407 | 407 | break; |
| 408 | 408 | case aubio_onset_mkl: |
| 409 | | − o->funcpointer = aubio_onsetdetection_mkl; |
| 409 | + o->funcpointer = aubio_specdesc_mkl; |
| 410 | 410 | break; |
| 411 | 411 | case aubio_onset_specflux: |
| 412 | | − o->funcpointer = aubio_onsetdetection_specflux; |
| 412 | + o->funcpointer = aubio_specdesc_specflux; |
| 413 | 413 | break; |
| 414 | 414 | default: |
| 415 | 415 | break; |
| @@ -418,7 +418,7 @@ new_aubio_onsetdetection (char_t * onset_mode, · 2 unmodified lines |
| 418 | 418 | return o; |
| 419 | 419 | } |
| 420 | 420 | |
| 421 | | −void del_aubio_onsetdetection (aubio_onsetdetection_t *o){ |
| 421 | +void del_aubio_specdesc (aubio_specdesc_t *o){ |
| 422 | 422 | switch(o->onset_type) { |
| 423 | 423 | /* for both energy and hfc, only fftgrain->norm is required */ |
| 424 | 424 | case aubio_onset_energy: |