Changeset 35f73b8c for src/onset/onset.c


Ignore:
Timestamp:
Mar 15, 2013, 11:48:10 PM (11 years ago)
Author:
Paul Brossier <piem@piem.org>
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:
7e9e311
Parents:
f5e0a54
Message:

src/onset/: remove wasonset, add getters and setters, improve doc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/onset/onset.c

    rf5e0a54 r35f73b8c  
    3939  uint_t minioi;                /**< minimum inter onset interval */
    4040  uint_t delay;                 /**< constant delay, in samples, removed from detected onset times */
    41   fvec_t * wasonset;            /**< number of blocks since last onset */
    4241  uint_t samplerate;            /**< sampling rate of the input signal */
    4342  uint_t hop_size;              /**< number of samples between two runs */
     
    5150{
    5251  smpl_t isonset = 0;
    53   smpl_t wasonset = 0;
    5452  aubio_pvoc_do (o->pv,input, o->fftgrain);
    5553  aubio_specdesc_do (o->od,o->fftgrain, o->of);
    5654  aubio_peakpicker_do(o->pp, o->of, onset);
    5755  isonset = onset->data[0];
    58   wasonset = o->wasonset->data[0];
    5956  if (isonset > 0.) {
    6057    if (aubio_silence_detection(input, o->silence)==1) {
    6158      isonset  = 0;
    62       wasonset++;
    6359    } else {
    64       if (wasonset > o->minioi) {
    65         wasonset = 0;
    66         o->last_onset = o->total_frames + isonset * o->hop_size;
     60      uint_t new_onset = o->total_frames + isonset * o->hop_size;
     61      if (o->last_onset + o->minioi < new_onset) {
     62        o->last_onset = new_onset;
    6763      } else {
    6864        isonset  = 0;
    69         wasonset++;
    7065      }
    7166    }
    7267  } else {
    73     if (wasonset == -1 && aubio_silence_detection(input, o->silence) == 0) {
    74       //AUBIO_MSG("beginning of file is not silent, marking as onset\n",
    75       //  wasonset, aubio_silence_detection(input, o->silence));
     68    // we are at the beginning of the file, and we don't find silence
     69    if (o->total_frames == 0 && aubio_silence_detection(input, o->silence) == 0) {
     70      //AUBIO_DBG ("beginning of file is not silent, marking as onset\n");
    7671      isonset = o->delay / o->hop_size;
    7772      o->last_onset = o->delay;
    78       wasonset = 0;
    7973    }
    80     wasonset++;
    8174  }
    82   o->wasonset->data[0] = wasonset;
    83   //onset->data[0] = isonset * o->hop_size - o->delay;
    8475  onset->data[0] = isonset;
    85   // also keep a copy of the offset for use in get_last_onset
    8676  o->total_frames += o->hop_size;
    8777  return;
     
    10393}
    10494
    105 smpl_t aubio_onset_get_descriptor(aubio_onset_t * o) {
    106   return o->of->data[0];
    107 }
    108 
    109 smpl_t aubio_onset_get_thresholded_descriptor(aubio_onset_t * o) {
    110   fvec_t * thresholded = aubio_peakpicker_get_thresholded_input(o->pp);
    111   return thresholded->data[0];
    112 }
    113 
    11495uint_t aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence) {
    11596  o->silence = silence;
     
    124105
    125106uint_t aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi) {
    126   o->minioi = FLOOR(minioi / 1000. * o->samplerate / o->hop_size);
     107  o->minioi = minioi;
    127108  return AUBIO_OK;
    128109}
     
    130111uint_t aubio_onset_get_minioi(aubio_onset_t * o) {
    131112  return o->minioi;
     113}
     114
     115uint_t aubio_onset_set_minioi_s(aubio_onset_t * o, smpl_t minioi) {
     116  return aubio_onset_set_minioi (o, minioi * o->samplerate);
     117}
     118
     119smpl_t aubio_onset_get_minioi_s(aubio_onset_t * o) {
     120  return aubio_onset_get_minioi (o) / (smpl_t) o->samplerate;
     121}
     122
     123uint_t aubio_onset_set_minioi_ms(aubio_onset_t * o, smpl_t minioi) {
     124  return aubio_onset_set_minioi_s (o, minioi / 1000.);
     125}
     126
     127smpl_t aubio_onset_get_minioi_ms(aubio_onset_t * o) {
     128  return aubio_onset_get_minioi_s (o) * 1000.;
    132129}
    133130
     
    157154}
    158155
     156smpl_t aubio_onset_get_descriptor(aubio_onset_t * o) {
     157  return o->of->data[0];
     158}
     159
     160smpl_t aubio_onset_get_thresholded_descriptor(aubio_onset_t * o) {
     161  fvec_t * thresholded = aubio_peakpicker_get_thresholded_input(o->pp);
     162  return thresholded->data[0];
     163}
     164
    159165/* Allocate memory for an onset detection */
    160166aubio_onset_t * new_aubio_onset (char_t * onset_mode,
     
    163169  aubio_onset_t * o = AUBIO_NEW(aubio_onset_t);
    164170  /** set some default parameter */
     171  o->samplerate = samplerate;
     172  o->hop_size = hop_size;
    165173  o->last_onset = 0;
    166174  o->threshold = 0.3;
    167175  o->delay     = 4.3 * hop_size;
    168   o->minioi    = 5;
     176  o->minioi    = 5 * hop_size;
    169177  o->silence   = -70;
    170   o->wasonset  = new_fvec(1);
    171   o->wasonset->data[0] = -1.;
    172178  o->total_frames = 0;
    173   o->samplerate = samplerate;
    174   o->hop_size = hop_size;
    175   o->pv = new_aubio_pvoc(buf_size, hop_size);
     179  o->pv = new_aubio_pvoc(buf_size, o->hop_size);
    176180  o->pp = new_aubio_peakpicker();
    177181  aubio_peakpicker_set_threshold (o->pp, o->threshold);
     
    179183  o->fftgrain = new_cvec(buf_size);
    180184  o->of = new_fvec(1);
    181   /*if (usedoubled)    {
    182     o2 = new_aubio_specdesc(onset_type2,buffer_size);
    183     onset2 = new_fvec(1);
    184   }*/
    185185  return o;
    186186}
     
    192192  del_aubio_pvoc(o->pv);
    193193  del_fvec(o->of);
    194   del_fvec(o->wasonset);
    195194  del_cvec(o->fftgrain);
    196195  AUBIO_FREE(o);
Note: See TracChangeset for help on using the changeset viewer.