[py] use PyFloat_FromDouble in meltohz methods
[aubio.git] / python / ext / py-musicutils.c
index 4e5f6ed..3d90daf 100644 (file)
@@ -8,7 +8,6 @@ Py_aubio_window(PyObject *self, PyObject *args)
   fvec_t *window = NULL;
 
   if (!PyArg_ParseTuple (args, "|sI", &wintype, &winlen)) {
-    PyErr_SetString (PyExc_ValueError, "failed parsing arguments");
     return NULL;
   }
 
@@ -25,11 +24,10 @@ PyObject *
 Py_aubio_level_lin(PyObject *self, PyObject *args)
 {
   PyObject *input;
-  fvec_t *vec;
+  fvec_t vec;
   PyObject *level_lin;
 
   if (!PyArg_ParseTuple (args, "O:level_lin", &input)) {
-    PyErr_SetString (PyExc_ValueError, "failed parsing arguments");
     return NULL;
   }
 
@@ -37,12 +35,11 @@ Py_aubio_level_lin(PyObject *self, PyObject *args)
     return NULL;
   }
 
-  vec = PyAubio_ArrayToCFvec (input);
-  if (vec == NULL) {
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
     return NULL;
   }
 
-  level_lin = Py_BuildValue("f", aubio_level_lin(vec));
+  level_lin = Py_BuildValue(AUBIO_NPY_SMPL_CHR, aubio_level_lin(&vec));
   if (level_lin == NULL) {
     PyErr_SetString (PyExc_ValueError, "failed computing level_lin");
     return NULL;
@@ -55,11 +52,10 @@ PyObject *
 Py_aubio_db_spl(PyObject *self, PyObject *args)
 {
   PyObject *input;
-  fvec_t *vec;
+  fvec_t vec;
   PyObject *db_spl;
 
   if (!PyArg_ParseTuple (args, "O:db_spl", &input)) {
-    PyErr_SetString (PyExc_ValueError, "failed parsing arguments");
     return NULL;
   }
 
@@ -67,12 +63,11 @@ Py_aubio_db_spl(PyObject *self, PyObject *args)
     return NULL;
   }
 
-  vec = PyAubio_ArrayToCFvec (input);
-  if (vec == NULL) {
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
     return NULL;
   }
 
-  db_spl = Py_BuildValue("f", aubio_db_spl(vec));
+  db_spl = Py_BuildValue(AUBIO_NPY_SMPL_CHR, aubio_db_spl(&vec));
   if (db_spl == NULL) {
     PyErr_SetString (PyExc_ValueError, "failed computing db_spl");
     return NULL;
@@ -85,12 +80,11 @@ PyObject *
 Py_aubio_silence_detection(PyObject *self, PyObject *args)
 {
   PyObject *input;
-  fvec_t *vec;
+  fvec_t vec;
   PyObject *silence_detection;
   smpl_t threshold;
 
-  if (!PyArg_ParseTuple (args, "Of:silence_detection", &input, &threshold)) {
-    PyErr_SetString (PyExc_ValueError, "failed parsing arguments");
+  if (!PyArg_ParseTuple (args, "O" AUBIO_NPY_SMPL_CHR ":silence_detection", &input, &threshold)) {
     return NULL;
   }
 
@@ -98,12 +92,11 @@ Py_aubio_silence_detection(PyObject *self, PyObject *args)
     return NULL;
   }
 
-  vec = PyAubio_ArrayToCFvec (input);
-  if (vec == NULL) {
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
     return NULL;
   }
 
-  silence_detection = Py_BuildValue("I", aubio_silence_detection(vec, threshold));
+  silence_detection = Py_BuildValue("I", aubio_silence_detection(&vec, threshold));
   if (silence_detection == NULL) {
     PyErr_SetString (PyExc_ValueError, "failed computing silence_detection");
     return NULL;
@@ -111,3 +104,134 @@ Py_aubio_silence_detection(PyObject *self, PyObject *args)
 
   return silence_detection;
 }
+
+PyObject *
+Py_aubio_level_detection(PyObject *self, PyObject *args)
+{
+  PyObject *input;
+  fvec_t vec;
+  PyObject *level_detection;
+  smpl_t threshold;
+
+  if (!PyArg_ParseTuple (args, "O" AUBIO_NPY_SMPL_CHR ":level_detection", &input, &threshold)) {
+    return NULL;
+  }
+
+  if (input == NULL) {
+    return NULL;
+  }
+
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
+    return NULL;
+  }
+
+  level_detection = Py_BuildValue(AUBIO_NPY_SMPL_CHR, aubio_level_detection(&vec, threshold));
+  if (level_detection == NULL) {
+    PyErr_SetString (PyExc_ValueError, "failed computing level_detection");
+    return NULL;
+  }
+
+  return level_detection;
+}
+
+PyObject *
+Py_aubio_shift(PyObject *self, PyObject *args)
+{
+  PyObject *input;
+  fvec_t vec;
+
+  if (!PyArg_ParseTuple (args, "O:shift", &input)) {
+    return NULL;
+  }
+
+  if (input == NULL) {
+    return NULL;
+  }
+
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
+    return NULL;
+  }
+
+  fvec_shift(&vec);
+
+  //Py_RETURN_NONE;
+  return (PyObject *) PyAubio_CFvecToArray(&vec);
+}
+
+PyObject *
+Py_aubio_ishift(PyObject *self, PyObject *args)
+{
+  PyObject *input;
+  fvec_t vec;
+
+  if (!PyArg_ParseTuple (args, "O:shift", &input)) {
+    return NULL;
+  }
+
+  if (input == NULL) {
+    return NULL;
+  }
+
+  if (!PyAubio_ArrayToCFvec(input, &vec)) {
+    return NULL;
+  }
+
+  fvec_ishift(&vec);
+
+  //Py_RETURN_NONE;
+  return (PyObject *) PyAubio_CFvecToArray(&vec);
+}
+
+PyObject*
+Py_aubio_hztomel(PyObject *self, PyObject *args, PyObject *kwds)
+{
+  smpl_t v;
+  PyObject *htk = NULL;
+  static char *kwlist[] = {"f", "htk", NULL};
+  if (!PyArg_ParseTupleAndKeywords(args, kwds, AUBIO_NPY_SMPL_CHR "|O",
+        kwlist, &v, &htk))
+  {
+    return NULL;
+  }
+  if (htk != NULL && PyObject_IsTrue(htk) == 1)
+    return PyFloat_FromDouble(aubio_hztomel_htk(v));
+  else
+    return PyFloat_FromDouble(aubio_hztomel(v));
+}
+
+PyObject*
+Py_aubio_meltohz(PyObject *self, PyObject *args, PyObject *kwds)
+{
+  smpl_t v;
+  PyObject *htk = NULL;
+  static char *kwlist[] = {"m", "htk", NULL};
+  if (!PyArg_ParseTupleAndKeywords(args, kwds, AUBIO_NPY_SMPL_CHR "|O",
+        kwlist, &v, &htk))
+  {
+    return NULL;
+  }
+  if (htk != NULL && PyObject_IsTrue(htk) == 1)
+    return PyFloat_FromDouble(aubio_meltohz_htk(v));
+  else
+    return PyFloat_FromDouble(aubio_meltohz(v));
+}
+
+PyObject*
+Py_aubio_hztomel_htk(PyObject *self, PyObject *args)
+{
+  smpl_t v;
+  if (!PyArg_ParseTuple(args, AUBIO_NPY_SMPL_CHR, &v)) {
+    return NULL;
+  }
+  return PyFloat_FromDouble(aubio_hztomel_htk(v));
+}
+
+PyObject*
+Py_aubio_meltohz_htk(PyObject *self, PyObject *args)
+{
+  smpl_t v;
+  if (!PyArg_ParseTuple(args, AUBIO_NPY_SMPL_CHR, &v)) {
+    return NULL;
+  }
+  return PyFloat_FromDouble(aubio_meltohz_htk(v));
+}