1 #include "aubio-types.h"
4 PyAubio_CFvecToArray (fvec_t * self)
6 npy_intp dims[] = { self->length, 1 };
7 return PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->data);
11 PyAubio_ArrayToCFvec (PyObject *input, fvec_t *out) {
13 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
16 // parsing input object into a Py_fvec
17 if (PyArray_Check(input)) {
19 // we got an array, convert it to an fvec
20 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
21 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
23 } else if (PyArray_NDIM ((PyArrayObject *)input) > 1) {
24 PyErr_SetString (PyExc_ValueError,
25 "input array has more than one dimensions");
29 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
30 PyErr_SetString (PyExc_ValueError, "input array should be float");
32 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
33 PyErr_SetString (PyExc_ValueError, "input array should be float32");
37 // vec = new_fvec (vec->length);
38 // no need to really allocate fvec, just its struct member
39 long length = PyArray_SIZE ((PyArrayObject *)input);
41 PyErr_SetString (PyExc_ValueError, "input array size should be greater than 0");
45 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
46 PyErr_SetString (PyExc_ValueError, "does not convert from list yet");
49 PyErr_SetString (PyExc_ValueError, "can only accept vector of float as input");
53 out->length = (uint_t) PyArray_SIZE ((PyArrayObject *)input);
54 out->data = (smpl_t *) PyArray_GETPTR1 ((PyArrayObject *)input, 0);
59 PyAubio_CCvecToPyCvec (cvec_t * input, Py_cvec *vec) {
60 vec->length = input->length;
62 // keep a reference to re-use after returning it
64 return (PyObject *)vec;
68 PyAubio_ArrayToCCvec (PyObject *input, cvec_t *i) {
69 if (PyObject_TypeCheck (input, &Py_cvecType)) {
70 //*i = *(((Py_cvec*)input)->o);
71 i->norm = ((Py_cvec*)input)->o->norm;
72 i->phas = ((Py_cvec*)input)->o->phas;
73 i->length = ((Py_cvec*)input)->o->length;
76 PyErr_SetString (PyExc_ValueError, "input array should be float32");
82 PyAubio_CFmatToArray (fmat_t * input)
84 PyObject *array = NULL;
86 npy_intp dims[] = { input->length, 1 };
87 PyObject *concat = PyList_New (0), *tmp = NULL;
88 for (i = 0; i < input->height; i++) {
89 tmp = PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, input->data[i]);
90 PyList_Append (concat, tmp);
93 array = PyArray_FromObject (concat, AUBIO_NPY_SMPL, 2, 2);
99 PyAubio_ArrayToCFmat (PyObject *input, fmat_t *mat) {
102 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
105 // parsing input object into a Py_fvec
106 if (PyArray_Check(input)) {
108 // we got an array, convert it to an fvec
109 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
110 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
112 } else if (PyArray_NDIM ((PyArrayObject *)input) > 2) {
113 PyErr_SetString (PyExc_ValueError,
114 "input array has more than two dimensions");
118 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
119 PyErr_SetString (PyExc_ValueError, "input array should be float");
121 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
122 PyErr_SetString (PyExc_ValueError, "input array should be float32");
126 // no need to really allocate fvec, just its struct member
127 long length = PyArray_DIM ((PyArrayObject *)input, 1);
129 PyErr_SetString (PyExc_ValueError, "input array dimension 1 should be greater than 0");
132 long height = PyArray_DIM ((PyArrayObject *)input, 0);
134 PyErr_SetString (PyExc_ValueError, "input array dimension 0 should be greater than 0");
138 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
139 PyErr_SetString (PyExc_ValueError, "can not convert list to fmat");
142 PyErr_SetString (PyExc_ValueError, "can only accept matrix of float as input");
146 uint_t new_height = (uint_t)PyArray_DIM ((PyArrayObject *)input, 0);
147 if (mat->height != new_height) {
151 mat->data = (smpl_t **)malloc(sizeof(smpl_t*) * new_height);
154 mat->height = new_height;
155 mat->length = (uint_t)PyArray_DIM ((PyArrayObject *)input, 1);
156 for (i=0; i< mat->height; i++) {
157 mat->data[i] = (smpl_t*)PyArray_GETPTR1 ((PyArrayObject *)input, i);