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

SSM: Synthetic Generation

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

\n", "In this notebook, we show how one may synthetically generate self-similarity matrices from structure annotations. In particular, based on the notions introduced in Section 4.2.1 of [Müller, FMP, Springer 2015], we consider SSMs with path and block structures. \n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Annotations\n", "\n", "In previous notebooks, we have looked at the [Hungarian Dance No. 5 by Johannes Brahms](../C4/C4S1_MusicStructureGeneral.html), which has the musical structure $A_1A_2B_1B_2CA_3B_3B_4D$. Starting with an audio recording of the piece, the goal is not only to derive a **symbolic** description of the musical structure, but also to determine the exact time positions when the structural parts start and end. Let us have a look at the Ormandy recording of the Brahms piece. \n", "\n", "\"FMP_C4_F07a.png\"\n", "\n", "
\n", "\n", "\n", "In the following, we read in and visualize a structural annotation of this recording (see the [FMP notebook on annotations](../B/B_Annotations.html) and the [FMP notebook on music structure analysis](../C4/C4S1_MusicStructureGeneral.html) for more details). In this example, each musical part corresponds to a tuple specifying the start time and the end time (given in seconds) as well as the label for the part." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:51:27.274668Z", "iopub.status.busy": "2024-02-15T08:51:27.274406Z", "iopub.status.idle": "2024-02-15T08:51:29.956147Z", "shell.execute_reply": "2024-02-15T08:51:29.955503Z" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
startendlabel
00.001.01
11.0122.11A1
222.1143.06A2
343.0669.42B1
469.4289.57B2
589.57131.64C
6131.64150.84A3
7150.84176.96B3
8176.96196.90B4
9196.90199.64
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Annotations after sampling rate conversion and removal of digits:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import os, sys, librosa\n", "from matplotlib import pyplot as plt\n", "import scipy.ndimage\n", "import IPython.display as ipd\n", "import pandas as pd\n", "\n", "sys.path.append('..')\n", "import libfmp.b\n", "import libfmp.c4\n", "%matplotlib inline\n", "\n", "# Annotation\n", "filename = 'FMP_C4_Audio_Brahms_HungarianDances-05_Ormandy.csv'\n", "fn_ann = os.path.join('..', 'data', 'C4', filename)\n", "df = libfmp.b.read_csv(fn_ann)\n", "ipd.display(ipd.HTML(df.to_html()))\n", "\n", "ann, color_ann = libfmp.c4.read_structure_annotation(fn_ann, fn_ann_color=filename)\n", "fig, ax = libfmp.b.plot_segments(ann, colors=color_ann, figsize=(6, 1))\n", "plt.xlabel('Time (seconds)');\n", "plt.show()\n", "\n", "print('Annotations after sampling rate conversion and removal of digits:')\n", "\n", "ann_frames, color_ann = libfmp.c4.read_structure_annotation(fn_ann, fn_ann_color=filename, \n", " Fs=0.5, remove_digits=True, index=True)\n", "fig, ax = libfmp.b.plot_segments(ann_frames, colors=color_ann, figsize=(6, 1))\n", "plt.xlabel('Time (frames)');\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generating SMMs from Annotations\n", "\n", "We now introduce a function that generates an SSM from a given time-discrete annotation. For each label one can specify if corresponding sections share a path relation, a block relation, or both. Furthermore, one can apply a Gaussian smoothing kernel to soften the structural elements. Finally, there are various settings to distort the SSM including the superposition with Gaussian noise. We continue with our Brahms example, where we generate SSMs with different parameter setting. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:51:29.959180Z", "iopub.status.busy": "2024-02-15T08:51:29.958911Z", "iopub.status.idle": "2024-02-15T08:51:30.389760Z", "shell.execute_reply": "2024-02-15T08:51:30.389129Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def generate_ssm_from_annotation(ann, label_ann=None, score_path=1.0, score_block=0.5, main_diagonal=True,\n", " smooth_sigma=0.0, noise_power=0.0):\n", " \"\"\"Generation of a SSM\n", "\n", " Notebook: C4/C4S2_SSM-Synthetic.ipynb\n", "\n", " Args:\n", " ann (list): Description of sections (see explanation above)\n", " label_ann (dict): Specification of property (path, block relation) (Default value = None)\n", " score_path (float): SSM values for occurring paths (Default value = 1.0)\n", " score_block (float): SSM values of blocks covering the same labels (Default value = 0.5)\n", " main_diagonal (bool): True if a filled main diagonal should be enforced (Default value = True)\n", " smooth_sigma (float): Standard deviation of a Gaussian smoothing filter.\n", " filter length is 4*smooth_sigma (Default value = 0.0)\n", " noise_power (float): Variance of additive white Gaussian noise (Default value = 0.0)\n", "\n", " Returns:\n", " S (np.ndarray): Generated SSM\n", " \"\"\"\n", " N = ann[-1][1] + 1\n", " S = np.zeros((N, N))\n", "\n", " if label_ann is None:\n", " all_labels = [s[2] for s in ann]\n", " labels = list(set(all_labels))\n", " label_ann = {l: [True, True] for l in labels}\n", "\n", " for s in ann:\n", " for s2 in ann:\n", " if s[2] == s2[2]:\n", " if (label_ann[s[2]])[1]:\n", " S[s[0]:s[1]+1, s2[0]:s2[1]+1] = score_block\n", "\n", " if (label_ann[s[2]])[0]:\n", " length_1 = s[1] - s[0] + 1\n", " length_2 = s2[1] - s2[0] + 1\n", "\n", " if length_1 >= length_2:\n", " scale_fac = length_2 / length_1\n", " for i in range(s[1] - s[0] + 1):\n", " S[s[0]+i, s2[0]+int(i*scale_fac)] = score_path\n", " else:\n", " scale_fac = length_1 / length_2\n", " for i in range(s2[1] - s2[0] + 1):\n", " S[s[0]+int(i*scale_fac), s2[0]+i] = score_path\n", " if main_diagonal:\n", " for i in range(N):\n", " S[i, i] = score_path\n", " if smooth_sigma > 0:\n", " S = scipy.ndimage.gaussian_filter(S, smooth_sigma)\n", " if noise_power > 0:\n", " S = S + np.sqrt(noise_power) * np.random.randn(S.shape[0], S.shape[1])\n", " return S\n", "\n", "figsize = (12,3.5)\n", "fig, ax = plt.subplots(1, 3, figsize=figsize)\n", "\n", "S = generate_ssm_from_annotation(ann_frames, score_path=1, score_block=0.3)\n", "libfmp.b.plot_matrix(S, ax=[ax[0]], xlabel='Time (frames)', ylabel='Time (frames)');\n", "\n", "label_ann = {'A':[True, False], 'B':[True, False], 'C':[False, True], '' : [True, False]}\n", "S = generate_ssm_from_annotation(ann_frames, label_ann, score_path=1, score_block=0.3, smooth_sigma=1)\n", "libfmp.b.plot_matrix(S, ax=[ax[1]], xlabel='Time (frames)', ylabel='Time (frames)');\n", "\n", "S = generate_ssm_from_annotation(ann_frames, score_path=1, score_block=0.2, smooth_sigma=2, noise_power=0.001)\n", "libfmp.b.plot_matrix(S, ax=[ax[2]], xlabel='Time (frames)', ylabel='Time (frames)');\n", "plt.tight_layout()\n", "plt.show() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Examples\n", "\n", "We now consider some examples that show how the function for generating SSMs can be used to gain a deeper understanding of the relation between musical structures ans SSMs. \n", "\n", "\n", "* Following Exercise 4.9a of [Müller, FMP, Springer 2015], we consider as first example a piece of music having the musical structure $A_1B_1B_2A_2A_3$, where we assume that corresponding parts are repeated in exactly the same way. Furthermore, assume that the $A$-part and $B$-part segments are completely unrelated to each other and that a $B$-part segment has exactly twice the length of an $A$-part segment.\n", "\n", "* Following Exercise 4.9b of [Müller, FMP, Springer 2015], we consider as second example a piece having the musical structure $A_1A_2A_3A_4$, where the four parts are repeated with increasing tempo. In particular, we assume that $A_1$ lasts $20$ seconds, $A_2$ lasts $15$ seconds, $A_3$ lasts $10$ seconds, and $A_4$ lasts $5$ seconds.\n", "\n", "* Following Figure 4.27 of [Müller, FMP, Springer 2015], we consider as third example a piece having the musical structure $A_1A_2B_1B_2A_3A_4B_3B_4CA_5A_6$, where the $C$ part is homogeneous and has twice the length of the $A$ and $B$ parts." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-02-15T08:51:30.393337Z", "iopub.status.busy": "2024-02-15T08:51:30.393137Z", "iopub.status.idle": "2024-02-15T08:51:31.149162Z", "shell.execute_reply": "2024-02-15T08:51:31.148612Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "color_ann = {'A': [1, 0, 0, 0.2], 'B': [0, 1, 0, 0.2], 'C': [0, 0, 1, 0.2], '': [1, 1, 1, 0.2]}\n", "\n", "figsize = (12,3.5)\n", "fig, ax = plt.subplots(1, 3, figsize=figsize)\n", "\n", "ann_1 = [[0, 9, 'A'], [10, 29, 'B'], [30, 49, 'B'], [50, 59, 'A'], [60, 69, 'A']]\n", "S = generate_ssm_from_annotation(ann_1, score_path=1, score_block=0)\n", "fig_im, ax_im, im = libfmp.b.plot_matrix(S, ax=[ax[0]], xlabel='', ylabel='', title=r'Example: $A_1B_1B_2A_2A_3$');\n", "libfmp.b.plot_segments_overlay(ann_1, ax=ax_im[0],edgecolor='k',\n", " print_labels=True, colors = color_ann, alpha=0.05)\n", "#libfmp.b.plot_segments_overlay(ann, ax=ax_im[0], direction='vertical', edgecolor='k', colors = color_ann, alpha=0.05)\n", "\n", "ann_2 = [[0, 19, 'A'], [20, 34, 'A'], [35, 44, 'A'], [45, 49, 'A']]\n", "S = generate_ssm_from_annotation(ann_2, score_path=1, score_block=0)\n", "fig_im, ax_im, im = libfmp.b.plot_matrix(S, ax=[ax[1]], xlabel='', ylabel='', title=r'Example: $A_1A_2A_3A_4$');\n", "libfmp.b.plot_segments_overlay(ann_2, ax=ax_im[0],edgecolor='k', \n", " print_labels=True, colors = color_ann, alpha=0.05)\n", "libfmp.b.plot_segments_overlay(ann_2, ax=ax_im[0], direction='vertical', edgecolor='k', \n", " print_labels=False, colors = color_ann, alpha=0.05)\n", "\n", "\n", "ann_3 = [[0, 9, 'A'], [10, 19, 'A'], [20, 29, 'B'], [30, 39, 'B'],\n", " [40, 49, 'A'], [50, 59, 'A'], [60, 69, 'B'], [70, 79, 'B'],\n", " [80, 99, 'C'], [100, 109, 'A'], [110, 119, 'A']]\n", "label_ann_3 = {'A':[True, False], 'B':[True, False], 'C':[False, True]}\n", "S = generate_ssm_from_annotation(ann_3, label_ann_3, score_path=1, score_block=0.3)\n", "fig_im, ax_im, im = libfmp.b.plot_matrix(S, ax=[ax[2]], xlabel='', ylabel='', title=r'Example: $A_1A_2B_1B_2A_3A_4B_3B_4CA_5A_6$');\n", "libfmp.b.plot_segments_overlay(ann_3, ax=ax_im[0],edgecolor='k', \n", " print_labels=True, colors = color_ann, alpha=0.05)\n", "\n", "plt.tight_layout()\n", "plt.show() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Further Notes\n", "\n", "Synthetically generating and visualizing self-similarity matrices is a very instructive way for gaining a deeper understanding of structural properties of these matrices and their relation to musical annotations. Furthermore, **synthetic SSMs** are useful for debugging and testing automated procedures for music structure analysis. However, synthetic SSMs should only be used as **sanity check** and should not replace the evaluation based on real music examples. In practice, SSMs computed from music and audio representations are typically far from being ideal. First, two sections annotated by a human with the same label (i.e., sections that correspond to the same part) may differ substantially on the musical level (e.g., variations on the note level), the acoustic level (e.g., instrumentation, dynamics), and temporal level (e.g., tempo changes, pauses). This typically leads to **fragmented, distorted, and noisy path and block structures**. Furthermore, humans often do not agree on the musical structure of a given piece, and there may exist alternative valid annotations. Finally, SSMs are typically computed on the basis of [feature representations](../C4/C4S2_SSM.html) that are extracted from music recordings. The type of feature representation has a significant influence on the structural properties of the resulting SSM. In particular, one often finds **combinations of path-like and block-like structures** expressing various similarity relations between musical segments at the same time. In summary, to understand the benefits and limitations of a given music structure analysis approach one needs to consider [**real SSMs**](../C4/C4S2_SSM.html) that have been derived from music and audio representations. " ] }, { "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": { "anaconda-cloud": {}, "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 }