1 #define PY_AUBIO_MODULE_MAIN
2 #include "aubio-types.h"
3 #include "aubio-generated.h"
5 extern void add_generated_objects ( PyObject *m );
6 extern void add_ufuncs ( PyObject *m );
8 static char Py_alpha_norm_doc[] = "compute alpha normalisation factor";
11 Py_alpha_norm (PyObject * self, PyObject * args)
18 if (!PyArg_ParseTuple (args, "Of:alpha_norm", &input, &alpha)) {
26 vec = PyAubio_ArrayToCFvec (input);
32 // compute the function
33 result = Py_BuildValue ("f", fvec_alpha_norm (vec, alpha));
41 static char Py_unwrap2pi_doc[] = "unwrap phase value to [-pi, pi]";
44 Py_unwrap2pi (PyObject * self, PyObject * args)
49 if (!PyArg_ParseTuple (args, "|f", &input)) {
53 output = aubio_unwrap2pi (input);
55 return (PyObject *)PyFloat_FromDouble (output);
58 static char Py_bintomidi_doc[] = "convert bin to midi";
61 Py_bintomidi (PyObject * self, PyObject * args)
63 smpl_t input, samplerate, fftsize;
66 if (!PyArg_ParseTuple (args, "|fff", &input, &samplerate, &fftsize)) {
70 output = aubio_bintomidi (input, samplerate, fftsize);
72 return (PyObject *)PyFloat_FromDouble (output);
75 static char Py_miditobin_doc[] = "convert midi to bin";
78 Py_miditobin (PyObject * self, PyObject * args)
80 smpl_t input, samplerate, fftsize;
83 if (!PyArg_ParseTuple (args, "|fff", &input, &samplerate, &fftsize)) {
87 output = aubio_miditobin (input, samplerate, fftsize);
89 return (PyObject *)PyFloat_FromDouble (output);
92 static char Py_bintofreq_doc[] = "convert bin to freq";
95 Py_bintofreq (PyObject * self, PyObject * args)
97 smpl_t input, samplerate, fftsize;
100 if (!PyArg_ParseTuple (args, "|fff", &input, &samplerate, &fftsize)) {
104 output = aubio_bintofreq (input, samplerate, fftsize);
106 return (PyObject *)PyFloat_FromDouble (output);
109 static char Py_freqtobin_doc[] = "convert freq to bin";
112 Py_freqtobin (PyObject * self, PyObject * args)
114 smpl_t input, samplerate, fftsize;
117 if (!PyArg_ParseTuple (args, "|fff", &input, &samplerate, &fftsize)) {
121 output = aubio_freqtobin (input, samplerate, fftsize);
123 return (PyObject *)PyFloat_FromDouble (output);
126 static char Py_freqtomidi_doc[] = "convert freq to midi";
129 Py_freqtomidi (PyObject * self, PyObject * args)
134 if (!PyArg_ParseTuple (args, "|f", &input)) {
138 output = aubio_freqtomidi (input);
140 return (PyObject *)PyFloat_FromDouble (output);
143 static char Py_miditofreq_doc[] = "convert midi to freq";
146 Py_miditofreq (PyObject * self, PyObject * args)
151 if (!PyArg_ParseTuple (args, "|f", &input)) {
155 output = aubio_miditofreq (input);
157 return (PyObject *)PyFloat_FromDouble (output);
160 static char Py_zero_crossing_rate_doc[] = "compute zero crossing rate";
163 Py_zero_crossing_rate (PyObject * self, PyObject * args)
169 if (!PyArg_ParseTuple (args, "O:zero_crossing_rate", &input)) {
177 vec = PyAubio_ArrayToCFvec (input);
183 // compute the function
184 result = Py_BuildValue ("f", aubio_zero_crossing_rate (vec));
185 if (result == NULL) {
192 static char Py_min_removal_doc[] = "compute zero crossing rate";
195 Py_min_removal(PyObject * self, PyObject * args)
200 if (!PyArg_ParseTuple (args, "O:min_removal", &input)) {
208 vec = PyAubio_ArrayToCFvec (input);
214 // compute the function
215 fvec_min_removal (vec);
217 // since this function does not return, we could return None
219 // however it is convenient to return the modified vector
220 return (PyObject *) PyAubio_CFvecToArray(vec);
221 // or even without converting it back to an array
223 //return (PyObject *)vec;
226 static PyMethodDef aubio_methods[] = {
227 //{"unwrap2pi", Py_unwrap2pi, METH_VARARGS, Py_unwrap2pi_doc},
228 {"bintomidi", Py_bintomidi, METH_VARARGS, Py_bintomidi_doc},
229 {"miditobin", Py_miditobin, METH_VARARGS, Py_miditobin_doc},
230 {"bintofreq", Py_bintofreq, METH_VARARGS, Py_bintofreq_doc},
231 {"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},
235 {"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},
237 {NULL, NULL} /* Sentinel */
240 static char aubio_module_doc[] = "Python module for the aubio library";
248 // fvec is defined in __init__.py
249 if ( (PyType_Ready (&Py_cvecType) < 0)
250 || (PyType_Ready (&Py_filterType) < 0)
251 || (PyType_Ready (&Py_filterbankType) < 0)
252 || (PyType_Ready (&Py_fftType) < 0)
253 || (PyType_Ready (&Py_pvocType) < 0)
255 || (generated_types_ready() < 0 )
260 m = Py_InitModule3 ("_aubio", aubio_methods, aubio_module_doc);
266 err = _import_array ();
269 "Unable to import Numpy array from aubio module (error %d)\n", err);
272 Py_INCREF (&Py_cvecType);
273 PyModule_AddObject (m, "cvec", (PyObject *) & Py_cvecType);
274 Py_INCREF (&Py_filterType);
275 PyModule_AddObject (m, "digital_filter", (PyObject *) & Py_filterType);
276 Py_INCREF (&Py_filterbankType);
277 PyModule_AddObject (m, "filterbank", (PyObject *) & Py_filterbankType);
278 Py_INCREF (&Py_fftType);
279 PyModule_AddObject (m, "fft", (PyObject *) & Py_fftType);
280 Py_INCREF (&Py_pvocType);
281 PyModule_AddObject (m, "pvoc", (PyObject *) & Py_pvocType);
283 // add generated objects
284 add_generated_objects(m);