Changeset b257b60 for src


Ignore:
Timestamp:
Aug 12, 2015, 7:21:38 PM (10 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:
60fc05b
Parents:
3a1a5d6 (diff), 7b2d740 (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.
Message:

Merge branch 'develop' into notes

Location:
src
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/aubio_priv.h

    r3a1a5d6 rb257b60  
    129129#define AUBIO_SPRINTF                sprintf
    130130
    131 /* Libc shortcuts */
     131/* pi and 2*pi */
     132#ifndef M_PI
     133#define PI         (3.14159265358979323846)
     134#else
    132135#define PI         (M_PI)
     136#endif
    133137#define TWO_PI     (PI*2.)
    134138
     
    214218#define SAFE_LOG(f)   LOG(CEIL_DENORMAL(f))
    215219
     220/** silence unused parameter warning by adding an attribute */
     221#if defined(__GNUC__)
    216222#define UNUSED __attribute__((unused))
     223#else
     224#define UNUSED
     225#endif
    217226
    218227#endif /* _AUBIO__PRIV_H */
  • TabularUnified src/io/audio_unit.c

    r3a1a5d6 rb257b60  
    234234  audioFormat.mChannelsPerFrame = 2;
    235235  audioFormat.mFormatID = kAudioFormatLinearPCM;
    236   audioFormat.mFormatFlags = kAudioFormatFlagsCanonical;
     236  audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
    237237  audioFormat.mFramesPerPacket = 1;
    238   audioFormat.mBitsPerChannel = 8 * sizeof(AudioSampleType);
     238  audioFormat.mBitsPerChannel = 8 * sizeof(SInt16);
    239239#if 1  // interleaving
    240   audioFormat.mBytesPerFrame = 2 * sizeof(AudioSampleType);
    241   audioFormat.mBytesPerPacket = 2 * sizeof(AudioSampleType);
     240  audioFormat.mBytesPerFrame = 2 * sizeof(SInt16);
     241  audioFormat.mBytesPerPacket = 2 * sizeof(SInt16);
    242242#else
    243   audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame = sizeof(AudioUnitSampleType);
     243  audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame = sizeof(SInt32);
    244244  audioFormat.mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
    245245#endif
  • TabularUnified src/io/sink_apple_audio.c

    r3a1a5d6 rb257b60  
    6161  s->max_frames = MAX_SIZE;
    6262  s->async = true;
     63
     64  if (uri == NULL) {
     65    AUBIO_ERROR("sink_apple_audio: Aborted opening null path\n");
     66    goto beach;
     67  }
    6368
    6469  s->samplerate = 0;
  • TabularUnified src/io/sink_sndfile.c

    r3a1a5d6 rb257b60  
    142142void aubio_sink_sndfile_do(aubio_sink_sndfile_t *s, fvec_t * write_data, uint_t write){
    143143  uint_t i, j,  channels = s->channels;
    144   int nsamples = channels*write;
     144  int nsamples = 0;
    145145  smpl_t *pwrite;
    146146  sf_count_t written_frames;
    147147
    148148  if (write > s->max_size) {
    149     AUBIO_WRN("trying to write %d frames, but only %d can be written at a time",
     149    AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n",
    150150      write, s->max_size);
    151151    write = s->max_size;
    152152  }
     153
     154  nsamples = channels * write;
    153155
    154156  /* interleaving data  */
     
    162164  written_frames = sf_write_float (s->handle, s->scratch_data, nsamples);
    163165  if (written_frames/channels != write) {
    164     AUBIO_WRN("sink_sndfile: trying to write %d frames to %s, but only %d could be written",
     166    AUBIO_WRN("sink_sndfile: trying to write %d frames to %s, but only %d could be written\n",
    165167      write, s->path, (uint_t)written_frames);
    166168  }
     
    170172void aubio_sink_sndfile_do_multi(aubio_sink_sndfile_t *s, fmat_t * write_data, uint_t write){
    171173  uint_t i, j,  channels = s->channels;
    172   int nsamples = channels*write;
     174  int nsamples = 0;
    173175  smpl_t *pwrite;
    174176  sf_count_t written_frames;
    175177
    176178  if (write > s->max_size) {
    177     AUBIO_WRN("trying to write %d frames, but only %d can be written at a time",
     179    AUBIO_WRN("sink_sndfile: trying to write %d frames, but only %d can be written at a time\n",
    178180      write, s->max_size);
    179181    write = s->max_size;
    180182  }
     183
     184  nsamples = channels * write;
    181185
    182186  /* interleaving data  */
     
    190194  written_frames = sf_write_float (s->handle, s->scratch_data, nsamples);
    191195  if (written_frames/channels != write) {
    192     AUBIO_WRN("sink_sndfile: trying to write %d frames to %s, but only %d could be written",
     196    AUBIO_WRN("sink_sndfile: trying to write %d frames to %s, but only %d could be written\n",
    193197      write, s->path, (uint_t)written_frames);
    194198  }
  • TabularUnified src/io/sink_wavwrite.c

    r3a1a5d6 rb257b60  
    4545#define HTOLES(x) x
    4646#else
     47#ifdef HAVE_WIN_HACKS
     48#define HTOLES(x) x
     49#else
    4750#define HTOLES(x) SWAPS(htons(x))
     51#endif
    4852#endif
    4953
     
    98102  // zero samplerate given. do not open yet
    99103  if ((sint_t)samplerate == 0) return s;
     104  // samplerate way too large, fail
     105  if ((sint_t)samplerate > 192000 * 4) goto beach;
    100106
    101107  s->samplerate = samplerate;
  • TabularUnified src/io/source_sndfile.c

    r3a1a5d6 rb257b60  
    152152void aubio_source_sndfile_do(aubio_source_sndfile_t * s, fvec_t * read_data, uint_t * read){
    153153  uint_t i,j, input_channels = s->input_channels;
    154   /* do actual reading */
     154  /* read from file into scratch_data */
    155155  sf_count_t read_samples = sf_read_float (s->handle, s->scratch_data, s->scratch_size);
    156156
    157   smpl_t *data;
    158 
     157  /* where to store de-interleaved data */
     158  smpl_t *ptr_data;
    159159#ifdef HAVE_SAMPLERATE
    160160  if (s->ratio != 1) {
    161     data = s->input_data->data;
     161    ptr_data = s->input_data->data;
    162162  } else
    163163#endif /* HAVE_SAMPLERATE */
    164164  {
    165     data = read_data->data;
     165    ptr_data = read_data->data;
    166166  }
    167167
    168168  /* de-interleaving and down-mixing data  */
    169169  for (j = 0; j < read_samples / input_channels; j++) {
    170     data[j] = 0;
     170    ptr_data[j] = 0;
    171171    for (i = 0; i < input_channels; i++) {
    172       data[j] += s->scratch_data[input_channels*j+i];
    173     }
    174     data[j] /= (smpl_t)input_channels;
     172      ptr_data[j] += s->scratch_data[input_channels*j+i];
     173    }
     174    ptr_data[j] /= (smpl_t)input_channels;
    175175  }
    176176
     
    196196  sf_count_t read_samples = sf_read_float (s->handle, s->scratch_data, s->scratch_size);
    197197
    198   smpl_t **data;
    199 
     198  /* where to store de-interleaved data */
     199  smpl_t **ptr_data;
    200200#ifdef HAVE_SAMPLERATE
    201201  if (s->ratio != 1) {
    202     AUBIO_ERR("source_sndfile: no multi channel resampling yet");
     202    AUBIO_ERR("source_sndfile: no multi channel resampling yet\n");
    203203    return;
    204     //data = s->input_data->data;
     204    //ptr_data = s->input_data->data;
    205205  } else
    206206#endif /* HAVE_SAMPLERATE */
    207207  {
    208     data = read_data->data;
     208    ptr_data = read_data->data;
    209209  }
    210210
     
    214214    for (j = 0; j < read_samples / input_channels; j++) {
    215215      for (i = 0; i < read_data->height; i++) {
    216         data[i][j] = (smpl_t)s->scratch_data[j * input_channels + i];
     216        ptr_data[i][j] = (smpl_t)s->scratch_data[j * input_channels + i];
    217217      }
    218218    }
     
    222222    for (j = 0; j < read_samples / input_channels; j++) {
    223223      for (i = 0; i < input_channels; i++) {
    224         data[i][j] = (smpl_t)s->scratch_data[j * input_channels + i];
     224        ptr_data[i][j] = (smpl_t)s->scratch_data[j * input_channels + i];
    225225      }
    226226    }
     
    232232    for (j = 0; j < read_samples / input_channels; j++) {
    233233      for (i = input_channels; i < read_data->height; i++) {
    234         data[i][j] = (smpl_t)s->scratch_data[j * input_channels + (input_channels - 1)];
     234        ptr_data[i][j] = (smpl_t)s->scratch_data[j * input_channels + (input_channels - 1)];
    235235      }
    236236    }
     
    265265uint_t aubio_source_sndfile_seek (aubio_source_sndfile_t * s, uint_t pos) {
    266266  uint_t resampled_pos = (uint_t)ROUND(pos / s->ratio);
    267   return sf_seek (s->handle, resampled_pos, SEEK_SET);
     267  sf_count_t sf_ret = sf_seek (s->handle, resampled_pos, SEEK_SET);
     268  if (sf_ret == -1) {
     269    AUBIO_ERR("source_sndfile: Failed seeking %s at %d: %s\n", s->path, pos, sf_strerror (NULL));
     270    return AUBIO_FAIL;
     271  }
     272  if (sf_ret != resampled_pos) {
     273    AUBIO_ERR("source_sndfile: Tried seeking %s at %d, but got %d: %s\n",
     274        s->path, resampled_pos, (uint_t)sf_ret, sf_strerror (NULL));
     275    return AUBIO_FAIL;
     276  }
     277  return AUBIO_OK;
    268278}
    269279
     
    273283  }
    274284  if(sf_close(s->handle)) {
    275     AUBIO_ERR("source_sndfile: Error closing file %s: %s", s->path, sf_strerror (NULL));
     285    AUBIO_ERR("source_sndfile: Error closing file %s: %s\n", s->path, sf_strerror (NULL));
    276286    return AUBIO_FAIL;
    277287  }
  • TabularUnified src/io/source_wavread.c

    r3a1a5d6 rb257b60  
    9393  s->fid = fopen((const char *)path, "rb");
    9494  if (!s->fid) {
    95     AUBIO_ERR("source_wavread: could not open %s (%s)\n", s->path, strerror(errno));
     95    AUBIO_ERR("source_wavread: Failed opening %s (System error: %s)\n", s->path, strerror(errno));
    9696    goto beach;
    9797  }
     
    220220#ifndef HAVE_WIN_HACKS
    221221    AUBIO_ERR("source_wavread: short read (%zd instead of %zd) in %s\n",
     222        bytes_read, bytes_expected, s->path);
    222223#else // mingw does not know about %zd...
    223224    AUBIO_ERR("source_wavread: short read (%d instead of %d) in %s\n",
     225        (int)bytes_read, (int)bytes_expected, s->path);
    224226#endif
    225         bytes_read, bytes_expected, s->path);
    226227    goto beach;
    227228  }
     
    356357
    357358uint_t aubio_source_wavread_seek (aubio_source_wavread_t * s, uint_t pos) {
    358   uint_t ret = fseek(s->fid, s->seek_start + pos * s->blockalign, SEEK_SET);
     359  uint_t ret = 0;
     360  if ((sint_t)pos < 0) {
     361    return AUBIO_FAIL;
     362  }
     363  ret = fseek(s->fid, s->seek_start + pos * s->blockalign, SEEK_SET);
     364  if (ret != 0) {
     365    AUBIO_ERR("source_wavread: could not seek %s at %d (%s)\n", s->path, pos, strerror(errno));
     366    return AUBIO_FAIL;
     367  }
     368  // reset some values
    359369  s->eof = 0;
    360370  s->read_index = 0;
    361   return ret;
     371  return AUBIO_OK;
    362372}
    363373
  • TabularUnified src/mathutils.c

    r3a1a5d6 rb257b60  
    141141    case aubio_win_parzen:
    142142      for (i=0;i<size;i++)
    143         w[i] = 1.0 - ABS((2.*i-size)/(size+1.0));
     143        w[i] = 1.0 - ABS((2.f*i-size)/(size+1.0f));
    144144      break;
    145145    default:
  • TabularUnified src/musicutils.h

    r3a1a5d6 rb257b60  
    113113smpl_t aubio_zero_crossing_rate (fvec_t * v);
    114114
    115 /** compute sound level on a linear
     115/** compute sound level on a linear scale
    116116
    117117  This gives the average of the square amplitudes.
    118118
    119   \param v vector to compute dB SPL from
     119  \param v vector to compute level from
    120120
    121121  \return level of v
  • TabularUnified src/onset/onset.c

    r3a1a5d6 rb257b60  
    6969  } else {
    7070    // we are at the beginning of the file, and we don't find silence
    71     if (o->total_frames == 0 && aubio_silence_detection(input, o->silence) == 0) {
     71    if (o->total_frames <= o->delay && o->last_onset < o ->minioi && aubio_silence_detection(input, o->silence) == 0) {
    7272      //AUBIO_DBG ("beginning of file is not silent, marking as onset\n");
    7373      isonset = o->delay / o->hop_size;
     
    100100}
    101101
     102smpl_t aubio_onset_get_silence(aubio_onset_t * o) {
     103  return o->silence;
     104}
     105
    102106uint_t aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold) {
    103107  aubio_peakpicker_set_threshold(o->pp, threshold);
     
    173177{
    174178  aubio_onset_t * o = AUBIO_NEW(aubio_onset_t);
     179
     180  /* check parameters are valid */
     181  if ((sint_t)hop_size < 1) {
     182    AUBIO_ERR("onset: got hop_size %d, but can not be < 1\n", hop_size);
     183    goto beach;
     184  } else if ((sint_t)buf_size < 1) {
     185    AUBIO_ERR("onset: got buffer_size %d, but can not be < 1\n", buf_size);
     186    goto beach;
     187  } else if (buf_size < hop_size) {
     188    AUBIO_ERR("onset: hop size (%d) is larger than win size (%d)\n", buf_size, hop_size);
     189    goto beach;
     190  } else if ((sint_t)samplerate < 1) {
     191    AUBIO_ERR("onset: samplerate (%d) can not be < 1\n", samplerate);
     192    goto beach;
     193  }
     194
    175195  /* store creation parameters */
    176196  o->samplerate = samplerate;
     
    194214  o->total_frames = 0;
    195215  return o;
     216
     217beach:
     218  AUBIO_FREE(o);
     219  return NULL;
    196220}
    197221
  • TabularUnified src/onset/onset.h

    r3a1a5d6 rb257b60  
    126126uint_t aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence);
    127127
     128/** get onset detection silence threshold
     129
     130  \param o onset detection object as returned by new_aubio_onset()
     131
     132  \return current silence threshold
     133
     134*/
     135smpl_t aubio_onset_get_silence(aubio_onset_t * o);
     136
    128137/** get onset detection function
    129138
  • TabularUnified src/pitch/pitch.c

    r3a1a5d6 rb257b60  
    130130    pitch_type = aubio_pitcht_default;
    131131  }
     132
     133  // check parameters are valid
     134  if ((sint_t)hopsize < 1) {
     135    AUBIO_ERR("onset: got hopsize %d, but can not be < 1\n", hopsize);
     136    goto beach;
     137  } else if ((sint_t)bufsize < 1) {
     138    AUBIO_ERR("onset: got buffer_size %d, but can not be < 1\n", bufsize);
     139    goto beach;
     140  } else if (bufsize < hopsize) {
     141    AUBIO_ERR("onset: hop size (%d) is larger than win size (%d)\n", bufsize, hopsize);
     142    goto beach;
     143  } else if ((sint_t)samplerate < 1) {
     144    AUBIO_ERR("onset: samplerate (%d) can not be < 1\n", samplerate);
     145    goto beach;
     146  }
     147
    132148  p->samplerate = samplerate;
    133149  p->type = pitch_type;
     
    179195  }
    180196  return p;
     197
     198beach:
     199  AUBIO_FREE(p);
     200  return NULL;
    181201}
    182202
     
    238258    pitch_mode = aubio_pitchm_freq;
    239259  else if (strcmp (pitch_unit, "hertz") == 0)
     260    pitch_mode = aubio_pitchm_freq;
     261  else if (strcmp (pitch_unit, "Hertz") == 0)
    240262    pitch_mode = aubio_pitchm_freq;
    241263  else if (strcmp (pitch_unit, "Hz") == 0)
     
    296318aubio_pitch_set_silence (aubio_pitch_t * p, smpl_t silence)
    297319{
    298   if (silence < 0 && silence > -200) {
     320  if (silence <= 0 && silence >= -200) {
    299321    p->silence = silence;
    300322    return AUBIO_OK;
    301323  } else {
    302     AUBIO_ERR("pitch: could do set silence to %.2f", silence);
     324    AUBIO_ERR("pitch: could not set silence to %.2f", silence);
    303325    return AUBIO_FAIL;
    304326  }
  • TabularUnified src/pitch/pitchyin.c

    r3a1a5d6 rb257b60  
    146146    }
    147147    tmp2 += yin->data[tau];
    148     yin->data[tau] *= tau / tmp2;
     148    if (tmp2 != 0) {
     149      yin->data[tau] *= tau / tmp2;
     150    } else {
     151      yin->data[tau] = 1.;
     152    }
    149153    period = tau - 3;
    150154    if (tau > 4 && (yin->data[period] < tol) &&
  • TabularUnified src/pitch/pitchyinfft.c

    r3a1a5d6 rb257b60  
    136136    // and the cumulative mean normalized difference function
    137137    tmp += yin->data[tau];
    138     yin->data[tau] *= tau / tmp;
     138    if (tmp != 0) {
     139      yin->data[tau] *= tau / tmp;
     140    } else {
     141      yin->data[tau] = 1.;
     142    }
    139143  }
    140144  // find best candidates
  • TabularUnified src/spectral/phasevoc.c

    r3a1a5d6 rb257b60  
    7878
    7979  if ((sint_t)hop_s < 1) {
    80     AUBIO_ERR("got hop_size %d, but can not be < 1\n", hop_s);
     80    AUBIO_ERR("pvoc: got hop_size %d, but can not be < 1\n", hop_s);
    8181    goto beach;
    8282  } else if ((sint_t)win_s < 1) {
    83     AUBIO_ERR("got buffer_size %d, but can not be < 1\n", win_s);
     83    AUBIO_ERR("pvoc: got buffer_size %d, but can not be < 1\n", win_s);
    8484    goto beach;
    8585  } else if (win_s < hop_s) {
    86     AUBIO_ERR("hop size (%d) is larger than win size (%d)\n", win_s, hop_s);
     86    AUBIO_ERR("pvoc: hop size (%d) is larger than win size (%d)\n", win_s, hop_s);
    8787    goto beach;
    8888  }
  • TabularUnified src/spectral/specdesc.c

    r3a1a5d6 rb257b60  
    119119    onset->data[0] +=
    120120      SQRT (ABS (SQR (o->oldmag->data[j]) + SQR (fftgrain->norm[j])
    121             - 2. * o->oldmag->data[j] * fftgrain->norm[j]
     121            - 2 * o->oldmag->data[j] * fftgrain->norm[j]
    122122            * COS (o->dev1->data[j] - fftgrain->phas[j])));
    123123    /* swap old phase data (need to remember 2 frames behind)*/
  • TabularUnified src/spectral/specdesc.h

    r3a1a5d6 rb257b60  
    158158/** execute spectral description function on a spectral frame
    159159
    160   Generic function to compute spectral detescription.
     160  Generic function to compute spectral description.
    161161
    162162  \param o spectral description object as returned by new_aubio_specdesc()
  • TabularUnified src/synth/sampler.c

    r3a1a5d6 rb257b60  
    4040{
    4141  aubio_sampler_t *s = AUBIO_NEW(aubio_sampler_t);
     42  if ((sint_t)blocksize < 1) {
     43    AUBIO_ERR("sampler: got blocksize %d, but can not be < 1\n", blocksize);
     44    goto beach;
     45  }
    4246  s->samplerate = samplerate;
    4347  s->blocksize = blocksize;
     
    4751  s->playing = 0;
    4852  return s;
     53beach:
     54  AUBIO_FREE(s);
     55  return NULL;
    4956}
    5057
  • TabularUnified src/tempo/beattracking.c

    r3a1a5d6 rb257b60  
    267267  sint_t k = 0;
    268268  smpl_t three_energy = 0., four_energy = 0.;
     269  if (gp < 2) return 4;
    269270  if (acflen > 6 * gp + 2) {
    270271    for (k = -2; k < 2; k++) {
     
    331332  if (counter == 1 && flagstep == 1) {
    332333    //check for consistency between previous beatperiod values
    333     if (ABS (2. * rp - rp1 - rp2) < bt->g_var) {
     334    if (ABS (2 * rp - rp1 - rp2) < bt->g_var) {
    334335      //if true, can activate context dependent model
    335336      flagconst = 1;
  • TabularUnified src/tempo/tempo.c

    r3a1a5d6 rb257b60  
    110110      tempo->data[0] = o->out->data[i] - FLOOR(o->out->data[i]); /* set tactus */
    111111      /* test for silence */
    112       /*
    113112      if (aubio_silence_detection(input, o->silence)==1) {
    114113        tempo->data[0] = 0; // unset beat if silent
    115114      }
    116       */
    117115      o->last_beat = o->total_frames + (uint_t)ROUND(tempo->data[0] * o->hop_size);
    118116    }
     
    149147  o->silence = silence;
    150148  return AUBIO_OK;
     149}
     150
     151smpl_t aubio_tempo_get_silence(aubio_tempo_t * o) {
     152  return o->silence;
    151153}
    152154
     
    157159}
    158160
     161smpl_t aubio_tempo_get_threshold(aubio_tempo_t * o) {
     162  return o->threshold;
     163}
     164
    159165/* Allocate memory for an tempo detection */
    160166aubio_tempo_t * new_aubio_tempo (char_t * tempo_mode,
     
    164170  char_t specdesc_func[20];
    165171  o->samplerate = samplerate;
     172  // check parameters are valid
     173  if ((sint_t)hop_size < 1) {
     174    AUBIO_ERR("tempo: got hop size %d, but can not be < 1\n", hop_size);
     175    goto beach;
     176  } else if ((sint_t)buf_size < 1) {
     177    AUBIO_ERR("tempo: got window size %d, but can not be < 1\n", buf_size);
     178    goto beach;
     179  } else if (buf_size < hop_size) {
     180    AUBIO_ERR("tempo: hop size (%d) is larger than window size (%d)\n", buf_size, hop_size);
     181    goto beach;
     182  } else if ((sint_t)samplerate < 1) {
     183    AUBIO_ERR("tempo: samplerate (%d) can not be < 1\n", samplerate);
     184    goto beach;
     185  }
     186
    166187  /* length of observations, worth about 6 seconds */
    167188  o->winlen = aubio_next_power_of_two(5.8 * samplerate / hop_size);
     189  if (o->winlen < 4) o->winlen = 4;
    168190  o->step = o->winlen/4;
    169191  o->blockpos = 0;
     
    194216  }*/
    195217  return o;
     218
     219beach:
     220  AUBIO_FREE(o);
     221  return NULL;
    196222}
    197223
  • TabularUnified src/tempo/tempo.h

    r3a1a5d6 rb257b60  
    9494uint_t aubio_tempo_set_silence(aubio_tempo_t * o, smpl_t silence);
    9595
     96/** get tempo detection silence threshold
     97
     98  \param o tempo detection object as returned by new_aubio_tempo()
     99
     100  \return current silence threshold
     101
     102*/
     103smpl_t aubio_tempo_get_silence(aubio_tempo_t * o);
     104
    96105/** set tempo detection peak picking threshold
    97106
     
    103112*/
    104113uint_t aubio_tempo_set_threshold(aubio_tempo_t * o, smpl_t threshold);
     114
     115/** get tempo peak picking threshold
     116
     117  \param o tempo detection object as returned by new_aubio_tempo()
     118
     119  \return current tempo detection threshold
     120
     121*/
     122smpl_t aubio_tempo_get_threshold(aubio_tempo_t * o);
    105123
    106124/** get current tempo
  • TabularUnified src/temporal/resampler.c

    r3a1a5d6 rb257b60  
    7777struct _aubio_resampler_t
    7878{
     79  void *dummy;
    7980};
    8081
  • TabularUnified src/wscript_build

    r3a1a5d6 rb257b60  
    2121# build libaubio.so (cshlib) and/or libaubio.a (cstlib)
    2222if ctx.env['DEST_OS'] in ['ios', 'iosimulator']:
    23     build_features = ['cstlib']
     23    build_features = ['cstlib', 'cshlib']
    2424elif ctx.env['DEST_OS'] in ['win32', 'win64']:
    2525    build_features = ['cshlib']
     
    3030    ctx(features = 'c ' + target,
    3131            use = ['lib_objects'],
     32            uselib = uselib,
    3233            lib = 'm',
    3334            target = 'aubio',
    34             install_path = '${PREFIX}/lib',
    3535            vnum = ctx.env['LIB_VERSION'])
    3636
Note: See TracChangeset for help on using the changeset viewer.