Changes in python/ext/py-fft.c [bf63c61:dab4a4c]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/ext/py-fft.c
rbf63c61 rdab4a4c 1 #include "aubio wraphell.h"1 #include "aubio-types.h" 2 2 3 3 static char Py_fft_doc[] = "fft object"; 4 4 5 AUBIO_DECLARE(fft, uint_t win_s) 5 typedef struct 6 { 7 PyObject_HEAD 8 aubio_fft_t * o; 9 uint_t win_s; 10 // do / rdo input vectors 11 fvec_t vecin; 12 cvec_t cvecin; 13 // do / rdo output results 14 PyObject *doout; 15 PyObject *rdoout; 16 } Py_fft; 6 17 7 //AUBIO_NEW(fft)8 18 static PyObject * 9 19 Py_fft_new (PyTypeObject * type, PyObject * args, PyObject * kwds) … … 37 47 } 38 48 49 static int 50 Py_fft_init (Py_fft * self, PyObject * args, PyObject * kwds) 51 { 52 self->o = new_aubio_fft (self->win_s); 53 if (self->o == NULL) { 54 // PyErr_Format(PyExc_RuntimeError, ...) was set above by new_ which called 55 // AUBIO_ERR when failing 56 return -1; 57 } 39 58 40 AUBIO_INIT(fft, self->win_s) 59 self->doout = new_py_cvec(self->win_s); 60 self->rdoout = new_py_fvec(self->win_s); 41 61 42 AUBIO_DEL(fft) 62 return 0; 63 } 43 64 44 static PyObject * 45 Py_fft_do(PyObject * self, PyObject * args) 65 static void 66 Py_fft_del (Py_fft *self, PyObject *unused) 67 { 68 Py_XDECREF(self->doout); 69 Py_XDECREF(self->rdoout); 70 if (self->o) { 71 del_aubio_fft(self->o); 72 } 73 Py_TYPE(self)->tp_free((PyObject *) self); 74 } 75 76 static PyObject * 77 Py_fft_do(Py_fft * self, PyObject * args) 46 78 { 47 79 PyObject *input; 48 fvec_t *vec; 49 cvec_t *output; 80 cvec_t c_out; 50 81 51 82 if (!PyArg_ParseTuple (args, "O", &input)) { … … 53 84 } 54 85 55 vec = PyAubio_ArrayToCFvec (input); 56 57 if (vec == NULL) { 86 if (!PyAubio_ArrayToCFvec(input, &(self->vecin))) { 58 87 return NULL; 59 88 } 60 89 61 output = new_cvec(((Py_fft *) self)->win_s); 90 if (self->vecin.length != self->win_s) { 91 PyErr_Format(PyExc_ValueError, 92 "input array has length %d, but fft expects length %d", 93 self->vecin.length, self->win_s); 94 return NULL; 95 } 62 96 97 Py_INCREF(self->doout); 98 if (!PyAubio_PyCvecToCCvec(self->doout, &c_out)) { 99 return NULL; 100 } 63 101 // compute the function 64 aubio_fft_do ( ((Py_fft *)self)->o, vec, output);65 return (PyObject *)PyAubio_CCvecToPyCvec(output);102 aubio_fft_do (self->o, &(self->vecin), &c_out); 103 return self->doout; 66 104 } 67 105 68 AUBIO_MEMBERS_START(fft) 106 static PyMemberDef Py_fft_members[] = { 69 107 {"win_s", T_INT, offsetof (Py_fft, win_s), READONLY, 70 108 "size of the window"}, 71 AUBIO_MEMBERS_STOP(fft) 109 {NULL} 110 }; 72 111 73 static PyObject * 112 static PyObject * 74 113 Py_fft_rdo(Py_fft * self, PyObject * args) 75 114 { 76 115 PyObject *input; 77 cvec_t *vec; 78 fvec_t *output; 116 fvec_t out; 79 117 80 118 if (!PyArg_ParseTuple (args, "O", &input)) { … … 82 120 } 83 121 84 vec = PyAubio_ArrayToCCvec (input); 85 86 if (vec == NULL) { 122 if (!PyAubio_PyCvecToCCvec (input, &(self->cvecin)) ) { 87 123 return NULL; 88 124 } 89 125 90 output = new_fvec(self->win_s); 126 if (self->cvecin.length != self->win_s / 2 + 1) { 127 PyErr_Format(PyExc_ValueError, 128 "input cvec has length %d, but fft expects length %d", 129 self->cvecin.length, self->win_s / 2 + 1); 130 return NULL; 131 } 91 132 133 Py_INCREF(self->rdoout); 134 if (!PyAubio_ArrayToCFvec(self->rdoout, &out) ) { 135 return NULL; 136 } 92 137 // compute the function 93 aubio_fft_rdo ( ((Py_fft *)self)->o, vec, output);94 return (PyObject *)PyAubio_CFvecToArray(output);138 aubio_fft_rdo (self->o, &(self->cvecin), &out); 139 return self->rdoout; 95 140 } 96 141 … … 101 146 }; 102 147 103 AUBIO_TYPEOBJECT(fft, "aubio.fft") 148 PyTypeObject Py_fftType = { 149 PyVarObject_HEAD_INIT (NULL, 0) 150 "aubio.fft", 151 sizeof (Py_fft), 152 0, 153 (destructor) Py_fft_del, 154 0, 155 0, 156 0, 157 0, 158 0, 159 0, 160 0, 161 0, 162 0, 163 (ternaryfunc)Py_fft_do, 164 0, 165 0, 166 0, 167 0, 168 Py_TPFLAGS_DEFAULT, 169 Py_fft_doc, 170 0, 171 0, 172 0, 173 0, 174 0, 175 0, 176 Py_fft_methods, 177 Py_fft_members, 178 0, 179 0, 180 0, 181 0, 182 0, 183 0, 184 (initproc) Py_fft_init, 185 0, 186 Py_fft_new, 187 0, 188 0, 189 0, 190 0, 191 0, 192 0, 193 0, 194 0, 195 0, 196 };
Note: See TracChangeset
for help on using the changeset viewer.