{ "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" }, "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "

Rhythm and Timbre Analysis from Music

\n", "

Rhythm Pattern Music Features

\n", "

Extraction and Application Tutorial

\n", "
\n", "

Thomas Lidy and Alexander Schindler

\n", "

lidy@ifs.tuwien.ac.at


\n", "Institute of Software Technology and Interactive Systems
TU Wien\n", "
\n", "

http://www.ifs.tuwien.ac.at/mir

\n", "
\n", "
" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Table of Contents" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Requirements\n", "2. Audio Processing\n", "3. Audio Feature Extraction\n", "4. Application Scenarios
\n", " 4.1 Getting Songs from Soundcloud
\n", " 4.2. Finding Similar Sounding Songs\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Requirements\n", "\n", "This Tutorial uses iPython Notebook for interactive coding. If you use iPython Notebook, you can interactively execute your code (and the code here in the tutorial) directly in the Web browser. Otherwise you can copy & paste code from here to your prefered Python editor." ] }, { "cell_type": "code", "collapsed": true, "input": [ "# to install iPython notebook on your computer, use this in Terminal\n", "sudo pip install \"ipython[notebook]\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "markdown", "metadata": {}, "source": [ "### RP Extract Library\n", "\n", "This is our mean library for rhythmic and timbral audio feature analysis:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "download ZIP or check out from GitHub:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# in Terminal\n", "git clone https://github.com/tuwien-musicir/rp_extract.git" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Python Libraries\n", "\n", "RP_extract depends on the following libraries. If not already included in your Python installation,\n", "please install these Python libraries using pip or easy_install:\n", "\n", " \n", "\n", "They can usually be installed via Python PIP installer on command line:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# in Terminal\n", "sudo pip install numpy scipy matplotlib" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Additional Libraries \n", "\n", "These libraries are used in the later tutorial steps, but not necessarily needed if you want to use the RP_extract library alone:\n", "\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# in Terminal\n", "sudo pip install soundcloud urllib unicsv scikit-learn\n", "\n", "git clone https://github.com/tuwien-musicir/mir_utils.git" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MP3 Decoder\n", "If you want to use MP3 files as input, you need to have one of the following MP3 decoders installed in your system:\n", "\n", "\n", "\n", "Note: If you don't install it to a path which can be found by the operating system, use this to add path where you installed the MP3 decoder binary to your system PATH so Python can call it:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import os\n", "path = '/path/to/ffmpeg/'\n", "os.environ['PATH'] += os.pathsep + path" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import + Test your Environment\n", "If you have installed all required libraries, the follwing imports should run without errors." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "# numerical processing and scientific libraries\n", "import numpy as np\n", "\n", "# plotting\n", "import matplotlib.pyplot as plt\n", "\n", "# reading wav and mp3 files\n", "from audiofile_read import * # included in the rp_extract git package\n", "\n", "# Rhythm Pattern Audio Extraction Library\n", "from rp_extract_python import rp_extract\n", "from rp_plot import * # can be skipped if you don't want to do any plots\n", "\n", "\n", "# misc\n", "from urllib import urlopen\n", "import urllib2\n", "import gzip\n", "import StringIO" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "2. Audio Processing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Feature Extraction is the core of content-based description of audio files. With feature extraction from audio, a computer is able to recognize the content of a piece of music without the need of annotated labels such as artist, song title or genre. This is the essential basis for information retrieval tasks, such as similarity based searches (query-by-example, query-by-humming, etc.), automatic classification into categories, or automatic organization and clustering of music archives.\n", "\n", "Content-based description requires the development of feature extraction techniques that analyze the acoustic characteristics of the signal. Features extracted from the audio signal are intended to describe the stylistic content of the music, e.g. beat, presence of voice, timbre, etc.\n", "\n", "We use methods from digital signal processing and consider psycho-acoustic models in order to extract suitable semantic information from music. We developed various feature sets, which are appropriate for different tasks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Audio Files\n", "\n", "### Load audio data from wav or mp3 file\n", "\n", "We provide a library (audiofile_read.py) that is capable of reading WAV and MP3 files (MP3 through an external decoder, see Installation Requirements above).\n", "\n", "Take any MP3 or WAV file on your disk - or download one from e.g. freemusicarchive.org.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# provide/adjust the path to your wav or mp3 file\n", "\n", "audiofile = \"music/1972-048 Elvis Presley - Burning Love 22khz.mp3\"\n", "\n", "samplerate, samplewidth, wavedata = audiofile_read(audiofile)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Decoding mp3 with: lame --quiet --decode \"music/1972-048 Elvis Presley - Burning Love 22khz.mp3\" \"/var/folders/1_/bnncmvw96qvfqdy3yg98mzjm0000gn/T/tmpinv1MG.wav\"\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "samplerate, samplewidth, wavedata = audiofile_read(audiofile, normalize=False)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Decoding mp3 with: lame --quiet --decode \"music/1972-048 Elvis Presley - Burning Love 22khz.mp3\" \"/var/folders/1_/bnncmvw96qvfqdy3yg98mzjm0000gn/T/tmpHlV0MG.wav\"\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "wavedata.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "(5135, 2)" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note about Normalization: Normalization is automatically done by audiofile_read() above.\n", "\n", "Usually, an audio file stores integer values for the samples. However, for audio processing we need float values that's why the audiofile_read library already converts the input data to float values in the range of (-1,1). \n", "\n", "This is taken care of by audiofile_read. In the rare case you don't want to normalize, use this line instead of the one above:\n", "\n", " samplerate, samplewidth, wavedata = audiofile_read(audiofile, normalize=False)\n", "\n", "In case you use another library to read in WAV files (such as scipy.io.wavfile.read) please have a look into audiofile_read code to do the normalization in the same way. Note that scipy.io.wavfile.read does not correctly read 24bit WAV files." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Audio Information\n", "\n", "Let's print some information about the audio file just read:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "nsamples = wavedata.shape[0]\n", "nchannels = wavedata.shape[1]\n", "\n", "print \"Successfully read audio file:\", audiofile\n", "print samplerate, \"Hz,\", samplewidth*8, \"bit,\", nchannels, \"channel(s),\", nsamples, \"samples\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Successfully read audio file: music/1972-048 Elvis Presley - Burning Love 22khz.mp3\n", "22050 Hz, 16 bit, 2 channel(s), 5135 samples\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot Wave form\n", "we use this to check if the WAV or MP3 file has been correctly loaded" ] }, { "cell_type": "code", "collapsed": false, "input": [ "max_samples_plot = 4 * samplerate # limit number of samples to plot (to 4 sec), to avoid graphical overflow\n", "\n", "if nsamples < max_samples_plot:\n", " max_samples_plot = nsamples\n", "\n", "plot_waveform(wavedata[0:max_samples_plot], 16, 5);" ], "language": "python", "metadata": { "scrolled": false }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Plotting Stereo\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n+WhqahI+45aWFsyZMwfl5eWorq7G6tWr8c477ySMs2HDBuzZswc1NTV45JFHcMsttwiPg4iIiMhr\nTICJiNyhWwPcuXNnDB8+HOPGjWutBY5EIli2bJmtGVdVVaGgoAB5eXkAgGnTpmHdunUYNGhQ6zjr\n16/HjBkzAABjxozBkSNH0NjYiKysLFvzJiIiIpIJE2AiInfoJsBlZWUoKytLGBbtddmehoYG5Obm\ntr7PycnB9u3bdcepr69nAkxERESBwgSYiMgdugnwDTfc4MiMjSbRyV1da0+3KO516Zd/RERERPJj\nAkxElKiiogIVFRXCy9VNgF999VUsXrwYtbW1aG5uBhBNQt9//31bM87OzkZdXV3r+7q6OuTk5KQc\np76+HtnZ2RolLrIVDxEREREREcmhtLQUpaWlre8XL14spFzdBHjWrFl48MEHMWLEiITHINk1cuRI\n1NTUoLa2Fv3798eaNWuwevXqhHHKysqwfPlyTJs2DZWVlejRowebPxMREVHgsAaYiMgduglwjx49\nMGHCBPEzzsjA8uXLcfnll6OlpQWzZs3CoEGD8PDDDwMAZs+ejYkTJ2LDhg0oKChA165d8dhjjwmP\ng4iIiMhrTID9Zf164KGHgE2bvI6EiMyKKMk32SZZsGABWlpa8O1vfzvhWcAjRoxwPDijovcF88xB\nRERE/jR1KvD0015HQUaVlwP33ANs2eJ1JOHBH4koEom06x/KCt0a4MrKSkQiEbz22msJwzdv3mx7\n5kRERETEi3u/iUSAlhavoyAiK3QTYCd63iIiIiKiNkym/Ic/WhD5k24CDADPPfccqqurceLEidZh\nv/jFLxwLioiIiChMmAD7SyTCBJjIr9L0Rpg9ezaefPJJLFu2DIqi4Mknn8T+/fvdiI2IiIgoFJgA\n+0sk4nUERGSVbgK8bds2rFq1Cr169cLChQtRWVmJd999143YiIiIiEKhudnrCMgs1gAT+ZNuAty5\nc2cAQJcuXdDQ0ICMjAwcPHjQ8cCIiIiIwoIJsD3jxrk7PzaBJvIv3QR48uTJOHz4MObNm4fzzjsP\neXl5mD59uhuxEREREYUCE2B7CgrcnV8kAlRVuTtPIhJD9znA8U6cOIETJ06gR48eTsZkGp8DTERE\nRH72zW8CW7d6HYV/bd8OjBnj3vxefNH9WuewY407ufYcYADYunUramtr0RLXQ8P1119ve+ZERERE\n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\nAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Audio Pre-processing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For audio processing and feature extraction, we use a single channel only.\n", "\n", "Therefore in case we have a stereo signal, we combine the separate channels:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# use combine the channels by calculating their geometric mean\n", "wavedata_mono = np.mean(wavedata, axis=1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 123 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below an example waveform of a mono channel after combining the stereo channels by arithmetic mean:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plot_waveform(wavedata_mono[0:max_samples_plot], 16, 3)" ], "language": "python", "metadata": { "scrolled": false }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Plotting Mono\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nvfXr1Us1JcWe792r+txzql26qP7lL6pTpti6/utfNv/Gjfb49tveZy9frrpunT3ftav8eawI27er\nnnxy+Pcef1z1ggvK/pluH44HEdUXXrDnvXpFPoamTbNjJZzvvw8//eDB+KzbuHHBx1jHjqoXXVT0\n2Dv1VHv86SfVLVtUH3oo+P2bb1bt08ee/+Mfqr/9rT2/887g9uT3v/e22/vvq9avb6//+U/V114r\nuj87Iqpffum9/vprrw4ozo4dqgsX2vINGgTn+d137fHoo+3xqqtUBw1S/fnnousvYnXtt9/a80Cg\naPmLqLZvb/v9K6+o/vWvNm3OHNVPPrHn55yjOnKkzf/VV6pjxoT/nOeeK369Jk/28vW731mZLFtm\n7x065G17N89f/2rvPfhg0e976ilvvi5dbN8dPDh4PhFrD0O98IK3bFKSt4+o2j5Tr174/IuofvZZ\n+PcKCqyu89exBQWqw4fbPpOSYstXr26PLv9nnqn6xBOqeXnB+Zs+3fu+sWODy3TIkKLbY9Mm+4y+\nfVUHDLBjfdIkmy8/38v/U09Zu6pq23/hQtX16yPXC6qql1xStD0rzhdfWHu9Y4e33Nlnq773ntUl\nH3xweG1RRfriC8tfv35WXvn51p889tiS13foUCtbv7w81Z077TOKs2FDdOvOggLvGBKxPLn+zt/+\nZvWFquq+fapLlhRdXsTKatUqWyfXx3zgAavHVC3/f/iDPXf7mFt2ypSSt0E4Ipa/SObNUz3hBG+/\natjQ+n65ubYf+/er//7X8nDxxaqPPmrTnn7alnv8cdVHHgn+bP86hPPRR7bse+/ZcbRli9cfHjeu\n+L7xN9+U/vipCNGO+Ur16Zs2bdL58+drWlqazp07V+fOnRvVTJVVuI20bp11Vv/zH+sQuAp8wAAr\n5LQ01VGjbGf44QdrJBcvtoNh0SKbtnu36po1VikfPGiN088/2066ebPqtm12UP3yix2AruKpKP/9\nr+1sxx1nj1lZqlOnqj7zjL1+/nlr0Js2tcb8//5P9bLLbJ3ee0/1hhusczNunOptt9k6z5tnDdGq\nVapr11oHYf16W++vv7bvyMmxDv727dbp37rV1nvvXtuu2dkW3GzbZtNco5eXZ9vA3whG8o9/hD+Q\nZs4MrhiGD7fHyZPtfRHV8eODlzl0yMpLxCrzDh3s+f33W+M1frzqjTeGz8cFF1gD+69/2XcdfbT3\n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\nL1ujRtFpb7/tPc/OtsdLLy3/d8RaafeFadNETjlF5LzzopufWKtfX2TGDJFly+Kdk+h49127tTMW\nBgywxw4dYvN9X3wRm++JxPcLyDI7//zw08vTf0P5RbwGWYzmzb3nXbrY/v7//p/VIePGVVzeoq6k\nf+dq0qSJTp8+Xbdu3arbtm0rTBVh+vTp2qRJE23UqJGO+HUwynHjxum4ceMK57n//vu1UaNG2qZN\nG10WYQwIEdFp0+wfT596qvjhcGKR/GMw+v+m3T8+r38oKDfWYOj00JSUpNqqVfz/ZS5S8g915VJx\nRCIPhxGN5P45tl8/b1q4IXT8w0a5f8yeP98bQ9iNBej+9dE/3uoXX3jLJieXPY8lDVlVXCrrX/27\nf/a9/XYb81rExjsurvz8QzEcTvIP/RXP9P33tl7+oY+qUlq0yIa5EAkeiig0+Ydu86dwQ4u4IdxC\nhzkTUT3xRO95uPpg2TJ7DB2qpnNnG+IhdP5Iw2KIBA+bt3+/DWMVOo8bczNcCh0zUsQ7DsqaWra0\ncZAjfV64f/du0CD++4c/uaF6IqUxY7yhTkqT3PArTmpqbMZoLmuKNMRfixbFLxfqcOrusiT/v8y7\nVNY+T7ghlvzt1cCBwWPLRhrnPZrpcP55PnRIMX9y7aQT6V/jRbyxzA9nW4t4Qw2GGxLsxhuLTmvc\nWPVvfwtf/zZu7D13QxfecouNUd+njw3ZpGrjALvhgkSC6+PQetH94/Opp9qwPMWtixuqc/du23bb\nt9u+/9FH3pi3bri9Nm3Cl8v69fbo2p1//9sbGcINDeZvI84809ZxyRIbw9i1Y/Hu65e1/+rv37sy\ncEONigS3n/4htMqafvOb8i/rhpnzD8la2uSGg8rMLL7vf7hKEboe3ueXNEOnTp2imoGKEG4jffut\njeV59902RMnnn9sYXy+/bMMPPPGEDWi9YIFVQBMm2JiXL79sB/h//2vj3332mR3En35q472tX2/j\nvH30kQ3gPW2ajfO5caPq7Nn2PVu22NA28+ZZpfH11xYwbd+u+t139j05OVapfP21jXvmnufk2DAJ\n331n+bryShvLtGNHGwpI1QZIHzvWxtT8wx9s6JRXXrG/7X/nHRsj+PrrVSdNUn37basQX37ZhhXq\n0sWGI3n9dds2kyfbug0ebOvxxRf2+YsX25i4b7xhQ/asWWOfPX++bZt337Xn69bZtnDjhU6ebI3o\n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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "plotstft(wavedata_mono, samplerate, binsize=512, ignore=True);" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 125 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "3. Audio Feature Extraction" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Rhythm Patterns " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "Rhythm Patterns (also called Fluctuation Patterns) describe modulation amplitudes for a range of modulation frequencies on \"critical bands\" of the human auditory range, i.e. fluctuations (or rhythm) on a number of frequency bands. The feature extraction process for the Rhythm Patterns is composed of two stages:\n", "\n", "First, the specific loudness sensation in different frequency bands is computed, by using a Short Time FFT, grouping the resulting frequency bands to psycho-acoustically motivated critical-bands, applying spreading functions to account for masking effects and successive transformation into the decibel, Phon and Sone scales. This results in a power spectrum that reflects human loudness sensation (Sonogram).\n", "\n", "In the second step, the spectrum is transformed into a time-invariant representation based on the modulation frequency, which is achieved by applying another discrete Fourier transform, resulting in amplitude modulations of the loudness in individual critical bands. These amplitude modulations have different effects on human hearing sensation depending on their frequency, the most significant of which, referred to as fluctuation strength, is most intense at 4 Hz and decreasing towards 15 Hz. From that data, reoccurring patterns in the individual critical bands, resembling rhythm, are extracted, which \u2013 after applying Gaussian smoothing to diminish small variations \u2013 result in a time-invariant, comparable representation of the rhythmic patterns in the individual critical bands." ] }, { "cell_type": "code", "collapsed": false, "input": [ "features = rp_extract(wavedata, # the two-channel wave-data of the audio-file\n", " samplerate, # the samplerate of the audio-file\n", " extract_rp = True, # <== extract this feature!\n", " transform_db = True, # apply psycho-accoustic transformation\n", " transform_phon = True, # apply psycho-accoustic transformation\n", " transform_sone = True, # apply psycho-accoustic transformation\n", " fluctuation_strength_weighting=True, # apply psycho-accoustic transformation\n", " skip_leadin_fadeout = 1, # skip lead-in/fade-out. value = number of segments skipped\n", " step_width = 1) # " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "plotrp(features['rp'])" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nzMzMuu/fAT9d7YhiMQ7pAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 127 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Statistical Spectrum Descriptor " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Sonogram is calculated as in the first part of the Rhythm Patterns calculation. According to the occurrence of beats or other rhythmic variation of energy on a specific critical band, statistical measures are able to describe the audio content. Our goal is to describe the rhythmic content of a piece of audio by computing the following statistical moments on the Sonogram values of each of the critical bands:\n", "\n", " * mean, median, variance, skewness, kurtosis, min- and max-value" ] }, { "cell_type": "code", "collapsed": false, "input": [ "features = rp_extract(wavedata, # the two-channel wave-data of the audio-file\n", " samplerate, # the samplerate of the audio-file\n", " extract_ssd = True, # <== extract this feature!\n", " transform_db = True, # apply psycho-accoustic transformation\n", " transform_phon = True, # apply psycho-accoustic transformation\n", " transform_sone = True, # apply psycho-accoustic transformation\n", " fluctuation_strength_weighting=True, # apply psycho-accoustic transformation\n", " skip_leadin_fadeout = 1, # skip lead-in/fade-out. value = number of segments skipped\n", " step_width = 1) # " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "plotssd(features['ssd'])" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 129 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Rhythm Histogram" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Rhythm Histogram features we use are a descriptor for general rhythmics in an audio document. Contrary to the Rhythm Patterns and the Statistical Spectrum Descriptor, information is not stored per critical band. Rather, the magnitudes of each modulation frequency bin of all critical bands are summed up, to form a histogram of \"rhythmic energy\" per modulation frequency. The histogram contains 60 bins which reflect modulation frequency between 0 and 10 Hz. For a given piece of audio, the Rhythm Histogram feature set is calculated by taking the median of the histograms of every 6 second segment processed." ] }, { "cell_type": "code", "collapsed": false, "input": [ "features = rp_extract(wavedata, # the two-channel wave-data of the audio-file\n", " samplerate, # the samplerate of the audio-file\n", " extract_rh = True, # <== extract this feature!\n", " transform_db = True, # apply psycho-accoustic transformation\n", " transform_phon = True, # apply psycho-accoustic transformation\n", " transform_sone = True, # apply psycho-accoustic transformation\n", " fluctuation_strength_weighting=True, # apply psycho-accoustic transformation\n", " skip_leadin_fadeout = 1, # skip lead-in/fade-out. value = number of segments skipped\n", " step_width = 1) # " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "plotrh(features['rh'])" ], "language": "python", "metadata": { "scrolled": false }, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n16f5FT4TPw+pA9N08T3xjE1JSphJXJISZhKXpISZxCUpYSZxSUqYSVySEmYSl6SEmcQlKWEmcUlK\nmElckhJmEpekhJnEJSlhJnFJSphJXJISZhKXpISZxCUpYSZxSUqYSVySEmYSl6SEdZLElwFrmXnF\n+88A1wNXA98Cti4/NEnSfDpJ4scD+xemnQM8B9gd+AVwVMlxSZI60EkS/wlwb2HaucDG7P7FwE5l\nBiVJ6kwZNfF3AN8rYTmSpC5N9Pn6jwMPA99o/fRU7v7SPlclSbW0lCEkyElmHtgEOBT4KbBZm9dM\nw3ThxvTgQhz6+jQ/Pw+pewP5nkwyM4nvD6wCtp87EJP4mPPzkLpX+vdkOXA7UTa5haiB/xK4Gbgy\nu325dSAm8THn5yF1r6vvyYJBRUF8gVutblDrHPb6NL/CZ+LnIXVgmi6+J56xKUkJM4lLUsJM4pKU\nMJO4JCXMJC5JCTOJS1LCTOKSlDCTeC1NrCP6muZuE+tGG5OkQfBkn3qqynvhyT5S9zzZR5LGhUm8\ndMVShmUMSYNjOWXgcVQhhqrEYTlF6oDlFEkaFyZxSUqYSVySEmYSl6SEmcQlKWEmcUlKmElckhI2\nXxJfBqxl5pXutwXOBX4BnANsM5jQJEnzmS+JHw/sX5j2USKJLwF+kD2WJFXUJDP3xG8Adsju75g9\nbmUapgu3WacRlmnY6+swjirEUJU4RhKDlJquvie91MR3IEosZH93mGPeFhxbRJLKMtHn6+fZu5rK\n3V+a/d2wuDCexuI+Y5CklC2lmSAHYpLZ5ZQds/tPovtyyqB+YltCaBtDVeKwnCJ1YODllLOAQ7L7\nhwBn9rAMSdIQLAduBx4GbgEOI7oYnsf8XQzdE69MDFWJwz1xqQNdfU9GMZ44Axpj2jG028ZQlTgc\nT1zqgOOJS9K4MIlLUsJM4pKUMJO4JCXMJC5JCTOJS1LCKpLEi+OpOKaKJHWiKv3EKaFfs32j28ZQ\nlTjsJy51wH7ikjQuTOKSlDCTuCQlzCQuSQkziUtSwkzikpQwk7gkJcwkLkkJM4lLUsJM4pKUMJO4\nJCWsnyR+FLAKWAl8A9i0lIgkSR3rNYlPAu8C9gB2AxYCbykpJklShyZ6fN064BFgC+DR7O9tZQUl\nSepMr3vi/wf8O/Br4HbgPuC8soKSJHWm1z3xXYEPEGWV+4HTgIOBk2fONpW7v7THVUlSrS1lBAny\n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\n", "text": [ "" ] } ], "prompt_number": 131 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get rough BPM from Rhythm Histogram\n", "\n", "By looking at the maximum peak of a Rhythm Histogram, we can determine the beats per minute (BPM) very roughly by multiplying the Index of the Rhythm Histogram bin by the modulation frequency resolution (0.168 Hz) * 60. The resolution of this is however only at +/- 10 bpm." ] }, { "cell_type": "code", "collapsed": false, "input": [ "maxbin = features['rh'].argmax(axis=0) + 1 # +1 because it starts from 0\n", "\n", "mod_freq_res = 1.0 / (2**18/44100.0) # resolution of modulation frequency axis (0.168 Hz) (= 1/(segment_size/samplerate))\n", "#print mod_freq_res * 60 # resolution\n", "\n", "bpm = maxbin * mod_freq_res * 60\n", "\n", "print bpm" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "60.5621337891\n" ] } ], "prompt_number": 132 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Modulation Frequency Variance Descriptor " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This descriptor measures variations over the critical frequency bands for a specific modulation frequency (derived from a rhythm pattern).\n", "\n", "Considering a rhythm pattern, i.e. a matrix representing the amplitudes of 60 modulation frequencies on 24 critical bands, an MVD vector is derived by computing statistical measures (mean, median, variance, skewness, kurtosis, min and max) for each modulation frequency over the 24 bands. A vector is computed for each of the 60 modulation frequencies. Then, an MVD descriptor for an audio file is computed by the mean of multiple MVDs from the audio file's segments, leading to a 420-dimensional vector. " ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Temporal Statistical Spectrum Descriptor " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Feature sets are frequently computed on a per segment basis and do not incorporate time series aspects. As a consequence, TSSD features describe variations over time by including a temporal dimension. Statistical measures (mean, median, variance, skewness, kurtosis, min and max) are computed over the individual statistical spec- trum descriptors extracted from segments at different time positions within a piece of audio. This captures timbral variations and changes over time in the audio spectrum, for all the critical Bark-bands. Thus, a change of rhythmic, instruments, voices, etc. over time is reflected by this feature set. The dimension is 7 times the dimension of an SSD (i.e. 1176)." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Temporal Rhythm Histograms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Statistical measures (mean, median, variance, skewness, kurtosis, min and max) are computed over the individual Rhythm Histograms extracted from various segments in a piece of audio. Thus, change and variation of rhythmic aspects in time are captured by this descriptor. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extract All Features\n", "\n", "To extract ALL or selected ones of the before described features, you can use this command: " ] }, { "cell_type": "code", "collapsed": true, "input": [ "# adapt the fext array to your needs:\n", "fext = ['rp','ssd','rh','mvd'] # sh, tssd, trh\n", "\n", "features = rp_extract(wavedata,\n", " samplerate,\n", " extract_rp = ('rp' in fext), # extract Rhythm Patterns features\n", " extract_ssd = ('ssd' in fext), # extract Statistical Spectrum Descriptor\n", " extract_sh = ('sh' in fext), # extract Statistical Histograms\n", " extract_tssd = ('tssd' in fext), # extract temporal Statistical Spectrum Descriptor\n", " extract_rh = ('rh' in fext), # extract Rhythm Histogram features\n", " extract_trh = ('trh' in fext), # extract temporal Rhythm Histogram features\n", " extract_mvd = ('mvd' in fext), # extract Modulation Frequency Variance Descriptor\n", " spectral_masking=True,\n", " transform_db=True,\n", " transform_phon=True,\n", " transform_sone=True,\n", " fluctuation_strength_weighting=True,\n", " skip_leadin_fadeout=1,\n", " step_width=1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "# let's see what we got in our dict\n", "print features.keys()" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['ssd', 'rh', 'rp', 'mvd']\n" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "# list the feature type dimensions\n", "\n", "for k in features.keys():\n", " print k, features[k].shape\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ssd (168,)\n", "rh (60,)\n", "rp (1440,)\n", "mvd (420,)\n" ] } ], "prompt_number": 135 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "4. Application Scenarios" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analyze Songs from Soundcloud\n", "\n", "## 4.1. Getting Songs from Soundcloud\n", "\n", "In this step we are going to analyze songs from Soundcloud, using the Soundcloud API.\n", "\n", "Please get your own API key first by clicking \"Register New App\" on https://developers.soundcloud.com.\n", "\n", "Then we can start using the Soundcloud API:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# START SOUNDCLOUD API\n", "import soundcloud\n", "import urllib # for mp3 download\n", "\n", "# To use soundcloud-python, you must first create a Client instance, passing at a minimum the client id you \n", "# obtained when you registered your app:\n", "\n", "# If you only need read-only access to public resources, simply provide a client id when creating a Client instance:\n", "my_client_id= 'insert your soundcloud client id here'\n", "\n", "client = soundcloud.Client(client_id=my_client_id)\n", "# if there is no error after this, it should have worked" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 137 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Get Track Info" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# GET TRACK INFO\n", "\n", "#soundcloud_url = 'http://soundcloud.com/forss/flickermood'\n", "soundcloud_url = 'https://soundcloud.com/majorlazer/be-together-feat-wild-belle'\n", "\n", "track = client.get('/resolve', url=soundcloud_url)\n", "\n", "print \"TRACK ID:\", track.id\n", "print \"Title:\", track.title\n", "print \"Artist: \", track.user['username']\n", "print \"Genre: \", track.genre\n", "print track.bpm, \"bpm\"\n", "print track.playback_count, \"times played\"\n", "print track.download_count, \"times downloaded\"\n", "print \"Downloadable?\", track.downloadable" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "TRACK ID: 208199477\n", "Title: Major Lazer - Be Together (feat. Wild Belle)\n", "Artist: Major Lazer [OFFICIAL]\n", "Genre: Major Lazer\n", "None bpm\n", "3736959 times played\n", "0 times downloaded\n", "Downloadable? False\n" ] } ], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "# if you want to see all information contained in 'track':\n", "print vars(track)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Get Track URLs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "if hasattr(track, 'download_url'):\n", " print track.download_url\n", "print track.stream_url\n", "stream = client.get('/tracks/%d/streams' % track.id)\n", "#print vars(stream)\n", "print stream.http_mp3_128_url" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "https://api.soundcloud.com/tracks/208199477/stream\n", "https://ec-media.sndcdn.com/rUaqgMEvIAq2.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a52202986afbb739d5ae703a547444c2ea4f10b53ee73e1d9907dbfbf42076407dc7bc785d37ea1a66e03f6405\n" ] } ], "prompt_number": 139 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Download Preview MP3" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# set the MP3 download directory\n", "mp3_dir = './music'\n", "\n", "mp3_file = mp3_dir + os.sep + \"%s.mp3\" % track.title\n", "\n", "# Download the 128 kbit stream MP3\n", "urllib.urlretrieve (stream.http_mp3_128_url, mp3_file)\n", "\n", "print \"Downloaded \" + mp3_file" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Downloaded ./music/Major Lazer - Be Together (feat. Wild Belle).mp3\n" ] } ], "prompt_number": 140 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Iterate over a List of Soundcloud Tracks\n", "This will take a number of Souncloud URLs and get the track info for them and download the mp3 stream if available." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# use your own soundcloud urls here\n", "soundcloud_urls = [\n", " 'https://soundcloud.com/absencemusik/lana-del-rey-born-to-die-absence-remix',\n", " 'https://soundcloud.com/princefoxmusic/raindrops-feat-kerli-prince-fox-remix',\n", " 'https://soundcloud.com/octobersveryown/remyboyz-my-way-rmx-ft-drake'\n", " ]\n", "\n", "mp3_dir = './music'\n", "mp3_files = []\n", "own_track_ids = []\n", "\n", "for url in soundcloud_urls:\n", " print url\n", " track = client.get('/resolve', url=url)\n", " mp3_file = mp3_dir + os.sep + \"%s.mp3\" % track.title\n", " mp3_files.append(mp3_file)\n", " own_track_ids.append(track.id)\n", " \n", " stream = client.get('/tracks/%d/streams' % track.id)\n", "\n", " if hasattr(stream, 'http_mp3_128_url'):\n", " mp3_url = stream.http_mp3_128_url\n", " elif hasattr(stream, 'preview_mp3_128_url'): # if we cant get the full mp3 we take the 1:30 preview\n", " mp3_url = stream.preview_mp3_128_url\n", " else:\n", " print \"No MP3 can be downloaded for this song.\"\n", " mp3_url = None # in this case we can't get an mp3\n", " \n", " if not mp3_url == None:\n", " urllib.urlretrieve (mp3_url, mp3_file) # Download the 128 kbit stream MP3\n", " print \"Downloaded \" + mp3_file\n", " \n", "# show list of mp3 files we got:\n", "# print mp3_files" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "https://soundcloud.com/absencemusik/lana-del-rey-born-to-die-absence-remix\n", "Downloaded ./music/Lana Del Rey - Born To Die (Absence Remix).mp3\n", "https://soundcloud.com/princefoxmusic/raindrops-feat-kerli-prince-fox-remix\n", "Downloaded ./music/SNBRN - Raindrops feat. Kerli (Prince Fox Remix).mp3\n", "https://soundcloud.com/octobersveryown/remyboyz-my-way-rmx-ft-drake\n", "Downloaded ./music/Remy Boyz - My Way RMX Ft. Drake.mp3\n" ] } ], "prompt_number": 141 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.2. Analyzing Songs from Soundcloud" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analyze the previously loaded Songs\n", "\n", "Now this combines reading all the MP3s we've got and analyzing the features" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# mp3_files is the list of downloaded Soundcloud files as stored above (mp3_files.append())\n", "\n", "# all_features will be a list of dict entries for all files\n", "all_features = []\n", "\n", "for mp3 in mp3_files:\n", "\n", " # Read the Audio file\n", " samplerate, samplewidth, wavedata = audiofile_read(mp3)\n", " print \"Successfully read audio file:\", mp3\n", " nsamples = wavedata.shape[0]\n", " nchannels = wavedata.shape[1]\n", " print samplerate, \"Hz,\", samplewidth*8, \"bit,\", nchannels, \"channel(s),\", nsamples, \"samples\"\n", " \n", " # Extract the Audio Features\n", " # (adapt the fext array to your needs)\n", " fext = ['rp','ssd','rh','mvd'] # sh, tssd, trh\n", "\n", " features = rp_extract(wavedata,\n", " samplerate,\n", " extract_rp = ('rp' in fext), # extract Rhythm Patterns features\n", " extract_ssd = ('ssd' in fext), # extract Statistical Spectrum Descriptor\n", " extract_sh = ('sh' in fext), # extract Statistical Histograms\n", " extract_tssd = ('tssd' in fext), # extract temporal Statistical Spectrum Descriptor\n", " extract_rh = ('rh' in fext), # extract Rhythm Histogram features\n", " extract_trh = ('trh' in fext), # extract temporal Rhythm Histogram features\n", " extract_mvd = ('mvd' in fext), # extract Modulation Frequency Variance Descriptor\n", " )\n", " \n", " all_features.append(features)\n", " \n", "print \"Finished analyzing\", len(mp3_files), \"files.\"" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Decoding mp3 with: lame --quiet --decode \"./music/Lana Del Rey - Born To Die (Absence Remix).mp3\" \"/var/folders/1_/bnncmvw96qvfqdy3yg98mzjm0000gn/T/tmpAppw6p.wav\"\n", "Successfully read audio file: ./music/Lana Del Rey - Born To Die (Absence Remix).mp3\n", "44100 Hz, 16 bit, 2 channel(s), 12197376 samples\n", "Decoding mp3 with: lame --quiet --decode \"./music/SNBRN - Raindrops feat. Kerli (Prince Fox Remix).mp3\" \"/var/folders/1_/bnncmvw96qvfqdy3yg98mzjm0000gn/T/tmpH1nCQa.wav\"\n", "Successfully read audio file: ./music/SNBRN - Raindrops feat. Kerli (Prince Fox Remix).mp3\n", "44100 Hz, 16 bit, 2 channel(s), 8695296 samples\n", "Decoding mp3 with: lame --quiet --decode \"./music/Remy Boyz - My Way RMX Ft. Drake.mp3\" \"/var/folders/1_/bnncmvw96qvfqdy3yg98mzjm0000gn/T/tmpsaGK_v.wav\"\n", "Successfully read audio file: ./music/Remy Boyz - My Way RMX Ft. Drake.mp3\n", "44100 Hz, 16 bit, 2 channel(s), 3957743 samples\n", "Finished analyzing 3 files.\n" ] } ], "prompt_number": 142 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: also see source file rp_extract_files.py on how to iterate over ALL mp3 or wav files in a directory." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Look at the results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# iterates over all featuers (files) we extracted\n", "\n", "for feat in all_features:\n", " plotrp(feat['rp'])\n", " plotrh(feat['rh'])\n", "\n", " maxbin = feat['rh'].argmax(axis=0) + 1 # +1 because it starts from 0\n", " bpm = maxbin * mod_freq_res * 60\n", " print \"roughly\", round(bpm), \"bpm\"\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nmZmZmXXe/wd64DapuZC0sAAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "roughly 242.0 bpm\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "roughly 10.0 bpm\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n/3KoYCZeE7qdAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n9v/HdKSZmKqYGAAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "roughly 30.0 bpm\n" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Further Example: Get a list of tracks by Genre\n", "\n", "This is an example on how to retrieve Songs from Soundcloud by genre and/or bpm.\n", "\n", "currently this does not work ... (issue on Soundcloud side?)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# currently this does not work \n", "genre = 'Dancehall'\n", "\n", "curr_offset = 0 # Note: the API has a limit of 50 items per response, so to get more you have to query multiple times with an offset.\n", "tracks = client.get('/tracks', genres=genre, offset=curr_offset)\n", "print \"Retrieved\", len(tracks), \"track objects data\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "code", "collapsed": false, "input": [ "# original Soundcloud example, searching for genre and bpm\n", "# currently this does not work \n", "tracks = client.get('/tracks', genres='punk', bpm={'from': 120})" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "4.3. Finding Similar Sounding Songs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In these application scenarios we try to find similar songs or classify music into different categories.\n", "\n", "For these Use Cases we need to import a few additional functions from the sklearn package and from mir_utils (installed from git above in parallel to rp_extract):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# IMPORTING mir_utils (installed from git above in parallel to rp_extract (otherwise ajust path))\n", "import sys\n", "sys.path.append(\"../mir_utils\")\n", "from demo.NotebookUtils import *\n", "from demo.PlottingUtils import *\n", "from demo.Soundcloud_Demo_Dataset import SoundcloudDemodatasetHandler" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 143 }, { "cell_type": "code", "collapsed": true, "input": [ "# IMPORTS for NearestNeighbor Search\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.neighbors import NearestNeighbors" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 144 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The Soundcloud Demo Dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Soundcloud Demo Dataset is a collection of commonly known mainstream radio songs hosted on the online streaming platform Soundcloud. The Dataset is available as playlist and is intended to be used to demonstrate the performance of MIR algorithms with the help of well known songs.\n", "\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# show the data set as Souncloud playlist\n", "\n", "iframe = ''\n", "\n", "HTML(iframe)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The *SoundcloudDemodatasetHandler* abstracts the access to the TU-Wien server. On this server the extracted features are stored as csv-files. The *SoundcloudDemodatasetHandler* remotely loads the features and returns them by request. The features have been extracted using the method explained in the previous sections." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# first argument is local file path for downloaded MP3s and local metadata (if present, otherwise None)\n", "scds = SoundcloudDemodatasetHandler(None, lazy=False)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 145 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Finding rhythmically similar songs" ] }, { "cell_type": "code", "collapsed": true, "input": [ "# Initialize the similarity search object\n", "\n", "sim_song_search = NearestNeighbors(n_neighbors = 6, metric='euclidean')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 146 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Finding rhythmically similar songs using Rhythm Histograms" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# set feature type\n", "feature_set = 'rh'\n", "\n", "# get features from Soundcloud demo set\n", "demoset_features = scds.features[feature_set][\"data\"]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "# Normalize the extracted features\n", "scaled_feature_space = StandardScaler().fit_transform(demoset_features)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 148 }, { "cell_type": "code", "collapsed": false, "input": [ "# Fit the Nearest-Neighbor search object to the extracted features\n", "sim_song_search.fit(scaled_feature_space)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "NearestNeighbors(algorithm='auto', leaf_size=30, metric='euclidean',\n", " metric_params=None, n_neighbors=6, p=2, radius=1.0)" ] } ], "prompt_number": 149 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Our query-song:\n", "\n", "This is a query song from the pre-analyzed data set:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "query_track_soundcloud_id = 68687842 # Mr. Saxobeat\n", "\n", "HTML(scds.getPlayerHTMLForID(query_track_soundcloud_id))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "" ] } ], "prompt_number": 13 }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Retrieve the feature vector for the query song" ] }, { "cell_type": "code", "collapsed": false, "input": [ "query_track_feature_vector = scaled_feature_space[scds.features[feature_set][\"ids\"] == query_track_soundcloud_id]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 150 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Search the nearest neighbors of the query-feature-vector\n", "This retrieves the most similar song indices and their distance:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "(distances, similar_songs) = sim_song_search.kneighbors(query_track_feature_vector, return_distance=True)\n", " \n", "print distances\n", "print similar_songs\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0. 6.02261617 7.76291163 7.80470254 8.63645209 8.90034496]]\n", "[[37 9 24 36 40 10]]\n" ] } ], "prompt_number": 151 }, { "cell_type": "code", "collapsed": false, "input": [ "# For now we use only the song indices without distances\n", "similar_songs = sim_song_search.kneighbors(query_track_feature_vector, return_distance=False)[0]\n", "\n", "# because we are searching in the entire collection, the top-most result is the query song itself. Thus, we can skip it.\n", "similar_songs = similar_songs[1:]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 152 }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Lookup the corresponding Soundcloud-IDs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "similar_soundcloud_ids = scds.features[feature_set][\"ids\"][similar_songs]\n", "\n", "print similar_soundcloud_ids" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[108622874 59732818 19505822 70343006 40279580]\n" ] } ], "prompt_number": 153 }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Listen to the results" ] }, { "cell_type": "code", "collapsed": false, "input": [ "SoundcloudTracklist(similar_soundcloud_ids, width=90, height=120, visual=False)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "[108622874, 59732818, 19505822, 70343006, 40279580]" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding rhythmically similar songs using Rhythm Patterns\n", "This time we define a function that performs steps analogously to the RH retrieval above:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def search_similar_songs_by_id(query_song_id, feature_set, skip_query=True):\n", "\n", " scaled_feature_space = StandardScaler().fit_transform(scds.features[feature_set][\"data\"])\n", "\n", " sim_song_search.fit(scaled_feature_space);\n", "\n", " query_track_feature_vector = scaled_feature_space[scds.features[feature_set][\"ids\"] == query_song_id]\n", "\n", " similar_songs = sim_song_search.kneighbors(query_track_feature_vector, return_distance=False)[0]\n", " \n", " if skip_query:\n", " similar_songs = similar_songs[1:]\n", "\n", " similar_soundcloud_ids = scds.features[feature_set][\"ids\"][similar_songs]\n", " \n", " return similar_soundcloud_ids" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "similar_soundcloud_ids = search_similar_songs_by_id(query_track_soundcloud_id, \n", " feature_set='rp')\n", "\n", "SoundcloudTracklist(similar_soundcloud_ids, width=90, height=120, visual=False)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "[108622874, 19505822, 40279580, 59732818, 5669751]" ] } ], "prompt_number": 44 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Finding songs based on Timbral Similarity" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Finding songs based on timbral similarity using Statistical Spectral Descriptors" ] }, { "cell_type": "code", "collapsed": false, "input": [ "similar_soundcloud_ids = search_similar_songs_by_id(query_track_soundcloud_id, \n", " feature_set='ssd')\n", "\n", "SoundcloudTracklist(similar_soundcloud_ids, width=90, height=120, visual=False)" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "html": [ "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "[19505822, 108622874, 40279580, 15964713, 39654171]" ] } ], "prompt_number": 45 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Compare the Results of Timbral and Rhythmic Similarity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First entry is query-track" ] }, { "cell_type": "code", "collapsed": false, "input": [ "track_id = 68687842 # 40439758\n", "results_track_1 = search_similar_songs_by_id(track_id, feature_set='ssd', skip_query=False)\n", "results_track_2 = search_similar_songs_by_id(track_id, feature_set='rh', skip_query=False)\n", "\n", "compareSimilarityResults([results_track_1, results_track_2],\n", " width=100, height=120, visual=False,\n", " columns=['Statistical Spectrum Descriptors', 'Rhythm Histograms'])" ], "language": "python", "metadata": { "scrolled": false }, "outputs": [ { "html": [ "
Statistical Spectrum Descriptors
Rhythm Histograms
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "[array([ 68687842, 19505822, 108622874, 40279580, 15964713, 39654171]),\n", " array([ 68687842, 108622874, 59732818, 19505822, 70343006, 40279580])]" ] } ], "prompt_number": 46 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Using your Own Query Song from the self-extracted Souncloud tracks above" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# check which files we got\n", "mp3_files" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 154, "text": [ "[u'./music/Lana Del Rey - Born To Die (Absence Remix).mp3',\n", " u'./music/SNBRN - Raindrops feat. Kerli (Prince Fox Remix).mp3',\n", " u'./music/Remy Boyz - My Way RMX Ft. Drake.mp3']" ] } ], "prompt_number": 154 }, { "cell_type": "code", "collapsed": true, "input": [ "# select from the list above the number of the song you want to use as a query (counting from 1)\n", "song_id = 3 # count from 1\n", "\n", "# select the feature vector type\n", "feat_type = 'rp' # 'rh' or 'ssd' or 'rp'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "# from the all_features data structure, we get the desired feature vector belonging to that song\n", "query_feature_vector = all_features[song_id - 1][feat_type]\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 165 }, { "cell_type": "code", "collapsed": false, "input": [ "# get all the feature vectors of desired feature type from the Soundcloud demo set\n", "demo_features = scds.features[feat_type][\"data\"]\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 166 }, { "cell_type": "code", "collapsed": false, "input": [ "# Initialize Neighbour Search space with demo set features\n", "\n", "sim_song_search.fit(demo_features)\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 167, "text": [ "NearestNeighbors(algorithm='auto', leaf_size=30, metric='euclidean',\n", " metric_params=None, n_neighbors=6, p=2, radius=1.0)" ] } ], "prompt_number": 167 }, { "cell_type": "code", "collapsed": false, "input": [ "# use our own query_feature_vector for search in the demo set \n", "(distances, similar_songs) = sim_song_search.kneighbors(query_feature_vector, return_distance=True)\n", " \n", "print distances\n", "print similar_songs\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 8.60906013 8.62923708 8.75274749 8.77687295 8.77928625 8.82950523]]\n", "[[36 40 42 1 37 10]]\n" ] } ], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "# now we got the song indices for similar songs in the demo set\n", "similar_songs = similar_songs[0]\n", "similar_songs" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 169, "text": [ "array([36, 40, 42, 1, 37, 10])" ] } ], "prompt_number": 169 }, { "cell_type": "code", "collapsed": false, "input": [ "# and we get the according Soundcloud Track IDs\n", "similar_soundcloud_ids = scds.features[feat_type][\"ids\"][similar_songs]\n", "\n", "similar_soundcloud_ids" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 170, "text": [ "array([19505822, 70343006, 11312719, 12285350, 68687842, 40279580])" ] } ], "prompt_number": 170 }, { "cell_type": "code", "collapsed": false, "input": [ "# we add our own Track ID at the beginning to show the seed song below:\n", "\n", "my_track_id = own_track_ids[song_id - 1]\n", "print my_track_id\n", "result = np.insert(similar_soundcloud_ids,0,my_track_id)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "204088308\n" ] } ], "prompt_number": 171 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Visual Player with the Songs most similar to our Own Song\n", "first song is the query song" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"Feature Type:\", feat_type\n", "SoundcloudTracklist(result, width=90, height=120, visual=False)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Feature Type: rp\n" ] }, { "html": [ "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 172, "text": [ "[204088308, 19505822, 70343006, 11312719, 12285350, 68687842, 40279580]" ] } ], "prompt_number": 172 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add On: Combining different Music Descriptors\n", "\n", "Here we merge SSD and RH features together to account for both timbral and rhythmic similarity:" ] }, { "cell_type": "code", "collapsed": true, "input": [ "def search_similar_songs_with_combined_sets(scds, query_song_id, feature_sets, skip_query=True, n_neighbors=6):\n", " \n", " features = scds.getCombinedFeaturesets(feature_sets)\n", " \n", " sim_song_search = NearestNeighbors(n_neighbors = n_neighbors, metric='l2')\n", "\n", " #\n", " scaled_feature_space = StandardScaler().fit_transform(features)\n", "\n", " #\n", " sim_song_search.fit(scaled_feature_space);\n", "\n", " #\n", " query_track_feature_vector = scaled_feature_space[scds.getFeatureIndexByID(query_song_id, feature_sets[0])]\n", " \n", " #\n", " similar_songs = sim_song_search.kneighbors(query_track_feature_vector, return_distance=False)[0]\n", " \n", " if skip_query:\n", " similar_songs = similar_songs[1:]\n", "\n", " #\n", " similar_soundcloud_ids = scds.getIdsByIndex(similar_songs, feature_sets[0])\n", " \n", " return similar_soundcloud_ids" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 163 }, { "cell_type": "code", "collapsed": false, "input": [ "feature_sets = ['ssd','rh']\n", "\n", "compareSimilarityResults([search_similar_songs_with_combined_sets(scds, 68687842, feature_sets=feature_sets, n_neighbors=5),\n", " search_similar_songs_with_combined_sets(scds, 40439758, feature_sets=feature_sets, n_neighbors=5)],\n", " width=100, height=120, visual=False,\n", " columns=[scds.getNameByID(68687842),\n", " scds.getNameByID(40439758)])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": null }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Further Reading" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " * [Audio Feature Extraction site of the MIR-Team @TU-Wien](http://www.ifs.tuwien.ac.at/mir/audiofeatureextraction.html)\n", " * Blog-post: [A gentle Introduction to Music Information Retrieval](http://www.europeanasounds.eu/news/a-gentle-introduction-to-music-information-retrieval-making-computers-understand-music)\n", " * [Same Blog-post with Python code](http://wwwnew.schindler.eu.com/blog/mir_intro/blog_with_code.html)" ] } ], "metadata": {} } ] }