ref: b3130e2c76531d254927bfae6b56c9244dbe9bec
dir: /interfaces/python/aubioproxy.c/
#include "aubio-types.h"
fvec_t *
PyAubio_ArrayToCFvec (PyObject *input) {
PyObject *array;
fvec_t *vec;
if (input == NULL) {
PyErr_SetString (PyExc_ValueError, "input array is not a python object");
goto fail;
}
// parsing input object into a Py_fvec
if (PyArray_Check(input)) {
// we got an array, convert it to an fvec
if (PyArray_NDIM (input) == 0) {
PyErr_SetString (PyExc_ValueError, "input array is a scalar");
goto fail;
} else if (PyArray_NDIM (input) > 1) {
PyErr_SetString (PyExc_ValueError,
"input array has more than one dimensions");
goto fail;
}
if (!PyArray_ISFLOAT (input)) {
PyErr_SetString (PyExc_ValueError, "input array should be float");
goto fail;
} else if (PyArray_TYPE (input) != AUBIO_NPY_SMPL) {
PyErr_SetString (PyExc_ValueError, "input array should be float32");
goto fail;
} else {
// input data type is float32, nothing else to do
array = input;
}
// vec = new_fvec (vec->length);
// no need to really allocate fvec, just its struct member
vec = (fvec_t *)malloc(sizeof(fvec_t));
vec->length = PyArray_SIZE (array);
vec->data = (smpl_t *) PyArray_GETPTR1 (array, 0);
} else if (PyObject_TypeCheck (input, &PyList_Type)) {
PyErr_SetString (PyExc_ValueError, "does not convert from list yet");
return NULL;
} else {
PyErr_SetString (PyExc_ValueError, "can only accept vector of float as input");
return NULL;
}
return vec;
fail:
return NULL;
}
PyObject *
PyAubio_CFvecToArray (fvec_t * self)
{
npy_intp dims[] = { self->length, 1 };
return PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->data);
}
Py_cvec *
PyAubio_CCvecToPyCvec (cvec_t * input) {
Py_cvec *vec = (Py_cvec*) PyObject_New (Py_cvec, &Py_cvecType);
vec->length = input->length;
vec->o = input;
Py_INCREF(vec);
return vec;
}
cvec_t *
PyAubio_ArrayToCCvec (PyObject *input) {
if (PyObject_TypeCheck (input, &Py_cvecType)) {
return ((Py_cvec*)input)->o;
} else {
PyErr_SetString (PyExc_ValueError, "input array should be float32");
return NULL;
}
}
PyObject *
PyAubio_CFmatToArray (fmat_t * input)
{
PyObject *array = NULL;
uint_t i;
npy_intp dims[] = { input->length, 1 };
PyObject *concat = PyList_New (0), *tmp = NULL;
for (i = 0; i < input->height; i++) {
tmp = PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, input->data[i]);
PyList_Append (concat, tmp);
Py_DECREF (tmp);
}
array = PyArray_FromObject (concat, AUBIO_NPY_SMPL, 2, 2);
Py_DECREF (concat);
return array;
}
fmat_t *
PyAubio_ArrayToCFmat (PyObject *input) {
return NULL;
}