{
 "metadata": {
  "name": "",
  "signature": "sha256:10a96a42f1a86ec36e94c4b4752dae6f748916ce4faf6c29f6cfae3032f5f073"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Using Audio in IPython"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Audio Libraries"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We will mainly use three libraries for audio acquisition and playback: `IPython.display.Audio`, `essentia.standard`, and `librosa`."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Introduced in IPython 2.0, [`IPython.display.Audio`](http://ipython.org/ipython-doc/2/api/generated/IPython.lib.display.html#IPython.lib.display.Audio) lets you play audio directly in an IPython notebook."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "[Essentia](http://essentia.upf.edu) is an open-source library for audio analysis and music information retrieval \n",
      "from the [Music Technology Group at Universitat Pompeu Fabra](http://mtg.upf.edu/home). \n",
      "Although Essentia is written in C++, we will use the Python bindings for Essentia.\n",
      "\n",
      "- [Documentation Home](http://essentia.upf.edu/documentation/)\n",
      "- [Python Tutorial](http://essentia.upf.edu/documentation/python_tutorial.html)\n",
      "- [Essentia on GitHub](https://github.com/MTG/essentia)"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "`librosa` is a Python package for music and audio processing by [Brian McFee](http://cosmal.ucsd.edu/~bmcfee/). A large portion was ported from [Dan Ellis's Matlab audio processing examples](http://www.ee.columbia.edu/%7Edpwe/resources/matlab/).\n",
      "\n",
      "- [Documentation Home](http://bmcfee.github.io/librosa/)\n",
      "- [Demo: Getting Started](http://nbviewer.ipython.org/github/bmcfee/librosa/blob/master/examples/LibROSA%20demo.ipynb)\n",
      "- [librosa on Github](https://github.com/bmcfee/librosa/)"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Retrieving Audio"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To download a file onto your local machine (or Vagrant box) in Python, you can use `urllib.urlretrieve`:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import urllib\n",
      "urllib.urlretrieve('https://ccrma.stanford.edu/workshops/mir2014/audio/simpleLoop.wav', filename='simpleLoop.wav')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "('simpleLoop.wav', <httplib.HTTPMessage instance at 0x3629b48>)"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To check that the file downloaded successfully, list the files in the working directory:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%ls *.wav"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\u001b[0m\u001b[00;36mdefault.wav\u001b[0m  \u001b[00;36mout.wav\u001b[0m  \u001b[00;36msimpleLoop.wav\u001b[0m\r\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Visit https://ccrma.stanford.edu/workshops/mir2014/audio/ for more audio files."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "If you only want to listen to, and not manipulate, a remote audio file, use `IPython.display.Audio` instead. (See [Playing Audio](#Playing-Audio).)"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Reading Audio"
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "`essentia.standard.Monoloader`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "[`MonoLoader`](http://essentia.upf.edu/documentation/reference/std_MonoLoader.html) reads (and downmixes, if necessary) an audio file into a single channel (as will often be the case during this workshop). `MonoLoader` also resamples the audio to a sampling frequency of your choice (default = 44100 Hz):"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from essentia.standard import MonoLoader\n",
      "audio = MonoLoader(filename='simpleLoop.wav')()\n",
      "audio.shape"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 3,
       "text": [
        "(132300,)"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "N = len(audio)\n",
      "t = arange(0, N)/44100.0\n",
      "plot(t, audio)\n",
      "xlabel('Time (seconds)')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 4,
       "text": [
        "<matplotlib.text.Text at 0x40f4bd0>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nMej8+fN9iIguXrzYa8OGDWPj4+N3+6JMAADwjMfBv3r16slms7mmpKTkpszMzPyMjIz1RERHjx4d\nlJmZmU9EVF9fPzA1NXVLUlJSZUpKSun48eP/OXbs2A2+qjwAAHjA24O7XXmsX7/+ziFDhuyPioqq\nWrBgwfPO5vnNb37zRlRUVFVCQsLO8vJyi5z1k3r9Nm3aZO3bt+/ZpKSkiqSkpIr58+e/oHSd3X08\n9thjH15zzTUNw4cP393RPFredp2tn5a33ZEjR8xWq3XT0KFD9wwbNuyH119/fZaetp8766fl7dfU\n1NRj5MiRpYmJiZVxcXF7Z8+e/Rdvt59slW9tbfW//vrrDx0+fDiyubk5MDExsXLv3r1x9vPk5+eP\ny8jIKGCMUUlJSUpKSkqJ0v90X67fpk2brBMmTMhTuq6ePDZv3pxaXl5u6SgYtbzt3Fk/LW+7Y8eO\nDayoqEhijNH58+d7x8TEHNDTZ8+d9dPy9mOM0cWLF4MYY9TS0hKQkpJSsmXLllu82X6yXbKhrKxs\nZFRU1KHIyMjqwMDAlilTpixfu3btRPt58vLysrKzs5cSEaWkpJSeOXOmX0NDQ6hcdfSGO+tHpN0R\nTKmpqVtCQkJOd/R7LW87os7Xj0i7227gwIH1SUlJlUREvXv3vhAXF7fv6NGjg+zn0fL2c2f9iLS7\n/YiIgoKCGomImpubu7W1tfk7nhDb1e0nW/DX1dWFm83mGvFzREREbV1dXXhn89TW1kbIVUdvuLN+\nJpOJbdu27ZeJiYk7x40bV7B3796h8tdUGlredu7Qy7arrq6OrKiosKSkpJTav66X7dfR+ml9+7W3\nt/slJSVVhoaGNtx2222bhg4dutf+913dfh6fudtVJpOJuTOf417Z3b9Tmjv1TE5OLq+pqTEHBQU1\nrl+/PmPSpElrDh48GCNH/eSg1W3nDj1suwsXLvS+5557Vr7++utP9e7d+4Lj77W+/Vytn9a3n5+f\nX3tlZWXS2bNng9PT078sLi62Wq3WYvt5urL9ZGvxh4eH19XU1JjFzzU1NeaIiIhaV/PU1tZGhIeH\n18lVR2+4s359+vQ5L76yZWRkrG9paQk8depUf7nrKgUtbzt3aH3btbS0BN59993/ePjhhz+ZNGnS\nGsffa337dbZ+Wt9+QnBw8NnMzMz8HTt2jLB/vavbT7bgHzFixI6qqqro6urqyObm5m4rVqy4Pysr\n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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x37e57d0>"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "For more control over the audio acquisition process, you may want to use [`AudioLoader`](http://essentia.upf.edu/documentation/reference/std_AudioLoader.html) instead."
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "`librosa.load`"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import librosa\n",
      "x, fs = librosa.load('simpleLoop.wav')\n",
      "print x.shape\n",
      "print fs"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(66150,)\n",
        "22050\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Playing Audio"
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "`IPython.display.Audio`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Using [`IPython.display.Audio`](http://ipython.org/ipython-doc/2/api/generated/IPython.lib.display.html#IPython.lib.display.Audio), you can play a local audio file or a remote audio file:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython.display import Audio\n",
      "Audio('https://ccrma.stanford.edu/workshops/mir2014/audio/CongaGroove-mono.wav') # remote WAV file"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "\n",
        "                <audio controls=\"controls\" >\n",
        "                    <source src=\"data:audio/x-wav;base64,[encoded data, 513192 characters]\" type=\"audio/x-wav\" />\n",
        "                    Your browser does not support the audio element.\n",
        "                </audio>\n",
        "              "
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 6,
       "text": [
        "<IPython.lib.display.Audio at 0x410bed0>"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Audio('simpleLoop.wav')  # local WAV file"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "\n",
        "                <audio controls=\"controls\" >\n",
        "                    <source src=\"data:audio/x-wav;base64,[encoded data, 352860 characters]\" type=\"audio/x-wav\" />\n",
        "                    Your browser does not support the audio element.\n",
        "                </audio>\n",
        "              "
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "<IPython.lib.display.Audio at 0x580d690>"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "`Audio` can also accept a NumPy array:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fs = 44100 # sampling frequency\n",
      "T = 1.5    # seconds\n",
      "t = numpy.linspace(0, T, int(T*fs), endpoint=False) # time variable\n",
      "x = numpy.sin(2*numpy.pi*440*t)                # pure sine wave at 440 Hz\n",
      "Audio(x, rate=fs)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "\n",
        "                <audio controls=\"controls\" >\n",
        "                    <source src=\"data:audio/wav;base64,[encoded data, 176460 characters]\" type=\"audio/wav\" />\n",
        "                    Your browser does not support the audio element.\n",
        "                </audio>\n",
        "              "
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 8,
       "text": [
        "<IPython.lib.display.Audio at 0x5e1e710>"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "SoX"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To play audio from the command line, we recommend SoX (included in the `stanford-mir` Vagrant box).\n",
      "\n",
      "    $ play simpleLoop.wav"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Visualizing Audio"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "`plot` is the simplest way to plot time-domain signals:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "T = 0.001    # seconds\n",
      "fs = 44100   # sampling frequency\n",
      "t = numpy.linspace(0, T, int(T*fs), endpoint=False) # time variable\n",
      "x = numpy.sin(2*numpy.pi*3000*t)     \n",
      "plot(t, x)\n",
      "xlabel('Time (seconds)')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 9,
       "text": [
        "<matplotlib.text.Text at 0x5810cd0>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n10Mrs7BScyQAAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x5e1e810>"
       ]
      }
     ],
     "prompt_number": 9
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "`specgram` is a Matplotlib tool for computing and displaying spectrograms."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "S, freqs, bins, im = specgram(x, NFFT=1024, Fs=fs, noverlap=512)\n",
      "xlabel('Time')\n",
      "ylabel('Frequency')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 10,
       "text": [
        "<matplotlib.text.Text at 0x5f4f4d0>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nIHYBPVVQUBDm7e39rUajMW3evDnxri9y6J9bkUn8GtAf+kN/draJyK4Dp62tzWHlypXbCgoKwsrL\ny3127doVc+7cuQli1wUAAD9n14FjNBp1np6eF9VqdaVcLrfOnz8/Ozc3d7bYdQEAwM/Z9T0ci8Wi\n9PDwqOa+V6lU5pKSksDOr2OeFbYuISX/Q+wK+IX+7Bv664OeFW8VlV0HDsMwbFevYVlWxCcHAQAA\nx66n1JRKpaW6utqD+766utpDpVKZxawJAADuzq4DJyAg4LjJZNJUVlaqW1tbB+7evTs6IiIiT+y6\nAADg5+x6Sk0mk9m2bdu2MjQ09NO2tjaHuLi4jAkTJpwTuy4AALgLlmXtZjtw4EDY+PHjv/X09DSl\npqYm3u01q1atSvP09DT5+fl9c+LECW1XxzY0NDgHBwcf1Gg0F0JCQgqvXbs2vD/19+KLL/7Z29v7\nnJ+f3zdz58796Pr168P6U3/c9pe//GUtwzB3GhoanPtbf2lpaau8vb3PTZw48cz69es396f+SkpK\ndNOmTTP6+/uXBQQEHDMajdPsrbelS5dmurq61k+aNOl0x9f3l2vLvfp7mGuLKM0/zGaz2RzGjRt3\nsaKiQt3a2iqfPHnyyfLy8gkdX/PJJ5+Ez5o1K59lWSouLg4MDAws7urYdevWvbZ58+b1LMtSampq\nYmJiYmp/6q+wsDCkra1tAMuylJiYmNrf+mNZlqqqqjxCQ0ML1Gp1hViBw1d///znP58MDg4+2Nra\nKmdZlq5cuTKyP/U3Y8aMooKCglCWZSk/P3+WwWD4zJ56Y1mWPv/88+knTpzQdr4g94dry/36e5hr\ni93cw+nOe27y8vIiYmNjs4iIAgMDS65fvz68rq7O7X7HdjwmNjY2KycnZ47w3fHXX0hIyMEBAwbc\n4Y4xm80q4bvjrz8iojVr1rz+2muvrRe6p4746u+dd96J37BhQ4pcLrcSEY0cOfKq8N3x15+7u3vt\njRs3hhERXb9+fbhSqbTYU29ERNOnT//iscceu9b55/aHawvRvft7mGuL3QTO3d5zY7FYlN15TU1N\nzah7HVtfX69QKBT1REQKhaK+vr5ewX83P8dXfx1lZmYuCw8Pz+erh/vhq7/c3NzZKpXK7Ofnd0qI\nPu6Fr/5MJpPm888/f0Kv1xcbDIai48ePBwjRT2d89ZeamvrS2rVrt4wePbpq3bp1f05JSdkgRD/d\nqftBX9NZf7i2dPcc3b222E3gdOc9N0Tde98Ny7LM3X4ewzBsd8/T23qzv7t59dVX/zBw4MDWBQsW\n/P1hju99R5JoAAAER0lEQVQpPvprbm4evGnTpt8nJydvfJjjexNff382m0127dq1x4qLi/V//vOf\n10VFRe15uAp7hq/+4uLiMtLS0hKqqqpGv/HGGy8sW7Ys8+EqfHgP29uDXCvs8drS3eMe5NpiN6vU\nuvOem86vMZvNKpVKZbZarfLO+7mhu0KhqK+rq3Nzc3Orq62tdXd1db0iRD+d9WZ/nY/dvn37kvz8\n/PDDhw8H8d3HvfDR33fffTeusrJSPXny5G+410+dOrXUaDTqhP575OvvT6VSmZ9++umPiIimTZt2\nbMCAAXcaGhpcXFxcGvjv6t6191Z/RqNRd+jQoWAionnz5u1dvnz5B/x3858etreupv/s/drSnenN\nB762iHET62E2q9Uqe/zxx7+rqKhQt7S0DOzqxtfXX3+t52583e/YdevWvcat2khJSXlJrBt7fPV3\n4MCBMB8fn7NXr14d0R///jpuYi4a4Ku/d99997mXX345mWVZOn/+vJeHh0dVf+pPq9WeKCoqmsGy\nLB06dCgoICDgmD31xm0VFRXquy0asPdry/36e5hri+DN92TLz8+f5eXldX7cuHEXN23atIFl2/9B\nvvvuu89xr/nd7363bdy4cRf9/Py+KS0tnXK/Y1m2feliUFDQob6wdJGP/jw9PU2jR4++7O/vX+bv\n718WHx+f3p/667iNHTv2kpjLovnor7W1Vb5w4cKdkyZNOj1lypTSzz77zNCf+jt27FiATqcrmTx5\n8km9Xv91x+W49tLb/Pnzd7m7u9cMHDiwRaVSVWdmZi5l2f5zbblXfw9zbWFYVpRpRQAAkBi7WTQA\nAAD2DYEDAACCQOAAAIAgEDgAACAIBA5AL2poaHDRarVlWq22zN3dvValUpm1Wm2Zo6Nj08qVK7eJ\nXR+AmLBKDYAnycnJGx0dHZvWrFnzuti1APQFGOEA8Ij91+NCioqKDE899dQ/iIiSkpKSYmNjs554\n4onP1Wp15UcfffT0iy+++Bc/P79Ts2bNOmCz2WRERKWlpVMNBkNRQEDA8bCwsALuYYoA9gqBAyCC\nioqKsZ999tmTeXl5EQsXLvwwJCTk4KlTp/wGDx7c/Mknn/xfq9UqX7Vq1Vv79u2LPH78eMDSpUv/\n9oc//OFVsesG6Am7eZYaQH/BMAw7a9asAw4ODm2TJk06c+fOnQGhoaGfEhH5+vqerqysVF+4cMHr\n7NmzE4ODgw8REbW1tTmMGjWqRtzKAXoGgQMggoEDB7YSEQ0YMOAO91k33Pc2m03GsiwzceLEs199\n9dUvxasSoHdhSg1AYGw3HuE/fvz481evXh1ZXFysJyKyWq3y8vJyH/6rA+APAgeAR9xninT8PJTO\nn43S+XNHGIZh5XK5de/evfMSExM3+/v7n9RqtWVff/31L4StHqB3YVk0AAAIAiMcAAAQBAIHAAAE\ngcABAABBIHAAAEAQCBwAABAEAgcAAATxvzCOtYE+olFUAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x5e3b790>"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Writing Audio"
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "`essentia.standard.MonoWriter`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "[`MonoWriter`](http://essentia.upf.edu/documentation/reference/std_MonoWriter.html) can write a NumPy array to a WAV file. Note: the array must have type `int`, `single`, or `complex64`."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from essentia.standard import MonoWriter\n",
      "noise = 0.1*randn(44100)\n",
      "MonoWriter(filename='noise1.wav')(single(noise))\n",
      "%ls *.wav"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\u001b[0m\u001b[00;36mdefault.wav\u001b[0m  \u001b[00;36mnoise1.wav\u001b[0m  \u001b[00;36mout.wav\u001b[0m  \u001b[00;36msimpleLoop.wav\u001b[0m\r\n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "`librosa.output.write_wav`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "`librosa.output.write_wav` also saves a NumPy array to a WAV file. This is a bit easier to use."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import librosa\n",
      "noise = 0.1*randn(44100)\n",
      "librosa.output.write_wav('noise2.wav', noise, 44100)\n",
      "%ls *.wav"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\u001b[0m\u001b[00;36mdefault.wav\u001b[0m  \u001b[00;36mnoise1.wav\u001b[0m  \u001b[00;36mnoise2.wav\u001b[0m  \u001b[00;36mout.wav\u001b[0m  \u001b[00;36msimpleLoop.wav\u001b[0m\r\n"
       ]
      }
     ],
     "prompt_number": 12
    }
   ],
   "metadata": {}
  }
 ]
}