{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy, scipy, matplotlib.pyplot as plt, librosa, urllib, IPython.display" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[← Back to Index](index.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise: Source Separation using NMF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Goals:\n", "\n", "1. Separate sources using NMF.\n", "2. Analyze and classify separated sources." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Download an audio file:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "urllib.urlretrieve?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load an audio file:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "librosa.load?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the spectrogram:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "librosa.stft?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "librosa.logamplitude?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "librosa.display.specshow?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use NMF to decompose the spectrogram:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "librosa.decompose.decompose?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the spectral profiles and temporal activations of each component individually:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.subplot?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the inverse STFT to synthesize the separated sources. (`librosa.istft` expects a full, complex-valued spectrogram. Therefore, you will need to include the phase of the original spectrogram in your reconstruction. See [the notebook on NMF](nmf.html) for more details.)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "librosa.istft?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the reconstructed outputs as inputs into the kick/snare classifier that you created in an earlier exercise. Observe the results; are you able to automatically classify the separated sources?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## For Further Exploration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use different audio files." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alter the rank of the decomposition, `n_components`. What happens when `n_components` is too large? too small?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NMF is a useful preprocessor for MIR tasks such as music transcription. Using the steps above, build your own simple transcription system that returns a sequence of note events, `[(onset time, class label, volume/gain)...]`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[← Back to Index](index.html)" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 0 }