1 #include "aubiowraphell.h"
3 static char Py_filterbank_doc[] = "filterbank object";
8 aubio_filterbank_t * o;
14 //AUBIO_NEW(filterbank)
16 Py_filterbank_new (PyTypeObject * type, PyObject * args, PyObject * kwds)
18 int win_s = 0, n_filters = 0;
20 static char *kwlist[] = { "n_filters", "win_s", NULL };
22 if (!PyArg_ParseTupleAndKeywords (args, kwds, "|II", kwlist,
23 &n_filters, &win_s)) {
27 self = (Py_filterbank *) type->tp_alloc (type, 0);
33 self->win_s = Py_default_vector_length;
36 } else if (win_s < 0) {
37 PyErr_SetString (PyExc_ValueError,
38 "can not use negative window size");
44 self->n_filters = n_filters;
45 } else if (n_filters < 0) {
46 PyErr_SetString (PyExc_ValueError,
47 "can not use negative number of filters");
51 return (PyObject *) self;
55 Py_filterbank_init (Py_filterbank * self, PyObject * args, PyObject * kwds)
57 self->o = new_aubio_filterbank (self->n_filters, self->win_s);
58 if (self->o == NULL) {
60 sprintf(errstr, "error creating filterbank with n_filters=%d, win_s=%d",
61 self->n_filters, self->win_s);
62 PyErr_SetString (PyExc_StandardError, errstr);
65 self->out = new_fvec(self->n_filters);
71 Py_filterbank_del (Py_filterbank *self, PyObject *unused)
73 del_aubio_filterbank(self->o);
75 self->ob_type->tp_free((PyObject *) self);
79 Py_filterbank_do(Py_filterbank * self, PyObject * args)
84 if (!PyArg_ParseTuple (args, "O", &input)) {
88 vec = PyAubio_ArrayToCCvec (input);
94 // compute the function
95 aubio_filterbank_do (self->o, vec, self->out);
96 return (PyObject *)PyAubio_CFvecToArray(self->out);
99 AUBIO_MEMBERS_START(filterbank)
100 {"win_s", T_INT, offsetof (Py_filterbank, win_s), READONLY,
101 "size of the window"},
102 {"n_filters", T_INT, offsetof (Py_filterbank, n_filters), READONLY,
103 "number of filters"},
104 AUBIO_MEMBERS_STOP(filterbank)
107 Py_filterbank_set_triangle_bands (Py_filterbank * self, PyObject *args)
114 if (!PyArg_ParseTuple (args, "OI", &input, &samplerate)) {
122 freqs = PyAubio_ArrayToCFvec (input);
128 err = aubio_filterbank_set_triangle_bands (self->o,
131 PyErr_SetString (PyExc_ValueError,
132 "error when setting filter to A-weighting");
139 Py_filterbank_set_mel_coeffs_slaney (Py_filterbank * self, PyObject *args)
144 if (!PyArg_ParseTuple (args, "I", &samplerate)) {
148 err = aubio_filterbank_set_mel_coeffs_slaney (self->o, samplerate);
150 PyErr_SetString (PyExc_ValueError,
151 "error when setting filter to A-weighting");
158 Py_filterbank_set_coeffs (Py_filterbank * self, PyObject *args)
165 if (!PyArg_ParseTuple (args, "O", &input)) {
169 coeffs = PyAubio_ArrayToCFmat (input);
171 if (coeffs == NULL) {
172 PyErr_SetString (PyExc_ValueError,
173 "unable to parse input array");
177 err = aubio_filterbank_set_coeffs (self->o, coeffs);
180 PyErr_SetString (PyExc_ValueError,
181 "error when setting filter coefficients");
188 Py_filterbank_get_coeffs (Py_filterbank * self, PyObject *unused)
190 return (PyObject *)PyAubio_CFmatToArray(
191 aubio_filterbank_get_coeffs (self->o) );
194 static PyMethodDef Py_filterbank_methods[] = {
195 {"set_triangle_bands", (PyCFunction) Py_filterbank_set_triangle_bands,
196 METH_VARARGS, "set coefficients of filterbanks"},
197 {"set_mel_coeffs_slaney", (PyCFunction) Py_filterbank_set_mel_coeffs_slaney,
198 METH_VARARGS, "set coefficients of filterbank as in Auditory Toolbox"},
199 {"get_coeffs", (PyCFunction) Py_filterbank_get_coeffs,
200 METH_NOARGS, "get coefficients of filterbank"},
201 {"set_coeffs", (PyCFunction) Py_filterbank_set_coeffs,
202 METH_VARARGS, "set coefficients of filterbank"},
206 AUBIO_TYPEOBJECT(filterbank, "aubio.filterbank")