{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy, scipy, matplotlib.pyplot as plt, librosa, mir_eval, IPython.display, urllib\n", "plt.rcParams['figure.figsize'] = (14, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[← Back to Index](index.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tempo Estimation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `librosa.beat.estimate_tempo`" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "We will use [`librosa.beat.estimate_tempo`](http://bmcfee.github.io/librosa/generated/librosa.beat.estimate_tempo.html) to estimate the global tempo in an audio file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Download an audio file:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "('1_bar_funk_groove.mp3', )" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filename = '1_bar_funk_groove.mp3'\n", "urllib.urlretrieve('http://audio.musicinformationretrieval.com/' + filename,\n", " filename=filename)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load an audio file:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, fs = librosa.load('1_bar_funk_groove.mp3')\n", "IPython.display.Audio(x, rate=fs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Estimate the tempo:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "56.1735733696\n" ] } ], "source": [ "onset_env = librosa.onset.onset_strength(x, sr=fs)\n", "tempo = librosa.beat.estimate_tempo(onset_env, sr=fs, start_bpm=60)\n", "print tempo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the tempo estimate on top of the input signal:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nERmCCUG1m0AiMMghgIEOUUaZWXaNiIiISBUMdIiIiIiIyHAY6BARERERkeEw0CEiIiIiIsNhoENE\nRERERIbDQIeIiIgoBZaWIdIfBjpERERERGQ4DHSIiIiIiMhwGOgQEREREZHhMNAhIiIiIiLDyVK7\nAURERERaddvKWRif8KndDCKSgIEOERERUQL5eVbk51nVbgYRScDUNSIiIiIiMhwGOkREREREZDgM\ndIiIiIiIyHAY6BARERERkeEw0CEiIiIiIsNhoENERERERIbDQIeIiIiIiAyHgQ5RBpUW5KrdBCIi\nIqJpiYEOUQbNrSlUuwlERERE0xIDHaIMMptMajeBiIiIaFpioENERERERIbDQIeIiIiIiAyHgQ4R\nERERERkOAx0iIiIiIjIcBjpERERERGQ4DHSIiIiIiMhwGOgQEREREZHhMNAhIiIiIiLDYaBDRERE\nRESGw0CHiIiIiIgMh4EOEREREREZDgMdIiIiIiIyHAY6RERERERkOAx0iIiIiIjIcBjoEBERERGR\n4TDQISIiIiIiw5Ec6PzpT3/Ck08+Gfd3//u//4tPfOIT+OQnP4kPPvhA6lsQERERERFJkiXlSd/8\n5jexa9cuLF68eMrvent7sXnzZvzud7/DxMQENm7ciNWrVyM7OzvtxhIREREREQkhaUansbERzz33\nHILB4JTfHT16FI2NjbBarcjPz0ddXR1Onz6ddkOJ9MqWa0W1s1vtZhARERFNK0lndF555RX88pe/\njPrZ888/j49//OPYt29f3Oe4XC44HI7wv+12O0ZHR2VoKpE+3b6yBqWXmtRuBhEREdG0kjTQefDB\nB/Hggw+KesH8/Hy4XK7wv10uFwoKCqS1jsgATCaT2k0gIiIimnZMwXj5ZwLs27cPv/3tb/H9738/\n6ud9fX14/PHH8eqrr2JiYgIPPfQQXnvtNa7RISIiIiIixUgqRgBMjlJHjlS/+OKLqK2txbp16/DY\nY4/h4YcfRiAQwBe+8AUGOUREREREpCjJMzpERERERERaxQ1DiYiIiIjIcBjoEBERERGR4TDQISIi\nIiIiw2GgQ0REREREhqNqoBMIBPDss89iw4YN2LRpE1pbW9VsjqF4vV489dRTeOSRR/Dggw/i/fff\nV7tJhtLf34+bb74ZFy9eVLsphvKTn/wEGzZswCc+8Qn8/ve/V7s5hhEIBPDMM89g48aNeOSRR3Dh\nwgW1m6R7R44cwaZNmwAALS0t4WP73HPPgTV+0hN5bE+ePIlHHnkEmzZtwhNPPIH+/n6VW6dvkcc2\n5I033sCGDRtUapFxRB7b/v5+fOYzn8Gjjz6KRx55BG1tbSq3Tr8ij+v58+exceNGPPzww/h//+//\nCbrWqhrovPvuu/B6vXj55ZfxxS9+ES+88IKazTGUN954AyUlJXjppZfw85//HN/4xjfUbpJheL1e\nPPvss8jLy1O7KYayb98+HDp0CC+//DI2b96MS5cuqd0kw9i5cyfGxsbwm9/8Bn/3d3+Hf/3Xf1W7\nSbr2s5/9DF/+8pfh9XoBAM8//zy+8IUv4KWXXkIwGMR7772ncgv1K/bYfvvb38ZXvvIVbN68GXfc\ncQd+9rOfqdxC/Yo9tgBw4sQJvPrqqyq2yhhij+0//dM/4d5778WvfvUrfP7zn8fZs2dVbqE+xR7X\nH/zgB/jMZz6DX//61/B4PPjggw9SvoaqgU5TUxPWrl0LAFi2bBmOHTumZnMM5c4778TnP/95AJOj\nuRaLReUWGcd3v/tdbNy4EeXl5Wo3xVB27dqFBQsW4G//9m/xN3/zN1i3bp3aTTKM3NxcOJ1OBINB\nOJ1OWK1WtZuka3V1dfjBD34QHk08ceIErr32WgDATTfdhN27d6vZPF2LPbbf//73sXDhQgCAz+dD\nTk6Oms3TtdhjOzg4iH/5l38RPDJOicUe20OHDqGrqwuPP/443njjDaxatUrlFupT7HHNzc3F0NAQ\ngsEgXC6XoHuZqoHO6Ogo8vPzw/+2WCwIBAIqtsg4bDYb7HY7RkdH8fd///f4h3/4B7WbZAi/+93v\nUFJSgjVr1gAAbw4yGhgYwLFjx/Dv//7v+NrXvoYvfvGLajfJMBobG+HxeHDnnXfi2WefxaOPPqp2\nk3TtjjvuiBo8irwO2Gw2OJ1ONZplCLHHNjSg1NTUhJdeegmf/vSnVWqZ/kUe20AggC996Ut4+umn\nYbPZVG6Z/sWet+3t7SgsLMR///d/o6qqijOREsUe10cffRTf+ta38PGPfxwDAwO47rrrUr6GqoFO\nfn4+XC5X+N+BQABmM+sjyKWzsxOf+tSncN999+Guu+5SuzmG8Lvf/Q67d+/Gpk2bcOrUKTz99NPo\n6+tTu1mGUFxcjDVr1iArKwsNDQ3IycnBwMCA2s0yhJ///OdobGzEH//4R7z22mt4+umn4fF41G6W\nYUTet1wuFwoKClRsjfG89dZbeO655/DTn/4UxcXFajfHEI4dO4bW1lY899xzePLJJ3Hu3Dk8//zz\najfLMIqKisJZCevWrWPGkkyeeuop/PrXv8bbb7+Ne+65R9CSF1WjisbGRmzfvh0AcPjwYSxYsEDN\n5hhKX18f/uqv/gpPPfUU7r//frWbYxi/+tWvsHnzZmzevBkLFy7Ed77zHZSVlandLENYsWIFduzY\nAQDo7u7G2NgYOzUyGRsbg91uBwAUFBTA6/Vy9lxGixYtwv79+wEA27dvx8qVK1VukXG89tpreOml\nl7B582bU1NSo3RzDWLp0KbZu3YrNmzfj+9//PubOnYtnnnlG7WYZRmNjY3j9yP79+zFv3jx1G2QQ\n4+Pj4XtZRUUFRkZGUj4nK9ONSub222/Hrl27wtU+OJognx//+MdwOp344Q9/iB/+8IcAJkd1md9M\nWnXLLbfgwIEDeOCBBxAIBPDVr34VJpNJ7WYZwhNPPIFnnnkGDz/8MHw+H5588knk5uaq3SzdC52f\nTz/9NL7yla/A6/Vizpw5uPPOO1Vumf6ZTCYEAgF8+9vfxsyZM/HZz34WAHDdddfhc5/7nMqt07fY\n62owGOS1ViaR14Qvf/nL+M1vfoOCggJ873vfU7ll+hY6rt/85jfx+c9/Hjk5OcjOzhZUaMsU5CID\nIiIiIiIyGC6IISIiIiIiw2GgQ0REREREhsNAh4iIiIiIDIeBDhERERERGQ4DHSIiIiIiMhwGOkRE\nREREZDiq7qNDRETq+/rXv46mpiZ4vV60tLRg7ty5AIDHHnsMf/jDH/Ctb30L5eXlsr7nd77zHdxz\nzz1YtGiRrK8rxX/9139hbGwsvFdLrBdffBH19fW45ZZblG0YERGlhYEOEdE09+yzzwIA2tvbsWnT\nJmzZsiX8u/vvv1/29zt16hT6+vo0EeQAUzdQjPXII4/g0UcfxerVq5Gdna1Qq4iIKF0MdIiICMDk\nDumx1q1bh82bN2Pfvn344IMP0NPTg+7ubnzqU59CR0cH9u7di6KiIvz85z9HdnY2tmzZgl/+8pcI\nBAK46qqr8NWvfnVKcPCLX/wC9957L4DJoOerX/0qfD4fcnJy8Pzzz6Ourg7bt2/Hf/zHf8Dn86Gm\npgbf+MY3UFRUhN27d+M73/kOAoEAqqur8c///M+w2Wz49re/jb1798JkMuGee+7BX//1X2Pfvn34\nyU9+gry8PJw/fx7z58/H9773PVitVvziF7/Ab3/7WxQWFqKsrAyLFy+Gz+fDM888g3PnzgEAHn74\nYTz44IOwWq1obGzE1q1b///27SckqjWM4/j3pJYogkUwWAuhsIZa9IcMQ2nGChQspJAiKCSjFgpi\nqEEoIi3Cmgja6CIsLKQhiRnS6A8hHoxiXJRhVCgxCYHSYkIdCWeac+7i4oB1K+E2ee/w+8AszuHl\nPQ/v7jfP8yYk+ImISGLojo6IiPzUfMfj9evXdHZ20t3dTVtbGy6Xi3v37gEwODjI2NgYPT09eL1e\n/H4/q1atorOzc8Fetm1jmiY7duwAoKurixMnTnD37l2OHTvGq1evCIVCXLlyhevXr+Pz+SgsLOTy\n5ctEIhEaGxu5ePEivb29bNy4Eb/fz+3bt5mcnKS3t5eenh4eP36MaZoAvHz5kpaWFh48eMDExARP\nnz5lZGSEO3fu4PP5uHXrFp8+fYqvnZ6exufzcePGDV68eBGvOz8/n/7+/oSftYiI/D7q6IiIyE/N\nd3q2bdtGZmYmmZmZAOzatQuAtWvXMj09TSAQYHx8nMOHDwMQjUbZvHnzgr0+f/4MQHp6OgBut5vz\n588zODhIcXExpaWlmKbJxMQEx48fByAWi5Gdnc3o6CgOhwOn0wnAmTNnAKitreXQoUMYhkF6ejoH\nDhzg+fPn7Nmzhw0bNuBwOABYv349U1NTBINBiouLycjIAGD//v2Ew2Hy8vIIBoOcPHkSl8tFQ0ND\nvO41a9YwPj7+m09WREQSSUFHREQW5dsRtGXLFg4FWJZFaWkpzc3NAMzOzhKLxRasMQyDlJSU+HNJ\nSQlbt25lYGCArq4uTNPE7Xazfft2Ojo6AJibm2N2djbeeZkXDocJh8PYtr1g7M6yLL5+/fpdzYZh\nYNs2hmFgWVb8/Xw92dnZ9PX18ezZM0zT5ODBg9y/f5+srCxSU1N/eZdHRET+WzS6JiIiv8XOnTt5\n8uQJoVAI27ZpbW3l5s2bC9asXLkSy7L48uULAPX19YyMjHDkyBFqa2t58+YNW7ZsYXh4mA8fPgDQ\n3t6Ox+Nh3bp1hEIh3r9/D8C1a9fwer0UFBTg9/vj+/b19VFQUPCPd47g705Uf38/MzMzRCIRHj16\nBMDAwACNjY243W6amprIyMhgcnISgI8fP5Kbm5uIYxMRkQRRR0dEROK+7VoYhhH//Wqd0+mkpqaG\nyspKLMti06ZNnD59+rtv7N69m6GhIVwuF6dOnaK5uZn29nZSUlI4d+4cq1ev5sKFC9TV1RGLxcjJ\nycHj8bB8+XI8Hg9nz54lGo2Sm5vLpUuXSEtLIxgMUl5eTjQapby8nH379hEIBH5YZ1VVFRUVFWRl\nZcUDTFFREQ8fPqSsrIwVK1ZQUlJCXl4eAIFAgL179/7r8xURkT/HsH/0l5eIiEgCvHv3jo6ODq5e\nvbrUpSxKJBLh6NGjeL1e0tLSlrocERFZJI2uiYjIH+V0OsnJyeHt27dLXcqidHd3U11drZAjIvI/\no46OiIiIiIgkHXV0REREREQk6SjoiIiIiIhI0lHQERERERGRpKOgIyIiIiIiSUdBR0REREREko6C\njoiIiIiIJJ2/ACmdGJAsSM/sAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "t = numpy.arange(0, len(x))/float(fs)\n", "plt.plot(t, x, alpha=0.5)\n", "plt.xlabel('Time (seconds)')\n", "\n", "T = len(x)/float(fs)\n", "seconds_per_beat = 60.0/tempo\n", "beat_times = numpy.arange(0, T, seconds_per_beat)\n", "plt.vlines(beat_times, -1, 1, color='r')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Listen to the input signal with a click track using the tempo estimate:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_with_beeps = mir_eval.sonify.clicks(beat_times, fs, length=len(x))\n", "IPython.display.Audio(x + x_with_beeps, rate=fs)" ] }, { "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 }