Changes in / [a24a84e:1239d23]
- Files:
-
- 3 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
examples/aubioonset.c
ra24a84e r1239d23 44 44 aubio_wavetable_stop ( wavetable ); 45 45 } 46 if (mix_input) 46 if (mix_input) { 47 47 aubio_wavetable_do (wavetable, ibuf, obuf); 48 else 48 fvec_clamp(obuf, 1.); 49 } else { 49 50 aubio_wavetable_do (wavetable, obuf, obuf); 51 } 50 52 } 51 53 -
examples/aubiotrack.c
ra24a84e r1239d23 47 47 aubio_wavetable_stop ( wavetable ); 48 48 } 49 if (mix_input) 49 if (mix_input) { 50 50 aubio_wavetable_do (wavetable, ibuf, obuf); 51 else 51 fvec_clamp(obuf, 1.); 52 } else { 52 53 aubio_wavetable_do (wavetable, obuf, obuf); 54 } 53 55 } 54 56 -
python/lib/gen_code.py
ra24a84e r1239d23 184 184 def gen_code(self): 185 185 out = "" 186 out += self.gen_struct() 187 out += self.gen_doc() 188 out += self.gen_new() 189 out += self.gen_init() 190 out += self.gen_del() 191 out += self.gen_do() 192 out += self.gen_memberdef() 193 out += self.gen_set() 194 out += self.gen_get() 195 out += self.gen_methodef() 196 out += self.gen_typeobject() 186 try: 187 out += self.gen_struct() 188 out += self.gen_doc() 189 out += self.gen_new() 190 out += self.gen_init() 191 out += self.gen_del() 192 out += self.gen_do() 193 out += self.gen_memberdef() 194 out += self.gen_set() 195 out += self.gen_get() 196 out += self.gen_methodef() 197 out += self.gen_typeobject() 198 except Exception as e: 199 print ("Failed generating code for", self.shortname) 200 raise 197 201 return out 198 202 -
python/lib/gen_external.py
ra24a84e r1239d23 40 40 #'sampler', 41 41 'audio_unit', 42 'spectral_whitening', 42 43 ] 43 44 -
src/aubio.h
ra24a84e r1239d23 188 188 #include "spectral/mfcc.h" 189 189 #include "spectral/specdesc.h" 190 #include "spectral/awhitening.h" 190 191 #include "spectral/tss.h" 191 192 #include "pitch/pitch.h" -
src/cvec.c
ra24a84e r1239d23 140 140 cvec_phas_zeros(s); 141 141 } 142 143 void cvec_logmag(cvec_t *s, smpl_t lambda) { 144 uint_t j; 145 for (j=0; j< s->length; j++) { 146 s->norm[j] = LOG(lambda * s->norm[j] + 1); 147 } 148 } -
src/cvec.h
ra24a84e r1239d23 231 231 void cvec_zeros(cvec_t *s); 232 232 233 /** take logarithmic magnitude 234 235 \param s input cvec to compress 236 \param lambda value to use for normalisation 237 238 */ 239 void cvec_logmag(cvec_t *s, smpl_t lambda); 240 233 241 #ifdef __cplusplus 234 242 } -
src/mathutils.c
ra24a84e r1239d23 290 290 } 291 291 292 void fvec_push(fvec_t *in, smpl_t new_elem) { 293 uint_t i; 294 for (i = 0; i < in->length - 1; i++) { 295 in->data[i] = in->data[i + 1]; 296 } 297 in->data[in->length - 1] = new_elem; 298 } 299 300 void fvec_clamp(fvec_t *in, smpl_t absmax) { 301 uint_t i; 302 for (i = 0; i < in->length; i++) { 303 if (in->data[i] > 0 && in->data[i] > ABS(absmax)) { 304 in->data[i] = absmax; 305 } else if (in->data[i] < 0 && in->data[i] < -ABS(absmax)) { 306 in->data[i] = -absmax; 307 } 308 } 309 } 310 292 311 smpl_t 293 312 aubio_level_lin (const fvec_t * f) -
src/mathutils.h
ra24a84e r1239d23 117 117 */ 118 118 void fvec_ishift (fvec_t * v); 119 120 /** push a new element to the end of a vector, erasing the first element and 121 * sliding all others 122 123 \param in vector to push to 124 \param new_elem new_element to add at the end of the vector 125 126 In numpy words, this is equivalent to: in = np.concatenate([in, [new_elem]])[1:] 127 128 */ 129 void fvec_push(fvec_t *in, smpl_t new_elem); 119 130 120 131 /** compute the sum of all elements of a vector -
src/musicutils.h
ra24a84e r1239d23 157 157 smpl_t aubio_level_detection (const fvec_t * v, smpl_t threshold); 158 158 159 /** clamp the values of a vector within the range [-abs(max), abs(max)] 160 161 \param in vector to clamp 162 \param absmax maximum value over which input vector elements should be clamped 163 164 */ 165 void fvec_clamp(fvec_t *in, smpl_t absmax); 166 159 167 #ifdef __cplusplus 160 168 } -
src/onset/onset.c
ra24a84e r1239d23 24 24 #include "spectral/specdesc.h" 25 25 #include "spectral/phasevoc.h" 26 #include "spectral/awhitening.h" 26 27 #include "onset/peakpicker.h" 27 28 #include "mathutils.h" 28 29 #include "onset/onset.h" 30 31 void aubio_onset_default_parameters (aubio_onset_t *o, const char_t * method); 29 32 30 33 /** structure to store object state */ … … 43 46 uint_t total_frames; /**< total number of frames processed since the beginning */ 44 47 uint_t last_onset; /**< last detected onset location, in frames */ 48 49 uint_t apply_compression; 50 smpl_t lambda_compression; 51 uint_t apply_adaptive_whitening; 52 aubio_spectral_whitening_t *spectral_whitening; 45 53 }; 46 54 … … 50 58 smpl_t isonset = 0; 51 59 aubio_pvoc_do (o->pv,input, o->fftgrain); 60 /* 61 if (apply_filtering) { 62 } 63 */ 64 if (o->apply_adaptive_whitening) { 65 aubio_spectral_whitening_do(o->spectral_whitening, o->fftgrain); 66 } 67 if (o->apply_compression) { 68 cvec_logmag(o->fftgrain, o->apply_compression); 69 } 52 70 aubio_specdesc_do (o->od, o->fftgrain, o->desc); 53 71 aubio_peakpicker_do(o->pp, o->desc, onset); … … 100 118 } 101 119 120 uint_t aubio_onset_set_adaptive_whitening (aubio_onset_t *o, uint_t apply_adaptive_whitening) 121 { 122 o->apply_adaptive_whitening = apply_adaptive_whitening; 123 return AUBIO_OK; 124 } 125 126 uint_t aubio_onset_get_adaptive_whitening (aubio_onset_t *o) 127 { 128 return o->apply_adaptive_whitening; 129 } 130 102 131 uint_t aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence) { 103 132 o->silence = silence; … … 210 239 o->desc = new_fvec(1); 211 240 212 /* set some default parameter */ 213 aubio_onset_set_threshold (o, 0.3); 214 aubio_onset_set_delay(o, 4.3 * hop_size); 215 aubio_onset_set_minioi_ms(o, 20.); 216 aubio_onset_set_silence(o, -70.); 241 o->spectral_whitening = new_aubio_spectral_whitening(buf_size, hop_size, samplerate); 242 243 aubio_onset_default_parameters (o, onset_mode); 217 244 218 245 /* initialize internal variables */ … … 229 256 } 230 257 258 void aubio_onset_default_parameters (aubio_onset_t * o, const char_t * onset_mode) 259 { 260 /* set some default parameter */ 261 aubio_onset_set_threshold (o, 0.3); 262 aubio_onset_set_delay (o, 4.3 * o->hop_size); 263 aubio_onset_set_minioi_ms (o, 50.); 264 aubio_onset_set_silence (o, -70.); 265 aubio_onset_set_adaptive_whitening (o, 0); 266 267 o->apply_compression = 0; 268 o->lambda_compression = 1.; 269 270 /* method specific optimisations */ 271 if (strcmp (onset_mode, "energy") == 0) { 272 } else if (strcmp (onset_mode, "hfc") == 0 || strcmp (onset_mode, "default") == 0) { 273 aubio_onset_set_threshold (o, 0.058); 274 o->apply_compression = 1; 275 o->lambda_compression = 1.; 276 aubio_onset_set_adaptive_whitening (o, 0); 277 } else if (strcmp (onset_mode, "complexdomain") == 0 278 || strcmp (onset_mode, "complex") == 0) { 279 aubio_onset_set_delay (o, 4.6 * o->hop_size); 280 aubio_onset_set_threshold (o, 0.15); 281 o->apply_compression = 1; 282 o->lambda_compression = 1.; 283 } else if (strcmp (onset_mode, "phase") == 0) { 284 o->apply_compression = 0; 285 aubio_onset_set_adaptive_whitening (o, 0); 286 } else if (strcmp (onset_mode, "mkl") == 0) { 287 aubio_onset_set_threshold (o, 0.05); 288 } else if (strcmp (onset_mode, "kl") == 0) { 289 aubio_onset_set_threshold (o, 0.35); 290 } else if (strcmp (onset_mode, "specflux") == 0) { 291 aubio_onset_set_threshold (o, 0.4); 292 } else if (strcmp (onset_mode, "specdiff") == 0) { 293 } else { 294 AUBIO_WRN("onset: unknown spectral descriptor type %s, " 295 "using default parameters.\n", onset_mode); 296 } 297 } 298 231 299 void del_aubio_onset (aubio_onset_t *o) 232 300 { 301 del_aubio_spectral_whitening(o->spectral_whitening); 233 302 del_aubio_specdesc(o->od); 234 303 del_aubio_peakpicker(o->pp); -
src/onset/onset.h
ra24a84e r1239d23 118 118 smpl_t aubio_onset_get_last_ms (const aubio_onset_t *o); 119 119 120 /** set onset detection adaptive whitening 121 122 \param o onset detection object as returned by new_aubio_onset() 123 \param apply_adaptive_whitening 1 to enable, 0 to disable 124 125 */ 126 uint_t aubio_onset_set_adaptive_whitening(aubio_onset_t * o, uint_t apply_adaptive_whitening); 127 128 /** get onset detection silence threshold 129 130 \param o onset detection object as returned by new_aubio_onset() 131 132 \return adaptive whitening mode, 1 if enabled, 0 otherwise 133 134 */ 135 uint_t aubio_onset_get_adaptive_whitening(aubio_onset_t * o); 136 120 137 /** set onset detection silence threshold 121 138 -
src/onset/peakpicker.c
ra24a84e r1239d23 93 93 fvec_t *scratch = p->scratch; 94 94 smpl_t mean = 0., median = 0.; 95 uint_t length = p->win_post + p->win_pre + 1;96 95 uint_t j = 0; 97 96 98 /* store onset in onset_keep */ 99 /* shift all elements but last, then write last */ 100 for (j = 0; j < length - 1; j++) { 101 onset_keep->data[j] = onset_keep->data[j + 1]; 102 onset_proc->data[j] = onset_keep->data[j]; 103 } 104 onset_keep->data[length - 1] = onset->data[0]; 105 onset_proc->data[length - 1] = onset->data[0]; 97 /* push new novelty to the end */ 98 fvec_push(onset_keep, onset->data[0]); 99 /* store a copy */ 100 fvec_copy(onset_keep, onset_proc); 106 101 107 /* filter onset_proc */ 108 /** \bug filtfilt calculated post+pre times, should be only once !? */ 102 /* filter this copy */ 109 103 aubio_filter_do_filtfilt (p->biquad, onset_proc, scratch); 110 104 111 105 /* calculate mean and median for onset_proc */ 112 106 mean = fvec_mean (onset_proc); 113 /* copy to scratch */ 114 for (j = 0; j < length; j++)115 scratch->data[j] = onset_proc->data[j];107 108 /* copy to scratch and compute its median */ 109 fvec_copy(onset_proc, scratch); 116 110 median = p->thresholdfn (scratch); 117 111 -
src/spectral/specdesc.c
ra24a84e r1239d23 31 31 void aubio_specdesc_complex(aubio_specdesc_t *o, const cvec_t * fftgrain, fvec_t * onset); 32 32 void aubio_specdesc_phase(aubio_specdesc_t *o, const cvec_t * fftgrain, fvec_t * onset); 33 void aubio_specdesc_wphase(aubio_specdesc_t *o, const cvec_t * fftgrain, fvec_t * onset); 33 34 void aubio_specdesc_specdiff(aubio_specdesc_t *o, const cvec_t * fftgrain, fvec_t * onset); 34 35 void aubio_specdesc_kl(aubio_specdesc_t *o, const cvec_t * fftgrain, fvec_t * onset); … … 58 59 aubio_onset_complex, /**< complex domain */ 59 60 aubio_onset_phase, /**< phase fast */ 61 aubio_onset_wphase, /**< weighted phase */ 60 62 aubio_onset_kl, /**< Kullback Liebler */ 61 63 aubio_onset_mkl, /**< modified Kullback Liebler */ … … 158 160 onset->data[0] = aubio_hist_mean(o->histog); 159 161 //onset->data[0] = fvec_mean(o->dev1); 162 } 163 164 /* weighted phase */ 165 void 166 aubio_specdesc_wphase(aubio_specdesc_t *o, 167 const cvec_t *fftgrain, fvec_t *onset) { 168 uint_t i; 169 aubio_specdesc_phase(o, fftgrain, onset); 170 for (i = 0; i < fftgrain->length; i++) { 171 o->dev1->data[i] *= fftgrain->norm[i]; 172 } 173 /* apply o->histogram */ 174 aubio_hist_dyn_notnull(o->histog,o->dev1); 175 /* weight it */ 176 aubio_hist_weight(o->histog); 177 /* its mean is the result */ 178 onset->data[0] = aubio_hist_mean(o->histog); 160 179 } 161 180 … … 251 270 else if (strcmp (onset_mode, "phase") == 0) 252 271 onset_type = aubio_onset_phase; 272 else if (strcmp (onset_mode, "wphase") == 0) 273 onset_type = aubio_onset_wphase; 253 274 else if (strcmp (onset_mode, "mkl") == 0) 254 275 onset_type = aubio_onset_mkl; … … 292 313 break; 293 314 case aubio_onset_phase: 315 case aubio_onset_wphase: 294 316 o->dev1 = new_fvec(rsize); 295 317 o->theta1 = new_fvec(rsize); … … 326 348 o->funcpointer = aubio_specdesc_phase; 327 349 break; 350 case aubio_onset_wphase: 351 o->funcpointer = aubio_specdesc_wphase; 352 break; 328 353 case aubio_onset_specdiff: 329 354 o->funcpointer = aubio_specdesc_specdiff; … … 379 404 break; 380 405 case aubio_onset_phase: 406 case aubio_onset_wphase: 381 407 del_fvec(o->dev1); 382 408 del_fvec(o->theta1); -
src/spectral/specdesc.h
ra24a84e r1239d23 60 60 Hong-Kong, 2003. 61 61 62 \b \p wphase : Weighted Phase Deviation onset detection function 63 64 S. Dixon. Onset detection revisited. In Proceedings of the 9th International 65 Conference on Digital Audio Ef- fects (DAFx) , pages 133–137, 2006. 66 67 http://www.eecs.qmul.ac.uk/~simond/pub/2006/dafx.pdf 68 62 69 \b \p specdiff : Spectral difference method onset detection function 63 70 … … 175 182 The parameter \p method is a string that can be any of: 176 183 177 - `energy`, `hfc`, `complex`, `phase`, `specdiff`, `kl`, `mkl`, `specflux` 178 - `centroid`, `spread`, `skewness`, `kurtosis`, `slope`, `decrease`, `rolloff` 184 - onset novelty functions: `complex`, `energy`, `hfc`, `kl`, `mkl`, 185 `phase`, `specdiff`, `specflux`, `wphase`, 186 187 - spectral descriptors: `centroid`, `decrease`, `kurtosis`, `rolloff`, 188 `skewness`, `slope`, `spread`. 179 189 180 190 */
Note: See TracChangeset
for help on using the changeset viewer.