ref: 207ed190bbe28e63e8bab665e21ffc2e73a4a75b
parent: 6b1aafc24e21090c4fe820017b442445e1f6ea39
author: Paul Brossier <piem@piem.org>
date: Fri Oct 2 07:24:08 EDT 2009
python/aubiomodule.c: add zero_crossing_rate and min_removal
--- a/interfaces/python/aubiomodule.c
+++ b/interfaces/python/aubiomodule.c
@@ -112,8 +112,79 @@
return result;
}
+static char Py_zero_crossing_rate_doc[] = "compute zero crossing rate";
+
+static PyObject *
+Py_zero_crossing_rate (PyObject * self, PyObject * args)
+{
+ PyObject *input;
+ Py_fvec *vec;
+ PyObject *result;
+
+ if (!PyArg_ParseTuple (args, "O:zero_crossing_rate", &input)) {
+ return NULL;
+ }
+
+ if (input == NULL) {
+ return NULL;
+ }
+
+ vec = PyAubio_ArrayToFvec (input);
+
+ if (vec == NULL) {
+ return NULL;
+ }
+
+ // compute the function
+ result = Py_BuildValue ("f", aubio_zero_crossing_rate (vec->o));
+ if (result == NULL) {
+ return NULL;
+ }
+
+ return result;
+}
+
+static char Py_min_removal_doc[] = "compute zero crossing rate";
+
+static PyObject *
+Py_min_removal(PyObject * self, PyObject * args)
+{
+ PyObject *input;
+ Py_fvec *vec;
+
+ if (!PyArg_ParseTuple (args, "O:zero_crossing_rate", &input)) {
+ return NULL;
+ }
+
+ if (input == NULL) {
+ return NULL;
+ }
+
+ vec = PyAubio_ArrayToFvec (input);
+
+ if (vec == NULL) {
+ return NULL;
+ }
+
+ // compute the function
+ fvec_min_removal (vec->o);
+ // since this function does not return, we could return None
+ //return Py_None;
+ // however it is convenient to return the modified vector
+ //return (PyObject *) PyAubio_FvecToArray(vec);
+ // or even without converting it back to an array
+ Py_INCREF(vec);
+ return (PyObject *)vec;
+}
+
+
+
+
static PyMethodDef aubio_methods[] = {
{"alpha_norm", Py_alpha_norm, METH_VARARGS, Py_alpha_norm_doc},
+ {"zero_crossing_rate", Py_zero_crossing_rate, METH_VARARGS,
+ Py_zero_crossing_rate_doc},
+ {"min_removal", Py_min_removal, METH_VARARGS, Py_min_removal_doc},
{NULL, NULL} /* Sentinel */
};