{
 "metadata": {
  "name": "",
  "signature": "sha256:dc2d519cf8158ddde08869c1e4bdc1bf230dda51aeea74b84739eedd05d4272e"
 },
 "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 0x4276098>)"
       ]
      }
     ],
     "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;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 0x43906d0>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\ngg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x4398310>"
       ]
      }
     ],
     "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 0x61d5050>"
       ]
      }
     ],
     "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 0x64dd250>"
       ]
      }
     ],
     "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 0x64fa250>"
       ]
      }
     ],
     "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 0x64fb810>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nYRzy/won3wKGcFuVAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x4867910>"
       ]
      }
     ],
     "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 0x6813fd0>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nKHBERMQW/x+fal+1runOsgAAAABJRU5ErkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x4271750>"
       ]
      }
     ],
     "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;36mnoise1.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;36mnoise1.wav\u001b[0m  \u001b[00;36mnoise2.wav\u001b[0m  \u001b[00;36msimpleLoop.wav\u001b[0m\r\n"
       ]
      }
     ],
     "prompt_number": 12
    }
   ],
   "metadata": {}
  }
 ]
}