{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"FMP\"\n", "\"AudioLabs\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"C2\"\n", "

Sonification

\n", "
\n", "\n", "
\n", "\n", "

\n", "In this notebook, we introduce some tools that can be used for the sonification of feature representations and annotations. \n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "\n", "In the FMP notebooks, we use a multitude of figures with concrete examples to communicate the main ideas of music processing approaches. In particular, the **visualization** of feature representations such as [spectrograms](../C2/C2_STFT-Basic.html), [chromagrams](../C3/C3S1_SpecLogFreq-Chromagram.html), or [tempograms](../C6/C6S2_TempogramFourier.html) not only deepens the understanding of signal processing concepts, but also provides valuable insights into musical and acoustic properties of the underlying audio signals. Furthermore, the [combined visualization of extracted features and reference annotations](../B/B_Annotations.html) allows for an in-depth inspection of algorithmic approaches on a piece-wise level. Such qualitative evaluations are, besides [quantitative evaluations based on suitable metrics](../C4/C4S5_Evaluation.html), essential for understanding the benefits and limitations of algorithmic approaches as well as the suitability and validity of the underlying model assumptions. \n", "\n", "As an alternative or complement to **data visualization**, one may also use **data sonification** as a means for providing acoustic feedback on the nature of extracted or annotated information. This particularly holds for music, where humans are trained to perceive even slight deviations in frequency and timing of sound events. For example, one can immediately recognize small rhythmic deviations when listing to a pulse track sonified in form a sequence of click sounds. In this notebook, we introduce three sonification methods that are helpful in analyzing annotations as well as audio features extracted from a music recording. \n", "\n", "* **Sonification of time positions** using click sounds. This technique is useful for inspecting the accuracy of [onset, beat, and measure positions](../C6/C6S1_OnsetDetection.html). \n", "* **Sonification of frequency trajectories** using sinusoidal models. This method yields insights for tasks such as [melody estimation](../C8/C8S2_FundFreqTracking.html) or [singing voice separation](../C8/C8S2_MelodyExtractSep.html).\n", "* **Sonification of chroma features** using [Shepard tones](../C1/C1S1_ChromaShepard.html). This technique provides an acoustic representation of the information encoded by [chromagrams](../C3/C3S1_SpecLogFreq-Chromagram.html).\n", "\n", "Obviously, there are many more ways for sonifying acoustic properties of music signals. In particular, a superposition of the original music signal and a suitable sonification of specific features often leads to fascinating and surprising insights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sonification of Time Positions\n", "\n", "In the first scenario, we assume that we are given a music recording as well as a list of time positions that indicate the presence of certain musical events. For example, the musical events may refer to [onset positions](../C6/C6S1_OnsetDetection.html) of certain notes, to [beat positions](../C6/C6S2_TempoBeat.html), or [structural boundaries](../C4/C4S1_MusicStructureGeneral.html) between musical parts. Then, the goal of sonification is to generate a succinct acoustic stimulus at each of the time positions, thus giving the listener a precise temporal feedback. Ideally, the stimuli should be perceivable also when being superimposed with the original music recording. Often the time positions are further classified according to different categories (e.g., downbeat and upbeat positions). Therefore, it is useful to have a \"coloration\" method for generating distinguishable stimuli that can easily be associated with the different categories.\n", "\n", "The [LibROSA](https://librosa.org/doc/latest/index.html) python package provides the function [`librosa.clicks`](https://librosa.org/doc/latest/generated/librosa.clicks.html?highlight=click#librosa.clicks) for generating a family of distinguishable stimuli in form of click sounds that can be placed at the time positions specified. The function allows for adjusting the frequency (with a default of $1000~\\mathrm{Hz}$) as well as the duration (with a default of $100~\\mathrm{ms}$) of the click signal. \n", "\n", "As an example, we consider a short excerpt of an orchestra recording of the Waltz No. 2 from the Suite for Variety Orchestra No. 1 by Dimitri Shostakovich. In the annotation file, we have marked the beat positions (given in seconds). Being in the $3/4$ meter, every third beat corresponds to a downbeat or measure position. In the following code cell, we generate a sonification, where we use a long click sound of low frequency to indicate measure positions and a short click sound of high frequency to indicate beat positions. While, in the visualization, the annotated time positions are superimposed with the waveform plot, the generated click sounds are superimposed with the original music recording.\n", "\n", "\n", "\"FMP_B_Sonify_Beat_Shostakovich_Waltz.png\"\n", "\n", "
\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:24.852343Z", "iopub.status.busy": "2024-02-15T09:01:24.852092Z", "iopub.status.idle": "2024-02-15T09:01:27.306018Z", "shell.execute_reply": "2024-02-15T09:01:27.305264Z" } }, "outputs": [ { "data": { "image/png": "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0/W7devGAw88ENM5RxOdO3cOO8gdaVx55ZW0aNECgOTkZJo0aRI2b61atTylRaNevXq+7caNG8d8vhcCf4djRTj55JOjntuyZUv69u0b8oF3lMB77rkn7PnVqlXjzjvvBPwnCieddBIiAljPQJ06dcKW4ch7xx13+Clojz32GJdeeindu3fnlFNOoWPHjgDcf//9UdtccnIyVapU8e23bt0agAsvvJABAwZEPPfaa6+NeDwSXurcoUuXLjRq1CjksSeeeKJQ1+/atSt33XUXnTt3DurT4omXieSxyOmnn17aIiguypUrB0BSUnh14u677w6Zfu2118Z1LC+0i6pnz55ccMEFQekiQufOnQFrILrtttvo1asXnTp1onLlysBfFQLQrl07zj777ELJ0KJFi7i4RU455ZQil3HJJZf4tp1BymtH3aZNm5itBqVFYKOOdD969eoV1Jh79erlGzRuvfXWoHMef/zxIFePM7CGun5xcdxxx/ntN2vWjAsuuCBsXEooWrRoEWR9aNu2rc8iEokTTjiBRx55hF69evn2A8vu2bMn1atXD3n+448/DlgxNo5vvHbt2qSmpnLeeefRvHlzevfu7WtnlSpV8nsuvXDZZZdx6623erKipaSk8Nhjj9G9e/eYrgFW3Xfs2JF7773Xr7xAzj33XFq3bk2PHj1CuvochbNLly4RrxfoAmzVqhXp6em0adOG6tWrh3yOH330UU+/5e677+bOO++kQYMGUfNGm0gWFqcfPlq55ZZboirUCmH7huKkQ4cOvu3LLrssZJ4aNWqElaVx48aF9sZ4cZUXenSoU6cOHTt2pE+fPvzrX//ypf/nP/+hZs2avv2TTjqJWrVq+cz94fBqhnZ3DN26dePSSy+NUfLoFMegef755/u2H374Yfr16+cbrFq3bu1XR5E4/vjjCy1DjRo1eOCBB+jZs2fQgB0v3MrhmWee6emcevXq0b9/f0477TS/2fepp55KSkoK//znP31pV155JXXr1uXBBx+kW7dunuunSpUqdOjQIaKVomLFivTo0YMBAwb4LCUOycnJdOzYkTJlyvhZMULh+KJTUlK4+eabfen33XefJ1kdypUrR/Xq1Wnfvj3XX399yDy33XYb//73vylTpgxJSUmkpKSEnTAUt7VLRDjttNOC0h2LnoOjkKamptK0adOYr1O2bFkuuOACqlatSqNGjahatWpIq6+7g73ooos46aSTQpbXunVrBgwY4GeNufrqq+nbty9dunQhPT2du+66iwsvvJA77rgj6Hz3PQVLEfEahF69enVOOOEErrvuOp544gk6depE1apVg1x41113nafyCkOHDh2C+p9bbrmFVq1ahT0nWpuPJ17CGrxMSsuUKcPFF1/sl+bupxONwHYa+NvdE8UbbriBm266CbDGK4doFvZTTz3Vt12xYkUeeuihoDw9e/YMeW5RY/kCPUGhKHL0nvOg9OjRo1APgVPJXhWV8uXLB6UNGDCAjIwM374zc/7444+5/PLLSU5OZtKkSZ7Kv/baa5k3b56nvLHg1I0z85g6dSrbtm2jatWq7Nq1y5evTZs2vu3HH3+c5ORkpkyZQmZmZszXbN++PRUqVKBChQo89NBDfnXklRNPPJHt27cDVieyefNmz+deffXVQWnhAtGcxn7xxRezatUqmjRpQteuXYPOcQbp8uXLBw2kkQi18ufss88mMzOTzp07U758eerWretJEbz33nsZOHBg2OOBCvJ9991HWlpaoVZiiYjfLCmQMmXKUKZMGV/HEsqy0apVK5YsWeLJalAcdOvWjdq1ayMiNGrUyE+m5ORk/vOf/5CTk8O8efP4/vvvadmyZdhnrm/fvn5uOifoGSzF+Ljjjgvbrnv37s3TTz8NhB4AK1Wq5Nt2lHHHopWenh7WMhXYMTds2NC3XaVKFQ4dOsShQ4eCznNP4kSE5ORk2rZtS9u2bSkoKPDJGlhmNPr168err77qKW/Lli1p3rw5OTk5fumnn346q1evDnte7969eemllzzLVFwkJSVFjd86/vjj6d27d9T+rX///ogI06ZN86W1b9+eH374oVhkjcT5558f03UCx4XCENhOzzjjDNq1a+erJ7dl3F3HaWlpNGrUiObNm1OvXj2/dhlIoGEiVP/pttCkpKSQl5cHwD/+8Y8Yfo0/lStXDpqEhqLYlieE83uH4+STT2bLli1UrFgRCDbBhyIpKSniLMPhb3/7GyLimy0aY8jNzYWnngp7zqmnnsoNN9xAWloa8+fPD5vvnHPOYcGCBVFlAGtgzs3NDXmsU6dO1K5dm4YNG/o9mI57D/4arELdyIYNGwZ1SP379+e5554DrFU5gQNaamoqqampVK5cmUsuuYS0tDSGDx8e8TfcfvvtPvmK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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os\n", "import sys\n", "import numpy as np\n", "import librosa\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "import IPython.display as ipd\n", "\n", "sys.path.append('..')\n", "import libfmp.b\n", "import libfmp.c8\n", "\n", "%matplotlib inline\n", "\n", "# Load audio and read beat annotations\n", "fn_wav = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_Beat_Shostakovich_Waltz.wav')\n", "fn_ann = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_Beat_Shostakovich_Waltz.csv')\n", "Fs = 22050\n", "x, Fs = librosa.load(fn_wav, Fs) \n", "df = pd.read_csv(fn_ann, sep=';', keep_default_na=False, header=None)\n", "beat_sec = df.values\n", "meas_sec = beat_sec[::3]\n", "ann_beat = [(pos, 'beat') for pos in beat_sec]\n", "ann_meas = [(pos, 'measure') for pos in meas_sec]\n", " \n", "# Plot waveform and annotations\n", "label_keys = {'measure': {'linewidth': 3, 'color': 'b'},\n", " 'beat': {'linewidth': 1, 'color': 'r'}}\n", "title = 'Waveform with measure and beat annotations'\n", "fig, ax, line = libfmp.b.plot_signal(x, Fs, title=title, figsize=(8, 1.8))\n", "libfmp.b.plot_annotation_line(ann_meas+ann_beat, ax=ax, label_keys=label_keys)\n", "plt.tight_layout()\n", "\n", "plt.show()\n", "\n", "# Sonify beat and measure annotations\n", "x_beat = librosa.clicks(beat_sec, sr=Fs, click_freq=2000, \n", " length=len(x), click_duration=0.1)\n", "x_meas = librosa.clicks(meas_sec, sr=Fs, click_freq=400, \n", " length=len(x), click_duration=0.3)\n", "ipd.display(ipd.Audio(x + x_beat + x_meas, rate=Fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sonification of Frequency Trajectories\n", "\n", "When asked to describe a specific song, we are often able to sing or hum the [main melody](../C8/C8S2_MelodyExtractSep.html), which may be loosely defined as a linear succession of musical tones expressing a particular musical idea. Given a music recording (rather than a musical score), the melody corresponds to a sequence of [**fundamental frequency values**](../C8/C8S2_FundFreqTracking.html) (also called **F0-values**) of the tones' pitches. In real performances, such sequences often form complex time–frequency patterns referred to as a **frequency trajectories**. These trajectories may comprise continuous frequency glides from one to the next note ([glissando](../C8/C8S2_MelodyExtractSep.html)) or frequency modulations ([vibrato](../C1/C1S3_Timbre.html)). As an example, we consider a short excerpt of an aria from the opera \"Der Freischütz\" by Carl Maria von Weber. In the score representation, the main melody is notated in a separate staff line underlaid with lyrics. \n", "\n", "\"FMP_C8_F10a\"\n", "\n", "
\n", "\n", "\n", "\n", "In the performance by a soprano singer, the melody corresponds to an F0-trajectory, which we visualize in the following code cell along with the recording's waveform. Furthermore, we use the function [`libfmp.c8.sonify_trajectory_with_sinusoid`](../C8/C8S2_FundFreqTracking.html) to sonify the F0-trajectory using a sinusoidal synthesizer. The sonification is provided in three different formats:\n", "\n", "* As mono signal. \n", "* As mono signal superimposed with the original recording.\n", "* As stereo signal with the F0-sonification in the right and the original recording in the left channel.\n", "\n", "The sonification nicely shows that, as opposed to the notated symbolic representation, the singer smoothly connects some of the notes. Also, one can notice rather pronounced frequency modulations due to vibrato. The superposition with the original recording yields a convenient way to perceptually evaluate the temporal and spectral accuracy of the extracted F0-trajectory. \n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:27.312210Z", "iopub.status.busy": "2024-02-15T09:01:27.311846Z", "iopub.status.idle": "2024-02-15T09:01:27.647787Z", "shell.execute_reply": "2024-02-15T09:01:27.647158Z" } }, "outputs": [ { "data": { "image/png": "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1dXVrFy5krfeeouqqip+8Ytf8Mwzz7B3796My6qtrU26jE0qO3fuZOPGjRkfJ+1Htk1UsbMWlxCq0emZk4ikIGJHmL399tuMGDGCBx54ILrtySef5IILLmDOnDl87nOfi3ZKjnygzZ49m4qKCkpLS+nevTsdO3bMOIZIElVSku3gvvblT3/6E+7OwoULGTRoEF//+tcTToMQxCOPPMKKFSsAOP/88xk7dmzK/desWcMDDzzA1KlTGT58X8t0Q0MDe/fuTdvc+de//pW5c+eyadMmTjnlFO6//34AbrjhBrp37w7AW2+9xfPPP8+xxx7LSSft+/20YsUKDjjggKybVFetWsXvfvc7Jk6cyKRJk9h///2jz7k77p739+D27dtpaGigT58+eT1PPkSuX7wtW7ZQU1PDJZdckraMyPs2MsjDzDj77LMZN24cZpb2+t96663R+9OnT6dv376ZvQhpF7LqZGxmr8Y83AusAO5y98RrEeTJoEGD/KqrrmrJUwpQUVHBBRdcAITW0frJT37S6Pnhw4czderUlGVE3neRL+T169dz3333AXDOOecwceLEXIcd9cEHH7B06VK6dOnCmDFjGDhwIHv37qW0tDTrBCFb9fX1LF++nD59+tC/f38aGhpYvXo1Q4cOTXrM3r17efLJJ5ss/XHhhReyYsUK5s+fz3e/+11+//vfc/7559O7d2927dpFfX09PXr0YMOGDfzqV7+KHnfUUUfx5ptvRh9PmjSJs846Cwh9mdXU1PDss89SW1sLwE033dTo/7x3795cdtllbN68OToB5oQJEzj11FOpqqri6KOPbnRdFyxYwKuvvtqor1wQZWVlTJ06lXvuuYdRo0YxefJkli9fzvjx43niiSfYsGEDN998M7W1tSxcuJCJEyfy8ccfU1NTwyeffMKwYcPo169fk5nCb7nllmh8Dz/8MB999BE333wze/fupXPnzhnFmE51dTWLFy+O1jKfddZZ1NbWMmjQIA4++OCcniuZ+vp6nn/+eQYOHEiPHj048MAD6datW6N9amtrKSkpaZJELl68mCeeeCJl+fEDFj788EN27txJv379GDhwIAD33nsvGzZsSFrGCSecwLp167j44osxM9yd//iP/wDg+9//Pv/5n//ZaP8f/OAHdOiQbY+L9LZu3Urv3r1b/PNBgknWyTjbBGe4u38Ut22Yu69oRowZU4LTet1yyy2sXbuWefPmMXToUMaNG8eyZcsYPHgw3bp148EHH2T16tVceeWV3H///U2awMaPH8/bb7/N9OnTKS8vZ9OmTdTX17P//vs3+0Mm9tdf7LkgP6PJli9fzs6dO6murmbz5s2cffbZlJaW4u7cfvvtSRdbPe644zj++ON55ZVXmDx5Mjt37myUmKTSq1cvduzYAUD//v1Tfpm0hH//939n7dq11NXVJZ2PKhcuv/xyHnzwwayOTXSdbrrpJhYvXsysWbOYOnVq9P+xsjL0WZrp9Arx771Err32WsrKct+lMTZJiHfDDTdw5513AqFk4cc//nH0ufjH6fTp04etW7dy8skns3v3bt54442sYzYzLrnkEmpraxtN6RHv6quvpm/fvkknc83U7t272bVrF71792bt2rX89re/BeCaa64BQv/vvXv3xt3ZuXMnc+fO5aijjoomilu2bKG0tJSePXuyfft2zIz99tuPhoYG6urqeOihhzj00ENZuHAh48eP5+ijj05Za9XQ0MCcOXMYNmwYAwYMaPTcpk2b6NOnD8888wzHHXdctDZr9+7duDt79+7F3enZsyfV1dWsW7eOQw89lI0bN9KrV69GSfzKlStZsWIFJ554YqNzbNiwgZ49e9KpU6cmtfitQa4TnPnuPiFu2zx3b/bPbjM7A7gHKAXud/efJNtXCU7bMXHiRObNmwdAjx49qK6uzrqsHj16UFpaypgxYzAzjjjiCPr16wfAtm3b6NWrF9XV1VRXVzNgwABqa2tZs2YNa9asYdCgQSl/gZ555pm88sor3HTTTSk/KN2dv/3tb5SXl7N9+3aOO+646P4NDQ3MmjUr6bIZ3bt3Z+fOnVm/fmk9vvvd79KlS5eEz23YsIENGzbQt29f+vfvT01NDXfddVfCfeN94xvfoGPHjtH3dazPPvuM+vr66MzrkW01NTVs2bKFww47DHdn9erVlJSUMGTIkKTNSsVoxowZbNu2jfvvv5/DDjuM448/njVr1jBy5EhKSkrYtGkT//jHPygpKeGTTz7hzDPPpGPHjjz11FMMGjSITz75hPXr12d17mOPPZZVq1axevXqjI897LDDOO6449iwYQMrV66kpKSEefPm0bVrV3bt2hXdb8KECcyfPz/pD5fzzz+fgw8+ODpVSkQk8Yx3ySWXsGTJEnbv3t2oH9w111xDeXl59MdovJKSEg455BCWLVvGV77yFQ444AB27NhB165d2b17N2VlZSxatIj+/fvj7pSWltKrV6+sui+kk5MEx8xGAWOAO4DvxDzVC/iOu49JeGDw8kuBZcCpwFrgLeASd1+caH8lOJJPPXv2jK7ofsUVV7BixQrmzp2r5ESamDJlCs888wzQuPYsFyJfZCUlJVx00UXRZsBzzz232WvXibS0rl27cuSRR3LooYfy/vvvs2XLFhYtWhR9fvDgwZSWllJZWcn27dsZOHAge/bsYciQIezcuZOlS5cyZ86cRj+Sf/jDH+YkwZkCfBH4AvBszFOfAY+5+z8zfrWNy58M/NDdTw8//h6Au/9Xov2V4IiIiLRvyRKcTFcTfwZ4xswmu/v/5Sy6fQ4A1sQ8Xgt8Lg/nERERkSKWUYJjZje6+x3ApWbWZCygu3+rmfEk6vTQqIrJzK4ErgSiPfJFREREYmU6ri7SA6kq5V7ZWwsMiXk8GFgXu4O73wfcB6EmqjzFIcLw4cP56KOP6NatG+eddx5vvvkmH374IQBDhgxhzZo1jfYvLy9n8+bNhQhVCuyQQw5h+fLlLXrO0aNH88EHHzSa5FSkLRgzZgzl5eWMGjWKuro6Zs2axX777ccJJ5zA008/TY8ePTj88MPp1asXnTp1YtOmTfTr14/evXuzceNGPvvsMz788EMWLFiQci6pVrXYppl1INTJ+GTgY0KdjC9190WJ9lcfnLbj0ksv5Q9/+ENOyjrkkEMoLS1l3LhxLF68mEmTJtG/f386derUaORT7PDOoD73uc8xatSolPPQRCxatIj169dzyimnRLfV1dWxYsUKFi5cyLHHHsu9994L7Bv5EBE/MkLapiDTCtTU1LB161b+8Ic/UFNTk1H5N954I127dmX27NksXryYf/3Xf+XOO+/ksMMO47zzzmsy0i8yiqW0tJTq6mq2b9/OkCFDqK6uDjyCK16nTp2oq6vL6tiWcuaZZ0bnFvrBD37Anj17uPvuu3F3rr32Wnr16hXdt66ujo4dO/Lmm28yaNAghgwZwp49e3j33XeZN28eJ598Mi+88ELG8zRBqLP58uXLG3WaDapv375MmjSJmpqa6Mzw+++/P59++mmj/crLy+nVqxcNDQ2sWrWqSTkXX3wxI0eOjE5JcMABBzBixAhmz54d3eeYY46JDt8/99xzoz/Ytm7dGt1+xRVXUF5eHh2NNXnyZBYsWBDt3Dty5Eg2btzIxRdfTJcuXVi3bh2DBw+mvr4eM6N79+7RRGT8+PHMmzePIUOGUFZWlvORVLkaRfVnEiyyGeHuX8guvEbnOAv4OaFh4g+4e9IJGJTgtF7XX389f/7zn/nggw+A0BfB3LlzOfDAAxkwYAD/+Mc/+Otf/wo0nocmYsaMGXz00Uc8/PDD0W0HHXQQF110EV27ds04nj179rB+/XoGDhzYZJKwgQMHsn79es466ywmTZqUcdlBzZ8/n379+jFkSKiSctmyZdERMbG6desWnadiyJAhHHHEEbzxxhts27Yt43XWKioqWLhwYU7ibwvGjBkT/XI54YQTGn2op9O3b182bdoEwNSpU+nXrx/PPfccffr04dhjj6Wuro7evXvT0NDAAw88wMknn8ywYcMyii9+HpySkpImc0CNGzeOKVOmZFRuEA0NDdx2221Nth9//PGMHj06mozPmDGD559/nh07dnDEEUdw2GGHsWLFCmbNmsXhhx8e+Jped9113H333Y22ffnLX6asrIwXX3yRZcuWpS3jxBNPZM2aNRxyyCFs3ryZt956i8rKSqqq9jUilJaWcvPNNweKKaht27bx3nvvceyxx1JbW8sdd9wBhBKpSZMm8f7777N582bGjx/P+vXrmTdvHp07d+aLX/xitIzdu3cnnSiyoaGB1157jUGDBrFr1y5GjBgRncE73p49e1iyZAkdO3bksMMOa/Scu7Nq1SoGDx5MTU0NPXv2jCa927Zto7q6msGDB0f3feONNzjiiCPo1asXt912Gw0NDY0mugRYvXo1AwcOjCYhu3btYu3atYwYMQIgOrK0Z8/Ws3hBrhKc41M97+4tuiCREpyWdcstt0QnCuvSpQs33ngjjz76aDSJibj88suji3P+/e9/59BDD200HX7EggULGDFiBF26dGHmzJls2rSJa6+9lm7duiWdWyQXli1bRrdu3aJ/+IXi7syZM4ehQ4fSq1cvNm/ezIABAwL9ulmwYEHKic/OPfdcJkyYkPC5IHOiXH755ezYsYN//vOffOlLX6Jnz5786Ec/Srp/pCYj8gV+/fXXs3TpUp577jmmT5/OzJkzufTSS+nXrx/77bdfownnOnbs2KSZ5dprr6Vz587RyedGjhzJlClTePPNN3n99dcB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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "F0 sonification (mono)\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "F0 sonification superimposed with original recording (mono)\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "F0 sonification (right channel), original recording (left channel)\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load audio and read F0-trajectory annotations\n", "fn_wav = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_F0_Weber_Freischuetz.wav')\n", "fn_traj = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_F0_Weber_Freischuetz.csv')\n", "Fs = 22050\n", "x, Fs = librosa.load(fn_wav, sr=Fs)\n", "traj_df = libfmp.b.read_csv(fn_traj)\n", "traj = traj_df.values\n", "\n", "# Plot waveform and F0-trajectory annotations\n", "fig, ax = plt.subplots(2, 1, gridspec_kw={'height_ratios': [1, 2]}, sharex=True, figsize=(8, 3.5))\n", "libfmp.b.plot_signal(x, Fs, ax=ax[0], xlabel='')\n", "ax[0].set_ylim((-1,1))\n", "ax[0].set_ylabel('Amplitude')\n", "traj_plot = traj[traj[:, 1] > 0]\n", "ax[1].plot(traj_plot[:, 0], traj_plot[:, 1], color='r', markersize=4, marker='.', linestyle='')\n", "ax[1].set_ylim((55, 880))\n", "ax[1].set_yticks([55, 220, 440, 660, 880])\n", "ax[1].set_xlim((0, len(x) / Fs))\n", "ax[1].set_ylabel('Frequency (Hertz)')\n", "ax[1].set_xlabel('Time (seconds)')\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "# Sonify F0 trajectory\n", "x_traj_mono = libfmp.c8.sonify_trajectory_with_sinusoid(traj, len(x), Fs, smooth_len=11, amplitude=0.6)\n", "# left: x, right: sonification\n", "x_traj_stereo = np.vstack((x.reshape(1, -1), x_traj_mono.reshape(1, -1))) \n", "print('F0 sonification (mono)')\n", "ipd.display(ipd.Audio(x_traj_mono, rate=Fs))\n", "print('F0 sonification superimposed with original recording (mono)')\n", "ipd.display(ipd.Audio( (x_traj_mono+x) / 2, rate=Fs))\n", "print('F0 sonification (right channel), original recording (left channel)')\n", "ipd.display(ipd.Audio(x_traj_stereo, rate=Fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sonification of Pitch- and Chroma-Based Representations\n", "\n", "In our third scenario, we introduce some functions for sonifying pitch- and chroma-based information. As an example, we consider an excerpt of the song \"Frühlingstraum\" (\"Dream of Spring\"), which is the eleventh song of the song cycle \"Winterreise\" (D. 911, \"Winter Journey\") for voice and piano by Franz Schubert. \n", "\n", "\"FMP_C8_F10a\"\n", "\n", "
\n", "\n", "\n", "\n", "We start with a symbolic score representation (given as [CSV file](../C1/C1S2_CSV.html)), where each note is specified by a start, duration, pitch, and other parameters. Furthermore, the start and duration parameters (given in seconds) are aligned to run synchronously to the music recording. In the following code cell, we visualize the synchronized score information in form of a [piano roll representation](../C1/C1S2_PianoRoll.html). Furthermore, we apply a function that uses a simple **sinusoidal model (with harmonics)** to sonify the symbolic note information. The result is provided as mono signal as well as stereo signal (with the sonification in one and the original recording in the other channel)." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:27.656560Z", "iopub.status.busy": "2024-02-15T09:01:27.656338Z", "iopub.status.idle": "2024-02-15T09:01:28.172496Z", "shell.execute_reply": "2024-02-15T09:01:28.171819Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of piano-roll representation (mono):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of piano-roll representation and original audio (stereo):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load audio and read in pitch annotations\n", "fn_wav = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_Pitch_Schubert_D911-11_SC06.wav')\n", "fn_ann = os.path.join('..', 'data', 'B', 'FMP_B_Sonify_Pitch_Schubert_D911-11_SC06.csv')\n", "Fs = 22050\n", "x, Fs = librosa.load(fn_wav, sr=Fs)\n", "x_dur = len(x) / Fs\n", "note_list_df = pd.read_csv(fn_ann, sep=';')\n", "#ipd.display(ipd.HTML(note_list_df[0:10].to_html()))\n", "note_list = [[start, dur, pitch, vel, ins] for i, \n", " (start, dur, pitch, vel, ins) in note_list_df.iterrows()]\n", "# note_list = libfmp.c1.csv_to_list(fn_ann)\n", "\n", "# Piano-roll representation from annotations\n", "H = 512\n", "num_frames = int(len(x) / H)\n", "Fs_frame = Fs / H\n", "X_ann, F_coef_MIDI = libfmp.b.list_to_pitch_activations(note_list, num_frames, Fs_frame)\n", "title = 'Piano-roll representation (Fs_frame = %.3f)' % Fs_frame\n", "libfmp.b.plot_matrix(X_ann, Fs=Fs_frame, F_coef=F_coef_MIDI, ylabel='MIDI pitch number',\n", " title=title, figsize=(8, 4))\n", "plt.ylim([36, 84])\n", "plt.show()\n", "\n", "# Sonification\n", "harmonics = [1, 1/2, 1/3, 1/4, 1/5]\n", "fading_msec = 0.5\n", "x_pitch_ann, x_pitch_ann_stereo = \\\n", " libfmp.b.sonify_pitch_activations_with_signal(X_ann, x, Fs_frame, Fs,\n", " fading_msec=fading_msec, \n", " harmonics_weights=harmonics)\n", "print('Sonification of piano-roll representation (mono):')\n", "ipd.display(ipd.Audio(x_pitch_ann, rate=Fs) )\n", "print('Sonification of piano-roll representation and original audio (stereo):')\n", "ipd.display(ipd.Audio(x_pitch_ann_stereo, rate=Fs) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we introduce a sonification of [chroma-based representations](../C3/C3S1_SpecLogFreq-Chromagram.html), where pitch bands that spectrally differ by one or several octaves are combined to from a single chroma band. Such representations, which play an important role throughout the FMP notebooks, capture tonal information related to harmony and melody while showing a high degree of invariance with respect to timbre and instrumentation. For the sonification, we use [Shepard tones](../C1/C1S1_ChromaShepard.html), which are suitably weighted superpositions of sinusoids separated by octaves. Intuitively, Shepard tones can be seen as the acoustic analog to the chroma values. In the following code cell, we generate a chroma-based representation of our pitch-based piano roll representation. The sonfication result is again provided as mono and stereo signal. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:28.185210Z", "iopub.status.busy": "2024-02-15T09:01:28.184971Z", "iopub.status.idle": "2024-02-15T09:01:28.695200Z", "shell.execute_reply": "2024-02-15T09:01:28.694393Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of chroma-based respresentation (mono):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of chroma-based respresentation and original audio (stereo):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Chromgram from annotations\n", "H = 512\n", "num_frames = int(len(x) / H)\n", "Fs_frame = Fs / H\n", "C_ann = libfmp.b.list_to_chromagram(note_list, num_frames, Fs_frame)\n", "title = 'Annotation chromagram (Fs_frame = %.3f)' % Fs_frame\n", "libfmp.b.plot_chromagram(C_ann, Fs=Fs_frame, title=title, figsize=(8, 2.5))\n", "plt.show()\n", "\n", "# Sonification\n", "x_chroma_ann, x_chroma_ann_stereo = libfmp.b.sonify_chromagram_with_signal(C_ann, x, Fs_frame, Fs)\n", "print('Sonification of chroma-based respresentation (mono):')\n", "ipd.display(ipd.Audio(x_chroma_ann, rate=Fs))\n", "print('Sonification of chroma-based respresentation and original audio (stereo):')\n", "ipd.display(ipd.Audio(x_chroma_ann_stereo, rate=Fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far, we have sonified information that was derived from annotations. Similarly, one can also sonify information that has been extracted from the music recording. As an example, we convert the music recording into a [chroma-based feature representation](../C3/C3S1_SpecLogFreq-Chromagram.html) (also called [chromagram](../C3/C3S1_SpecLogFreq-Chromagram.html)). This time–chorma representations indicates the signal's local energy distribution across the twelve chroma bands. In the following code cell, we compute an audio chromagram and provide a visualization as well as sonification of the result. Note that, opposed to the symbolic chromagram derived from explicit note information, the audio chromgram shows a lot of noise and fluctuations reflecting the properties of the underlying music recording (e.g., overtones, transients, vibrato, and so on)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:28.708802Z", "iopub.status.busy": "2024-02-15T09:01:28.708538Z", "iopub.status.idle": "2024-02-15T09:01:29.405270Z", "shell.execute_reply": "2024-02-15T09:01:29.404646Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of audio chromagram (mono):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of audio chromagram and audio (stereo):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Log-frequency spectrogram from audio recording\n", "N = 2048\n", "H = 1024\n", "Fs_frame = Fs / H\n", "C_wav = librosa.feature.chroma_stft(y=x, sr=Fs, tuning=0, norm=2, hop_length=H, n_fft=N)\n", "# C_wav = librosa.feature.chroma_cqt(y=x, sr=Fs, hop_length=H, norm=2) \n", "num_frames = C_wav.shape[1]\n", "\n", "title = 'Audio chromagram (Fs_frame = %.3f)' % Fs_frame\n", "libfmp.b.plot_chromagram(C_wav, Fs=Fs_frame, title=title, figsize=(8, 2.5))\n", "plt.show()\n", "x_chroma_wav, x_chroma_wav_stereo = libfmp.b.sonify_chromagram_with_signal(C_wav, x, Fs_frame, Fs)\n", "print('Sonification of audio chromagram (mono):')\n", "ipd.display(ipd.Audio(x_chroma_wav, rate=Fs) )\n", "print('Sonification of audio chromagram and audio (stereo):')\n", "ipd.display(ipd.Audio(x_chroma_wav_stereo, rate=Fs))\n", "#libfmp.b.audio_player_list([x_chroma_wav, x_chroma_wav_stereo], [Fs, Fs], width=300, height=40, \n", "# columns=['Chroma sonification (mono)', 'Chroma sonification and wav (stereo)'], column_align='left')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similar to the case of the chromagram, one may derive a pitch-based feature representation directly from the music recordings. Such representations are a special case of [log-frequency spectrograms](../C3/C3S1_SpecLogFreq-Chromagram.html), where the frequency axis is logarithmically spaced to from a pitch-based axis. This representation can be sonified similar to the piano-roll representation (using a sinusoidal model with harmonics), as demonstrated by the next code cell." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T09:01:29.416618Z", "iopub.status.busy": "2024-02-15T09:01:29.416387Z", "iopub.status.idle": "2024-02-15T09:01:31.812868Z", "shell.execute_reply": "2024-02-15T09:01:31.812105Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of log-frequency spectrogram (mono):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Sonification of log-frequency spectrogram and original audio (stereo):\n" ] }, { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Log-frequency spectrogrm from audio recording\n", "H = 1024\n", "X_CQT = np.abs(librosa.cqt(y=x, sr=Fs, hop_length=H, norm=2))\n", "num_frames = X_CQT.shape[1]\n", "X_wav = np.zeros((128, num_frames))\n", "X_wav[23:23+84, :] = X_CQT\n", "#X = libfmp.c3.normalize_feature_sequence(X, norm='2')\n", "Fs_frame = Fs / H\n", "title='Log-frequency spectrogram (Fs_frame = %.3f)' % Fs_frame\n", "libfmp.b.plot_matrix(X_wav, Fs=Fs_frame, ylabel='MIDI pitch number', \n", " title=title, figsize=(8, 4))\n", "plt.ylim([36, 84])\n", "plt.show()\n", "\n", "# Sonification\n", "harmonics = [1, 1/2, 1/3, 1/4, 1/5]\n", "fading_msec = 0.5\n", "x_pitch_wav, x_pitch_wav_stereo = \\\n", " libfmp.b.sonify_pitch_activations_with_signal(X_wav, x, Fs_frame, Fs, \n", " fading_msec=fading_msec, \n", " harmonics_weights=harmonics)\n", "print('Sonification of log-frequency spectrogram (mono):')\n", "ipd.display(ipd.Audio(x_pitch_wav, rate=Fs) )\n", "print('Sonification of log-frequency spectrogram and original audio (stereo):')\n", "ipd.display(ipd.Audio(x_pitch_wav_stereo, rate=Fs))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Acknowledgment: This notebook was created by Meinard Müller and Tim Zunner.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
\"C0\"\"C1\"\"C2\"\"C3\"\"C4\"\"C5\"\"C6\"\"C7\"\"C8\"
" ] } ], "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.8.16" } }, "nbformat": 4, "nbformat_minor": 1 }