Changeset 2eb52bd


Ignore:
Timestamp:
Nov 17, 2018, 4:36:09 PM (6 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
Children:
62c2d00, a95b386
Parents:
adde1ba (diff), 8eecb9f (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 'feature/mfccparams'

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • python/lib/gen_code.py

    radde1ba r2eb52bd  
    463463""".format(**self.__dict__)
    464464        for set_param in self.prototypes['set']:
    465             params = get_params_types_names(set_param)[1]
    466             paramtype = params['type']
     465            params = get_params_types_names(set_param)[1:]
     466            param = self.shortname.split('_set_')[-1]
     467            paramdecls = "".join(["""
     468   {0} {1};""".format(p['type'], p['name']) for p in params])
    467469            method_name = get_name(set_param)
    468470            param = method_name.split('aubio_'+self.shortname+'_set_')[-1]
    469             pyparamtype = pyargparse_chars[paramtype]
     471            refs = ", ".join(["&%s" % p['name'] for p in params])
     472            paramlist = ", ".join(["%s" % p['name'] for p in params])
     473            if len(params):
     474                paramlist = "," + paramlist
     475            pyparamtypes = ''.join([pyargparse_chars[p['type']] for p in params])
    470476            out += """
    471477static PyObject *
     
    473479{{
    474480  uint_t err = 0;
    475   {paramtype} {param};
    476 
    477   if (!PyArg_ParseTuple (args, "{pyparamtype}", &{param})) {{
     481  {paramdecls}
     482""".format(param = param, paramdecls = paramdecls, **self.__dict__)
     483
     484            if len(refs) and len(pyparamtypes):
     485                out += """
     486
     487  if (!PyArg_ParseTuple (args, "{pyparamtypes}", {refs})) {{
    478488    return NULL;
    479489  }}
    480   err = aubio_{shortname}_set_{param} (self->o, {param});
     490""".format(pyparamtypes = pyparamtypes, refs = refs)
     491
     492            out += """
     493  err = aubio_{shortname}_set_{param} (self->o {paramlist});
    481494
    482495  if (err > 0) {{
     
    493506  Py_RETURN_NONE;
    494507}}
    495 """.format(param = param, paramtype = paramtype, pyparamtype = pyparamtype, **self.__dict__)
     508""".format(param = param, refs = refs, paramdecls = paramdecls,
     509        pyparamtypes = pyparamtypes, paramlist = paramlist, **self.__dict__)
    496510        return out
    497511
  • src/mathutils.c

    radde1ba r2eb52bd  
    388388}
    389389
     390void
     391fvec_mul (fvec_t *o, smpl_t val)
     392{
     393  uint_t j;
     394  for (j = 0; j < o->length; j++) {
     395    o->data[j] *= val;
     396  }
     397}
     398
    390399void fvec_adapt_thres(fvec_t * vec, fvec_t * tmp,
    391400    uint_t post, uint_t pre) {
  • src/mathutils.h

    radde1ba r2eb52bd  
    193193*/
    194194void fvec_add (fvec_t * v, smpl_t c);
     195
     196/** multiply each elements of a vector by a scalar
     197
     198  \param v vector to add constant to
     199  \param s constant to scale v with
     200
     201*/
     202void fvec_mul (fvec_t * v, smpl_t s);
    195203
    196204/** remove the minimum value of the vector to each elements
  • src/spectral/filterbank_mel.h

    radde1ba r2eb52bd  
    5656
    5757  \param fb filterbank object
    58   \param samplerate audio sampling rate
     58  \param samplerate audio sampling rate, in Hz
    5959
    6060  The filter coefficients are built to match exactly Malcolm Slaney's Auditory
  • src/spectral/mfcc.c

    radde1ba r2eb52bd  
    5252  fvec_t *output;
    5353#endif
     54  smpl_t scale;
    5455};
    5556
     
    7576  /* filterbank allocation */
    7677  mfcc->fb = new_aubio_filterbank (n_filters, mfcc->win_s);
    77   aubio_filterbank_set_mel_coeffs_slaney (mfcc->fb, samplerate);
     78  if (n_filters == 40)
     79    aubio_filterbank_set_mel_coeffs_slaney (mfcc->fb, samplerate);
     80  else
     81    aubio_filterbank_set_mel_coeffs(mfcc->fb, samplerate,
     82        0, samplerate/2.);
    7883
    7984  /* allocating buffers */
     
    97102  mfcc->output = new_fvec (n_filters);
    98103#endif
     104
     105  mfcc->scale = 1.;
    99106
    100107  return mfcc;
     
    128135  fvec_t tmp;
    129136#endif
     137
    130138  /* compute filterbank */
    131139  aubio_filterbank_do (mf->fb, in, mf->in_dct);
     
    134142  fvec_log10 (mf->in_dct);
    135143
    136   /* raise power */
    137   //fvec_pow (mf->in_dct, 3.);
     144  if (mf->scale != 1) fvec_mul (mf->in_dct, mf->scale);
    138145
    139146  /* compute mfccs */
     
    151158  return;
    152159}
     160
     161uint_t aubio_mfcc_set_power (aubio_mfcc_t *mf, smpl_t power)
     162{
     163  return aubio_filterbank_set_power(mf->fb, power);
     164}
     165
     166uint_t aubio_mfcc_get_power (aubio_mfcc_t *mf)
     167{
     168  return aubio_filterbank_get_power(mf->fb);
     169}
     170
     171uint_t aubio_mfcc_set_scale (aubio_mfcc_t *mf, smpl_t scale)
     172{
     173  mf->scale = scale;
     174  return AUBIO_OK;
     175}
     176
     177uint_t aubio_mfcc_get_scale (aubio_mfcc_t *mf)
     178{
     179  return mf->scale;
     180}
     181
     182uint_t aubio_mfcc_set_mel_coeffs (aubio_mfcc_t *mf, smpl_t freq_min,
     183    smpl_t freq_max)
     184{
     185  return aubio_filterbank_set_mel_coeffs(mf->fb, mf->samplerate,
     186      freq_min, freq_max);
     187}
     188
     189uint_t aubio_mfcc_set_mel_coeffs_htk (aubio_mfcc_t *mf, smpl_t freq_min,
     190    smpl_t freq_max)
     191{
     192  return aubio_filterbank_set_mel_coeffs_htk(mf->fb, mf->samplerate,
     193      freq_min, freq_max);
     194}
     195
     196uint_t aubio_mfcc_set_mel_coeffs_slaney (aubio_mfcc_t *mf)
     197{
     198  return aubio_filterbank_set_mel_coeffs_slaney (mf->fb, mf->samplerate);
     199}
  • src/spectral/mfcc.h

    radde1ba r2eb52bd  
    7474void aubio_mfcc_do (aubio_mfcc_t * mf, const cvec_t * in, fvec_t * out);
    7575
     76/** set power parameter
     77
     78  \param mf mfcc object, as returned by new_aubio_mfcc()
     79  \param power Raise norm of the input spectrum norm to this power before
     80  computing filterbank.  Defaults to `1`.
     81
     82  See aubio_filterbank_set_power().
     83
     84 */
     85uint_t aubio_mfcc_set_power (aubio_mfcc_t *mf, smpl_t power);
     86
     87/** get power parameter
     88
     89  \param mf mfcc object, as returned by new_aubio_mfcc()
     90  \return current power parameter. Defaults to `1`.
     91
     92  See aubio_filterbank_get_power().
     93
     94 */
     95uint_t aubio_mfcc_get_power (aubio_mfcc_t *mf);
     96
     97/** set scaling parameter
     98
     99  \param mf mfcc object, as returned by new_aubio_mfcc()
     100  \param scale Scaling value to apply.
     101
     102  Scales the output of the filterbank after taking its logarithm and before
     103  computing the DCT. Defaults to `1`.
     104
     105*/
     106uint_t aubio_mfcc_set_scale (aubio_mfcc_t *mf, smpl_t scale);
     107
     108/** get scaling parameter
     109
     110  \param mf mfcc object, as returned by new_aubio_mfcc()
     111  \return current scaling parameter. Defaults to `1`.
     112
     113 */
     114uint_t aubio_mfcc_get_scale (aubio_mfcc_t *mf);
     115
     116/** Mel filterbank initialization
     117
     118  \param mf mfcc object
     119  \param fmin start frequency, in Hz
     120  \param fmax end frequency, in Hz
     121
     122  The filterbank will be initialized with bands linearly spaced in the mel
     123  scale, from `fmin` to `fmax`.
     124
     125  See also
     126  --------
     127
     128  aubio_filterbank_set_mel_coeffs()
     129
     130*/
     131uint_t aubio_mfcc_set_mel_coeffs (aubio_mfcc_t *mf,
     132        smpl_t fmin, smpl_t fmax);
     133
     134/** Mel filterbank initialization
     135
     136  \param mf mfcc object
     137  \param fmin start frequency, in Hz
     138  \param fmax end frequency, in Hz
     139
     140  The bank of filters will be initalized to to cover linearly spaced bands in
     141  the Htk mel scale, from `fmin` to `fmax`.
     142
     143  See also
     144  --------
     145
     146  aubio_filterbank_set_mel_coeffs_htk()
     147
     148*/
     149uint_t aubio_mfcc_set_mel_coeffs_htk (aubio_mfcc_t *mf,
     150        smpl_t fmin, smpl_t fmax);
     151
     152/** Mel filterbank initialization (Auditory Toolbox's parameters)
     153
     154  \param mf mfcc object
     155  \param samplerate audio sampling rate, in Hz
     156
     157  The filter coefficients are built to match exactly Malcolm Slaney's Auditory
     158  Toolbox implementation. The number of filters should be 40.
     159
     160  This is the default filterbank when `mf` was created with `n_filters = 40`.
     161
     162  See also
     163  --------
     164
     165  aubio_filterbank_set_mel_coeffs_slaney()
     166
     167*/
     168uint_t aubio_mfcc_set_mel_coeffs_slaney (aubio_mfcc_t *mf);
     169
    76170#ifdef __cplusplus
    77171}
Note: See TracChangeset for help on using the changeset viewer.