Changeset 633400d for src/mathutils.c
- Timestamp:
- Dec 5, 2018, 10:34:39 PM (5 years ago)
- Branches:
- feature/cnn, feature/crepe, feature/pitchshift, feature/timestretch, fix/ffmpeg5, master
- Children:
- 283a619a
- Parents:
- 5b46bc3 (diff), f19db54 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/mathutils.c
r5b46bc3 r633400d 25 25 #include "mathutils.h" 26 26 #include "musicutils.h" 27 #include "config.h"28 27 29 28 /** Window types */ 30 29 typedef enum 31 30 { 31 aubio_win_ones, 32 32 aubio_win_rectangle, 33 33 aubio_win_hamming, … … 65 65 AUBIO_ERR ("window type can not be null.\n"); 66 66 return 1; 67 } else if (strcmp (window_type, "rectangle") == 0) 67 } else if (strcmp (window_type, "ones") == 0) 68 wintype = aubio_win_ones; 69 else if (strcmp (window_type, "rectangle") == 0) 68 70 wintype = aubio_win_rectangle; 69 71 else if (strcmp (window_type, "hamming") == 0) … … 90 92 } 91 93 switch(wintype) { 94 case aubio_win_ones: 95 fvec_ones(win); 96 break; 92 97 case aubio_win_rectangle: 93 for (i=0;i<size;i++) 94 w[i] = 0.5; 98 fvec_set_all(win, .5); 95 99 break; 96 100 case aubio_win_hamming: … … 156 160 { 157 161 smpl_t tmp = 0.0; 158 #ifndef HAVE_ACCELERATE 162 #if defined(HAVE_INTEL_IPP) 163 aubio_ippsMean(s->data, (int)s->length, &tmp); 164 return tmp; 165 #elif defined(HAVE_ACCELERATE) 166 aubio_vDSP_meanv(s->data, 1, &tmp, s->length); 167 return tmp; 168 #else 159 169 uint_t j; 160 170 for (j = 0; j < s->length; j++) { 161 171 tmp += s->data[j]; 162 172 } 163 return tmp / (smpl_t) (s->length); 164 #else 165 aubio_vDSP_meanv(s->data, 1, &tmp, s->length); 166 return tmp; 167 #endif /* HAVE_ACCELERATE */ 173 return tmp / (smpl_t)(s->length); 174 #endif 168 175 } 169 176 … … 172 179 { 173 180 smpl_t tmp = 0.0; 174 #ifndef HAVE_ACCELERATE 181 #if defined(HAVE_INTEL_IPP) 182 aubio_ippsSum(s->data, (int)s->length, &tmp); 183 #elif defined(HAVE_ACCELERATE) 184 aubio_vDSP_sve(s->data, 1, &tmp, s->length); 185 #else 175 186 uint_t j; 176 187 for (j = 0; j < s->length; j++) { 177 188 tmp += s->data[j]; 178 189 } 179 #else 180 aubio_vDSP_sve(s->data, 1, &tmp, s->length); 181 #endif /* HAVE_ACCELERATE */ 190 #endif 182 191 return tmp; 183 192 } … … 186 195 fvec_max (fvec_t * s) 187 196 { 188 #ifndef HAVE_ACCELERATE 189 uint_t j; 190 smpl_t tmp = 0.0; 191 for (j = 0; j < s->length; j++) { 197 #if defined(HAVE_INTEL_IPP) 198 smpl_t tmp = 0.; 199 aubio_ippsMax( s->data, (int)s->length, &tmp); 200 #elif defined(HAVE_ACCELERATE) 201 smpl_t tmp = 0.; 202 aubio_vDSP_maxv( s->data, 1, &tmp, s->length ); 203 #else 204 uint_t j; 205 smpl_t tmp = s->data[0]; 206 for (j = 1; j < s->length; j++) { 192 207 tmp = (tmp > s->data[j]) ? tmp : s->data[j]; 193 208 } 194 #else 209 #endif 210 return tmp; 211 } 212 213 smpl_t 214 fvec_min (fvec_t * s) 215 { 216 #if defined(HAVE_INTEL_IPP) 195 217 smpl_t tmp = 0.; 196 aubio_vDSP_maxv(s->data, 1, &tmp, s->length); 197 #endif 198 return tmp; 199 } 200 201 smpl_t 202 fvec_min (fvec_t * s) 203 { 204 #ifndef HAVE_ACCELERATE 205 uint_t j; 206 smpl_t tmp = s->data[0]; 207 for (j = 0; j < s->length; j++) { 208 tmp = (tmp < s->data[j]) ? tmp : s->data[j]; 209 } 210 #else 218 aubio_ippsMin(s->data, (int)s->length, &tmp); 219 #elif defined(HAVE_ACCELERATE) 211 220 smpl_t tmp = 0.; 212 221 aubio_vDSP_minv(s->data, 1, &tmp, s->length); 222 #else 223 uint_t j; 224 smpl_t tmp = s->data[0]; 225 for (j = 1; j < s->length; j++) { 226 tmp = (tmp < s->data[j]) ? tmp : s->data[j]; 227 } 213 228 #endif 214 229 return tmp; … … 227 242 #else 228 243 smpl_t tmp = 0.; 229 uint_t pos = 0.;230 aubio_vDSP_minvi(s->data, 1, &tmp, (vDSP_Length *)&pos, s->length);231 #endif 232 return pos;244 vDSP_Length pos = 0; 245 aubio_vDSP_minvi(s->data, 1, &tmp, &pos, s->length); 246 #endif 247 return (uint_t)pos; 233 248 } 234 249 … … 245 260 #else 246 261 smpl_t tmp = 0.; 247 uint_t pos = 0.;248 aubio_vDSP_maxvi(s->data, 1, &tmp, (vDSP_Length *)&pos, s->length);249 #endif 250 return pos;262 vDSP_Length pos = 0; 263 aubio_vDSP_maxvi(s->data, 1, &tmp, &pos, s->length); 264 #endif 265 return (uint_t)pos; 251 266 } 252 267 … … 257 272 // if length is odd, middle element is moved to the end 258 273 if (2 * half < s->length) start ++; 259 #ifndef HAVE_ ATLAS274 #ifndef HAVE_BLAS 260 275 for (j = 0; j < half; j++) { 261 276 ELEM_SWAP (s->data[j], s->data[j + start]); … … 277 292 // if length is odd, middle element is moved to the beginning 278 293 if (2 * half < s->length) start ++; 279 #ifndef HAVE_ ATLAS294 #ifndef HAVE_BLAS 280 295 for (j = 0; j < half; j++) { 281 296 ELEM_SWAP (s->data[j], s->data[j + start]); … … 291 306 } 292 307 308 void fvec_push(fvec_t *in, smpl_t new_elem) { 309 uint_t i; 310 for (i = 0; i < in->length - 1; i++) { 311 in->data[i] = in->data[i + 1]; 312 } 313 in->data[in->length - 1] = new_elem; 314 } 315 316 void fvec_clamp(fvec_t *in, smpl_t absmax) { 317 uint_t i; 318 for (i = 0; i < in->length; i++) { 319 if (in->data[i] > 0 && in->data[i] > ABS(absmax)) { 320 in->data[i] = absmax; 321 } else if (in->data[i] < 0 && in->data[i] < -ABS(absmax)) { 322 in->data[i] = -absmax; 323 } 324 } 325 } 326 293 327 smpl_t 294 328 aubio_level_lin (const fvec_t * f) 295 329 { 296 330 smpl_t energy = 0.; 297 #ifndef HAVE_ ATLAS331 #ifndef HAVE_BLAS 298 332 uint_t j; 299 333 for (j = 0; j < f->length; j++) { … … 351 385 for (j = 0; j < o->length; j++) { 352 386 o->data[j] += val; 387 } 388 } 389 390 void 391 fvec_mul (fvec_t *o, smpl_t val) 392 { 393 uint_t j; 394 for (j = 0; j < o->length; j++) { 395 o->data[j] *= val; 353 396 } 354 397 } … … 489 532 /* log(freq/A-2)/log(2) */ 490 533 midi = freq / 6.875; 491 midi = LOG (midi) / 0.6931471805599 5;534 midi = LOG (midi) / 0.6931471805599453; 492 535 midi *= 12; 493 536 midi -= 3; … … 501 544 if (midi > 140.) return 0.; // avoid infs 502 545 freq = (midi + 3.) / 12.; 503 freq = EXP (freq * 0.6931471805599 5);546 freq = EXP (freq * 0.6931471805599453); 504 547 freq *= 6.875; 505 548 return freq; … … 550 593 while (i < a) i <<= 1; 551 594 return i; 595 } 596 597 uint_t 598 aubio_power_of_two_order (uint_t a) 599 { 600 int order = 0; 601 int temp = aubio_next_power_of_two(a); 602 while (temp >>= 1) { 603 ++order; 604 } 605 return order; 552 606 } 553 607
Note: See TracChangeset
for help on using the changeset viewer.