Changeset 6203a70


Ignore:
Timestamp:
Sep 15, 2018, 6:30:42 PM (2 years ago)
Author:
Paul Brossier <piem@piem.org>
Branches:
feature/constantq
Children:
45c2c5c
Parents:
81fe7d30 (diff), 8c4918a (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 'master' into feature/constantq

Files:
10 added
8 edited

Legend:

Unmodified
Added
Removed
  • python/ext/aubiomodule.c

    r81fe7d30 r6203a70  
    243243  {"level_detection", Py_aubio_level_detection, METH_VARARGS, Py_aubio_level_detection_doc},
    244244  {"window", Py_aubio_window, METH_VARARGS, Py_aubio_window_doc},
     245  {"shift", Py_aubio_shift, METH_VARARGS, Py_aubio_shift_doc},
     246  {"ishift", Py_aubio_ishift, METH_VARARGS, Py_aubio_ishift_doc},
    245247  {NULL, NULL, 0, NULL} /* Sentinel */
    246248};
  • python/ext/py-musicutils.c

    r81fe7d30 r6203a70  
    134134  return level_detection;
    135135}
     136
     137PyObject *
     138Py_aubio_shift(PyObject *self, PyObject *args)
     139{
     140  PyObject *input;
     141  fvec_t vec;
     142
     143  if (!PyArg_ParseTuple (args, "O:shift", &input)) {
     144    return NULL;
     145  }
     146
     147  if (input == NULL) {
     148    return NULL;
     149  }
     150
     151  if (!PyAubio_ArrayToCFvec(input, &vec)) {
     152    return NULL;
     153  }
     154
     155  fvec_shift(&vec);
     156
     157  //Py_RETURN_NONE;
     158  return (PyObject *) PyAubio_CFvecToArray(&vec);
     159}
     160
     161PyObject *
     162Py_aubio_ishift(PyObject *self, PyObject *args)
     163{
     164  PyObject *input;
     165  fvec_t vec;
     166
     167  if (!PyArg_ParseTuple (args, "O:shift", &input)) {
     168    return NULL;
     169  }
     170
     171  if (input == NULL) {
     172    return NULL;
     173  }
     174
     175  if (!PyAubio_ArrayToCFvec(input, &vec)) {
     176    return NULL;
     177  }
     178
     179  fvec_ishift(&vec);
     180
     181  //Py_RETURN_NONE;
     182  return (PyObject *) PyAubio_CFvecToArray(&vec);
     183}
  • python/ext/py-musicutils.h

    r81fe7d30 r6203a70  
    7272PyObject * Py_aubio_level_detection(PyObject *self, PyObject *args);
    7373
     74static char Py_aubio_shift_doc[] = ""
     75"Swap left and right partitions of a vector\n"
     76"\n"
     77"Returns the swapped vector. The input vector is also modified.\n"
     78"\n"
     79"For a vector of length N, the partition is split at index N - N//2.\n"
     80"\n"
     81"Example\n"
     82"-------\n"
     83"\n"
     84">>> import numpy\n"
     85">>> shift(numpy.arange(3, dtype=aubio.float_type))\n"
     86"array([2., 0., 1.], dtype=" AUBIO_NPY_SMPL_STR ")";
     87PyObject * Py_aubio_shift(PyObject *self, PyObject *args);
     88
     89static char Py_aubio_ishift_doc[] = ""
     90"Swap right and left partitions of a vector\n"
     91"\n"
     92"Returns the swapped vector. The input vector is also modified.\n"
     93"\n"
     94"Unlike with shift(), the partition is split at index N//2.\n"
     95"\n"
     96"Example\n"
     97"-------\n"
     98"\n"
     99">>> import numpy\n"
     100">>> ishift(numpy.arange(3, dtype=aubio.float_type))\n"
     101"array([1., 2., 0.], dtype=" AUBIO_NPY_SMPL_STR ")";
     102PyObject * Py_aubio_ishift(PyObject *self, PyObject *args);
     103
    74104#endif /* PY_AUBIO_MUSICUTILS_H */
  • python/lib/gen_code.py

    r81fe7d30 r6203a70  
    8585        'filterbank': 'self->n_filters',
    8686        'tss': 'self->buf_size',
     87        'dct': 'self->size',
    8788        'constantq': 'aubio_constantq_get_numbins (self->o)',
    8889        }
     
    180181        self.do_outputs = get_params_types_names(self.do_proto)[2:]
    181182        struct_output_str = ["PyObject *{0[name]}; {1} c_{0[name]}".format(i, i['type'][:-1]) for i in self.do_outputs]
     183        if len(self.prototypes['rdo']):
     184            rdo_outputs = get_params_types_names(prototypes['rdo'][0])[2:]
     185            struct_output_str += ["PyObject *{0[name]}; {1} c_{0[name]}".format(i, i['type'][:-1]) for i in rdo_outputs]
     186            self.outputs += rdo_outputs
    182187        self.struct_outputs = ";\n    ".join(struct_output_str)
    183188
     
    194199            out += self.gen_del()
    195200            out += self.gen_do()
     201            if len(self.prototypes['rdo']):
     202                self.do_proto = self.prototypes['rdo'][0]
     203                self.do_inputs = [get_params_types_names(self.do_proto)[1]]
     204                self.do_outputs = get_params_types_names(self.do_proto)[2:]
     205                out += self.gen_do(method='rdo')
    196206            out += self.gen_memberdef()
    197207            out += self.gen_set()
     
    374384        return out
    375385
    376     def gen_do(self):
     386    def gen_do(self, method = 'do'):
    377387        out = """
    378388// do {shortname}
    379389static PyObject*
    380 Py_{shortname}_do  (Py_{shortname} * self, PyObject * args)
    381 {{""".format(**self.__dict__)
     390Pyaubio_{shortname}_{method}  (Py_{shortname} * self, PyObject * args)
     391{{""".format(method = method, **self.__dict__)
    382392        input_params = self.do_inputs
    383393        output_params = self.do_outputs
     
    519529  {{"{shortname}", (PyCFunction) Py{name},
    520530    METH_NOARGS, ""}},""".format(name = name, shortname = shortname)
     531        for m in self.prototypes['rdo']:
     532            name = get_name(m)
     533            shortname = name.replace('aubio_%s_' % self.shortname, '')
     534            out += """
     535  {{"{shortname}", (PyCFunction) Py{name},
     536    METH_VARARGS, ""}},""".format(name = name, shortname = shortname)
    521537        out += """
    522538  {NULL} /* sentinel */
     
    544560  0,
    545561  0,
    546   (ternaryfunc)Py_{shortname}_do,
     562  (ternaryfunc)Pyaubio_{shortname}_do,
    547563  0,
    548564  0,
  • python/lib/gen_external.py

    r81fe7d30 r6203a70  
    182182            shortname = o[6:-2]  # without aubio_ prefix and _t suffix
    183183
    184         lib[shortname] = {'struct': [], 'new': [], 'del': [], 'do': [], 'get': [], 'set': [], 'other': []}
     184        lib[shortname] = {'struct': [], 'new': [], 'del': [], 'do': [], 'rdo': [], 'get': [], 'set': [], 'other': []}
    185185        lib[shortname]['longname'] = o
    186186        lib[shortname]['shortname'] = shortname
     
    196196                elif '_do' in fn:
    197197                    lib[shortname]['do'].append(fn)
     198                elif '_rdo' in fn:
     199                    lib[shortname]['rdo'].append(fn)
    198200                elif 'new_' in fn:
    199201                    lib[shortname]['new'].append(fn)
  • src/aubio.h

    r81fe7d30 r6203a70  
    183183#include "temporal/c_weighting.h"
    184184#include "spectral/fft.h"
     185#include "spectral/dct.h"
    185186#include "spectral/phasevoc.h"
    186187#include "spectral/constantq.h"
  • src/aubio_priv.h

    r81fe7d30 r6203a70  
    8686#define aubio_vDSP_mmov       vDSP_mmov
    8787#define aubio_vDSP_vmul       vDSP_vmul
     88#define aubio_vDSP_vsmul      vDSP_vsmul
     89#define aubio_vDSP_vsadd      vDSP_vsadd
    8890#define aubio_vDSP_vfill      vDSP_vfill
    8991#define aubio_vDSP_meanv      vDSP_meanv
     
    98100#define aubio_vDSP_mmov       vDSP_mmovD
    99101#define aubio_vDSP_vmul       vDSP_vmulD
     102#define aubio_vDSP_vsmul      vDSP_vsmulD
     103#define aubio_vDSP_vsadd      vDSP_vsaddD
    100104#define aubio_vDSP_vfill      vDSP_vfillD
    101105#define aubio_vDSP_meanv      vDSP_meanvD
  • src/spectral/mfcc.c

    r81fe7d30 r6203a70  
    2929#include "spectral/filterbank.h"
    3030#include "spectral/filterbank_mel.h"
     31#include "spectral/dct.h"
    3132#include "spectral/mfcc.h"
     33
     34#undef HAVE_SLOW_DCT
    3235
    3336/** Internal structure for mfcc object */
     
    4144  aubio_filterbank_t *fb;   /** filter bank */
    4245  fvec_t *in_dct;           /** input buffer for dct * [fb->n_filters] */
     46#if defined(HAVE_SLOW_DCT)
    4347  fmat_t *dct_coeffs;       /** DCT transform n_filters * n_coeffs */
     48#else
     49  aubio_dct_t *dct;
     50  fvec_t *output;
     51#endif
    4452};
    4553
     
    5260  /* allocate space for mfcc object */
    5361  aubio_mfcc_t *mfcc = AUBIO_NEW (aubio_mfcc_t);
     62#if defined(HAVE_SLOW_DCT)
    5463  smpl_t scaling;
    5564
    5665  uint_t i, j;
     66#endif
    5767
    5868  mfcc->win_s = win_s;
     
    6878  mfcc->in_dct = new_fvec (n_filters);
    6979
     80#if defined(HAVE_SLOW_DCT)
    7081  mfcc->dct_coeffs = new_fmat (n_coefs, n_filters);
    7182
     
    8091    mfcc->dct_coeffs->data[0][i] *= SQRT (2.) / 2.;
    8192  }
     93#else
     94  mfcc->dct = new_aubio_dct (n_filters);
     95  mfcc->output = new_fvec (n_filters);
     96#endif
    8297
    8398  return mfcc;
     
    93108  /* delete buffers */
    94109  del_fvec (mf->in_dct);
     110#if defined(HAVE_SLOW_DCT)
    95111  del_fmat (mf->dct_coeffs);
     112#else
     113  del_aubio_dct (mf->dct);
     114  del_fvec (mf->output);
     115#endif
    96116
    97117  /* delete mfcc object */
     
    103123aubio_mfcc_do (aubio_mfcc_t * mf, const cvec_t * in, fvec_t * out)
    104124{
     125#ifndef HAVE_SLOW_DCT
     126  fvec_t tmp;
     127#endif
    105128  /* compute filterbank */
    106129  aubio_filterbank_do (mf->fb, in, mf->in_dct);
     
    113136
    114137  /* compute mfccs */
     138#if defined(HAVE_SLOW_DCT)
    115139  fmat_vecmul(mf->dct_coeffs, mf->in_dct, out);
     140#else
     141  aubio_dct_do(mf->dct, mf->in_dct, mf->output);
     142  // copy only first n_coeffs elements
     143  // TODO assert mf->output->length == n_coeffs
     144  tmp.data = mf->output->data;
     145  tmp.length = out->length;
     146  fvec_copy(&tmp, out);
     147#endif
    116148
    117149  return;
Note: See TracChangeset for help on using the changeset viewer.