{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Welcome to Pynq Audio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This notebook shows the basic recording and playback features of the Pynq-Z1.\n",
    "It uses the audio jack to play back recordings from the built-in microphone, as well as a pre-recorded audio sample. Moreover, visualization with matplotlib and playback with IPython.Audio is shown."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Basic Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Create new audio object\n",
    "from pynq.drivers import Audio\n",
    "pAudio = Audio()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Record and Play"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Record a sample\n",
    "pAudio.record(4)\n",
    "# Save recorded sample\n",
    "pAudio.save(\"Recording_1.pdm\")\n",
    "# Play recorded sample\n",
    "pAudio.play()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Load and Play"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Load a sample\n",
    "pAudio.load(\"/home/xilinx/pynq/drivers/tests/pynq_welcome.pdm\")\n",
    "# Play loaded sample\n",
    "pAudio.play()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Preprocessing\n",
    "1. Convert 32bit integer buffer to 16bit\n",
    "2. Divide 16bit word with 16 1bit samples into 8bit words with 1bit sample each"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Time to convert 12288000bit: 127.19929003715515s\n",
      "Size of audio data: 98304048Byte (=8x12288000bit)\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "import sys\n",
    "import numpy as np\n",
    "# Convert 32bit input to 16bit input\n",
    "af_uint16 = pAudio.buffer.copy().astype(np.int16)\n",
    "# Prepare 8 bit output\n",
    "af_uint8  = np.zeros(len(af_uint16)*16)\n",
    "\n",
    "# Divide 16bit words\n",
    "start = time.time()\n",
    "for i in range(1, len(af_uint16)):\n",
    "    # Save high byte (MSBs)\n",
    "    afbH_uint8 = af_uint16[i].astype(np.uint8)\n",
    "    # Unpack high byte to single bits\n",
    "    af_uint8[(i*16):(i*16+8)] = np.unpackbits(afbH_uint8)\n",
    "    # Save low byte (LSBs)\n",
    "    afbL_uint8 = (af_uint16[i] >> 8).astype(np.uint8)\n",
    "    # Unpack low byte to single bits\n",
    "    af_uint8[(i*16+8):(i*16+16)] = np.unpackbits(afbL_uint8) \n",
    "end =  time.time()\n",
    "\n",
    "print(\"Time to convert \" + str(len(af_uint16)*16) +\n",
    "      \"bit: \" + str(end-start) +\"s\")\n",
    "print(\"Size of audio data: \" + str(sys.getsizeof(af_uint8)) +\n",
    "      \"Byte (=8x\"+ str(len(af_uint16)*16) +\"bit)\")\n",
    "\n",
    "del af_uint16"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convert Format to PDM to PCM\n",
    "* Convert Pulse Density Modulation (PDM) to Pulse Code Modulation (PCM) by decimation\n",
    "* The sample rate is reduced from 3MHz to 32kHz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Time to convert 12288000bit: 4.2733354568481445s\n",
      "Size of audio data: 48Byte\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "import sys\n",
    "from scipy import signal\n",
    "start = time.time()\n",
    "af_dec = signal.decimate(af_uint8, 4)\n",
    "af_dec = signal.decimate(af_dec, 4)\n",
    "af_dec = signal.decimate(af_dec, 6)\n",
    "end = time.time()\n",
    "\n",
    "print(\"Time to convert \" + str(len(af_uint8)) +\n",
    "      \"bit: \" + str(end-start) +\"s\")\n",
    "print(\"Size of audio data: \" + \n",
    "      str(sys.getsizeof(af_dec)) + \"Byte\")\n",
    "\n",
    "del af_uint8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot and Play PCM Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n9+p4qah1lcUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x30c307b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Amplitude over Time\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.figure(num=None, figsize=(15, 5))\n",
    "time_axis = np.arange(0,((len(af_dec))/32000),1/32000)\n",
    "plt.plot(time_axis, af_dec)\n",
    "plt.title('Welcome to Pynq')\n",
    "plt.xlabel('Time in s')\n",
    "plt.ylabel('Amplitude')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio controls=\"controls\" >\n",
       "                    <source src=\"data:audio/wav;base64,[encoded data, 341392 characters]\" type=\"audio/wav\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Play PCM in Browser\n",
    "from IPython.display import Audio as IPAudio\n",
    "IPAudio(af_dec, rate=32000)"
   ]
  }
 ],
 "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.4.3+"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
