Showing the changes to python (3 of 3 files). Show all
Unified · Split
| @@ -241,6 +241,7 @@ static PyMethodDef aubio_methods[] = { · 240 unmodified lines | ||
| 241 | 241 | {"zero_crossing_rate", Py_zero_crossing_rate, METH_VARARGS, Py_zero_crossing_rate_doc}, |
| 242 | 242 | {"min_removal", Py_min_removal, METH_VARARGS, Py_min_removal_doc}, |
| 243 | 243 | {"level_lin", Py_aubio_level_lin, METH_VARARGS, Py_aubio_level_lin_doc}, |
| 244 | + {"db_spl", Py_aubio_db_spl, METH_VARARGS, Py_aubio_db_spl_doc}, | |
| 244 | 245 | {"window", Py_aubio_window, METH_VARARGS, Py_aubio_window_doc}, |
| 245 | 246 | {NULL, NULL} /* Sentinel */ |
| 246 | 247 | }; |
| @@ -50,3 +50,33 @@ Py_aubio_level_lin(PyObject *self, PyObject *args) · 49 unmodified lines | ||
| 50 | 50 | |
| 51 | 51 | return level_lin; |
| 52 | 52 | } |
| 53 | + | |
| 54 | +PyObject * | |
| 55 | +Py_aubio_db_spl(PyObject *self, PyObject *args) | |
| 56 | +{ | |
| 57 | + PyObject *input; | |
| 58 | + fvec_t *vec; | |
| 59 | + PyObject *db_spl; | |
| 60 | + | |
| 61 | + if (!PyArg_ParseTuple (args, "O:db_spl", &input)) { | |
| 62 | + PyErr_SetString (PyExc_ValueError, "failed parsing arguments"); | |
| 63 | + return NULL; | |
| 64 | + } | |
| 65 | + | |
| 66 | + if (input == NULL) { | |
| 67 | + return NULL; | |
| 68 | + } | |
| 69 | + | |
| 70 | + vec = PyAubio_ArrayToCFvec (input); | |
| 71 | + if (vec == NULL) { | |
| 72 | + return NULL; | |
| 73 | + } | |
| 74 | + | |
| 75 | + db_spl = Py_BuildValue("f", aubio_db_spl(vec)); | |
| 76 | + if (db_spl == NULL) { | |
| 77 | + PyErr_SetString (PyExc_ValueError, "failed computing db_spl"); | |
| 78 | + return NULL; | |
| 79 | + } | |
| 80 | + | |
| 81 | + return db_spl; | |
| 82 | +} | |
| @@ -5,7 +5,7 @@ from numpy.testing.utils import assert_equal, assert_almost_equal · 4 unmodified lines | ||
| 5 | 5 | from numpy import cos, arange |
| 6 | 6 | from math import pi |
| 7 | 7 | |
| 8 | −from aubio import window, level_lin | |
| 8 | +from aubio import window, level_lin, db_spl | |
| 9 | 9 | |
| 10 | 10 | from aubio import fvec |
| 11 | 11 | |
| @@ -55,6 +55,26 @@ class aubio_level_lin(TestCase): · 43 unmodified lines | ||
| 55 | 55 | from numpy import ones |
| 56 | 56 | assert_equal(level_lin(-ones(1024, dtype="float32")), 1.) |
| 57 | 57 | |
| 58 | +class aubio_db_spl(TestCase): | |
| 59 | + def test_accept_fvec(self): | |
| 60 | + db_spl(fvec(1024)) | |
| 61 | + | |
| 62 | + def test_fail_not_fvec(self): | |
| 63 | + try: | |
| 64 | + db_spl("default") | |
| 65 | + except ValueError, e: | |
| 66 | + pass | |
| 67 | + else: | |
| 68 | + self.fail('non-number input phase does not raise a TypeError') | |
| 69 | + | |
| 70 | + def test_zeros_is_inf(self): | |
| 71 | + from math import isinf | |
| 72 | + assert isinf(db_spl(fvec(1024))) | |
| 73 | + | |
| 74 | + def test_minus_ones_is_zero(self): | |
| 75 | + from numpy import ones | |
| 76 | + assert_equal(db_spl(-ones(1024, dtype="float32")), 0.) | |
| 77 | + | |
| 58 | 78 | if __name__ == '__main__': |
| 59 | 79 | from unittest import main |
| 60 | 80 | main() |