1 #define PY_AUBIO_MODULE_UFUNC
2 #include "aubio-types.h"
4 typedef smpl_t (*aubio_unary_func_t)(smpl_t input);
6 static void aubio_PyUFunc_d_d(char **args, npy_intp *dimensions,
7 npy_intp* steps, void* data)
10 npy_intp n = dimensions[0];
11 char *in = args[0], *out = args[1];
12 npy_intp in_step = steps[0], out_step = steps[1];
13 aubio_unary_func_t func = (aubio_unary_func_t)(data);
15 for (i = 0; i < n; i++) {
16 /*BEGIN main ufunc computation*/
17 *((double *)out) = func(*(double *)in);
18 /*END main ufunc computation*/
25 static void aubio_PyUFunc_f_f_As_d_d(char **args, npy_intp *dimensions,
26 npy_intp* steps, void* data)
29 npy_intp n = dimensions[0];
30 char *in = args[0], *out = args[1];
31 npy_intp in_step = steps[0], out_step = steps[1];
32 aubio_unary_func_t func = (aubio_unary_func_t)(data);
34 for (i = 0; i < n; i++) {
35 /*BEGIN main ufunc computation*/
36 *((float *)out) = func(*(float *)in);
37 /*END main ufunc computation*/
44 static int Py_aubio_unary_n_types = 2;
45 static int Py_aubio_unary_n_inputs = 1;
46 static int Py_aubio_unary_n_outputs = 1;
47 PyUFuncGenericFunction Py_aubio_unary_functions[] = {
48 &aubio_PyUFunc_f_f_As_d_d,
50 //PyUFunc_f_f_As_d_d, PyUFunc_d_d,
51 //PyUFunc_g_g, PyUFunc_OO_O_method,
54 static char Py_aubio_unary_types[] = {
56 NPY_DOUBLE, NPY_DOUBLE,
57 //NPY_LONGDOUBLE, NPY_LONGDOUBLE,
58 //NPY_OBJECT, NPY_OBJECT,
61 // Note: these docstrings should *not* include the function signatures
63 static char Py_unwrap2pi_doc[] = ""
65 "Map angle to unit circle :math:`[-\\pi, \\pi[`.\n"
75 " values clamped to the unit circle :math:`[-\\pi, \\pi[`\n"
78 static void* Py_unwrap2pi_data[] = {
79 (void *)aubio_unwrap2pi,
80 (void *)aubio_unwrap2pi,
85 static char Py_freqtomidi_doc[] = ""
87 "Convert frequency `[0; 23000[` to midi `[0; 128[`.\n"
92 " Array of frequencies, in Hz.\n"
97 " Converted frequencies, in midi note.\n"
100 static void* Py_freqtomidi_data[] = {
101 (void *)aubio_freqtomidi,
102 (void *)aubio_freqtomidi,
105 static char Py_miditofreq_doc[] = ""
107 "Convert midi `[0; 128[` to frequency `[0, 23000]`.\n"
111 "x : numpy.ndarray\n"
112 " Array of frequencies, in midi note.\n"
117 " Converted frequencies, in Hz\n"
120 static void* Py_miditofreq_data[] = {
121 (void *)aubio_miditofreq,
122 (void *)aubio_miditofreq,
125 void add_ufuncs ( PyObject *m )
128 PyObject *dict, *f, *g, *h;
130 err = _import_umath ();
133 "Unable to import Numpy umath from aubio module (error %d)\n", err);
136 dict = PyModule_GetDict(m);
137 f = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_unwrap2pi_data, Py_aubio_unary_types,
138 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
139 PyUFunc_None, "unwrap2pi", Py_unwrap2pi_doc, 0);
140 PyDict_SetItemString(dict, "unwrap2pi", f);
143 g = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_freqtomidi_data, Py_aubio_unary_types,
144 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
145 PyUFunc_None, "freqtomidi", Py_freqtomidi_doc, 0);
146 PyDict_SetItemString(dict, "freqtomidi", g);
149 h = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_miditofreq_data, Py_aubio_unary_types,
150 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
151 PyUFunc_None, "miditofreq", Py_miditofreq_doc, 0);
152 PyDict_SetItemString(dict, "miditofreq", h);