- Timestamp:
- Apr 29, 2016, 11:48:39 PM (9 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
- Children:
- e84f7b9
- Parents:
- b055b4e
- Location:
- python
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/ext/py-filter.c
rb055b4e r21e8408 7 7 uint_t order; 8 8 fvec_t vec; 9 fvec_t *out; 9 PyObject *out; 10 fvec_t c_out; 10 11 } Py_filter; 11 12 … … 50 51 return -1; 51 52 } 52 self->out = new_fvec(Py_default_vector_length);53 self->out = NULL; 53 54 return 0; 54 55 } … … 57 58 Py_filter_del (Py_filter * self) 58 59 { 59 del_fvec(self->out);60 Py_XDECREF(self->out); 60 61 del_aubio_filter (self->o); 61 62 Py_TYPE(self)->tp_free ((PyObject *) self); 62 63 } 63 64 64 static PyObject * 65 static PyObject * 65 66 Py_filter_do(Py_filter * self, PyObject * args) 66 67 { … … 79 80 } 80 81 81 // reallocate the output if needed 82 if (self->vec.length != self->out->length) { 83 del_fvec(self->out); 84 self->out = new_fvec(self->vec.length); 82 // initialize output now 83 if (self->out == NULL) { 84 self->out = new_py_fvec(self->vec.length); 85 } 86 87 Py_INCREF(self->out); 88 if (!PyAubio_ArrayToCFvec(self->out, &(self->c_out)) ) { 89 return NULL; 85 90 } 86 91 // compute the function 87 aubio_filter_do_outplace (self->o, &(self->vec), self->out);88 return PyAubio_CFvecToArray(self->out);89 } 90 91 static PyObject * 92 aubio_filter_do_outplace (self->o, &(self->vec), &(self->c_out)); 93 return self->out; 94 } 95 96 static PyObject * 92 97 Py_filter_set_c_weighting (Py_filter * self, PyObject *args) 93 98 { … … 107 112 } 108 113 109 static PyObject * 114 static PyObject * 110 115 Py_filter_set_a_weighting (Py_filter * self, PyObject *args) 111 116 { -
python/lib/gen_code.py
rb055b4e r21e8408 49 49 50 50 newfromtype_fn = { 51 'fvec_t*': 'new_ fvec',52 'fmat_t*': 'new_ fmat',53 'cvec_t*': 'new_ cvec',51 'fvec_t*': 'new_py_fvec', 52 'fmat_t*': 'new_py_fmat', 53 'cvec_t*': 'new_py_cvec', 54 54 } 55 55 56 56 delfromtype_fn = { 57 'fvec_t*': ' del_fvec',58 'fmat_t*': ' del_fmat',59 'cvec_t*': ' del_cvec',57 'fvec_t*': 'Py_DECREF', 58 'fmat_t*': 'Py_DECREF', 59 'cvec_t*': 'Py_DECREF', 60 60 } 61 61 … … 169 169 self.do_inputs = [get_params_types_names(self.do_proto)[1]] 170 170 self.do_outputs = get_params_types_names(self.do_proto)[2:] 171 s elf.outputs_flat = get_output_params(self.do_proto)172 self. output_results = "; ".join(self.outputs_flat)171 struct_output_str = ["PyObject *{0[name]}; {1} c_{0[name]}".format(i, i['type'][:-1]) for i in self.do_outputs] 172 self.struct_outputs = ";\n ".join(struct_output_str) 173 173 174 174 #print ("input_params: ", map(split_type, get_input_params(self.do_proto))) … … 202 202 {do_inputs_list}; 203 203 // output results 204 { output_results};204 {struct_outputs}; 205 205 }} Py_{shortname}; 206 206 """ … … 380 380 return NULL; 381 381 }}""".format(refs = refs, pyparamtypes = pyparamtypes, **self.__dict__) 382 for p in input_params: 383 out += """ 382 for input_param in input_params: 383 out += """ 384 384 385 if (!{pytoaubio}(py_{0[name]}, &(self->{0[name]}))) {{ 385 386 return NULL; 386 387 }}""".format(input_param, pytoaubio = pytoaubio_fn[input_param['type']]) 388 out += """ 389 390 // TODO: check input sizes""" 391 for output_param in output_params: 392 out += """ 393 394 Py_INCREF(self->{0[name]}); 395 if (!{pytoaubio}(self->{0[name]}, &(self->c_{0[name]}))) {{ 396 return NULL; 397 }}""".format(output_param, pytoaubio = pytoaubio_fn[output_param['type']]) 387 398 do_fn = get_name(self.do_proto) 388 399 inputs = ", ".join(['&(self->'+p['name']+')' for p in input_params]) 400 c_outputs = ", ".join(["&(self->c_%s)" % p['name'] for p in self.do_outputs]) 389 401 outputs = ", ".join(["self->%s" % p['name'] for p in self.do_outputs]) 390 402 out += """ 391 403 392 {do_fn}(self->o, {inputs}, { outputs});393 394 return (PyObject *) {aubiotonumpy} ({outputs});404 {do_fn}(self->o, {inputs}, {c_outputs}); 405 406 return {outputs}; 395 407 }} 396 408 """.format( 397 409 do_fn = do_fn, 398 aubiotonumpy = pyfromaubio_fn[output['type']], 399 inputs = inputs, outputs = outputs, 410 inputs = inputs, outputs = outputs, c_outputs = c_outputs, 400 411 ) 401 412 return out
Note: See TracChangeset
for help on using the changeset viewer.