cvec_t vec;
fvec_t freqs;
fmat_t coeffs;
- fvec_t *out;
+ PyObject *out;
+ fvec_t c_out;
} Py_filterbank;
static PyObject *
{
self->o = new_aubio_filterbank (self->n_filters, self->win_s);
if (self->o == NULL) {
- char_t errstr[30];
- sprintf(errstr, "error creating filterbank with n_filters=%d, win_s=%d",
- self->n_filters, self->win_s);
- PyErr_SetString (PyExc_RuntimeError, errstr);
+ PyErr_Format(PyExc_RuntimeError, "error creating filterbank with"
+ " n_filters=%d, win_s=%d", self->n_filters, self->win_s);
return -1;
}
- self->out = new_fvec(self->n_filters);
+ self->out = new_py_fvec(self->n_filters);
return 0;
}
static void
Py_filterbank_del (Py_filterbank *self, PyObject *unused)
{
- del_aubio_filterbank(self->o);
- del_fvec(self->out);
- free(self->coeffs.data);
+ if (self->o) {
+ free(self->coeffs.data);
+ del_aubio_filterbank(self->o);
+ }
+ Py_XDECREF(self->out);
Py_TYPE(self)->tp_free((PyObject *) self);
}
return NULL;
}
- if (!PyAubio_ArrayToCCvec(input, &(self->vec) )) {
+ if (!PyAubio_PyCvecToCCvec(input, &(self->vec) )) {
+ return NULL;
+ }
+
+ if (self->vec.length != self->win_s / 2 + 1) {
+ PyErr_Format(PyExc_ValueError,
+ "input cvec has length %d, but fft expects length %d",
+ self->vec.length, self->win_s / 2 + 1);
return NULL;
}
+ Py_INCREF(self->out);
+ if (!PyAubio_ArrayToCFvec(self->out, &(self->c_out))) {
+ return NULL;
+ }
// compute the function
- aubio_filterbank_do (self->o, &(self->vec), self->out);
- return (PyObject *)PyAubio_CFvecToArray(self->out);
+ aubio_filterbank_do (self->o, &(self->vec), &(self->c_out));
+ return self->out;
}
static PyMemberDef Py_filterbank_members[] = {
(initproc) Py_filterbank_init,
0,
Py_filterbank_new,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
};