Changeset 168337e for src/pitch/pitch.c
- Timestamp:
- Dec 4, 2009, 1:44:41 AM (15 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:
- 02a01dd
- Parents:
- fc61225
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/pitch/pitch.c
rfc61225 r168337e 114 114 aubio_pitch_t * 115 115 new_aubio_pitch (char_t * pitch_mode, 116 uint_t bufsize, uint_t hopsize, uint_t channels, uint_tsamplerate)116 uint_t bufsize, uint_t hopsize, uint_t samplerate) 117 117 { 118 118 aubio_pitch_t *p = AUBIO_NEW (aubio_pitch_t); … … 142 142 switch (p->type) { 143 143 case aubio_pitcht_yin: 144 p->buf = new_fvec (bufsize , channels);144 p->buf = new_fvec (bufsize); 145 145 p->yin = new_aubio_pitchyin (bufsize); 146 146 p->callback = aubio_pitch_do_yin; … … 148 148 break; 149 149 case aubio_pitcht_mcomb: 150 p->pv = new_aubio_pvoc (bufsize, hopsize , channels);151 p->fftgrain = new_cvec (bufsize , channels);152 p->mcomb = new_aubio_pitchmcomb (bufsize, hopsize , channels);153 p->filter = new_aubio_filter_c_weighting (samplerate , channels);150 p->pv = new_aubio_pvoc (bufsize, hopsize); 151 p->fftgrain = new_cvec (bufsize); 152 p->mcomb = new_aubio_pitchmcomb (bufsize, hopsize); 153 p->filter = new_aubio_filter_c_weighting (samplerate); 154 154 p->callback = aubio_pitch_do_mcomb; 155 155 break; 156 156 case aubio_pitcht_fcomb: 157 p->buf = new_fvec (bufsize , channels);158 p->fcomb = new_aubio_pitchfcomb (bufsize, hopsize , channels);157 p->buf = new_fvec (bufsize); 158 p->fcomb = new_aubio_pitchfcomb (bufsize, hopsize); 159 159 p->callback = aubio_pitch_do_fcomb; 160 160 break; 161 161 case aubio_pitcht_schmitt: 162 p->buf = new_fvec (bufsize , channels);162 p->buf = new_fvec (bufsize); 163 163 p->schmitt = new_aubio_pitchschmitt (bufsize); 164 164 p->callback = aubio_pitch_do_schmitt; 165 165 break; 166 166 case aubio_pitcht_yinfft: 167 p->buf = new_fvec (bufsize , channels);167 p->buf = new_fvec (bufsize); 168 168 p->yinfft = new_aubio_pitchyinfft (bufsize); 169 169 p->callback = aubio_pitch_do_yinfft; … … 211 211 aubio_pitch_slideblock (aubio_pitch_t * p, fvec_t * ibuf) 212 212 { 213 uint_t i,j = 0, overlap_size = 0;213 uint_t j = 0, overlap_size = 0; 214 214 overlap_size = p->buf->length - ibuf->length; 215 for (i = 0; i < p->buf->channels; i++) { 216 for (j = 0; j < overlap_size; j++) { 217 p->buf->data[i][j] = p->buf->data[i][j + ibuf->length]; 218 } 219 } 220 for (i = 0; i < ibuf->channels; i++) { 221 for (j = 0; j < ibuf->length; j++) { 222 p->buf->data[i][j + overlap_size] = ibuf->data[i][j]; 223 } 215 for (j = 0; j < overlap_size; j++) { 216 p->buf->data[j] = p->buf->data[j + ibuf->length]; 217 } 218 for (j = 0; j < ibuf->length; j++) { 219 p->buf->data[j + overlap_size] = ibuf->data[j]; 224 220 } 225 221 } … … 283 279 aubio_pitch_do (aubio_pitch_t * p, fvec_t * ibuf, fvec_t * obuf) 284 280 { 285 uint_t i;286 281 p->callback (p, ibuf, obuf); 287 for (i = 0; i < obuf->channels; i++) { 288 p->freqconv (obuf->data[i][0], p->srate, p->bufsize); 289 } 282 obuf->data[0] = p->freqconv (obuf->data[0], p->srate, p->bufsize); 290 283 } 291 284 … … 293 286 aubio_pitch_do_mcomb (aubio_pitch_t * p, fvec_t * ibuf, fvec_t * obuf) 294 287 { 295 uint_t i;296 288 aubio_filter_do (p->filter, ibuf); 297 289 aubio_pvoc_do (p->pv, ibuf, p->fftgrain); 298 290 aubio_pitchmcomb_do (p->mcomb, p->fftgrain, obuf); 299 for (i = 0; i < obuf->channels; i++) { 300 obuf->data[i][0] = aubio_bintofreq (obuf->data[i][0], p->srate, p->bufsize); 301 } 291 obuf->data[0] = aubio_bintofreq (obuf->data[0], p->srate, p->bufsize); 302 292 } 303 293 … … 306 296 { 307 297 smpl_t pitch = 0.; 308 uint_t i;309 298 aubio_pitch_slideblock (p, ibuf); 310 299 aubio_pitchyin_do (p->yin, p->buf, obuf); 311 for (i = 0; i < obuf->channels; i++) { 312 pitch = obuf->data[i][0]; 313 if (pitch > 0) { 314 pitch = p->srate / (pitch + 0.); 315 } else { 316 pitch = 0.; 317 } 318 obuf->data[i][0] = pitch; 319 } 300 pitch = obuf->data[0]; 301 if (pitch > 0) { 302 pitch = p->srate / (pitch + 0.); 303 } else { 304 pitch = 0.; 305 } 306 obuf->data[0] = pitch; 320 307 } 321 308 … … 325 312 { 326 313 smpl_t pitch = 0.; 327 uint_t i;328 314 aubio_pitch_slideblock (p, ibuf); 329 315 aubio_pitchyinfft_do (p->yinfft, p->buf, obuf); 330 for (i = 0; i < obuf->channels; i++) { 331 pitch = obuf->data[i][0]; 332 if (pitch > 0) { 333 pitch = p->srate / (pitch + 0.); 334 } else { 335 pitch = 0.; 336 } 337 obuf->data[i][0] = pitch; 338 } 316 pitch = obuf->data[0]; 317 if (pitch > 0) { 318 pitch = p->srate / (pitch + 0.); 319 } else { 320 pitch = 0.; 321 } 322 obuf->data[0] = pitch; 339 323 } 340 324 … … 342 326 aubio_pitch_do_fcomb (aubio_pitch_t * p, fvec_t * ibuf, fvec_t * out) 343 327 { 344 uint_t i;345 328 aubio_pitch_slideblock (p, ibuf); 346 329 aubio_pitchfcomb_do (p->fcomb, p->buf, out); 347 for (i = 0; i < out->channels; i++) { 348 out->data[i][0] = aubio_bintofreq (out->data[i][0], p->srate, p->bufsize); 349 } 330 out->data[0] = aubio_bintofreq (out->data[0], p->srate, p->bufsize); 350 331 } 351 332 … … 354 335 { 355 336 smpl_t period, pitch = 0.; 356 uint_t i;357 337 aubio_pitch_slideblock (p, ibuf); 358 338 aubio_pitchschmitt_do (p->schmitt, p->buf, out); 359 for (i = 0; i < out->channels; i++) { 360 period = out->data[i][0]; 361 if (period > 0) { 362 pitch = p->srate / period; 363 } else { 364 pitch = 0.; 365 } 366 out->data[i][0] = pitch; 367 } 368 } 339 period = out->data[0]; 340 if (period > 0) { 341 pitch = p->srate / period; 342 } else { 343 pitch = 0.; 344 } 345 out->data[0] = pitch; 346 }
Note: See TracChangeset
for help on using the changeset viewer.