Skip to content
Snippets Groups Projects
AudioDataTutorial.ipynb 6.09 KiB
Newer Older
alyaqou1's avatar
alyaqou1 committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Audio Tutorial using Scipy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Audio channels can be separated into multiple locatities to give the impression on the viewer of a two or three dimensional space. For instance, most cars have multiple speakers to surround the passengers with sound. This reduces listening fatigue and makes for a more immersive experience. In machine learning, it can be useful to separate audio files into multiple channels so they can be more useful features for locating labels more closely tied to a certain channel. "
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Adapted from https://publish.illinois.edu/augmentedlistening/tutorials/music-processing/tutorial-1-introduction-to-audio-processing-in-python/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install jupyterthemes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install wavio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.io.wavfile import read, write\n",
    "from IPython.display import Audio\n",
    "from jupyterthemes import jtplot\n",
    "import wavio\n",
    "\n",
    "jtplot.style()\n",
alyaqou1's avatar
alyaqou1 committed
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Download Multichannel .wav file"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Download audio file *6_Channel_ID.wav* from http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples/Microsoft/6_Channel_ID.wav"
alyaqou1's avatar
alyaqou1 committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "\n",
    "url = 'http://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples/Microsoft/6_Channel_ID.wav'\n",
    "file='6_Channel_ID.wav'\n",
    "r = requests.get(url, allow_redirects=True)\n",
    "open(file, 'wb').write(r.content)"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Read file and split channels"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Read .wav file and print frequency"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
alyaqou1's avatar
alyaqou1 committed
    "scrolled": false
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Fs, data = read('6_Channel_ID.wav')\n",
    "print(\"Sampling Frequency is\", Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
alyaqou1's avatar
alyaqou1 committed
    "Listen to full audio file"
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio('6_Channel_ID.wav')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Split audio channels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
alyaqou1's avatar
alyaqou1 committed
   "outputs": [],
   "source": [
    "FL = data[:,0]\n",
    "FR = data[:,1]\n",
alyaqou1's avatar
alyaqou1 committed
    "LF = data[:,3]\n",
    "BL = data[:,4]\n",
    "BR = data[:,5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Play audio in Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Front Left**"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio(FL, rate=Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Front Right**"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio(FR, rate=Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
alyaqou1's avatar
alyaqou1 committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Low-frequency effects**"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio(LF, rate=Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Back Left**"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio(BL, rate=Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Back Right**"
   ]
  },
alyaqou1's avatar
alyaqou1 committed
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "Audio(BR, rate=Fs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot the Wave form"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
alyaqou1's avatar
alyaqou1 committed
   "metadata": {},
   "outputs": [],
alyaqou1's avatar
alyaqou1 committed
   "source": [
    "plt.figure()\n",
    "plt.plot(data)\n",
    "plt.xlabel('Sample Index')\n",
    "plt.ylabel('Amplitude')\n",
    "plt.title('Waveform of Test Audio')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Samples.html\n",
    "- https://publish.illinois.edu/augmentedlistening/tutorials/music-processing/tutorial-1-introduction-to-audio-processing-in-python/"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
alyaqou1's avatar
alyaqou1 committed
   "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",
alyaqou1's avatar
alyaqou1 committed
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}