Changeset 77db425 for src/tempo


Ignore:
Timestamp:
Nov 26, 2013, 4:18:57 AM (6 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/autosink, feature/constantq, feature/pitchshift, feature/pydocstrings, feature/timestretch, master, pitchshift, sampler, timestretch, yinfft+
Children:
2dbcafa
Parents:
18f14f9
Message:

src/tempo/tempo.c: fix for different samplerates

Location:
src/tempo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/tempo/beattracking.c

    r18f14f9 r77db425  
    3232struct _aubio_beattracking_t
    3333{
     34  uint_t hop_size;       /** length of one tempo detection function sample, in audio samples */
     35  uint_t samplerate;     /** samplerate of the original signal */
    3436  fvec_t *rwv;           /** rayleigh weighting for beat period in general model */
    3537  fvec_t *dfwv;          /** exponential weighting for beat alignment in general model */
     
    5557
    5658aubio_beattracking_t *
    57 new_aubio_beattracking (uint_t winlen)
     59new_aubio_beattracking (uint_t winlen, uint_t hop_size, uint_t samplerate)
    5860{
    5961
    6062  aubio_beattracking_t *p = AUBIO_NEW (aubio_beattracking_t);
    6163  uint_t i = 0;
    62   /* parameter for rayleigh weight vector - sets preferred tempo to
    63    * 120bpm [43] */
    64   smpl_t rayparam = 48. / 512. * winlen;
     64  p->hop_size = hop_size;
     65  p->samplerate = samplerate;
     66  /* default value for rayleigh weighting - sets preferred tempo to 120bpm */
     67  smpl_t rayparam = 60. * samplerate / 120. / hop_size;
    6568  smpl_t dfwvnorm = EXP ((LOG (2.0) / rayparam) * (winlen + 2));
    6669  /* length over which beat period is found [128] */
     
    415418aubio_beattracking_get_bpm (aubio_beattracking_t * bt)
    416419{
    417   if (bt->bp != 0 && bt->timesig != 0 && bt->counter == 0 && bt->flagstep == 0) {
    418     return 5168. / fvec_quadratic_peak_pos (bt->acfout, bt->bp);
     420  if (bt->bp != 0) {
     421    return 60. * bt->samplerate/ bt->bp / bt->hop_size;
    419422  } else {
    420423    return 0.;
  • src/tempo/beattracking.h

    r18f14f9 r77db425  
    5252
    5353*/
    54 aubio_beattracking_t * new_aubio_beattracking(uint_t hop_size);
     54aubio_beattracking_t * new_aubio_beattracking(uint_t winlen, uint_t hop_size,
     55    uint_t samplerate);
    5556
    5657/** track the beat
  • src/tempo/tempo.c

    r18f14f9 r77db425  
    142142  aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t);
    143143  o->samplerate = samplerate;
    144   o->winlen = SQR(512)/hop_size;
     144  /* length of observations, worth about 6 seconds */
     145  o->winlen = aubio_next_power_of_two(5.8 * samplerate / hop_size);
    145146  o->step = o->winlen/4;
    146147  o->blockpos = 0;
    147148  o->threshold = 0.3;
    148149  o->silence = -90.;
    149   o->blockpos = 0;
    150150  o->total_frames = 0;
    151151  o->last_beat = 0;
     
    160160  o->od       = new_aubio_specdesc(onset_mode,buf_size);
    161161  o->of       = new_fvec(1);
    162   o->bt       = new_aubio_beattracking(o->winlen);
     162  o->bt       = new_aubio_beattracking(o->winlen, o->hop_size, o->samplerate);
    163163  o->onset    = new_fvec(1);
    164164  /*if (usedoubled)    {
Note: See TracChangeset for help on using the changeset viewer.