{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reading and Writing Audio Files with wave\n", "\n", "[back to overview page](index.ipynb)\n", "\n", "The `wave` module is part of the Python standard library.\n", "\n", "Documentation:\n", "\n", "* http://docs.python.org/2/library/wave.html (Python 2.x)\n", "* http://docs.python.org/3/library/wave.html (Python 3.x)\n", "\n", "Audio data is handled with the Python type `str` (Python 2.x) or `bytes` (Python 3.x).\n", "\n", "Advantages:\n", "\n", "* part of the standard library, no further dependencies\n", "* 24-bit files can be used (but manual conversion is necessary)\n", "* partial reading is possible\n", "* works with both Python 2 and 3\n", "\n", "Disadvantages:\n", "\n", "* 32-bit float not supported\n", "* WAVEX doesn't work\n", "* manual de-interleaving and conversion is necessary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading\n", "\n", "Reading a 16-bit WAV file into a NumPy array is not hard, but it requires a few lines of code:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import wave\n", "import numpy as np\n", "import utility\n", "\n", "with wave.open('data/test_wav_pcm16.wav') as w:\n", " channels = w.getnchannels()\n", " assert w.getsampwidth() == 2\n", " data = w.readframes(w.getnframes())\n", "\n", "sig = np.frombuffer(data, dtype='" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sig);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that neither `frombuffer()` nor `reshape()` made a copy of the data. We are still using the buffer of bytes we got from `readframes()`. By using the `.base` attribute of the array we get the result of `frombuffer()` (before `reshape()`) and by using `.base` a second time, we get a reference to the original buffer object:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sig.base.base is data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the `flags` attribute we get a few details about the buffer. `C_CONTIGUOUS` means that the rows are contiguous (in row-major format, like it's used in C). We also see that `sig` doesn't \"own\" the data (it's rather \"borrowed\" from the `data` object) and that it's not writable (because the `bytes` object returned by `readframes()` above happens to be read-only):" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " C_CONTIGUOUS : True\n", " F_CONTIGUOUS : False\n", " OWNDATA : False\n", " WRITEABLE : False\n", " ALIGNED : True\n", " WRITEBACKIFCOPY : False\n", " UPDATEIFCOPY : False" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sig.flags" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've already got the correct values but if we want to do some signal processing with the data, it's normally easier to convert the numers to floating point format and to normalize them to a range from -1 to 1.\n", "\n", "To do that, I wrote a little helper function called `utility.pcm2float()`, located in the file [utility.py](https://github.com/mgeier/python-audio/blob/master/audio-files/utility.py), let's load it and apply it to our signal:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import utility\n", "\n", "normalized = utility.pcm2float(sig, 'float32')\n", "\n", "plt.plot(normalized);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we change the data type from int16 to float32, a copy of the array is created, which now is writable and \"owns\" its data:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " C_CONTIGUOUS : True\n", " F_CONTIGUOUS : False\n", " OWNDATA : True\n", " WRITEABLE : True\n", " ALIGNED : True\n", " WRITEBACKIFCOPY : False\n", " UPDATEIFCOPY : False" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "normalized.flags" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "24-bit files can be opened with `wave.open()` as well, but the conversion is a little more complicated." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sampling rate: 44100 Hz\n", "length: 15 samples\n", "channels: 7\n", "sample width: 3 bytes\n" ] } ], "source": [ "with wave.open('data/test_wav_pcm24.wav') as w:\n", " framerate = w.getframerate()\n", " frames = w.getnframes()\n", " channels = w.getnchannels()\n", " width = w.getsampwidth()\n", " print('sampling rate:', framerate, 'Hz')\n", " print('length:', frames, 'samples')\n", " print('channels:', channels)\n", " print('sample width:', width, 'bytes')\n", " \n", " data = w.readframes(frames)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the sample width is 3 bytes (because we loaded a 24-bit file). Sadly, there is no 3-byte integer type in NumPy. Therefore, we have to fill each 3-byte number with a further byte and then convert it to a 4-byte integer.\n", "We can add this byte (filled with zero-bits) either as most significant or a least significant byte. This doesn't change the precision of the data, we just have to remember which one it was when we do calculations with the stored values.\n", "If we add the zero-byte as LSB, the resulting values will have the full range of a 4-byte integer, therefore we can use the `utility.pcm2float()` function from above.\n", "If we would add the zero-byte as MSB, the range would be limited to a 3-byte integer and we would have to write a new function for normalization." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 255, 255, 127],\n", " [ 0, 219, 182, 109],\n", " [ 0, 182, 109, 91],\n", " [ 0, 146, 36, 73],\n", " [ 0, 109, 219, 54],\n", " [ 0, 73, 146, 36],\n", " [ 0, 36, 73, 18],\n", " [ 0, 242, 82, 115],\n", " [ 0, 222, 103, 68],\n", " [ 0, 67, 88, 20],\n", " [ 0, 100, 185, 239],\n", " [ 0, 17, 204, 221],\n", " [ 0, 223, 12, 223],\n", " [ 0, 220, 182, 237],\n", " [ 0, 131, 206, 79],\n", " [ 0, 22, 150, 231],\n", " [ 0, 47, 160, 173],\n", " [ 0, 191, 25, 190],\n", " [ 0, 11, 203, 243],\n", " [ 0, 74, 205, 22],\n", " [ 0, 36, 73, 18],\n", " [ 0, 145, 123, 28],\n", " [ 0, 158, 38, 157],\n", " [ 0, 199, 254, 198],\n", " [ 0, 148, 154, 45],\n", " [ 0, 177, 108, 49],\n", " [ 0, 178, 220, 247],\n", " [ 0, 220, 182, 237],\n", " [ 0, 111, 132, 227],\n", " [ 0, 158, 38, 157],\n", " [ 0, 57, 1, 57],\n", " [ 0, 148, 154, 45],\n", " [ 0, 79, 147, 206],\n", " [ 0, 178, 220, 247],\n", " [ 0, 36, 73, 18],\n", " [ 0, 125, 49, 176],\n", " [ 0, 22, 150, 231],\n", " [ 0, 209, 95, 82],\n", " [ 0, 191, 25, 190],\n", " [ 0, 245, 52, 12],\n", " [ 0, 74, 205, 22],\n", " [ 0, 220, 182, 237],\n", " [ 0, 14, 173, 140],\n", " [ 0, 222, 103, 68],\n", " [ 0, 189, 167, 235],\n", " [ 0, 100, 185, 239],\n", " [ 0, 239, 51, 34],\n", " [ 0, 223, 12, 223],\n", " [ 0, 36, 73, 18],\n", " [ 0, 1, 0, 128],\n", " [ 0, 219, 182, 109],\n", " [ 0, 74, 146, 164],\n", " [ 0, 146, 36, 73],\n", " [ 0, 147, 36, 201],\n", " [ 0, 73, 146, 36],\n", " [ 0, 220, 182, 237],\n", " [ 0, 14, 173, 140],\n", " [ 0, 222, 103, 68],\n", " [ 0, 189, 167, 235],\n", " [ 0, 100, 185, 239],\n", " [ 0, 239, 51, 34],\n", " [ 0, 223, 12, 223],\n", " [ 0, 36, 73, 18],\n", " [ 0, 125, 49, 176],\n", " [ 0, 22, 150, 231],\n", " [ 0, 209, 95, 82],\n", " [ 0, 191, 25, 190],\n", " [ 0, 245, 52, 12],\n", " [ 0, 74, 205, 22],\n", " [ 0, 220, 182, 237],\n", " [ 0, 111, 132, 227],\n", " [ 0, 158, 38, 157],\n", " [ 0, 57, 1, 57],\n", " [ 0, 148, 154, 45],\n", " [ 0, 79, 147, 206],\n", " [ 0, 178, 220, 247],\n", " [ 0, 36, 73, 18],\n", " [ 0, 145, 123, 28],\n", " [ 0, 158, 38, 157],\n", " [ 0, 199, 254, 198],\n", " [ 0, 148, 154, 45],\n", " [ 0, 177, 108, 49],\n", " [ 0, 178, 220, 247],\n", " [ 0, 220, 182, 237],\n", " [ 0, 131, 206, 79],\n", " [ 0, 22, 150, 231],\n", " [ 0, 47, 160, 173],\n", " [ 0, 191, 25, 190],\n", " [ 0, 11, 203, 243],\n", " [ 0, 74, 205, 22],\n", " [ 0, 36, 73, 18],\n", " [ 0, 242, 82, 115],\n", " [ 0, 222, 103, 68],\n", " [ 0, 67, 88, 20],\n", " [ 0, 100, 185, 239],\n", " [ 0, 17, 204, 221],\n", " [ 0, 223, 12, 223],\n", " [ 0, 220, 182, 237],\n", " [ 0, 255, 255, 127],\n", " [ 0, 219, 182, 109],\n", " [ 0, 182, 109, 91],\n", " [ 0, 146, 36, 73],\n", " [ 0, 109, 219, 54],\n", " [ 0, 73, 146, 36],\n", " [ 0, 36, 73, 18]], dtype=uint8)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "assert width == 3\n", "\n", "temp = bytearray()\n", "\n", "for i in range(0, len(data), 3):\n", " temp.append(0)\n", " temp.extend(data[i:i+3])\n", "\n", "# Using += instead of .extend() may be faster\n", "# (see https://youtu.be/z9Hmys8ojno?t=35m50s).\n", "# But starting with an empty bytearray and\n", "# extending it on each iteration might be slow, anyway.\n", "# See further below for how to reserve all necessary memory in the beginning.\n", "\n", "four_bytes = np.frombuffer(temp, dtype='B').reshape(-1, 4)\n", "four_bytes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have a bytearray where each group of 4 bytes represents an integer (in little-endian order).\n", "\n", "Next, let's convert it to actual integers and reshape the channels into columns." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 2147483392, 1840700160, 1533916672, 1227133440, 920349952,\n", " 613566720, 306783232],\n", " [ 1934815744, 1147657728, 341328640, -273062912, -573828864,\n", " -552804608, -306783232],\n", " [ 1338934016, -409594368, -1382011136, -1105608960, -204797184,\n", " 382552576, 306783232],\n", " [ 477860096, -1658413568, -956381440, 765105152, 829206784,\n", " -136531456, -306783232],\n", " [ -477860096, -1658413568, 956381440, 765105152, -829206784,\n", " -136531456, 306783232],\n", " [-1338934016, -409594368, 1382011136, -1105608960, 204797184,\n", " 382552576, -306783232],\n", " [-1934815744, 1147657728, -341328640, -273062912, 573828864,\n", " -552804608, 306783232],\n", " [-2147483392, 1840700160, -1533916672, 1227133440, -920349952,\n", " 613566720, -306783232],\n", " [-1934815744, 1147657728, -341328640, -273062912, 573828864,\n", " -552804608, 306783232],\n", " [-1338934016, -409594368, 1382011136, -1105608960, 204797184,\n", " 382552576, -306783232],\n", " [ -477860096, -1658413568, 956381440, 765105152, -829206784,\n", " -136531456, 306783232],\n", " [ 477860096, -1658413568, -956381440, 765105152, 829206784,\n", " -136531456, -306783232],\n", " [ 1338934016, -409594368, -1382011136, -1105608960, -204797184,\n", " 382552576, 306783232],\n", " [ 1934815744, 1147657728, 341328640, -273062912, -573828864,\n", " -552804608, -306783232],\n", " [ 2147483392, 1840700160, 1533916672, 1227133440, 920349952,\n", " 613566720, 306783232]], dtype=int32)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sig = np.frombuffer(temp, dtype='" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "normalized = utility.pcm2float(sig, 'float32')\n", "plt.plot(normalized);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "WAVEX doesn't work:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Traceback (most recent call last):\n", " File \"\", line 3, in \n", " w = wave.open('data/test_wavex_pcm16.wav')\n", " File \"/usr/lib/python3.7/wave.py\", line 510, in open\n", " return Wave_read(f)\n", " File \"/usr/lib/python3.7/wave.py\", line 164, in __init__\n", " self.initfp(f)\n", " File \"/usr/lib/python3.7/wave.py\", line 144, in initfp\n", " self._read_fmt_chunk(chunk)\n", " File \"/usr/lib/python3.7/wave.py\", line 269, in _read_fmt_chunk\n", " raise Error('unknown format: %r' % (wFormatTag,))\n", "wave.Error: unknown format: 65534\n" ] } ], "source": [ "import traceback\n", "try:\n", " w = wave.open('data/test_wavex_pcm16.wav')\n", "except:\n", " traceback.print_exc()\n", "else:\n", " print('It works (unexpectedly)!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's try 32-bit float:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Traceback (most recent call last):\n", " File \"\", line 2, in \n", " w = wave.open('data/test_wav_float32.wav')\n", " File \"/usr/lib/python3.7/wave.py\", line 510, in open\n", " return Wave_read(f)\n", " File \"/usr/lib/python3.7/wave.py\", line 164, in __init__\n", " self.initfp(f)\n", " File \"/usr/lib/python3.7/wave.py\", line 144, in initfp\n", " self._read_fmt_chunk(chunk)\n", " File \"/usr/lib/python3.7/wave.py\", line 269, in _read_fmt_chunk\n", " raise Error('unknown format: %r' % (wFormatTag,))\n", "wave.Error: unknown format: 3\n" ] } ], "source": [ "try:\n", " w = wave.open('data/test_wav_float32.wav')\n", "except:\n", " traceback.print_exc()\n", "else:\n", " print('It works (unexpectedly)!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Writing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "TODO" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another way (without NumPy): http://soledadpenades.com/2009/10/29/fastest-way-to-generate-wav-files-in-python-using-the-wave-module/\n", "\n", "Another way for 24-bit WAV files (with NumPy): https://github.com/WarrenWeckesser/wavio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Version Info" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Versions: NumPy = 1.16.2; IPython = 7.5.0.dev\n", "Python interpreter:\n", "3.7.4 (default, Jul 11 2019, 10:43:21) \n", "[GCC 8.3.0]\n" ] } ], "source": [ "import sys, IPython\n", "print('Versions: NumPy = {}; IPython = {}'.format(np.__version__, IPython.__version__))\n", "\n", "print('Python interpreter:')\n", "print(sys.version)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", " \n", " \"CC0\"\n", " \n", "
\n", " To the extent possible under law,\n", " the person who associated CC0\n", " with this work has waived all copyright and related or neighboring\n", " rights to this work.\n", "

" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }