Changes in / [65a4fb4:057ecee]
- Files:
-
- 19 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
python/lib/moresetuptools.py
r65a4fb4 r057ecee 80 80 'libswresample', 'libavresample', 81 81 'sndfile', 82 'hdf5', 82 83 #'fftw3f', 83 84 ] … … 104 105 ext.define_macros += [('HAVE_FFTW3F', 1)] 105 106 ext.define_macros += [('HAVE_FFTW3', 1)] 107 if 'hdf5' in ext.libraries: 108 ext.libraries += ['hdf5_hl'] 109 ext.define_macros += [('HAVE_HDF5', 1)] 106 110 107 111 # add accelerate on darwin -
src/aubio_priv.h
r65a4fb4 r057ecee 134 134 #define aubio_cblas_swap cblas_sswap 135 135 #define aubio_cblas_dot cblas_sdot 136 #define aubio_cblas__gemv cblas_sgemv 136 137 #else /* HAVE_AUBIO_DOUBLE */ 137 138 #ifdef HAVE_ATLAS … … 141 142 #define aubio_cblas_swap cblas_dswap 142 143 #define aubio_cblas_dot cblas_ddot 144 #define aubio_cblas__gemv cblas_dgemv 143 145 #endif /* HAVE_AUBIO_DOUBLE */ 144 146 #endif /* HAVE_BLAS */ … … 399 401 #endif /* DEBUG */ 400 402 403 // goto to failure if condition x is not true 404 #define AUBIO_GOTO_FAILURE(x) if (!(x)) goto failure 405 406 #define AUBIO_ASSERT_EQUAL_SHAPE(t1, t2) { \ 407 AUBIO_ASSERT(t1 && t2); \ 408 AUBIO_ASSERT(t1->ndim == t2->ndim); \ 409 uint_t nn; \ 410 for (nn = 0; nn < t1->ndim; nn++) \ 411 AUBIO_ASSERT(t1->shape[nn] == t2->shape[nn]); \ 412 } 413 401 414 #endif /* AUBIO_PRIV_H */ -
src/fmat.c
r65a4fb4 r057ecee 24 24 fmat_t * new_fmat (uint_t height, uint_t length) { 25 25 fmat_t * s; 26 uint_t i ,j;26 uint_t i; 27 27 if ((sint_t)length <= 0 || (sint_t)height <= 0 ) { 28 28 return NULL; … … 32 32 s->length = length; 33 33 s->data = AUBIO_ARRAY(smpl_t*,s->height); 34 for (i=0; i< s->height; i++) { 35 s->data[i] = AUBIO_ARRAY(smpl_t, s->length); 36 for (j=0; j< s->length; j++) { 37 s->data[i][j]=0.; 38 } 34 s->data[0] = AUBIO_ARRAY(smpl_t, s->length * s->height); 35 for (i=1; i< s->height; i++) { 36 s->data[i] = s->data[0] + i * s->length; 39 37 } 40 38 return s; … … 42 40 43 41 void del_fmat (fmat_t *s) { 44 uint_t i;45 for (i=0; i<s->height; i++) {46 AUBIO_FREE(s->data[ i]);47 }48 AUBIO_FREE(s->data);42 AUBIO_ASSERT(s); 43 if (s->data[0]) 44 AUBIO_FREE(s->data[0]); 45 if (s->data) 46 AUBIO_FREE(s->data); 49 47 AUBIO_FREE(s); 50 48 } … … 156 154 157 155 void fmat_vecmul(const fmat_t *s, const fvec_t *scale, fvec_t *output) { 158 uint_t k;159 #if 0160 assert(s->height == output->length);161 assert(s->length == scale->length);162 #endif163 156 #if !defined(HAVE_ACCELERATE) && !defined(HAVE_BLAS) 164 uint_t j; 157 uint_t j, k; 158 AUBIO_ASSERT(s->height == output->length); 159 AUBIO_ASSERT(s->length == scale->length); 165 160 fvec_zeros(output); 166 161 for (j = 0; j < s->length; j++) { 167 162 for (k = 0; k < s->height; k++) { 168 output->data[k] += scale->data[j] 169 * s->data[k][j]; 163 output->data[k] += scale->data[j] * s->data[k][j]; 170 164 } 171 165 } 172 166 #elif defined(HAVE_BLAS) 167 #if 0 173 168 for (k = 0; k < s->height; k++) { 174 169 output->data[k] = aubio_cblas_dot( s->length, scale->data, 1, s->data[k], 1); 175 170 } 171 #else 172 aubio_cblas__gemv(CblasColMajor, CblasTrans, 173 s->length, s->height, 1., 174 s->data[0], s->length, 175 scale->data, 1, 0., 176 output->data, 1); 177 #endif 176 178 #elif defined(HAVE_ACCELERATE) 177 179 #if 0 … … 179 181 vDSP_mmul (s->data[0], 1, scale->data, 1, output->data, 1, s->height, 1, s->length); 180 182 #else 183 uint_t k; 181 184 for (k = 0; k < s->height; k++) { 182 185 aubio_vDSP_dotpr( scale->data, 1, s->data[k], 1, &(output->data[k]), s->length); … … 185 188 #endif 186 189 } 190 191 void fvec_matmul(const fvec_t *scale, const fmat_t *s, fvec_t *output) { 192 AUBIO_ASSERT(s->height == scale->length); 193 AUBIO_ASSERT(s->length == output->length); 194 #if !defined(HAVE_ACCELERATE) && !defined(HAVE_BLAS) 195 uint_t j, k; 196 fvec_zeros(output); 197 for (k = 0; k < s->height; k++) { 198 for (j = 0; j < s->length; j++) { 199 output->data[j] += s->data[k][j] * scale->data[k]; 200 } 201 } 202 #elif defined(HAVE_BLAS) 203 #if 0 204 for (k = 0; k < s->length; k++) { 205 output->data[k] = aubio_cblas_dot( scale->length, scale->data, 1, 206 &s->data[0][0] + k, s->length); 207 } 208 #else 209 aubio_cblas__gemv(CblasColMajor, CblasNoTrans, 210 s->length, s->height, 1., 211 s->data[0], s->length, 212 scale->data, 1, 0., 213 output->data, 1); 214 #endif 215 #elif defined(HAVE_ACCELERATE) 216 #if 0 217 // seems slower and less precise (and dangerous?) 218 vDSP_mmul (s->data[0], 1, scale->data, 1, output->data, 1, s->height, 1, s->length); 219 #else 220 uint_t k; 221 for (k = 0; k < s->height; k++) { 222 aubio_vDSP_dotpr( scale->data, 1, s->data[k], 1, &(output->data[k]), scale->length); 223 } 224 #endif 225 #endif 226 } -
src/fmat.h
r65a4fb4 r057ecee 161 161 \param s matrix to compute product with 162 162 \param scale vector to compute product with 163 \param output vector to store restults in 163 \param output vector of results 164 164 165 165 166 */ 166 167 void fmat_vecmul(const fmat_t *s, const fvec_t *scale, fvec_t *output); 168 169 /** compute the product of a vector by a matrix 170 171 \param s matrix to compute product with 172 \param scale input to compute product with 173 \param output vector of results 174 175 */ 176 void fvec_matmul(const fvec_t *scale, const fmat_t *s, fvec_t *output); 167 177 168 178 #ifdef __cplusplus -
src/fvec.c
r65a4fb4 r057ecee 99 99 } 100 100 101 void fvec_vecadd(fvec_t *s, const fvec_t *bias) { 102 uint_t j; 103 uint_t length = MIN(s->length, bias->length); 104 for (j = 0; j < length; j++) { 105 s->data[j] += bias->data[j]; 106 } 107 } 108 101 109 void fvec_weight(fvec_t *s, const fvec_t *weight) { 102 110 uint_t length = MIN(s->length, weight->length); -
src/fvec.h
r65a4fb4 r057ecee 144 144 void fvec_rev(fvec_t *s); 145 145 146 /** add a vector b to vector a, modifying a 147 148 \param a input vector to add b to 149 \param b input vector of the values to be added to a 150 151 Upon return, he content of a[i] will be set to a[i] + b[i]. 152 153 */ 154 void fvec_vecadd(fvec_t *a, const fvec_t *b); 155 146 156 /** apply weight to vector 147 157 -
src/pitch/pitch.c
r65a4fb4 r057ecee 49 49 aubio_pitcht_yinfast, /**< `yinfast`, YIN fast */ 50 50 aubio_pitcht_specacf, /**< `specacf`, Spectral autocorrelation */ 51 aubio_pitcht_crepe, /**< `crepe`, convolutional neural network */ 51 52 aubio_pitcht_default 52 53 = aubio_pitcht_yinfft, /**< `default` */ … … 99 100 static void aubio_pitch_do_yinfast (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); 100 101 static void aubio_pitch_do_specacf (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); 102 static void aubio_pitch_do_crepe (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * obuf); 101 103 102 104 /* internal functions for frequency conversion */ … … 104 106 static smpl_t freqconvmidi (smpl_t f, uint_t samplerate, uint_t bufsize); 105 107 static smpl_t freqconvpass (smpl_t f, uint_t samplerate, uint_t bufsize); 108 109 typedef struct _aubio_pitch_crepe_t aubio_pitch_crepe_t; 110 extern aubio_pitch_crepe_t *new_aubio_pitch_crepe(void); 111 extern void aubio_pitch_crepe_do(aubio_pitch_crepe_t *t, fvec_t *input, fvec_t *out); 112 extern void del_aubio_pitch_crepe(aubio_pitch_crepe_t *t); 113 extern smpl_t aubio_pitch_crepe_get_confidence (aubio_pitch_crepe_t * o); 114 uint_t aubio_pitch_crepe_set_tolerance(aubio_pitch_crepe_t * o, smpl_t 115 tolerance); 116 smpl_t aubio_pitch_crepe_get_tolerance (aubio_pitch_crepe_t * o); 106 117 107 118 /* adapter to stack ibuf new samples at the end of buf, and trim `buf` to `bufsize` */ … … 133 144 else if (strcmp (pitch_mode, "specacf") == 0) 134 145 pitch_type = aubio_pitcht_specacf; 146 else if (strcmp (pitch_mode, "crepe") == 0) 147 pitch_type = aubio_pitcht_crepe; 135 148 else if (strcmp (pitch_mode, "default") == 0) 136 149 pitch_type = aubio_pitcht_default; … … 214 227 aubio_pitchspecacf_set_tolerance (p->p_object, 0.85); 215 228 break; 229 case aubio_pitcht_crepe: 230 // TODO add resampling and blocking 231 if (samplerate != 16000) { 232 AUBIO_ERROR("pitch: crepe samplerate must be 16000Hz, got %d\n", 233 samplerate); 234 goto beach; 235 } 236 if (bufsize != 1024) { 237 AUBIO_ERROR("pitch: crepe buffer size must be 1024, got %d\n", 238 bufsize); 239 goto beach; 240 } 241 p->buf = new_fvec (bufsize); 242 p->p_object = new_aubio_pitch_crepe(); 243 if (!p->p_object) goto beach; 244 p->detect_cb = aubio_pitch_do_crepe; 245 p->conf_cb = (aubio_pitch_get_conf_t)aubio_pitch_crepe_get_confidence; 246 //aubio_pitch_crepe_set_tolerance (p->p_object, 0.85); 247 break; 216 248 default: 217 249 break; … … 260 292 del_fvec (p->buf); 261 293 del_aubio_pitchspecacf (p->p_object); 294 break; 295 case aubio_pitcht_crepe: 296 del_fvec (p->buf); 297 del_aubio_pitch_crepe (p->p_object); 262 298 break; 263 299 default: … … 350 386 aubio_pitchyinfast_set_tolerance (p->p_object, tol); 351 387 break; 388 case aubio_pitcht_crepe: 389 aubio_pitch_crepe_set_tolerance (p->p_object, tol); 390 break; 352 391 default: 353 392 break; … … 369 408 case aubio_pitcht_yinfast: 370 409 tolerance = aubio_pitchyinfast_get_tolerance (p->p_object); 410 break; 411 case aubio_pitcht_crepe: 412 tolerance = aubio_pitch_crepe_get_tolerance (p->p_object); 371 413 break; 372 414 default: … … 479 521 480 522 void 523 aubio_pitch_do_crepe (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * out) 524 { 525 //smpl_t pitch = 0., period; 526 aubio_pitch_slideblock (p, ibuf); 527 aubio_pitch_crepe_do(p->p_object, p->buf, out); 528 out->data[0] = aubio_miditofreq(out->data[0]); 529 } 530 531 void 481 532 aubio_pitch_do_fcomb (aubio_pitch_t * p, const fvec_t * ibuf, fvec_t * out) 482 533 { -
src/wscript_build
r65a4fb4 r057ecee 13 13 uselib += ['AVUTIL'] 14 14 uselib += ['BLAS'] 15 uselib += ['HDF5', 'HDF5_HL'] 15 16 16 17 source = ctx.path.ant_glob('*.c **/*.c') -
wscript
r65a4fb4 r057ecee 98 98 help_disable_str = 'do not compile source_wavwrite') 99 99 100 add_option_enable_disable(ctx, 'hdf5', default = None, 101 help_str = 'use libhdf5 (default)', 102 help_disable_str = 'do not use libhdf5') 103 100 104 add_option_enable_disable(ctx, 'docs', default = None, 101 105 help_str = 'build documentation (auto)', … … 460 464 if (ctx.options.enable_memcpy == True): 461 465 ctx.define('HAVE_MEMCPY_HACKS', 1) 466 467 if (ctx.options.enable_hdf5 != True): 468 ctx.check_cfg(package='hdf5', args='--cflags --libs', 469 uselib_store='HDF5', mandatory=ctx.options.enable_hdf5) 470 ctx.check(lib=['hdf5_hl'], use = ['HDF5'], 471 uselib_store='HDF5_HL', mandatory=ctx.options.enable_hdf5) 462 472 463 473 # write configuration header
Note: See TracChangeset
for help on using the changeset viewer.