Showing the changes to python/ext (1 of 1 file). Show all
Unified · Split
| @@ -2,16 +2,95 @@ · 1 unmodified line | |||
| 2 | #define PY_AUBIO_MUSICUTILS_H | 2 | #define PY_AUBIO_MUSICUTILS_H |
| 3 | 3 | ||
| 4 | static char Py_aubio_window_doc[] = "" | 4 | static char Py_aubio_window_doc[] = "" |
| 5 | "window(string, integer) -> fvec\n" | 5 | "window(window_type, size)\n" |
| 6 | "\n" | ||
| 7 | "Create a window of length `size`. `window_type` should be one\n" | ||
| 8 | "of the following:\n" | ||
| 9 | "\n" | ||
| 10 | "- `default` (same as `hanningz`).\n" | ||
| 11 | "- `ones`\n" | ||
| 12 | "- `rectangle`\n" | ||
| 13 | "- `hamming`\n" | ||
| 14 | "- `hanning`\n" | ||
| 15 | "- `hanningz` [1]_\n" | ||
| 16 | "- `blackman`\n" | ||
| 17 | "- `blackman_harris`\n" | ||
| 18 | "- `gaussian`\n" | ||
| 19 | "- `welch`\n" | ||
| 20 | "- `parzen`\n" | ||
| 6 | "\n" | 21 | "\n" |
| 7 | "Create a window\n" | 22 | "Parameters\n" |
| 23 | "----------\n" | ||
| 24 | "window_type : str\n" | ||
| 25 | " Type of window.\n" | ||
| 26 | "size : int\n" | ||
| 27 | " Length of window.\n" | ||
| 8 | "\n" | 28 | "\n" |
| 9 | "Example\n" | 29 | "Returns\n" |
| 10 | "-------\n" | 30 | "-------\n" |
| 31 | "fvec\n" | ||
| 32 | " Array of shape `(length,)` containing the new window.\n" | ||
| 33 | "\n" | ||
| 34 | "See Also\n" | ||
| 35 | "--------\n" | ||
| 36 | "pvoc, fft\n" | ||
| 37 | "\n" | ||
| 38 | "Examples\n" | ||
| 39 | "--------\n" | ||
| 40 | "Compute a zero-phase Hann window on `1024` points:\n" | ||
| 11 | "\n" | 41 | "\n" |
| 12 | ">>> window('hanningz', 1024)\n" | 42 | ">>> aubio.window('hanningz', 1024)\n" |
| 13 | "array([ 0.00000000e+00, 9.41753387e-06, 3.76403332e-05, ...,\n" | 43 | "array([ 0.00000000e+00, 9.41753387e-06, 3.76403332e-05, ...,\n" |
| 14 | " 8.46982002e-05, 3.76403332e-05, 9.41753387e-06], dtype=float32)"; | 44 | " 8.46982002e-05, 3.76403332e-05, 9.41753387e-06], dtype=float32)\n" |
| 45 | "\n" | ||
| 46 | "Plot different window types with `matplotlib <https://matplotlib.org/>`_:\n" | ||
| 47 | "\n" | ||
| 48 | ">>> import matplotlib.pyplot as plt\n" | ||
| 49 | ">>> modes = ['default', 'ones', 'rectangle', 'hamming', 'hanning',\n" | ||
| 50 | "... 'hanningz', 'blackman', 'blackman_harris', 'gaussian',\n" | ||
| 51 | "... 'welch', 'parzen']; n = 2048\n" | ||
| 52 | ">>> for m in modes: plt.plot(aubio.window(m, n), label=m)\n" | ||
| 53 | "...\n" | ||
| 54 | ">>> plt.legend(); plt.show()\n" | ||
| 55 | "\n" | ||
| 56 | "Note\n" | ||
| 57 | "----\n" | ||
| 58 | "The following examples contain the equivalent source code to compute\n" | ||
| 59 | "each type of window with `NumPy <https://numpy.org>`_:\n" | ||
| 60 | "\n" | ||
| 61 | ">>> n = 1024; x = np.arange(n, dtype=aubio.float_type)\n" | ||
| 62 | ">>> ones = np.ones(n).astype(aubio.float_type)\n" | ||
| 63 | ">>> rectangle = 0.5 * ones\n" | ||
| 64 | ">>> hanning = 0.5 - 0.5 * np.cos(2 * np.pi * x / n)\n" | ||
| 65 | ">>> hanningz = 0.5 * (1 - np.cos(2 * np.pi * x / n))\n" | ||
| 66 | ">>> hamming = 0.54 - 0.46 * np.cos(2.*np.pi * x / (n - 1))\n" | ||
| 67 | ">>> blackman = 0.42 \\\n" | ||
| 68 | "... - 0.50 * np.cos(2 * np.pi * x / (n - 1)) \\\n" | ||
| 69 | "... + 0.08 * np.cos(4 * np.pi * x / (n - 1))\n" | ||
| 70 | ">>> blackman_harris = 0.35875 \\\n" | ||
| 71 | "... - 0.48829 * np.cos(2 * np.pi * x / (n - 1)) \\\n" | ||
| 72 | "... + 0.14128 * np.cos(4 * np.pi * x / (n - 1)) \\\n" | ||
| 73 | "... + 0.01168 * np.cos(6 * np.pi * x / (n - 1))\n" | ||
| 74 | ">>> gaussian = np.exp( - 0.5 * ((x - 0.5 * (n - 1)) \\\n" | ||
| 75 | "... / (0.25 * (n - 1)) )**2 )\n" | ||
| 76 | ">>> welch = 1 - ((2 * x - n) / (n + 1))**2\n" | ||
| 77 | ">>> parzen = 1 - np.abs((2 * x - n) / (n + 1))\n" | ||
| 78 | ">>> default = hanningz\n" | ||
| 79 | "References\n" | ||
| 80 | "----------\n" | ||
| 81 | #if 0 | ||
| 82 | "`Window function <https://en.wikipedia.org/wiki/Window_function>`_ on\n" | ||
| 83 | "Wikipedia.\n" | ||
| 84 | "\n" | ||
| 85 | #endif | ||
| 86 | ".. [1] Amalia de Götzen, Nicolas Bernardini, and Daniel Arfib. Traditional\n" | ||
| 87 | " (?) implementations of a phase vocoder: the tricks of the trade.\n" | ||
| 88 | " In *Proceedings of the International Conference on Digital Audio\n" | ||
| 89 | " Effects* (DAFx-00), pages 37–44, University of Verona, Italy, 2000.\n" | ||
| 90 | " (`online version <" | ||
| 91 | "https://www.cs.princeton.edu/courses/archive/spr09/cos325/Bernardini.pdf" | ||
| 92 | ">`_).\n" | ||
| 93 | ""; | ||
| 15 | 94 | ||
| 16 | PyObject * Py_aubio_window(PyObject *self, PyObject *args); | 95 | PyObject * Py_aubio_window(PyObject *self, PyObject *args); |
| 17 | 96 | ||