{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Audio analysis with TimeSide and [Aubio](http://aubio.org)\n", "\n", "In the following example, we illustrate how to perform common audio signal analysis tasks like *pitch estimation* and *onsets detection* with **TimeSide** by using some analyzers based on [Aubio](http://aubio.org)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%pylab inline\n", "\n", "from __future__ import division\n", "import matplotlib.pylab as pylab\n", "pylab.rcParams['figure.figsize'] = 16, 8 # that's default image size for this interactive session\n", "\n", "import timeside\n", "from timeside.core import get_processor\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Audio Source is a 15s excerpt of Peter and the Wolf by Prokofiev\n", "from the Internet Archive : https://archive.org/details/PeterAndTheWolf_753" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from IPython.display import HTML\n", "HTML('The chosen audio excerpt for the analysis is the time segment between 5 and 20s.
' +\n", " 'It contains speech signal at the beginning and then music signal (flute).
' +\n", " '')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "audiofile = 'https://archive.org/download/PeterAndTheWolf_753/Peter_and_the_Wolf.mp3'\n", "\n", "## Setup the processing pipe\n", "file_decoder = get_processor('file_decoder')(uri=audiofile, start=5, duration=15)\n", "aubio_pitch = get_processor('aubio_pitch')()\n", "aubio_temporal = get_processor('aubio_temporal')()\n", "specgram_ = get_processor('spectrogram_analyzer')()\n", "waveform = get_processor('waveform_analyzer')()\n", "\n", "\n", "pipe = (file_decoder | aubio_pitch | aubio_temporal | specgram_ | waveform)\n", "pipe.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display Spectrogram + Aubio Pitch + Aubio Beat" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.figure(1)\n", "\n", "spec_res = specgram_.results['spectrogram_analyzer']\n", "N = spec_res.parameters['fft_size']\n", "plt.imshow(20 * np.log10(spec_res.data.T),\n", " origin='lower',\n", " extent=[spec_res.time[0], spec_res.time[-1], 0,\n", " (N // 2 + 1) / N * spec_res.data_object.frame_metadata.samplerate],\n", " aspect='auto')\n", "\n", "res_pitch = aubio_pitch.results['aubio_pitch.pitch']\n", "plt.plot(res_pitch.time, res_pitch.data)\n", "\n", "res_beats = aubio_temporal.results['aubio_temporal.beat']\n", "\n", "for time in res_beats.time:\n", " plt.axvline(time, color='r')\n", "\n", "plt.title('Spectrogram + Aubio pitch + Aubio beat')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display waveform + Onsets" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.figure(2)\n", "res_wave = waveform.results['waveform_analyzer']\n", "plt.plot(res_wave.time, res_wave.data)\n", "res_onsets = aubio_temporal.results['aubio_temporal.onset']\n", "for time in res_onsets.time:\n", " plt.axvline(time, color='r')\n", "plt.grid()\n", "plt.title('Waveform + Aubio onset')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "res_pitch.render();" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "res_beats.render();" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "res_onsets.render();" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }