{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Generating Simple Audio Signals\n", "\n", "[back to main page](index.ipynb)\n", "\n", "We create a simple sine wave as an introductory example using Python and NumPy, using a Jupyter/IPython notebook.\n", "\n", "Let's start very simple. We create ~~three~~ four numbers and give each of them a name.\n", "\n", "> Sometimes these are called *variables*, but that is actually misleading.\n", "> Think about objects and names. An object is created (in our case a number) and we specify a name by which we want to access this object." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "dur = 1.5 # duration in seconds\n", "amp = 0.3 # amplitude (full scale: +-1.0)\n", "freq = 440. # frequency in Hertz\n", "fs = 44100 # sampling frequency in Hertz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Everything following a `#` sign is a comment.\n", "You don't have to comment everything, but sometimes it helps other people (and future you) to understand what you did in your code.\n", "\n", "There is no output. If you want to see which object a certain name refers to, just type the name:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.5" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dur" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Python, *everything* is an object. And every object has a *type*. Let's see ..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(float, float, float, int)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(dur), type(amp), type(freq), type(fs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we didn't specify any types explicitly, we just got Python's default types. Numbers with a comma are by default of type `float`, numbers without comma are of type `int`.\n", "\n", "There are many more built-in types in Python (strings, tuples, lists, dictionaries, ...), but let's ignore them for now.\n", "If you *really* want to know more, you can have a look at my [Introduction to Python](intro-python.ipynb).\n", "\n", "If you want an overview about all the objects you have defined up to now, use `%who` or its more verbose cousin `%whos`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variable Type Data/Info\n", "-----------------------------\n", "amp float 0.3\n", "dur float 1.5\n", "freq float 440.0\n", "fs int 44100\n" ] } ], "source": [ "%whos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's bring NumPy into the game. The canonical way to do that is" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With this, we'll have to prepend \"`np.`\" to all NumPy functions, types etc.\n", "\n", "Now let's create the most basic signal, a sine. This is kind of the \"Hello, world!\" of signals.\n", "\n", "In order to create a sine tone, we need first a series of time instances to represent our sampling times. The distance between those instances is the *sampling interval* $\\tau = \\frac{1}{f_s}$, where $f_s$ is the *sampling frequency*.\n", "\n", "To create a series of regularly ascending (or descending) values, NumPy provides the function [numpy.arange()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html). Let's use that." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.00000000e+00, 2.26757370e-05, 4.53514739e-05, ...,\n", " 1.49993197e+00, 1.49995465e+00, 1.49997732e+00])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = np.arange(np.ceil(dur * fs)) / fs\n", "t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, this creates an array of numbers from 0 to just below the value specified in `dur`. These are a lot of numbers, so to avoid flooding us with heaps of useless output, IPython just shows the first and last few values. Very handy.\n", "\n", "> Note that in Python 2 and before, the division operator works a little differently then in Python 3. Here we assume we're using the latter, where the division of two `int`s returns a `float` value (and not an `int` with the truncated result!).\n", "> To make sure this also works as expected in Python 2, you can convert one operand to `float` before the division or use a special `import` statement:\n", ">\n", "> ```python\n", "> 1. / fs\n", "> ```\n", ">\n", "> or\n", ">\n", "> ```python\n", "> 1 / float(fs)\n", "> ```\n", ">\n", "> or\n", ">\n", "> ```python\n", "> from __future__ import division\n", "> 1 / fs\n", "> ```\n", "\n", "If you want to get help about `np.arange()` (or any other function/object), just write its name (without the parentheses) followed (or preceded) by a question mark:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "np.arange?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will open a help screen at the bottom of your browser window with an explanation of all parameters and with a few usage examples.\n", "\n", "Now let's check the type of `t`." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `ndarray` is the single most important type of NumPy. It can handle arrays with an arbitrary number of dimensions. All values stored in an `ndarray` have the same data type. This makes most operations on them faster then on Python's built-in `list`s.\n", "\n", "Let's get some information about our brand new array named `t`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(66150, dtype('float64'), 1)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(t), t.dtype, t.ndim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, NumPy stores floating point numbers as `float64`, i.e. each number using 64 bits. This is sometimes called *double precision*. If you want *single precision*, you can use `float32`. The length of our array can be obtained with the built-in `len()` function and `t.ndim` shows how many dimensions the array has. This one has only one. Boring.\n", "\n", "Now that we have our time instances, we can compute the sine for each of them, according to the equation\n", "\n", "$$x(t) = A\\sin(\\omega t),$$\n", "\n", "where $A$ is the amplitude, $\\omega = 2\\pi f$ and $f$ is the desired frequency of the resulting sine tone." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.0187945 , 0.03751516, ..., -0.05608843,\n", " -0.03751516, -0.0187945 ])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sig = amp * np.sin(2 * np.pi * freq * t)\n", "sig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we didn't have to explicitly loop over the array elements. Most NumPy functions - including `np.sin()` - work element-wise. If an array is multiplied by a scalar, the multiplication is also applied element-wise.\n", "\n", "> This is called \"broadcasting\", but more about that later ...\n", "\n", "To check if this actually worked, we plot the signal, but first we'll set up inline plotting." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sig)\n", "plt.ylim(-1.1, 1.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hmmm ... maybe we recognize something if we only plot the first 200 values." ] }, { "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": [ "plt.plot(sig[:200])\n", "plt.xlabel(\"time / samples\")\n", "plt.ylim(-1.1, 1.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Better.\n", "\n", "If we want to show the time in milliseconds instead of samples, we have to specify the time instances:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(t[:200] * 1000, sig[:200])\n", "plt.title(\"sine tone\")\n", "plt.xlabel(\"time / milliseconds\")\n", "plt.ylim(-1.1, 1.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we can *see* our signal, wouldn't it also be nice to hear it?\n", "\n", "There are several 3rd-party libraries for Python that allow audio playback, let's try one of them: the [sounddevice](http://python-sounddevice.rtfd.org/) module.\n", "\n", "Follow the [installation instructions](http://python-sounddevice.rtfd.org/#Installation), then re-start the IPython kernel and re-evaluate this notebook (with the menu commands \"Kernel\" $\\to$ \"Restart\" and \"Cell\" $\\to$ \"Run All Above\") and continue here:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "import sounddevice as sd" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "sd.play(sig, fs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Did it work? No?\n", "\n", "Don't despair, if you can't play the signal directly, you can save it to a sound file and play that in an external sound file player.\n", "I've written a separate [description how to read and write audio files in Python](audio-files/index.ipynb), have a look there.\n", "\n", "OK, now we know how to create a *mono* signal, but what about *stereo*?\n", "\n", "For now, we were using one-dimensional arrays, but for stereo signals we need two-dimensional arrays.\n", "The 2 channels can be either stored as rows or as columns of such a two-dimensional array.\n", "Both ways are possible, but it's more common to store the channels as columns.\n", "\n", "Let's create two sine signals with different frequencies, one on the left channel and one on the right.\n", "\n", "There are several possibilities:\n", "\n", "1. Create two separate mono signals like above, and combine them with [numpy.column_stack()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.column_stack.html)\n", "\n", "1. Duplicate the time array `t` and the array with the two frequencies with [numpy.tile()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html) and use those larger two-dimensional arrays in the calculations (this is not recommended)\n", "\n", "1. Use [broadcasting](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html) and do everything at once\n", "\n", "1. For sure, there are more ways to do this ...\n", "\n", "In this case, let's use *broadcasting*!\n", "\n", "This means that we use arrays of different (but compatible) shapes in our calculations and the singular dimensions are internally repeated.\n", "This sounds complicated, let's just see it in an example.\n", "\n", "Remember our time array `t`?" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.00000000e+00, 2.26757370e-05, 4.53514739e-05, ...,\n", " 1.49993197e+00, 1.49995465e+00, 1.49997732e+00])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This array is one-dimensional (note that there is only one pair of brackets).\n", "\n", "To be completely obvious, we could also check the number of dimensions explicitly:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.ndim" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But we can re-shape it, for example into a two-dimensional array with one column.\n", "We can specify the concrete shape, or we can set one component to `-1`, which means this dimension is determined automatically, based on the given data." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.00000000e+00],\n", " [2.26757370e-05],\n", " [4.53514739e-05],\n", " ...,\n", " [1.49993197e+00],\n", " [1.49995465e+00],\n", " [1.49997732e+00]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.reshape(-1, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is two-dimensional (note the two levels of brackets!).\n", "\n", "Let's now create an array for our two frequencies." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([500, 600])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "freq = np.array([500, 600])\n", "freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, this two-element array is one-dimensional.\n", "\n", "The interesting part comes when we multiply those two arrays:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.00000000e+00, 0.00000000e+00],\n", " [1.13378685e-02, 1.36054422e-02],\n", " [2.26757370e-02, 2.72108844e-02],\n", " ...,\n", " [7.49965986e+02, 8.99959184e+02],\n", " [7.49977324e+02, 8.99972789e+02],\n", " [7.49988662e+02, 8.99986395e+02]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "freq * t.reshape(-1, 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wow, the result is a two-dimensional array with two columns!\n", "The left column holds the time array element-wise multiplied with the left frequency, the right column used the right frequency value for multiplication.\n", "\n", "Isn't this great?\n", "Now we can use this for creating our *stereo* sine signal:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. ],\n", " [ 0.02135331, 0.02561443],\n", " [ 0.0425983 , 0.05104179],\n", " ...,\n", " [-0.0636272 , -0.07609638],\n", " [-0.0425983 , -0.05104179],\n", " [-0.02135331, -0.02561443]])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sig = amp * np.sin(2 * np.pi * freq * t.reshape(-1, 1))\n", "sig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we have an array with two columns, one for each channel.\n", "\n", "The plt.plot() function can handle two-dimensional arrays and just plots each column with a new color. How convenient!" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(sig[:200])\n", "plt.ylim(-1.1, 1.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course we can again plot the time in milliseconds.\n", "And let's add a legend in order to distinguish the two signals!" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(t[:200] * 1000, sig[:200])\n", "plt.title(\"stereo sine\")\n", "plt.xlabel(\"time / milliseconds\")\n", "plt.legend([\"left\", \"right\"])\n", "plt.ylim(-1.1, 1.1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want to know more about plotting, have a look at my [pages about plotting](plotting/index.ipynb), especially the [matplotlib intro](plotting/matplotlib.ipynb).\n", "\n", "Like before, you can play back the signal, but this time in stereo, hooray!" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "sd.play(sig, fs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's it for this little example, if you want to know more, go back to the [main page](index.ipynb) and dive in!\n", "\n", "Have fun!" ] }, { "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.3" } }, "nbformat": 4, "nbformat_minor": 1 }