1 #include "aubio-types.h"
4 new_py_fvec(uint_t length) {
5 npy_intp dims[] = { length, 1 };
6 return PyArray_ZEROS(1, dims, AUBIO_NPY_SMPL, 0);
10 new_py_fmat(uint_t height, uint_t length) {
11 npy_intp dims[] = { height, length, 1 };
12 return PyArray_ZEROS(2, dims, AUBIO_NPY_SMPL, 0);
16 PyAubio_CFvecToArray (fvec_t * self)
18 npy_intp dims[] = { self->length, 1 };
19 return PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->data);
23 PyAubio_ArrayToCFvec (PyObject *input, fvec_t *out) {
25 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
28 // parsing input object into a Py_fvec
29 if (PyArray_Check(input)) {
31 // we got an array, convert it to an fvec
32 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
33 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
35 } else if (PyArray_NDIM ((PyArrayObject *)input) > 1) {
36 PyErr_SetString (PyExc_ValueError,
37 "input array has more than one dimensions");
41 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
42 PyErr_SetString (PyExc_ValueError, "input array should be float");
44 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
45 PyErr_SetString (PyExc_ValueError, "input array should be " AUBIO_NPY_SMPL_STR);
49 // vec = new_fvec (vec->length);
50 // no need to really allocate fvec, just its struct member
51 long length = PyArray_SIZE ((PyArrayObject *)input);
53 PyErr_SetString (PyExc_ValueError, "input array size should be greater than 0");
57 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
58 PyErr_SetString (PyExc_ValueError, "does not convert from list yet");
61 PyErr_SetString (PyExc_ValueError, "can only accept vector of float as input");
65 out->length = (uint_t) PyArray_SIZE ((PyArrayObject *)input);
66 out->data = (smpl_t *) PyArray_GETPTR1 ((PyArrayObject *)input, 0);
71 PyAubio_CFmatToArray (fmat_t * input)
73 PyObject *array = NULL;
75 npy_intp dims[] = { input->length, 1 };
76 PyObject *concat = PyList_New (0), *tmp = NULL;
77 for (i = 0; i < input->height; i++) {
78 tmp = PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, input->data[i]);
79 PyList_Append (concat, tmp);
82 array = PyArray_FromObject (concat, AUBIO_NPY_SMPL, 2, 2);
88 PyAubio_ArrayToCFmat (PyObject *input, fmat_t *mat) {
91 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
94 // parsing input object into a Py_fvec
95 if (PyArray_Check(input)) {
97 // we got an array, convert it to an fvec
98 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
99 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
101 } else if (PyArray_NDIM ((PyArrayObject *)input) > 2) {
102 PyErr_SetString (PyExc_ValueError,
103 "input array has more than two dimensions");
107 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
108 PyErr_SetString (PyExc_ValueError, "input array should be float");
110 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
111 PyErr_SetString (PyExc_ValueError, "input array should be " AUBIO_NPY_SMPL_STR);
115 // no need to really allocate fvec, just its struct member
116 long length = PyArray_DIM ((PyArrayObject *)input, 1);
118 PyErr_SetString (PyExc_ValueError, "input array dimension 1 should be greater than 0");
121 long height = PyArray_DIM ((PyArrayObject *)input, 0);
123 PyErr_SetString (PyExc_ValueError, "input array dimension 0 should be greater than 0");
127 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
128 PyErr_SetString (PyExc_ValueError, "can not convert list to fmat");
131 PyErr_SetString (PyExc_ValueError, "can only accept matrix of float as input");
135 uint_t new_height = (uint_t)PyArray_DIM ((PyArrayObject *)input, 0);
136 if (mat->height != new_height) {
140 mat->data = (smpl_t **)malloc(sizeof(smpl_t*) * new_height);
143 mat->height = new_height;
144 mat->length = (uint_t)PyArray_DIM ((PyArrayObject *)input, 1);
145 for (i=0; i< mat->height; i++) {
146 mat->data[i] = (smpl_t*)PyArray_GETPTR1 ((PyArrayObject *)input, i);