{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Function definition and simple test data generation\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib widget\n", "import subprocess\n", "import os\n", "import time\n", "from enum import Enum\n", "import multiprocessing\n", "\n", "import ipywidgets as widgets\n", "import numpy as np\n", "from scipy import signal\n", "import soundfile as sf\n", "from helper import setup_timeplot, setup_freqplot, plot_freqdomain, plot_timedomain\n", "\n", "# Chirp data generate\n", "n=2000 # number of samples to use for the chirp\n", "fs_chirp=20000 # The sampling rate for the chrip\n", "f0=100# the start frequency in Hz for the chirp\n", "f1=1000 # the stop frequency of the chirp\n", "t1=n/fs_chirp # the total length of the chirp in s\n", "\n", "f_noise_hz=2000\n", "disturber_amplitude=0.2\n", "chirp_disturber_full_amp=0.6\n", "#shift_disturber=64\n", "#shift_signal=64\n", "\n", "t = np.linspace(0, t1, n)\n", "# generate a chrip and scale to int16 (1 bit for sign)\n", "y_signal_chirp = signal.chirp(t, f0=f0, f1=f1, t1=t1, method='linear')\n", "y_signal_chirp = (chirp_disturber_full_amp-disturber_amplitude)*y_signal_chirp*(2**(15-1))\n", "\n", "# Add some a disturber to the chirp\n", "y_sine = np.sin(2*np.pi*f_noise_hz*t) * disturber_amplitude* (2**(15-1))\n", "y_noise = np.random.normal(0, disturber_amplitude, n) * (2**(15-1))\n", "\n", "y_signal_disturber = y_signal_chirp + y_sine\n", "\n", "# shift the signals relative to each other relative to the signal\n", "#y_disturber = np.append([0]* shift_disturber, y_disturber[:-1*shift_disturber])\n", "#y_signal_disturber = np.append([0]* shift_signal, y_signal_disturber[:-1*shift_signal])\n", "\n", "#y_disturber = disturber_amplitude*np.sin(2*np.pi*f_noise_hz*t + np.pi)* (2**(15-1))\n", "\n", "y_signal_disturber = y_signal_disturber.astype(int)\n", "y_sine = y_sine.astype(int)\n", "\n", "# Save the data to a file - this allows for usage of the the debugger\n", "np.savetxt('testdata/input/chirp.txt', y_signal_chirp, fmt='%d')\n", "np.savetxt('testdata/input/chirp_disturber.txt', y_signal_disturber, fmt='%d', delimiter=\"\\n\")\n", "np.savetxt('testdata/input/disturber.txt', y_sine, fmt='%d', delimiter=\"\\n\")\n", "\n", "con = np.stack((y_signal_disturber.astype(np.int16), y_sine.astype(np.int16)), axis=1)\n", "sf.write('testdata/input/chirp_sine.wav', con, fs_chirp)\n", "con = np.stack(((y_signal_chirp + y_noise).astype(np.int16), y_noise.astype(np.int16)), axis=1)\n", "sf.write('testdata/input/chirp_noise.wav', con, fs_chirp)\n", "con = np.stack(((y_sine + y_noise).astype(np.int16), y_noise.astype(np.int16)), axis=1)\n", "sf.write('testdata/input/sine_noise.wav', con, fs_chirp)\n", "\n", "class OutputMode(Enum): \n", " OUTPUT_MODE_C_SENSOR = 0\n", " OUTPUT_MODE_ACC_SENSOR = 1\n", " OUTPUT_MODE_FIR_LMS = 2\n", " OUTPUT_MODE_FIR = 3\n", "\n", "def load_wav(filename):\n", " y, fs = sf.read(filename, dtype='int16')\n", " return fs, y.T\n", "\n", "def save_wav(filename, fs, cSensor, accSensor, output):\n", " con = np.stack((cSensor, accSensor, output), axis=1)\n", " sf.write(filename, con, fs)\n", "\n", "def compile(target='./build/cSensor_processing_single'):\n", " # Build\n", " ret = subprocess.call(['make', '-B', target])# , \"compile_cmd_opt=-O2\"\n", " assert ret == 0, \"build failed\"\n", "\n", "def pipe_input_output(cSensor, accSensor, target='./build/cSensor_processing_single', output_mode = OutputMode.OUTPUT_MODE_FIR_LMS.value, timeout=10):\n", " # Run\n", " # open a pipe\n", " process = subprocess.Popen(\n", " [\n", " target,\n", " str(output_mode),\n", " \"1\", #pipe_input true]\n", " \"1\" # return coeffs\n", " ], \n", " stdin=subprocess.PIPE, \n", " stdout=subprocess.PIPE, \n", " universal_newlines=True, \n", " #close_fds=False,\n", " )\n", "\n", " # check that the data is the same length\n", " assert len(cSensor) == len(accSensor)\n", "\n", " data=\"\".join(\n", " [f\"{d1}\\n{d2}\\n\"for (d1,d2) in zip(cSensor, accSensor)]\n", " )\n", "\n", " from io import StringIO\n", " import pandas as pd\n", "\n", " c_output = process.communicate(input=data, timeout=timeout)\n", " \n", " out = StringIO(c_output[0])\n", "\n", " df = pd.read_csv(out, sep=\",\", dtype=str)\n", "\n", " # drop empty last column\n", " df = df.iloc[:,:-1].astype(int)\n", "\n", " names= [\"out\"] + [f\"c{i}\" for i in range(df.shape[1] - 1)]\n", " #name the columns \n", " df = df.set_axis(names, axis=1)\n", " \n", " # send the data to the process and get the result\n", " # check return code\n", " assert process.returncode == 0, \"run failed\"\n", "\n", " return df\n", " \n", "def load_process_save(file, target, output_mode):\n", " start=time.time()\n", " base_dir=\"./testdata\"\n", " fs, data = load_wav(f\"{base_dir}/input/{file}\")\n", "\n", " # spawn status text\n", " progress_name=file[file.rfind(\"/\")+1: file.rfind(\".\")]\n", " text = widgets.Label(value=progress_name)\n", " text.value += \", Sampling rate: \" + str(fs)\n", " display(text)\n", "\n", " # process the data and save\n", " df=pipe_input_output(data[1], data[0], target=target, output_mode=output_mode)\n", " save_wav(f\"{base_dir}/output/{file}\", fs, data[0], data[1], df[\"out\"][:len(data[0])])\n", "\n", " # finish status text\n", " text.value+= f\", finished after {round((time.time()-start)/60, 1)} min\\n\"\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Compile and run" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "ename": "AssertionError", "evalue": "build failed", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAssertionError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[3], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m build_target\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m./build/cSensor_processing_single\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 2\u001b[0m output_mode \u001b[38;5;241m=\u001b[39m OutputMode\u001b[38;5;241m.\u001b[39mOUTPUT_MODE_FIR\u001b[38;5;241m.\u001b[39mvalue\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;43mcompile\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mtarget\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbuild_target\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# select the desired data\u001b[39;00m\n\u001b[0;32m 7\u001b[0m use_chirp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n", "Cell \u001b[1;32mIn[2], line 76\u001b[0m, in \u001b[0;36mcompile\u001b[1;34m(target)\u001b[0m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcompile\u001b[39m(target\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m./build/cSensor_processing_single\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m 74\u001b[0m \u001b[38;5;66;03m# Build\u001b[39;00m\n\u001b[0;32m 75\u001b[0m ret \u001b[38;5;241m=\u001b[39m subprocess\u001b[38;5;241m.\u001b[39mcall([\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmake\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-B\u001b[39m\u001b[38;5;124m'\u001b[39m, target])\u001b[38;5;66;03m# , \"compile_cmd_opt=-O2\"\u001b[39;00m\n\u001b[1;32m---> 76\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m ret \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbuild failed\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", "\u001b[1;31mAssertionError\u001b[0m: build failed" ] } ], "source": [ "\n", "build_target='./build/cSensor_processing_single'\n", "output_mode = OutputMode.OUTPUT_MODE_FIR.value\n", "\n", "compile(target=build_target)\n", "\n", "# select the desired data\n", "use_chirp = True\n", "plot_coeffs=True\n", "if use_chirp: # Rather trivial input data in form of a chirp with sine as a disturber\n", " cSensor= y_signal_disturber\n", " accSensor= y_sine\n", " df=pipe_input_output(cSensor, accSensor, target=build_target, output_mode=output_mode)\n", " setup_timeplot(plot_coeffs=plot_coeffs)\n", " #setup_freqplot()\n", " if plot_coeffs:\n", " coeffs=df.iloc[:, 1:]\n", " else: \n", " coeffs=None\n", " plot_timedomain(cSensor, accSensor, df[\"out\"], coeffs=coeffs)\n", " #plot_freqdomain(fs_chirp, cSensor, accSensor, output)\n", "else:\n", " single_file=False\n", "\n", " input_dir=\"./testdata/input\"\n", " output_dir=\"./testdata/output\"\n", " os.makedirs(output_dir, exist_ok=True)\n", "\n", " if single_file:\n", " file = \"breathing_peak_016g_external_Speaker_80dBSPL_PDM.wav\"\n", " #file = \".1kHz_peak_1g_external_Speaker_0dBSPL_PDM.wav\" \n", " load_process_save(file, build_target, output_mode)\n", "\n", " else:# all files\n", " wav_files = [file for file in os.listdir(input_dir) if file.endswith(\".wav\")]\n", " # process files in parallel \n", " def calc(file):\n", " load_process_save(file, build_target, output_mode)\n", "\n", " num_processes = int(multiprocessing.cpu_count()/2)\n", " pool = multiprocessing.Pool(processes=num_processes)\n", "\n", " pool.map(calc, wav_files)\n", " pool.close()\n", " pool.join()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plot the generated data" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dfbccdb3271643b0ba9bdb1b86fbff5b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dropdown(description='Select a file:', options=('1kHz_peak_1g_external_Speaker_0dBSPL_PDM.wav', 'breathing_pea…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "691f1f6e69f947b2a5ef5d241bfcc18e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Checkbox(value=True, description='Is APx data')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "08efe8e78f6d4fe58304828923f3704c", "version_major": 2, "version_minor": 0 }, "image/png": "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65MkSZIzzzwzmTFjRq7+4YcfTnr06JF897vfTZ5//vlk9uzZSc+ePZOnn346V/Od73wnKSkpSX73u98lTz31VPKlL30pGTFiRPLWW291+vygvdf41q1bky9+8YvJgQcemCxdurTV+/aWLVu6ZI58uHXE+3iap+SwJwQmkLJ27dqkuro66devX1JUVJRMnjw5Wb9+fW7/8uXLk4hI7rvvvty2t956KznnnHOS/fffP+nTp09y4oknJqtXr97pOQQmdKWOWOOzZ89OImKHNnz48E6cGR9m3//+95Nhw4YlBQUFybhx45JHH300t2/8+PHJpEmTWtX/6le/Sj72sY8lBQUFySc+8Ynk7rvvbrW/paUlufLKK5PS0tKksLAwmTBhQrJs2bLOmAq0qT3X+Pb3+bbau9/7oTO19/t4msCEPZFJkv+9mQIAAAAAEeEeJgAAAAA7EJgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKT26egD7ipaWlli1alXst99+kclkuno4AAAAwF5IkiTWr18fZWVlkZe3B9eLJF3kpptuSoYPH54UFhYm48aNS+rq6nZZ/6tf/So55JBDksLCwuSwww5L7r777lb7J02alEREq1ZVVfW+x7Ny5cod+muapmmapmmapmma9sFuK1eu3KPcokuuMLn99ttj+vTpMW/evCgvL4+5c+dGVVVVLFu2LAYPHrxD/SOPPBLV1dUxZ86c+MIXvhC33nprTJw4MZYsWRKHHXZYru64446Ln/3sZ7m/CwsL3/eY9ttvv4iIWLlyZRQVFe3F7AAAAICu1tTUFEOHDs193t9dmSRJknYe03sqLy+PT33qU3HTTTdFxDtfhxk6dGicd955MWPGjB3qTz311Ni4cWPcdddduW1HHXVUjBkzJubNmxcREWeffXY0NjbGHXfcsUdjampqiuLi4li3bp3ABAAAAD7g9vZzfqff9HXr1q2xePHiqKys/Nsg8vKisrIyamtr2+xTW1vbqj4ioqqqaof6+++/PwYPHhyHHHJIfO1rX4u1a9fudBxbtmyJpqamVg0AAAAgogsCkzfeeCOam5ujtLS01fbS0tKor69vs099ff171h933HFxyy23RE1NTVx77bXxwAMPxOc///lobm5u85hz5syJ4uLiXBs6dOhezgwAAADoLrrNU3JOO+203O+jR4+Oww8/PD7ykY/E/fffHxMmTNihfubMmTF9+vTc39u/2wQAAADQ6YHJwIEDIz8/PxoaGlptb2hoiGw222afbDa7W/UREQcffHAMHDgwXnrppTYDk8LCwt26KSwAAAB0hebm5ti2bVtXD2Of07Nnz8jPz++w43d6YFJQUBBjx46NmpqamDhxYkS8c9PXmpqaOPfcc9vsU1FRETU1NXHBBRfkti1cuDAqKip2ep7XXnst1q5dG0OGDGnP4QMAAECnSJIk6uvro7GxsauHss8qKSmJbDYbmUym3Y/dJV/JmT59ekyaNCmOPPLIGDduXMydOzc2btwYkydPjoiIs846Kw444ICYM2dORER8/etfj/Hjx8cNN9wQJ5xwQtx2223xxBNPxI9//OOIiNiwYUNcddVVcfLJJ0c2m42XX345Lr300vjoRz8aVVVVXTFFAAAA2Cvbw5LBgwdHnz59OiQU+KBKkiQ2bdoUa9asiYjokIsluiQwOfXUU+P111+PWbNmRX19fYwZMyYWLFiQu7HrihUrIi/vb/ejPfroo+PWW2+NK664Ii677LIYOXJk3HHHHXHYYYdFRER+fn489dRT8fOf/zwaGxujrKwsjj322Ljmmmt87QYAAIAPnObm5lxYMmDAgK4ezj6pd+/eERGxZs2aGDx4cLt/PSeTJEnSrkf8gNrb5zMDAABAe9m8eXMsX748DjrooFwwwI7eeuuteOWVV2LEiBHRq1evVvv29nN+pz9WGAAAAHh/fA1n1zry9RGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAoF0tWLAgPvOZz0RJSUkMGDAgvvCFL8TLL7+c2//aa69FdXV19O/fP/r27RtHHnlk1NXV5fbfeeed8alPfSp69eoVAwcOjBNPPLHT59AljxUGAAAAdk+SJPHWtuYu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8YiIZ599No455piYNGlS/Ou//mvHTRbepaCgIMaOHdtqfba0tERNTU2r9fluFRUVreojIhYuXJirHzFiRGSz2VY1TU1NUVdXt9NjQkfpiDUe8bew5MUXX4w//vGPMWDAgI6ZALyHjljjZ555Zjz11FO5f3svXbo0ysrK4pJLLonf//73HTcZup+uvuss7GuOO+645JOf/GRSV1eXPPTQQ8nIkSOT6urq3P7XXnstOeSQQ5K6urrctq9+9avJsGHDkkWLFiVPPPFEUlFRkVRUVOz0HPfdd5+n5NBlOmKNP/3008mgQYOSM844I1m9enWurVmzplPnxofTbbfdlhQWFiY333xz8txzzyVTp05NSkpKkvr6+iRJkuTMM89MZsyYkat/+OGHkx49eiTf/e53k+effz6ZPXt20rNnz+Tpp5/O1XznO99JSkpKkt/97nfJU089lXzpS19KRowYkbz11ludPj9o7zW+devW5Itf/GJy4IEHJkuXLm31vr1ly5YumSMfbh3xPp7mKTnsCYEJpKxduzaprq5O+vXrlxQVFSWTJ09O1q9fn9u/fPnyJCKS++67L7ftrbfeSs4555xk//33T/r06ZOceOKJyerVq3d6DoEJXakj1vjs2bOTiNihDR8+vBNnxofZ97///WTYsGFJQUFBMm7cuOTRRx/N7Rs/fnwyadKkVvW/+tWvko997GNJQUFB8olPfCK5++67W+1vaWlJrrzyyqS0tDQpLCxMJkyYkCxbtqwzpgJtas81vv19vq327vd+6Ezt/T6eJjBhT2SS5H9vpgAAAABARLiHCQAAAMAOBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABASo+uHsC+oqWlJVatWhX77bdfZDKZrh4OAAAAsBeSJIn169dHWVlZ5OXtwfUi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AAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAC8D2effXZMnDixq4cBAHQSgQkAAABAisAEAAAAIEVgAgDsc37961/H6NGjo3fv3jFgwICorKyMjRs3xuOPPx5///d/HwMHDozi4uIYP358LFmypFXfTCYT//7v/x5f+MIXok+fPnHooYdGbW1tvPTSS/HZz342+vbtG0cffXS8/PLLuT7f/OY3Y8yYMfHv//7vMXTo0OjTp0+ccsopsW7dup2OsaWlJebMmRMjRoyI3r17xxFHHBG//vWvO+w1AQA6l8AEANinrF69Oqqrq+Nf/uVf4vnnn4/7778/TjrppEiSJNavXx+TJk2Khx56KB599NEYOXJkHH/88bF+/fpWx7jmmmvirLPOiqVLl8aoUaPin//5n+MrX/lKzJw5M5544olIkiTOPffcVn1eeuml+NWvfhV33nlnLFiwIP785z/HOeecs9NxzpkzJ2655ZaYN29ePPvss3HhhRfGGWecEQ888ECHvC4AQOfKJEmSdPUgAAC2W7JkSYwdOzZeeeWVGD58+C5rW1paoqSkJG699db4whe+EBHvXGFyxRVXxDXXXBMREY8++mhUVFTEf/zHf8S//Mu/RETEbbfdFpMnT4633norIt65wuRb3/pWvPrqq3HAAQdERMSCBQvihBNOiL/85S+RzWbj7LPPjsbGxrjjjjtiy5Yt0b9///jjH/8YFRUVufH83//7f2PTpk1x6623tvvrAgB0LleYAAD7lCOOOCImTJgQo0ePjn/6p3+Kn/zkJ/HXv/41IiIaGhriy1/+cowcOTKKi4ujqKgoNmzYECtWrGh1jMMPPzz3e2lpaUREjB49utW2zZs3R1NTU27bsGHDcmFJRERFRUW0tLTEsmXLdhjjSy+9FJs2bYq///u/j379+uXaLbfc0uqrPgDAB1ePrh4AAMC75efnx8KFC+ORRx6JP/zhD/H9738/Lr/88qirq4uvfe1rsXbt2rjxxhtj+PDhUVhYGBUVFbF169ZWx+jZs2fu90wms9NtLS0tezTGDRs2RETE3Xff3SpkiYgoLCzco2MCAPsWgQkAsM/JZDLx6U9/Oj796U/HrFmzYvjw4fHb3/42Hn744fjhD38Yxx9/fERErFy5Mt544412OeeKFSti1apVUVZWFhHvfJUnLy8vDjnkkB1qP/7xj0dhYWGsWLEixo8f3y7nBwD2LQITAGCfUldXFzU1NXHsscfG4MGDo66uLl5//fU49NBDY+TIkfH//t//iyOPPDKamprikksuid69e7fLeXv16hWTJk2K7373u9HU1BTnn39+nHLKKZHNZneo3W+//eLiiy+OCy+8MFpaWuIzn/lMrFu3Lh5++OEoKiqKSZMmtcuYAICuIzABAPYpRUVF8eCDD8bcuXOjqakphg8fHjfccEN8/vOfj2w2G1OnTo2/+7u/i6FDh8a3v/3tuPjii9vlvB/96EfjpJNOiuOPPz7efPPN+MIXvhA//OEPd1p/zTXXxKBBg2LOnDnxP//zP1FSUhJ/93d/F5dddlm7jAcA6FqekgMAfOh985vfjDvuuCOWLl3a1UMBAPYRnpIDAAAAkCIwAQAAAEjxlRwAAACAFFeYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEgRmAAAAACkCEwAAAAAUgQmAAAAACkCEwAAAIAUgQkAAABAisAEAAAAIEVgAgAAAJAiMAEAAABIEZgAAAAApAhMAAAAAFIEJgAAAAApAhMAAACAFIEJAAAAQIrABAAAACBFYAIAAACQIjABAAAASBGYAAAAAKQITAAAAABSBCYAAAAAKQITAAAAgBSBCQAAAECKwAQAAAAgRWACAAAAkCIwAQAAAEj5/9yXFh/rTIedAAAAAElFTkSuQmCC", "text/html": [ "\n", "
\n", "
\n", " Figure 0\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3134babcf04744a69ef011569cf3c3a3", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAABEwAAAJYCAYAAAB4lnMNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAta0lEQVR4nO3de5CW9X3//9fNcnKBXUSUs5Ko1awnIoLVxIpKRZKCQWOstgaJMW1iNJaapHY6HjI2STVak3GjxkMwk8Sa0yhJozFSUWMcwQNUa1KjgyOCgFRlZYly2P3+kZ/7cz8ggrvsvYuPx8zOeF/3vdf1vm8Yxus5n+u6K62tra0BAAAAoE2vag8AAAAA0N0IJgAAAAAFwQQAAACgIJgAAAAAFAQTAAAAgIJgAgAAAFAQTAAAAAAKggkAAABAQTABAAAAKAgmAAAAAAXBBAAAAKAgmAAAAAAUBBMAAACAQu9qD9AdtbS0ZPny5Rk0aFAqlUq1xwEAAAC2U2tra1577bWMHDkyvXpt/3oRwWQLli9fnjFjxlR7DAAAAKCDli5dmtGjR2/37wkmWzBo0KAkf/pQ6+rqqjwNAAAAsL2ampoyZsyYtnP87SWYbMGbl+HU1dUJJgAAANCDvdtbbbjpKwAAAEBBMAEAAAAoCCYAAAAABfcwAQAAgG5q06ZN2bBhQ7XH6Jb69OmTmpqaHbZ/wQQAAAC6mdbW1qxYsSKvvvpqtUfp1gYPHpzhw4e/6xu7bo1gAgAAAN3Mm7Fkjz32SG1t7Q4JAj1Za2tr1q1bl1WrViVJRowY0enHEEwAAACgG9m0aVNbLNltt92qPU63tcsuuyRJVq1alT322KPTL89x01cAAADoRt68Z0ltbW2VJ+n+3vyMdsR9XgQTAAAA6IZchvPOduRnJJgAAAAAFAQTAAAAoCrmz5+fSqXSLb8NSDABAAAAquLII4/Miy++mPr6+mqPshnfkgMAAABURd++fTN8+PBqj7FFVpgAAAAAnWLSpEk599xzc/7552fXXXfNsGHDcsMNN6S5uTmzZs3KoEGDss8+++TOO+9MsuVLch588MFMmjQptbW12XXXXTNlypS88sorXf5eBBMAAADo5lpbW7Nu/cYu/2ltbd3uWW+55ZYMHTo0CxYsyLnnnpvPfvazOeWUU3LkkUfmsccey/HHH58zzjgj69at2+x3Fy1alOOOOy4NDQ156KGH8pvf/CbTpk3Lpk2bOuNj3C6V1nfz7nuAGTNmZP78+TnuuOPyk5/8ZLt+t6mpKfX19VmzZk3q6up20IQAAACwuddffz1LlizJ+973vvTv3z9Jsm79xjRc9Ksun+Wpr0xJbd9tv5vHpEmTsmnTpjzwwANJkk2bNqW+vj4nnXRSvve97yVJVqxYkREjRuShhx7K66+/nmOOOSavvPJKBg8enNNPPz3PP/98fvOb32zT8bb0Wb2po+f2O+0Kky984QttfxgAAABA1zj44IPb/rumpia77bZbDjrooLZtw4YNS5KsWrVqs999c4VJd7DT3vR10qRJmT9/frXHAAAAgA7bpU9NnvrKlKocd3v16dOn3eNKpdJuW6VSSZK0tLRsfrxddtnu4+0o3XKFyf33359p06Zl5MiRqVQquf322zd7TWNjY8aOHZv+/fvn8MMPz4IFC7p+UAAAAOgClUoltX17d/nPm3Gjqxx88MGZN29elx7z7XTLYNLc3JxDDjkkjY2NW3z+tttuy+zZs3PxxRfnscceyyGHHJIpU6ZscTkPAAAA0DNceOGFWbhwYT73uc/lv//7v/P73/8+1157bVavXt3ls3TLYDJ16tRcdtllmTFjxhafv+qqq3L22Wdn1qxZaWhoyHXXXZfa2trcfPPN7+p4b7zxRpqamtr9AAAAAF3rz/7sz3L33Xdn8eLFmThxYo444ojccccd6d276+8o0uPuYbJ+/fo8+uijufDCC9u29erVK5MnT85DDz30rvb5ta99LZdeemlnjQgAAADvSVu6l+hzzz232ba3fmFv+eW9Rx99dB588MHOHm27dcsVJluzevXqbNq0qe2uum8aNmxYVqxY0fZ48uTJOeWUU/LLX/4yo0eP3mpMufDCC7NmzZq2n6VLl+6w+QEAAIDur8etMNlW99xzzza/tl+/funXr98OnAYAAADoSXrcCpOhQ4empqYmK1eubLd95cqVGT58eJWmAgAAAHYmPS6Y9O3bN+PHj2/3NUMtLS2ZN29ejjjiiCpOBgAAAOwsuuUlOWvXrs0zzzzT9njJkiVZtGhRhgwZkj333DOzZ8/OzJkzc9hhh2XixIm5+uqr09zcnFmzZlVxagAAAGBn0S2DySOPPJJjjjmm7fHs2bOTJDNnzsycOXNy6qmn5qWXXspFF12UFStWZNy4cbnrrrs2uxEsAAAAwLvRLYPJpEmTNvtaodLnP//5fP7zn++iiQAAAID3kh53DxMAAACAHU0wAQAAACgIJgAAAAAFwQQAAACgIJgAAAAAneKuu+7Khz/84QwePDi77bZb/uqv/irPPvts2/MvvPBCTjvttAwZMiQDBgzIYYcdlocffrjt+Z///OeZMGFC+vfvn6FDh2bGjBnVeBtJBBMAAACgkzQ3N2f27Nl55JFHMm/evPTq1SszZsxIS0tL1q5dm6OPPjrLli3L3Llzs3jx4nzpS19KS0tLkuQ///M/M2PGjHzkIx/J448/nnnz5mXixIlVey+V1nf6/t73oKamptTX12fNmjWpq6ur9jgAAAC8h7z++utZsmRJ3ve+96V///5/2tjammxY1/XD9KlNKpV3/eurV6/O7rvvnieeeCK//e1vc8EFF+S5557LkCFDNnvtkUcemfe///35/ve/v8373+Jn9f/p6Ll97+3+DQAAAKBrbViXfHVk1x/3n5cnfQds88v/8Ic/5KKLLsrDDz+c1atXt60eef7557No0aJ88IMf3GIsSZJFixbl7LPP7pSxO4NgAgAAAHSKadOmZa+99soNN9yQkSNHpqWlJQceeGDWr1+fXXbZZau/+07PdzXBBAAAALq7PrV/Wu1RjeNuo//7v//L//7v/+aGG27IUUcdlST5zW9+0/b8wQcfnBtvvDEvv/zyFleZHHzwwZk3b15mzZrV8bk7gWACAAAA3V2lsl2XxlTDrrvumt122y3f+c53MmLEiDz//PP5p3/6p7bnTzvttHz1q1/Nxz72sXzta1/LiBEj8vjjj2fkyJE54ogjcvHFF+e4447L3nvvnb/+67/Oxo0b88tf/jJf/vKXq/J+fEsOAAAA0GG9evXKf/zHf+TRRx/NgQcemH/4h3/IFVdc0fZ83759c/fdd2ePPfbIRz7ykRx00EH5+te/npqamiTJpEmT8uMf/zhz587NuHHjcuyxx2bBggXVeju+JWdLfEsOAAAA1bK1b36hvR35LTlWmLxFY2NjGhoaMmHChGqPAgAAAFSRYPIW55xzTp566qksXLiw2qMAAAAAVSSYAAAAABQEEwAAAICCYAIAAABQEEwAAAAACoIJAAAAQEEwAQAAACgIJgAAAAAFwQQAAACgIJgAAAAA3cIll1yScePGVXuMJIIJAAAAwGYEEwAAAKBTvPHGGznvvPOyxx57pH///vnwhz+chQsXJknmzJmTwYMHt3v97bffnkql0vb8pZdemsWLF6dSqaRSqWTOnDld/A7+f72rdmQAAABgp/KlL30pP/3pT3PLLbdkr732yuWXX54pU6bkmWeeecffPfXUU/Pkk0/mrrvuyj333JMkqa+v39Ejvy3BBAAAALq51tbW/HHjH7v8uLv03qVtBcg7aW5uzrXXXps5c+Zk6tSpSZIbbrghv/71r3PTTTdl99133/qxdtklAwcOTO/evTN8+PAOz95RggkAAAB0c3/c+Mcc/sPDu/y4D5/+cGr71G7Ta5999tls2LAhH/rQh9q29enTJxMnTszvfve7dwwm3Y17mAAAAAA7XK9evdLa2tpu24YNG6o0zTuzwgQAAAC6uV1675KHT3+4KsfdVnvvvXf69u2bBx98MHvttVeSPwWRhQsX5vzzz8/uu++e1157Lc3NzRkwYECSZNGiRe320bdv32zatKnT5u8IwQQAAAC6uUqlss2XxlTLgAED8tnPfjZf/OIXM2TIkOy55565/PLLs27dupx11llpbW1NbW1t/vmf/znnnXdeHn744c2+BWfs2LFZsmRJFi1alNGjR2fQoEHp169fVd6PS3IAAACATvH1r389J598cs4444wceuiheeaZZ/KrX/0qu+66a4YMGZLvf//7+eUvf5mDDjoot956ay655JJ2v3/yySfnhBNOyDHHHJPdd989t956a3XeSJJKa3kBEWlqakp9fX3WrFmTurq6ao8DAADAe8jrr7+eJUuW5H3ve1/69+9f7XG6ta19Vh09t7fCBAAAAKAgmAAAAAAUBBMAAACAgmACAAAAUBBM3qKxsTENDQ2ZMGFCtUcBAAAAqkgweYtzzjknTz31VBYuXFjtUQAAAHiP86W272xHfkaCCQAAAHQjffr0SZKsW7euypN0f29+Rm9+Zp2pd6fvEQAAAHjXampqMnjw4KxatSpJUltbm0qlUuWpupfW1tasW7cuq1atyuDBg1NTU9PpxxBMAAAAoJsZPnx4krRFE7Zs8ODBbZ9VZxNMAAAAoJupVCoZMWJE9thjj2zYsKHa43RLffr02SErS94kmAAAAEA3VVNTs0OjAG/PTV8BAAAACoIJAAAAQEEwAQAAACgIJgAAAAAFwQQAAACgIJgAAAAAFAQTAAAA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AgAAQM/W0XP7HRJM3uqll17K3LlzM3fu3Bx11FG54IILduThOoVgAgAAAD1btwgmzc3NGTBgQJLkueeey9ixYzu6y6oSTAAAAKBn6+i5fYfvYXLeeedlzJgxuf7665Mkp59+ekd3CQAAAFBVvTu6g3nz5mXFihX53Oc+l6FDh3bGTAAAAABV1eFgMmrUqPTt2zfXX399Pvaxj2X58uWdMRcAAABA1XT4kpx99903GzduTE1NTb7zne9k8ODBnTAWAAAAQPXs8G/J6Ync9BUAAAB6to6e23f4kpwtaW5uzm233ZY//vGPOf7447PvvvvuiMMAAAAA7BAdviTn+eefz9FHH51BgwblL//yL/P888/n0EMPzac//emce+65GTduXO6///7OmBUAAACgS3Q4mFxwwQVZv359rrvuutTW1mbKlCnZd9998+KLL2blypWZOnVqLrnkkk4YFQAAAKBrdPgeJsOHD8/cuXMzceLEvPzyyxk6dGgefPDBHHHEEUmSxYsX57jjjsvq1as7ZeCu4B4mAAAA0LN19Ny+wytMVq1alb322itJMmTIkNTW1mbYsGFtzw8fPjyvvPJKRw/TJRobG9PQ0JAJEyZUexQAAACgijocTJKkUqls8b97mnPOOSdPPfVUFi5cWO1RAAAAgCrqlG/Jueiii1JbW5skWb9+ff71X/819fX1SZJ169Z1xiEAAAAAukyH72EyadKkbVpVcu+993bkMF3KPUwAAACgZ+vouX2HV5jMnz+/o7sAAAAA6FY6FExmz569za+96qqrOnIoAAAAgC7ToWDy+OOPt3v82GOPZePGjdlvv/2SJE8//XRqamoyfvz4jhwGAAAAoEt1KJi89b4kV111VQYNGpRbbrklu+66a5LklVdeyaxZs3LUUUd1bEoAAACALtThm76+adSoUbn77rtzwAEHtNv+5JNP5vjjj8/y5cs74zBdwk1fAQAAoGfr6Ll9r84c5KWXXtps+0svvZTXXnutsw4DAAAAsMN1WjCZMWNGZs2alZ/97Gd54YUX8sILL+SnP/1pzjrrrJx00kmddRgAAACAHa7DXyv8puuuuy4XXHBBTj/99GzYsOFPO+/dO2eddVauuOKKzjoMAAAAwA7XafcweVNzc3OeffbZJMnee++dAQMGdObuu4R7mAAAAEDP1tFz+05bYfKmAQMG5OCDD+7s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NmxYzjjjjKxevbptf83NzfnkJz+ZgQMHZsSIEbnyyiszadKknH/++W2vqVQquf3229vNMXjw4MyZM6ft8dKlS/OJT3wigwcPzpAhQ3LiiSfmueeeazf3xz72sXzjG9/IiBEjsttuu+Wcc87Jhg0b2l7zxhtv5Mtf/nLGjBmTfv36ZZ999slNN92U1tbW7LPPPvnGN77RboZFixalUqnkmWeeedvPa+nSpfmf//mfnHDCCdv4CW/ZmWeemUqlstnP/PnzO7RfAGDLBBMAYLt885vfzFe+8pWMHj06L774YhYuXNj23C233JK+ffvmwQcfzHXXXZdXX301xx57bD74wQ/mkUceyV133ZWVK1fmE5/4RNvvfPGLX8x9992XO+64I3fffXfmz5+fxx57bLtm2rBhQ6ZMmZJBgwblgQceyIMPPpiBAwfmhBNOaLfS5d57782zzz6be++9N7fcckvmzJnTLrp88pOfzK233ppvfetb+d3vfpfrr78+AwcOTKVSyac+9al897vfbXfc7373u/mLv/iL7LPPPm8729y5czNp0qTU1dVt13sqffOb38yLL77Y9vOFL3whe+yxR/bff/8O7RcA2LLN188CAGxFfX19Bg0alJqamgwfPrzdc/vuu28uv/zytseXXXZZPvjBD+arX/1q27abb745Y8aMydNPP52RI0fmpptuyve///0cd9xxSf4UXUaPHr1dM912221paWnJjTfemEqlkuRPMWPw4MGZP39+jj/++CTJrrvummuuuSY1NTXZf//989GPfjTz5s3L2Wefnaeffjo/+tGP8utf/zqTJ09Okrz//e9vO8aZZ56Ziy66KAsWLMjEiROzYcOG/PCHP9xs1UnpjjvuyIknnrjV1zzxxBMZOHBgu22tra3tHtfX16e+vj5J8rOf/SzXX3997rnnns3+DACAziGYAACdZvz48e0eL168OPfee+9mMSD5031Q/vjHP2b9+vU5/PDD27YPGTIk++2333Ydd/HixXnmmWcyaNCgdttff/31PPvss22PDzjggNTU1LQ9HjFiRJ544okkf7q8pqamJkcfffQWjzFy5Mh89KMfzc0335yJEyfm5z//ed54442ccsopbztXU1NT7rvvvtx0001bnX+//fbL3Llz221btmxZJk2atNlrH3/88Zxxxhm55ppr8qEPfWir+wUA3j3BBADoNAMGDGj3eO3atZk2bVr+7d/+bbPXjhgxYqv3/nirSqWy2YqLt957ZO3atRk/fnx+8IMfbPa7u+++e9t/9+nTZ7P9trS0JEl22WWXd5zj05/+dM4444z8+7//e7773e/m1FNPTW1t7du+/s4770xDQ0PGjBmz1f327dt3s8t6tnQj3RUrVmT69On59Kc/nbPOOusd5wUA3j3BBADYYQ499ND89Kc/zdixY7cYAPbee+/06dMnDz/8cPbcc88kySuvvJKnn3663UqP3XffPS+++GLb4z/84Q9Zt25du+Pcdttt2WOPPd71vUIOOuigtLS05L777mu7JKf0kY98JAMGDMi1116bu+66K/fff/9W97ktl+Nsq9dffz0nnnhi9t9//1x11VWdsk8A4O256SsAsMOcc845efnll3Paaadl4cKFefbZZ/OrX/0qs2bNyqZNmzJw4MCcddZZ+eIXv5j/+q//ypNPPpkzzzwzvXq1/1+UY489Ntdcc00ef/zxPPLII/n7v//7dqtF/uZv/iZDhw7NiSeemAceeCBLlizJ/Pnzc9555+WFF17YplnHjh2bmTNn5lOf+lRuv/32tn386Ec/antNTU1NzjzzzFx44YXZd999c8QRR7zt/jZu3Jg777yz075O+O/+7u+ydOnSfOtb38pLL72UFStWZMWKFb6+GQB2EMEEANhhRo4cmQcffDCbNm3K8ccfn4MOOijnn39+Bg8e3BZFrrjiihx11FGZNm1aJk+enA9/+MOb3QvlyiuvzJgxY3LUUUfl9NNPzwUXXNDuUpja2trcf//92XPPPXPSSSflAx/4QM4666y8/vrr27Xi5Nprr83HP/7xfO5zn8v++++fs88+O83Nze1ec9ZZZ2X9+vWZNWvWVvd13333ZeDAgTn00EO3+fjvtL8XX3wxDQ0NGTFiRNvPb3/7207ZPwDQXqW1vCAYAKDKJk2alHHjxuXqq6+u9iibeeCBB3Lcccdl6dKlGTZs2Nu+7rzzzsvGjRvz7W9/uwunAwA6i3uYAABsgzfeeCMvvfRSLrnkkpxyyilbjSVJcuCBB271kh0AoHtzSQ4AwDa49dZbs9dee+XVV1/N5Zdf/o6v/8xnPpODDjqoCyYDAHYEl+QAAAAAFKwwAQAAACgIJgAAAAAFwQQAAACgIJgAAAAAFAQTAAAAgIJgAgAAAFAQTAAAAAAKggkAAABAQTABAAAAKAgmAAAAAAXBBAAAAKAgmAAAAAAUBBMAAACAgmACAAAAUPh/3WLpFR8/wNoAAAAASUVORK5CYII=", "text/html": [ "\n", "
\n", "
\n", " Figure 1\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: 1kHz_peak_1g_external_Speaker_0dBSPL_PDM.wav\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: breathing_peak_01g_external_Speaker_80dBSPL_PDM.wav\n", "Selected file: eatCrunchy_peak_05g_external_Speaker_80dBSPL_PDM.wav\n", "Selected file: ownVoice_shaker0.2g_speaker80dBSPL_PDM.wav\n", "Selected file: eatCrunchy_peak_2g_clipping_external_Speaker_80dBSPL_PDM.wav\n" ] }, { "ename": "ValueError", "evalue": "all input arrays must have the same shape", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:767\u001b[0m, in \u001b[0;36mWidget._handle_msg\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m 765\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m 766\u001b[0m _put_buffers(state, data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m], msg[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffers\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m--> 767\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;66;03m# Handle a state request.\u001b[39;00m\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequest_state\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:644\u001b[0m, in \u001b[0;36mWidget.set_state\u001b[1;34m(self, sync_data)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send(msg, buffers\u001b[38;5;241m=\u001b[39mecho_buffers)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;66;03m# The order of these context managers is important. Properties must\u001b[39;00m\n\u001b[0;32m 642\u001b[0m \u001b[38;5;66;03m# be locked when the hold_trait_notification context manager is\u001b[39;00m\n\u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# released and notifications are fired.\u001b[39;00m\n\u001b[1;32m--> 644\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lock_property\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msync_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhold_trait_notifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 645\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msync_data\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m:\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\contextlib.py:144\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[1;34m(self, typ, value, traceback)\u001b[0m\n\u001b[0;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 144\u001b[0m \u001b[38;5;28mnext\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgen)\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m:\n\u001b[0;32m 146\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1502\u001b[0m, in \u001b[0;36mHasTraits.hold_trait_notifications\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m changes \u001b[38;5;129;01min\u001b[39;00m cache\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m 1501\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m change \u001b[38;5;129;01min\u001b[39;00m changes:\n\u001b[1;32m-> 1502\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget_selection.py:236\u001b[0m, in \u001b[0;36m_Selection._propagate_index\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m value:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m \u001b[38;5;241m=\u001b[39m value\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:732\u001b[0m, in \u001b[0;36mTraitType.__set__\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 730\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m TraitError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m trait is read-only.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 732\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:721\u001b[0m, in \u001b[0;36mTraitType.set\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 717\u001b[0m silent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 718\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m silent \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 719\u001b[0m \u001b[38;5;66;03m# we explicitly compare silent to True just in case the equality\u001b[39;00m\n\u001b[0;32m 720\u001b[0m \u001b[38;5;66;03m# comparison above returns something other than True/False\u001b[39;00m\n\u001b[1;32m--> 721\u001b[0m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_trait\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_value\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1505\u001b[0m, in \u001b[0;36mHasTraits._notify_trait\u001b[1;34m(self, name, old_value, new_value)\u001b[0m\n\u001b[0;32m 1504\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_notify_trait\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, old_value, new_value):\n\u001b[1;32m-> 1505\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1506\u001b[0m \u001b[43m \u001b[49m\u001b[43mBunch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1507\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1508\u001b[0m \u001b[43m \u001b[49m\u001b[43mold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1509\u001b[0m \u001b[43m \u001b[49m\u001b[43mnew\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1510\u001b[0m \u001b[43m \u001b[49m\u001b[43mowner\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1511\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchange\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1512\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1513\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "Cell \u001b[1;32mIn[19], line 36\u001b[0m, in \u001b[0;36mon_file_selection\u001b[1;34m(change)\u001b[0m\n\u001b[0;32m 34\u001b[0m fs2, data2 \u001b[38;5;241m=\u001b[39m load_wav(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfolder_path_output_apx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mselected_file_mod\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m fs \u001b[38;5;241m==\u001b[39m fs2, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSampling rates do not match\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m---> 36\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstack\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata2\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m plot_timedomain(data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n\u001b[0;32m 39\u001b[0m plot_freqdomain(fs, data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\numpy\\core\\shape_base.py:449\u001b[0m, in \u001b[0;36mstack\u001b[1;34m(arrays, axis, out, dtype, casting)\u001b[0m\n\u001b[0;32m 447\u001b[0m shapes \u001b[38;5;241m=\u001b[39m {arr\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;28;01mfor\u001b[39;00m arr \u001b[38;5;129;01min\u001b[39;00m arrays}\n\u001b[0;32m 448\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(shapes) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m--> 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mall input arrays must have the same shape\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 451\u001b[0m result_ndim \u001b[38;5;241m=\u001b[39m arrays[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 452\u001b[0m axis \u001b[38;5;241m=\u001b[39m normalize_axis_index(axis, result_ndim)\n", "\u001b[1;31mValueError\u001b[0m: all input arrays must have the same shape" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: breathing_peak_016g_external_Speaker_80dBSPL_PDM.wav\n" ] }, { "ename": "ValueError", "evalue": "all input arrays must have the same shape", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:767\u001b[0m, in \u001b[0;36mWidget._handle_msg\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m 765\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m 766\u001b[0m _put_buffers(state, data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m], msg[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffers\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m--> 767\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;66;03m# Handle a state request.\u001b[39;00m\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequest_state\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:644\u001b[0m, in \u001b[0;36mWidget.set_state\u001b[1;34m(self, sync_data)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send(msg, buffers\u001b[38;5;241m=\u001b[39mecho_buffers)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;66;03m# The order of these context managers is important. Properties must\u001b[39;00m\n\u001b[0;32m 642\u001b[0m \u001b[38;5;66;03m# be locked when the hold_trait_notification context manager is\u001b[39;00m\n\u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# released and notifications are fired.\u001b[39;00m\n\u001b[1;32m--> 644\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lock_property\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msync_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhold_trait_notifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 645\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msync_data\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m:\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\contextlib.py:144\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[1;34m(self, typ, value, traceback)\u001b[0m\n\u001b[0;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 144\u001b[0m \u001b[38;5;28mnext\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgen)\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m:\n\u001b[0;32m 146\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1502\u001b[0m, in \u001b[0;36mHasTraits.hold_trait_notifications\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m changes \u001b[38;5;129;01min\u001b[39;00m cache\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m 1501\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m change \u001b[38;5;129;01min\u001b[39;00m changes:\n\u001b[1;32m-> 1502\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget_selection.py:236\u001b[0m, in \u001b[0;36m_Selection._propagate_index\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m value:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m \u001b[38;5;241m=\u001b[39m value\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:732\u001b[0m, in \u001b[0;36mTraitType.__set__\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 730\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m TraitError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m trait is read-only.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 732\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:721\u001b[0m, in \u001b[0;36mTraitType.set\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 717\u001b[0m silent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 718\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m silent \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 719\u001b[0m \u001b[38;5;66;03m# we explicitly compare silent to True just in case the equality\u001b[39;00m\n\u001b[0;32m 720\u001b[0m \u001b[38;5;66;03m# comparison above returns something other than True/False\u001b[39;00m\n\u001b[1;32m--> 721\u001b[0m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_trait\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_value\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1505\u001b[0m, in \u001b[0;36mHasTraits._notify_trait\u001b[1;34m(self, name, old_value, new_value)\u001b[0m\n\u001b[0;32m 1504\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_notify_trait\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, old_value, new_value):\n\u001b[1;32m-> 1505\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1506\u001b[0m \u001b[43m \u001b[49m\u001b[43mBunch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1507\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1508\u001b[0m \u001b[43m \u001b[49m\u001b[43mold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1509\u001b[0m \u001b[43m \u001b[49m\u001b[43mnew\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1510\u001b[0m \u001b[43m \u001b[49m\u001b[43mowner\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1511\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchange\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1512\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1513\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "Cell \u001b[1;32mIn[19], line 36\u001b[0m, in \u001b[0;36mon_file_selection\u001b[1;34m(change)\u001b[0m\n\u001b[0;32m 34\u001b[0m fs2, data2 \u001b[38;5;241m=\u001b[39m load_wav(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfolder_path_output_apx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mselected_file_mod\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m fs \u001b[38;5;241m==\u001b[39m fs2, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSampling rates do not match\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m---> 36\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstack\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata2\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m plot_timedomain(data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n\u001b[0;32m 39\u001b[0m plot_freqdomain(fs, data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\numpy\\core\\shape_base.py:449\u001b[0m, in \u001b[0;36mstack\u001b[1;34m(arrays, axis, out, dtype, casting)\u001b[0m\n\u001b[0;32m 447\u001b[0m shapes \u001b[38;5;241m=\u001b[39m {arr\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;28;01mfor\u001b[39;00m arr \u001b[38;5;129;01min\u001b[39;00m arrays}\n\u001b[0;32m 448\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(shapes) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m--> 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mall input arrays must have the same shape\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 451\u001b[0m result_ndim \u001b[38;5;241m=\u001b[39m arrays[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 452\u001b[0m axis \u001b[38;5;241m=\u001b[39m normalize_axis_index(axis, result_ndim)\n", "\u001b[1;31mValueError\u001b[0m: all input arrays must have the same shape" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: eatCrunchy_peak_1g_clipping_external_Speaker_80dBSPL_PDM.wav\n", "Selected file: breathing_peak_016g_external_Speaker_80dBSPL_PDM.wav\n" ] }, { "ename": "ValueError", "evalue": "all input arrays must have the same shape", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:767\u001b[0m, in \u001b[0;36mWidget._handle_msg\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m 765\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m 766\u001b[0m _put_buffers(state, data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m], msg[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffers\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m--> 767\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;66;03m# Handle a state request.\u001b[39;00m\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequest_state\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:644\u001b[0m, in \u001b[0;36mWidget.set_state\u001b[1;34m(self, sync_data)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send(msg, buffers\u001b[38;5;241m=\u001b[39mecho_buffers)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;66;03m# The order of these context managers is important. Properties must\u001b[39;00m\n\u001b[0;32m 642\u001b[0m \u001b[38;5;66;03m# be locked when the hold_trait_notification context manager is\u001b[39;00m\n\u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# released and notifications are fired.\u001b[39;00m\n\u001b[1;32m--> 644\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lock_property\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msync_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhold_trait_notifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 645\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msync_data\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m:\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\contextlib.py:144\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[1;34m(self, typ, value, traceback)\u001b[0m\n\u001b[0;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 144\u001b[0m \u001b[38;5;28mnext\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgen)\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m:\n\u001b[0;32m 146\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1502\u001b[0m, in \u001b[0;36mHasTraits.hold_trait_notifications\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m changes \u001b[38;5;129;01min\u001b[39;00m cache\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m 1501\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m change \u001b[38;5;129;01min\u001b[39;00m changes:\n\u001b[1;32m-> 1502\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget_selection.py:236\u001b[0m, in \u001b[0;36m_Selection._propagate_index\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m value:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m \u001b[38;5;241m=\u001b[39m value\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:732\u001b[0m, in \u001b[0;36mTraitType.__set__\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 730\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m TraitError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m trait is read-only.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 732\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:721\u001b[0m, in \u001b[0;36mTraitType.set\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 717\u001b[0m silent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 718\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m silent \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 719\u001b[0m \u001b[38;5;66;03m# we explicitly compare silent to True just in case the equality\u001b[39;00m\n\u001b[0;32m 720\u001b[0m \u001b[38;5;66;03m# comparison above returns something other than True/False\u001b[39;00m\n\u001b[1;32m--> 721\u001b[0m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_trait\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_value\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1505\u001b[0m, in \u001b[0;36mHasTraits._notify_trait\u001b[1;34m(self, name, old_value, new_value)\u001b[0m\n\u001b[0;32m 1504\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_notify_trait\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, old_value, new_value):\n\u001b[1;32m-> 1505\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1506\u001b[0m \u001b[43m \u001b[49m\u001b[43mBunch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1507\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1508\u001b[0m \u001b[43m \u001b[49m\u001b[43mold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1509\u001b[0m \u001b[43m \u001b[49m\u001b[43mnew\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1510\u001b[0m \u001b[43m \u001b[49m\u001b[43mowner\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1511\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchange\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1512\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1513\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "Cell \u001b[1;32mIn[19], line 36\u001b[0m, in \u001b[0;36mon_file_selection\u001b[1;34m(change)\u001b[0m\n\u001b[0;32m 34\u001b[0m fs2, data2 \u001b[38;5;241m=\u001b[39m load_wav(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfolder_path_output_apx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mselected_file_mod\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m fs \u001b[38;5;241m==\u001b[39m fs2, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSampling rates do not match\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m---> 36\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstack\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata2\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m plot_timedomain(data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n\u001b[0;32m 39\u001b[0m plot_freqdomain(fs, data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\numpy\\core\\shape_base.py:449\u001b[0m, in \u001b[0;36mstack\u001b[1;34m(arrays, axis, out, dtype, casting)\u001b[0m\n\u001b[0;32m 447\u001b[0m shapes \u001b[38;5;241m=\u001b[39m {arr\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;28;01mfor\u001b[39;00m arr \u001b[38;5;129;01min\u001b[39;00m arrays}\n\u001b[0;32m 448\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(shapes) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m--> 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mall input arrays must have the same shape\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 451\u001b[0m result_ndim \u001b[38;5;241m=\u001b[39m arrays[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 452\u001b[0m axis \u001b[38;5;241m=\u001b[39m normalize_axis_index(axis, result_ndim)\n", "\u001b[1;31mValueError\u001b[0m: all input arrays must have the same shape" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: breathing_peak_01g_external_Speaker_80dBSPL_PDM.wav\n" ] }, { "ename": "LibsndfileError", "evalue": "Error opening './testdata/output/ap_measured/breathing_peak_01g_external_Speaker_80dBSPL_PDM_Acquired Waveform.wav': System error.", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mLibsndfileError\u001b[0m Traceback (most recent call last)", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:767\u001b[0m, in \u001b[0;36mWidget._handle_msg\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m 765\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m 766\u001b[0m _put_buffers(state, data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m], msg[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffers\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m--> 767\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;66;03m# Handle a state request.\u001b[39;00m\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequest_state\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:644\u001b[0m, in \u001b[0;36mWidget.set_state\u001b[1;34m(self, sync_data)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send(msg, buffers\u001b[38;5;241m=\u001b[39mecho_buffers)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;66;03m# The order of these context managers is important. Properties must\u001b[39;00m\n\u001b[0;32m 642\u001b[0m \u001b[38;5;66;03m# be locked when the hold_trait_notification context manager is\u001b[39;00m\n\u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# released and notifications are fired.\u001b[39;00m\n\u001b[1;32m--> 644\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lock_property\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msync_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhold_trait_notifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 645\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msync_data\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m:\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\contextlib.py:144\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[1;34m(self, typ, value, traceback)\u001b[0m\n\u001b[0;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 144\u001b[0m \u001b[38;5;28mnext\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgen)\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m:\n\u001b[0;32m 146\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1502\u001b[0m, in \u001b[0;36mHasTraits.hold_trait_notifications\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m changes \u001b[38;5;129;01min\u001b[39;00m cache\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m 1501\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m change \u001b[38;5;129;01min\u001b[39;00m changes:\n\u001b[1;32m-> 1502\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget_selection.py:236\u001b[0m, in \u001b[0;36m_Selection._propagate_index\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m value:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m \u001b[38;5;241m=\u001b[39m value\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:732\u001b[0m, in \u001b[0;36mTraitType.__set__\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 730\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m TraitError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m trait is read-only.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 732\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:721\u001b[0m, in \u001b[0;36mTraitType.set\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 717\u001b[0m silent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 718\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m silent \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 719\u001b[0m \u001b[38;5;66;03m# we explicitly compare silent to True just in case the equality\u001b[39;00m\n\u001b[0;32m 720\u001b[0m \u001b[38;5;66;03m# comparison above returns something other than True/False\u001b[39;00m\n\u001b[1;32m--> 721\u001b[0m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_trait\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_value\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1505\u001b[0m, in \u001b[0;36mHasTraits._notify_trait\u001b[1;34m(self, name, old_value, new_value)\u001b[0m\n\u001b[0;32m 1504\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_notify_trait\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, old_value, new_value):\n\u001b[1;32m-> 1505\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1506\u001b[0m \u001b[43m \u001b[49m\u001b[43mBunch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1507\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1508\u001b[0m \u001b[43m \u001b[49m\u001b[43mold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1509\u001b[0m \u001b[43m \u001b[49m\u001b[43mnew\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1510\u001b[0m \u001b[43m \u001b[49m\u001b[43mowner\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1511\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchange\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1512\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1513\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "Cell \u001b[1;32mIn[19], line 34\u001b[0m, in \u001b[0;36mon_file_selection\u001b[1;34m(change)\u001b[0m\n\u001b[0;32m 32\u001b[0m fs, data1 \u001b[38;5;241m=\u001b[39m load_wav(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfolder_path_input\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mselected_file\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 33\u001b[0m selected_file_mod \u001b[38;5;241m=\u001b[39m selected_file\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.wav\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_Acquired Waveform.wav\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m---> 34\u001b[0m fs2, data2 \u001b[38;5;241m=\u001b[39m \u001b[43mload_wav\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mfolder_path_output_apx\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m/\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mselected_file_mod\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m fs \u001b[38;5;241m==\u001b[39m fs2, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSampling rates do not match\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 36\u001b[0m data \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mstack((data1[\u001b[38;5;241m0\u001b[39m], data1[\u001b[38;5;241m1\u001b[39m], data2), axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n", "Cell \u001b[1;32mIn[1], line 66\u001b[0m, in \u001b[0;36mload_wav\u001b[1;34m(filename)\u001b[0m\n\u001b[0;32m 65\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mload_wav\u001b[39m(filename):\n\u001b[1;32m---> 66\u001b[0m y, fs \u001b[38;5;241m=\u001b[39m \u001b[43msf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mint16\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 67\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fs, y\u001b[38;5;241m.\u001b[39mT\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\soundfile.py:285\u001b[0m, in \u001b[0;36mread\u001b[1;34m(file, frames, start, stop, dtype, always_2d, fill_value, out, samplerate, channels, format, subtype, endian, closefd)\u001b[0m\n\u001b[0;32m 199\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread\u001b[39m(file, frames\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m, start\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, stop\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfloat64\u001b[39m\u001b[38;5;124m'\u001b[39m, always_2d\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[0;32m 200\u001b[0m fill_value\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, out\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, samplerate\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, channels\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 201\u001b[0m \u001b[38;5;28mformat\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, subtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, endian\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, closefd\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[0;32m 202\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Provide audio data from a sound file as NumPy array.\u001b[39;00m\n\u001b[0;32m 203\u001b[0m \n\u001b[0;32m 204\u001b[0m \u001b[38;5;124;03m By default, the whole file is read from the beginning, but the\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 283\u001b[0m \n\u001b[0;32m 284\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 285\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mSoundFile\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msamplerate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchannels\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 286\u001b[0m \u001b[43m \u001b[49m\u001b[43msubtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mendian\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mformat\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclosefd\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m 287\u001b[0m frames \u001b[38;5;241m=\u001b[39m f\u001b[38;5;241m.\u001b[39m_prepare_read(start, stop, frames)\n\u001b[0;32m 288\u001b[0m data \u001b[38;5;241m=\u001b[39m f\u001b[38;5;241m.\u001b[39mread(frames, dtype, always_2d, fill_value, out)\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\soundfile.py:658\u001b[0m, in \u001b[0;36mSoundFile.__init__\u001b[1;34m(self, file, mode, samplerate, channels, subtype, endian, format, closefd)\u001b[0m\n\u001b[0;32m 655\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode \u001b[38;5;241m=\u001b[39m mode\n\u001b[0;32m 656\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_info \u001b[38;5;241m=\u001b[39m _create_info_struct(file, mode, samplerate, channels,\n\u001b[0;32m 657\u001b[0m \u001b[38;5;28mformat\u001b[39m, subtype, endian)\n\u001b[1;32m--> 658\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode_int\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclosefd\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 659\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mset\u001b[39m(mode)\u001b[38;5;241m.\u001b[39missuperset(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr+\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mseekable():\n\u001b[0;32m 660\u001b[0m \u001b[38;5;66;03m# Move write position to 0 (like in Python file objects)\u001b[39;00m\n\u001b[0;32m 661\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mseek(\u001b[38;5;241m0\u001b[39m)\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\soundfile.py:1216\u001b[0m, in \u001b[0;36mSoundFile._open\u001b[1;34m(self, file, mode_int, closefd)\u001b[0m\n\u001b[0;32m 1213\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file_ptr \u001b[38;5;241m==\u001b[39m _ffi\u001b[38;5;241m.\u001b[39mNULL:\n\u001b[0;32m 1214\u001b[0m \u001b[38;5;66;03m# get the actual error code\u001b[39;00m\n\u001b[0;32m 1215\u001b[0m err \u001b[38;5;241m=\u001b[39m _snd\u001b[38;5;241m.\u001b[39msf_error(file_ptr)\n\u001b[1;32m-> 1216\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m LibsndfileError(err, prefix\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mError opening \u001b[39m\u001b[38;5;132;01m{0!r}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname))\n\u001b[0;32m 1217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode_int \u001b[38;5;241m==\u001b[39m _snd\u001b[38;5;241m.\u001b[39mSFM_WRITE:\n\u001b[0;32m 1218\u001b[0m \u001b[38;5;66;03m# Due to a bug in libsndfile version <= 1.0.25, frames != 0\u001b[39;00m\n\u001b[0;32m 1219\u001b[0m \u001b[38;5;66;03m# when opening a named pipe in SFM_WRITE mode.\u001b[39;00m\n\u001b[0;32m 1220\u001b[0m \u001b[38;5;66;03m# See http://github.com/erikd/libsndfile/issues/77.\u001b[39;00m\n\u001b[0;32m 1221\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_info\u001b[38;5;241m.\u001b[39mframes \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", "\u001b[1;31mLibsndfileError\u001b[0m: Error opening './testdata/output/ap_measured/breathing_peak_01g_external_Speaker_80dBSPL_PDM_Acquired Waveform.wav': System error." ] }, { "name": "stdout", "output_type": "stream", "text": [ "Selected file: breathing_peak_016g_external_Speaker_80dBSPL_PDM.wav\n" ] }, { "ename": "ValueError", "evalue": "all input arrays must have the same shape", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:767\u001b[0m, in \u001b[0;36mWidget._handle_msg\u001b[1;34m(self, msg)\u001b[0m\n\u001b[0;32m 765\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m data:\n\u001b[0;32m 766\u001b[0m _put_buffers(state, data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffer_paths\u001b[39m\u001b[38;5;124m'\u001b[39m], msg[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbuffers\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m--> 767\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 769\u001b[0m \u001b[38;5;66;03m# Handle a state request.\u001b[39;00m\n\u001b[0;32m 770\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m method \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrequest_state\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:644\u001b[0m, in \u001b[0;36mWidget.set_state\u001b[1;34m(self, sync_data)\u001b[0m\n\u001b[0;32m 639\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_send(msg, buffers\u001b[38;5;241m=\u001b[39mecho_buffers)\n\u001b[0;32m 641\u001b[0m \u001b[38;5;66;03m# The order of these context managers is important. Properties must\u001b[39;00m\n\u001b[0;32m 642\u001b[0m \u001b[38;5;66;03m# be locked when the hold_trait_notification context manager is\u001b[39;00m\n\u001b[0;32m 643\u001b[0m \u001b[38;5;66;03m# released and notifications are fired.\u001b[39;00m\n\u001b[1;32m--> 644\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mwith\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_lock_property\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msync_data\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhold_trait_notifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 645\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msync_data\u001b[49m\u001b[43m:\u001b[49m\n\u001b[0;32m 646\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkeys\u001b[49m\u001b[43m:\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\contextlib.py:144\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[1;34m(self, typ, value, traceback)\u001b[0m\n\u001b[0;32m 142\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m typ \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 143\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 144\u001b[0m \u001b[38;5;28mnext\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgen)\n\u001b[0;32m 145\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m:\n\u001b[0;32m 146\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1502\u001b[0m, in \u001b[0;36mHasTraits.hold_trait_notifications\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m changes \u001b[38;5;129;01min\u001b[39;00m cache\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m 1501\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m change \u001b[38;5;129;01min\u001b[39;00m changes:\n\u001b[1;32m-> 1502\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget_selection.py:236\u001b[0m, in \u001b[0;36m_Selection._propagate_index\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel \u001b[38;5;241m=\u001b[39m label\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m value:\n\u001b[1;32m--> 236\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalue\u001b[49m \u001b[38;5;241m=\u001b[39m value\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:732\u001b[0m, in \u001b[0;36mTraitType.__set__\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 730\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m TraitError(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mThe \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m trait is read-only.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m 731\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 732\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:721\u001b[0m, in \u001b[0;36mTraitType.set\u001b[1;34m(self, obj, value)\u001b[0m\n\u001b[0;32m 717\u001b[0m silent \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 718\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m silent \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m 719\u001b[0m \u001b[38;5;66;03m# we explicitly compare silent to True just in case the equality\u001b[39;00m\n\u001b[0;32m 720\u001b[0m \u001b[38;5;66;03m# comparison above returns something other than True/False\u001b[39;00m\n\u001b[1;32m--> 721\u001b[0m \u001b[43mobj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_trait\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnew_value\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1505\u001b[0m, in \u001b[0;36mHasTraits._notify_trait\u001b[1;34m(self, name, old_value, new_value)\u001b[0m\n\u001b[0;32m 1504\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_notify_trait\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, old_value, new_value):\n\u001b[1;32m-> 1505\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1506\u001b[0m \u001b[43m \u001b[49m\u001b[43mBunch\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 1507\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1508\u001b[0m \u001b[43m \u001b[49m\u001b[43mold\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mold_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1509\u001b[0m \u001b[43m \u001b[49m\u001b[43mnew\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_value\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1510\u001b[0m \u001b[43m \u001b[49m\u001b[43mowner\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1511\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mchange\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 1512\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1513\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\ipywidgets\\widgets\\widget.py:695\u001b[0m, in \u001b[0;36mWidget.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 692\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkeys \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_should_send_property(name, \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name)):\n\u001b[0;32m 693\u001b[0m \u001b[38;5;66;03m# Send new state to front-end\u001b[39;00m\n\u001b[0;32m 694\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msend_state(key\u001b[38;5;241m=\u001b[39mname)\n\u001b[1;32m--> 695\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnotify_change\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1517\u001b[0m, in \u001b[0;36mHasTraits.notify_change\u001b[1;34m(self, change)\u001b[0m\n\u001b[0;32m 1515\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnotify_change\u001b[39m(\u001b[38;5;28mself\u001b[39m, change):\n\u001b[0;32m 1516\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Notify observers of a change event\"\"\"\u001b[39;00m\n\u001b[1;32m-> 1517\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_notify_observers\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchange\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\traitlets\\traitlets.py:1564\u001b[0m, in \u001b[0;36mHasTraits._notify_observers\u001b[1;34m(self, event)\u001b[0m\n\u001b[0;32m 1561\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(c, EventHandler) \u001b[38;5;129;01mand\u001b[39;00m c\u001b[38;5;241m.\u001b[39mname \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1562\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, c\u001b[38;5;241m.\u001b[39mname)\n\u001b[1;32m-> 1564\u001b[0m \u001b[43mc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mevent\u001b[49m\u001b[43m)\u001b[49m\n", "Cell \u001b[1;32mIn[19], line 36\u001b[0m, in \u001b[0;36mon_file_selection\u001b[1;34m(change)\u001b[0m\n\u001b[0;32m 34\u001b[0m fs2, data2 \u001b[38;5;241m=\u001b[39m load_wav(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfolder_path_output_apx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mselected_file_mod\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 35\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m fs \u001b[38;5;241m==\u001b[39m fs2, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSampling rates do not match\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m---> 36\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstack\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata1\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata2\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 38\u001b[0m plot_timedomain(data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n\u001b[0;32m 39\u001b[0m plot_freqdomain(fs, data[\u001b[38;5;241m1\u001b[39m], data[\u001b[38;5;241m0\u001b[39m], data[\u001b[38;5;241m2\u001b[39m])\n", "File \u001b[1;32mc:\\Users\\pstruebi\\AppData\\Local\\miniconda3\\envs\\jupyter\\Lib\\site-packages\\numpy\\core\\shape_base.py:449\u001b[0m, in \u001b[0;36mstack\u001b[1;34m(arrays, axis, out, dtype, casting)\u001b[0m\n\u001b[0;32m 447\u001b[0m shapes \u001b[38;5;241m=\u001b[39m {arr\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;28;01mfor\u001b[39;00m arr \u001b[38;5;129;01min\u001b[39;00m arrays}\n\u001b[0;32m 448\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(shapes) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m--> 449\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mall input arrays must have the same shape\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 451\u001b[0m result_ndim \u001b[38;5;241m=\u001b[39m arrays[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m 452\u001b[0m axis \u001b[38;5;241m=\u001b[39m normalize_axis_index(axis, result_ndim)\n", "\u001b[1;31mValueError\u001b[0m: all input arrays must have the same shape" ] } ], "source": [ "%matplotlib widget\n", "\n", "# Define the folder path where the files are located\n", "folder_path_input = \"./testdata/input\"\n", "folder_path_output_default = \"./testdata/output\"\n", "folder_path_output_apx = \"./testdata/output/ap_measured\"\n", "\n", "\n", "# Get a list of all files in the folder\n", "file_names = [f for f in os.listdir(folder_path_output_default) if f.endswith(\".wav\")]\n", "\n", "# Create a dropdown widget to select the file\n", "file_dropdown = widgets.Dropdown(\n", " options=file_names,\n", " description='Select a file:'\n", ")\n", "ap_data_checkbox = widgets.Checkbox(\n", " value=True,\n", " description='Is APx data',\n", ")\n", "\n", "# Function to handle the dropdown value change\n", "def on_file_selection(change):\n", " selected_file = change['new']\n", " # Do something with the selected file\n", " print(f\"Selected file: {selected_file}\")\n", " if not ap_data_checkbox.value:\n", " fs, data = load_wav(f\"{folder_path_output_default}/{selected_file}\")\n", " else:\n", " #fs, data1 = load_wav(f\"{folder_path}/{selected_file}\")\n", " \n", " fs, data1 = load_wav(f\"{folder_path_input}/{selected_file}\")\n", " selected_file_mod = selected_file.replace(\".wav\", \"_Acquired Waveform.wav\")\n", " fs2, data2 = load_wav(f\"{folder_path_output_apx}/{selected_file_mod}\")\n", " assert fs == fs2, \"Sampling rates do not match\"\n", " data = np.stack((data1[0], data1[1], data2), axis=0)\n", "\n", " plot_timedomain(data[1], data[0], data[2])\n", " plot_freqdomain(fs, data[1], data[0], data[2])\n", "\n", "\n", "def on_checkbutton(change):\n", " val = change['new']\n", " \n", " if val:\n", " file_names = [f for f in os.listdir(folder_path_input) if f.endswith(\".wav\")]\n", " else:\n", " file_names = [f for f in os.listdir(folder_path_output_default) if f.endswith(\".wav\")]\n", "\n", " file_dropdown.options = file_names\n", "\n", "\n", "# Register the function to be called when the dropdown value changes\n", "file_dropdown.observe(on_file_selection, names='value')\n", "ap_data_checkbox.observe(on_checkbutton, names='value')\n", "\n", "# Display the file dropdown widget\n", "display(file_dropdown)\n", "display(ap_data_checkbox)\n", "\n", "# Setup the plots for later usage\n", "setup_timeplot()\n", "setup_freqplot()\n", "\n", "on_checkbutton({'new': ap_data_checkbox.value})\n", "#plot the initially selected file\n", "if file_dropdown.value is not None:\n", " on_file_selection({'new': file_dropdown.value})\n" ] } ], "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.11.5" } }, "nbformat": 4, "nbformat_minor": 2 }