History

ext/aubiomodule.c: more ufuncs

Paul Brossier committed 13 years ago

Commit 4a67c121 parent 7606d232 files · +51 −70Browse files

Showing the changes to python/ext (2 of 2 files). Show all

Unified · Split

2 files
  1. python/ext/aubiomodule.c +0 −54
  2. python/ext/ufuncs.c +51 −16
python/ext/aubiomodule.c+0−54
@@ -38,23 +38,6 @@ Py_alpha_norm (PyObject * self, PyObject * args) · 37 unmodified lines
38 return result;38 return result;
39}39}
40 40
41static char Py_unwrap2pi_doc[] = "unwrap phase value to [-pi, pi]";
42
43static PyObject *
44Py_unwrap2pi (PyObject * self, PyObject * args)
45{
46 smpl_t input;
47 smpl_t output;
48
49 if (!PyArg_ParseTuple (args, "|f", &input)) {
50 return NULL;
51 }
52
53 output = aubio_unwrap2pi (input);
54
55 return (PyObject *)PyFloat_FromDouble (output);
56}
57
58static char Py_bintomidi_doc[] = "convert bin to midi";41static char Py_bintomidi_doc[] = "convert bin to midi";
59 42
60static PyObject *43static PyObject *
@@ -123,40 +106,6 @@ Py_freqtobin (PyObject * self, PyObject * args) · 62 unmodified lines
123 return (PyObject *)PyFloat_FromDouble (output);106 return (PyObject *)PyFloat_FromDouble (output);
124}107}
125 108
126static char Py_freqtomidi_doc[] = "convert freq to midi";
127
128static PyObject *
129Py_freqtomidi (PyObject * self, PyObject * args)
130{
131 smpl_t input;
132 smpl_t output;
133
134 if (!PyArg_ParseTuple (args, "|f", &input)) {
135 return NULL;
136 }
137
138 output = aubio_freqtomidi (input);
139
140 return (PyObject *)PyFloat_FromDouble (output);
141}
142
143static char Py_miditofreq_doc[] = "convert midi to freq";
144
145static PyObject *
146Py_miditofreq (PyObject * self, PyObject * args)
147{
148 smpl_t input;
149 smpl_t output;
150
151 if (!PyArg_ParseTuple (args, "|f", &input)) {
152 return NULL;
153 }
154
155 output = aubio_miditofreq (input);
156
157 return (PyObject *)PyFloat_FromDouble (output);
158}
159
160static char Py_zero_crossing_rate_doc[] = "compute zero crossing rate";109static char Py_zero_crossing_rate_doc[] = "compute zero crossing rate";
161 110
162static PyObject *111static PyObject *
@@ -224,13 +173,10 @@ Py_min_removal(PyObject * self, PyObject * args) · 61 unmodified lines
224}173}
225 174
226static PyMethodDef aubio_methods[] = {175static PyMethodDef aubio_methods[] = {
227 //{"unwrap2pi", Py_unwrap2pi, METH_VARARGS, Py_unwrap2pi_doc},
228 {"bintomidi", Py_bintomidi, METH_VARARGS, Py_bintomidi_doc},176 {"bintomidi", Py_bintomidi, METH_VARARGS, Py_bintomidi_doc},
229 {"miditobin", Py_miditobin, METH_VARARGS, Py_miditobin_doc},177 {"miditobin", Py_miditobin, METH_VARARGS, Py_miditobin_doc},
230 {"bintofreq", Py_bintofreq, METH_VARARGS, Py_bintofreq_doc},178 {"bintofreq", Py_bintofreq, METH_VARARGS, Py_bintofreq_doc},
231 {"freqtobin", Py_freqtobin, METH_VARARGS, Py_freqtobin_doc},179 {"freqtobin", Py_freqtobin, METH_VARARGS, Py_freqtobin_doc},
232 {"miditofreq", Py_miditofreq, METH_VARARGS, Py_miditofreq_doc},
233 {"freqtomidi", Py_freqtomidi, METH_VARARGS, Py_freqtomidi_doc},
234 {"alpha_norm", Py_alpha_norm, METH_VARARGS, Py_alpha_norm_doc},180 {"alpha_norm", Py_alpha_norm, METH_VARARGS, Py_alpha_norm_doc},
235 {"zero_crossing_rate", Py_zero_crossing_rate, METH_VARARGS, Py_zero_crossing_rate_doc},181 {"zero_crossing_rate", Py_zero_crossing_rate, METH_VARARGS, Py_zero_crossing_rate_doc},
236 {"min_removal", Py_min_removal, METH_VARARGS, Py_min_removal_doc},182 {"min_removal", Py_min_removal, METH_VARARGS, Py_min_removal_doc},
python/ext/ufuncs.c+51−16
@@ -1,17 +1,20 @@
1#define PY_AUBIO_MODULE_UFUNC1#define PY_AUBIO_MODULE_UFUNC
2#include "aubio-types.h"2#include "aubio-types.h"
3 3
4static void unwrap2pi(char **args, npy_intp *dimensions,4typedef smpl_t (*aubio_unary_func_t)(smpl_t input);
5
6static void aubio_PyUFunc_d_d(char **args, npy_intp *dimensions,
5 npy_intp* steps, void* data)7 npy_intp* steps, void* data)
6{8{
7 npy_intp i;9 npy_intp i;
8 npy_intp n = dimensions[0];10 npy_intp n = dimensions[0];
9 char *in = args[0], *out = args[1];11 char *in = args[0], *out = args[1];
10 npy_intp in_step = steps[0], out_step = steps[1];12 npy_intp in_step = steps[0], out_step = steps[1];
13 aubio_unary_func_t func = (aubio_unary_func_t)(data);
11 14
12 for (i = 0; i < n; i++) {15 for (i = 0; i < n; i++) {
13 /*BEGIN main ufunc computation*/16 /*BEGIN main ufunc computation*/
14 *((double *)out) = aubio_unwrap2pi(*(double *)in);17 *((double *)out) = func(*(double *)in);
15 /*END main ufunc computation*/18 /*END main ufunc computation*/
16 19
17 in += in_step;20 in += in_step;
@@ -19,17 +22,18 @@ static void unwrap2pi(char **args, npy_intp *dimensions, · 1 unmodified line
19 }22 }
20}23}
21 24
22static void unwrap2pif(char **args, npy_intp *dimensions,25static void aubio_PyUFunc_f_f_As_d_d(char **args, npy_intp *dimensions,
23 npy_intp* steps, void* data)26 npy_intp* steps, void* data)
24{27{
25 npy_intp i;28 npy_intp i;
26 npy_intp n = dimensions[0];29 npy_intp n = dimensions[0];
27 char *in = args[0], *out = args[1];30 char *in = args[0], *out = args[1];
28 npy_intp in_step = steps[0], out_step = steps[1];31 npy_intp in_step = steps[0], out_step = steps[1];
32 aubio_unary_func_t func = (aubio_unary_func_t)(data);
29 33
30 for (i = 0; i < n; i++) {34 for (i = 0; i < n; i++) {
31 /*BEGIN main ufunc computation*/35 /*BEGIN main ufunc computation*/
32 *((float *)out) = aubio_unwrap2pi(*(float *)in);36 *((float *)out) = func(*(float *)in);
33 /*END main ufunc computation*/37 /*END main ufunc computation*/
34 38
35 in += in_step;39 in += in_step;
@@ -37,26 +41,44 @@ static void unwrap2pif(char **args, npy_intp *dimensions, · 1 unmodified line
37 }41 }
38}42}
39 43
40static char Py_unwrap2pi_doc[] = "map angle to unit circle [-pi, pi[";44static int Py_aubio_unary_n_types = 2;
41 45static int Py_aubio_unary_n_inputs = 1;
42PyUFuncGenericFunction unwrap2pi_functions[] = {46static int Py_aubio_unary_n_outputs = 1;
43 &unwrap2pif, &unwrap2pi,47PyUFuncGenericFunction Py_aubio_unary_functions[] = {
48 &aubio_PyUFunc_f_f_As_d_d,
49 &aubio_PyUFunc_d_d,
44 //PyUFunc_f_f_As_d_d, PyUFunc_d_d,50 //PyUFunc_f_f_As_d_d, PyUFunc_d_d,
45 //PyUFunc_g_g, PyUFunc_OO_O_method,51 //PyUFunc_g_g, PyUFunc_OO_O_method,
46};52};
47 53
48static void* unwrap2pi_data[] = {54static char Py_aubio_unary_types[] = {
55 NPY_FLOAT, NPY_FLOAT,
56 NPY_DOUBLE, NPY_DOUBLE,
57 //NPY_LONGDOUBLE, NPY_LONGDOUBLE,
58 //NPY_OBJECT, NPY_OBJECT,
59};
60
61static char Py_unwrap2pi_doc[] = "map angle to unit circle [-pi, pi[";
62
63static void* Py_unwrap2pi_data[] = {
49 (void *)aubio_unwrap2pi,64 (void *)aubio_unwrap2pi,
50 (void *)aubio_unwrap2pi,65 (void *)aubio_unwrap2pi,
51 //(void *)unwrap2pil,66 //(void *)unwrap2pil,
52 //(void *)unwrap2pio,67 //(void *)unwrap2pio,
53};68};
54 69
55static char unwrap2pi_types[] = {70static char Py_freqtomidi_doc[] = "convert frequency to midi";
56 NPY_FLOAT, NPY_FLOAT,71
57 NPY_DOUBLE, NPY_DOUBLE,72static void* Py_freqtomidi_data[] = {
58 //NPY_LONGDOUBLE, NPY_LONGDOUBLE,73 (void *)aubio_freqtomidi,
59 //NPY_OBJECT, NPY_OBJECT,74 (void *)aubio_freqtomidi,
75};
76
77static char Py_miditofreq_doc[] = "convert midi to frequency";
78
79static void* Py_miditofreq_data[] = {
80 (void *)aubio_miditofreq,
81 (void *)aubio_miditofreq,
60};82};
61 83
62void add_ufuncs ( PyObject *m )84void add_ufuncs ( PyObject *m )
@@ -71,11 +93,24 @@ void add_ufuncs ( PyObject *m ) · 8 unmodified lines
71 93
72 PyObject *f, *dict;94 PyObject *f, *dict;
73 dict = PyModule_GetDict(m);95 dict = PyModule_GetDict(m);
74 f = PyUFunc_FromFuncAndData(unwrap2pi_functions,96 f = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_unwrap2pi_data, Py_aubio_unary_types,
75 unwrap2pi_data, unwrap2pi_types, 2, 1, 1,97 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
76 PyUFunc_None, "unwrap2pi", Py_unwrap2pi_doc, 0);98 PyUFunc_None, "unwrap2pi", Py_unwrap2pi_doc, 0);
77 PyDict_SetItemString(dict, "unwrap2pi", f);99 PyDict_SetItemString(dict, "unwrap2pi", f);
78 Py_DECREF(f);100 Py_DECREF(f);
79 101
102 PyObject *g;
103 g = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_freqtomidi_data, Py_aubio_unary_types,
104 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
105 PyUFunc_None, "freqtomidi", Py_freqtomidi_doc, 0);
106 PyDict_SetItemString(dict, "freqtomidi", g);
107 Py_DECREF(g);
108
109 PyObject *h;
110 h = PyUFunc_FromFuncAndData(Py_aubio_unary_functions, Py_miditofreq_data, Py_aubio_unary_types,
111 Py_aubio_unary_n_types, Py_aubio_unary_n_inputs, Py_aubio_unary_n_outputs,
112 PyUFunc_None, "miditofreq", Py_miditofreq_doc, 0);
113 PyDict_SetItemString(dict, "miditofreq", h);
114 Py_DECREF(h);
80 return;115 return;
81}116}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t