471 lines
24 KiB
Plaintext
471 lines
24 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"id": "view-in-github",
|
|
"colab_type": "text"
|
|
},
|
|
"source": [
|
|
"<a href=\"https://colab.research.google.com/github/eloimoliner/denoising-historical-recordings/blob/colab/colab/demo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"source": [
|
|
"# New Section"
|
|
],
|
|
"metadata": {
|
|
"id": "jbe_aWYkjWRH"
|
|
},
|
|
"id": "jbe_aWYkjWRH"
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "dd70762d",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "dd70762d",
|
|
"outputId": "499681b1-46d6-4f21-b3b8-3a3348f6765b"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Cloning into 'denoising-historical-recordings'...\n",
|
|
"remote: Enumerating objects: 177, done.\u001b[K\n",
|
|
"remote: Counting objects: 100% (177/177), done.\u001b[K\n",
|
|
"remote: Compressing objects: 100% (153/153), done.\u001b[K\n",
|
|
"remote: Total 177 (delta 63), reused 99 (delta 16), pack-reused 0\u001b[K\n",
|
|
"Receiving objects: 100% (177/177), 97.29 KiB | 4.86 MiB/s, done.\n",
|
|
"Resolving deltas: 100% (63/63), done.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#download the files\n",
|
|
"! git clone https://github.com/eloimoliner/denoising-historical-recordings.git\n",
|
|
"! wget https://github.com/eloimoliner/denoising-historical-recordings/releases/download/v0.0/checkpoint.zip\n",
|
|
"! unzip checkpoint.zip -d denoising-historical-recordings/experiments/trained_model/"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"\n",
|
|
"%cd denoising-historical-recordings"
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "HmHRpa5eloy2",
|
|
"outputId": "34af882d-8fb7-4b2a-dccd-50e328e0ab90"
|
|
},
|
|
"id": "HmHRpa5eloy2",
|
|
"execution_count": 18,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"/content/denoising-historical-recordings\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
""
|
|
],
|
|
"metadata": {
|
|
"id": "gvd6KZkTlyhR"
|
|
},
|
|
"id": "gvd6KZkTlyhR",
|
|
"execution_count": 12,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"#install dependencies\n",
|
|
"! pip install hydra-core==0.11.3"
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "nmic9hVzmSj6",
|
|
"outputId": "c549f0d1-9e5c-4445-ecd4-702697535011"
|
|
},
|
|
"id": "nmic9hVzmSj6",
|
|
"execution_count": 15,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Collecting hydra-core==0.11.3\n",
|
|
" Downloading hydra_core-0.11.3-py3-none-any.whl (72 kB)\n",
|
|
"\u001b[?25l\r\u001b[K |████▌ | 10 kB 19.6 MB/s eta 0:00:01\r\u001b[K |█████████ | 20 kB 12.0 MB/s eta 0:00:01\r\u001b[K |█████████████▋ | 30 kB 8.9 MB/s eta 0:00:01\r\u001b[K |██████████████████▏ | 40 kB 7.9 MB/s eta 0:00:01\r\u001b[K |██████████████████████▊ | 51 kB 5.3 MB/s eta 0:00:01\r\u001b[K |███████████████████████████▎ | 61 kB 5.4 MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▉| 71 kB 5.7 MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 72 kB 372 kB/s \n",
|
|
"\u001b[?25hCollecting omegaconf<1.5,>=1.4\n",
|
|
" Downloading omegaconf-1.4.1-py3-none-any.whl (14 kB)\n",
|
|
"Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from omegaconf<1.5,>=1.4->hydra-core==0.11.3) (1.15.0)\n",
|
|
"Collecting PyYAML\n",
|
|
" Downloading PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (596 kB)\n",
|
|
"\u001b[K |████████████████████████████████| 596 kB 39.4 MB/s \n",
|
|
"\u001b[?25hInstalling collected packages: PyYAML, omegaconf, hydra-core\n",
|
|
"Successfully installed PyYAML-6.0 hydra-core-0.11.3 omegaconf-1.4.1\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"import unet\n",
|
|
"import tensorflow as tf\n",
|
|
"import soundfile as sf\n",
|
|
"import numpy as np\n",
|
|
"from tqdm import tqdm\n",
|
|
"import scipy.signal\n",
|
|
"import hydra\n",
|
|
"import os"
|
|
],
|
|
"metadata": {
|
|
"id": "TQBDTmO4mUBx"
|
|
},
|
|
"id": "TQBDTmO4mUBx",
|
|
"execution_count": 17,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"#workaround to load hydra conf file\n",
|
|
"import yaml\n",
|
|
"from pathlib import Path\n",
|
|
"args = yaml.safe_load(Path('conf/conf.yaml').read_text())\n",
|
|
"class dotdict(dict):\n",
|
|
" \"\"\"dot.notation access to dictionary attributes\"\"\"\n",
|
|
" __getattr__ = dict.get\n",
|
|
" __setattr__ = dict.__setitem__\n",
|
|
" __delattr__ = dict.__delitem__\n",
|
|
"args=dotdict(args)\n",
|
|
"unet_args=dotdict(args.unet)"
|
|
],
|
|
"metadata": {
|
|
"id": "yMI9sIUYo9Lp"
|
|
},
|
|
"id": "yMI9sIUYo9Lp",
|
|
"execution_count": 62,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"path_experiment=str(args.path_experiment)\n",
|
|
"\n",
|
|
"unet_model = unet.build_model_denoise(unet_args=unet_args)\n",
|
|
"\n",
|
|
"ckpt=os.path.join(\"/content/denoising-historical-recordings\",path_experiment, 'checkpoint')\n",
|
|
"unet_model.load_weights(ckpt)"
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "cbdPyEpAp7s0",
|
|
"outputId": "63df20d2-1c00-41a5-c8fc-a6cdcfb57d08"
|
|
},
|
|
"id": "cbdPyEpAp7s0",
|
|
"execution_count": 67,
|
|
"outputs": [
|
|
{
|
|
"output_type": "execute_result",
|
|
"data": {
|
|
"text/plain": [
|
|
"<tensorflow.python.training.tracking.util.CheckpointLoadStatus at 0x7f1d0d679dd0>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"execution_count": 67
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"def do_stft(noisy):\n",
|
|
" \n",
|
|
" window_fn = tf.signal.hamming_window\n",
|
|
"\n",
|
|
" win_size=args.stft[\"win_size\"]\n",
|
|
" hop_size=args.stft[\"hop_size\"]\n",
|
|
"\n",
|
|
" \n",
|
|
" stft_signal_noisy=tf.signal.stft(noisy,frame_length=win_size, window_fn=window_fn, frame_step=hop_size, pad_end=True)\n",
|
|
" stft_noisy_stacked=tf.stack( values=[tf.math.real(stft_signal_noisy), tf.math.imag(stft_signal_noisy)], axis=-1)\n",
|
|
"\n",
|
|
" return stft_noisy_stacked\n",
|
|
"\n",
|
|
"def do_istft(data):\n",
|
|
" \n",
|
|
" window_fn = tf.signal.hamming_window\n",
|
|
"\n",
|
|
" win_size=args.stft[\"win_size\"]\n",
|
|
" hop_size=args.stft[\"hop_size\"]\n",
|
|
"\n",
|
|
" inv_window_fn=tf.signal.inverse_stft_window_fn(hop_size, forward_window_fn=window_fn)\n",
|
|
"\n",
|
|
" pred_cpx=data[...,0] + 1j * data[...,1]\n",
|
|
" pred_time=tf.signal.inverse_stft(pred_cpx, win_size, hop_size, window_fn=inv_window_fn)\n",
|
|
" return pred_time\n"
|
|
],
|
|
"metadata": {
|
|
"id": "iDJGN-1_taXR"
|
|
},
|
|
"id": "iDJGN-1_taXR",
|
|
"execution_count": 79,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"def denoise_audio(audio):\n",
|
|
"\n",
|
|
" data, samplerate = sf.read(audio)\n",
|
|
" print(data.dtype)\n",
|
|
" #Stereo to mono\n",
|
|
" if len(data.shape)>1:\n",
|
|
" data=np.mean(data,axis=1)\n",
|
|
" \n",
|
|
" if samplerate!=44100: \n",
|
|
" print(\"Resampling\")\n",
|
|
" \n",
|
|
" data=scipy.signal.resample(data, int((44100 / samplerate )*len(data))+1) \n",
|
|
" \n",
|
|
" \n",
|
|
" \n",
|
|
" segment_size=44100*5 #20s segments\n",
|
|
"\n",
|
|
" length_data=len(data)\n",
|
|
" overlapsize=2048 #samples (46 ms)\n",
|
|
" window=np.hanning(2*overlapsize)\n",
|
|
" window_right=window[overlapsize::]\n",
|
|
" window_left=window[0:overlapsize]\n",
|
|
" audio_finished=False\n",
|
|
" pointer=0\n",
|
|
" denoised_data=np.zeros(shape=(len(data),))\n",
|
|
" residual_noise=np.zeros(shape=(len(data),))\n",
|
|
" numchunks=int(np.ceil(length_data/segment_size))\n",
|
|
" \n",
|
|
" for i in tqdm(range(numchunks)):\n",
|
|
" if pointer+segment_size<length_data:\n",
|
|
" segment=data[pointer:pointer+segment_size]\n",
|
|
" #dostft\n",
|
|
" segment_TF=do_stft(segment)\n",
|
|
" segment_TF_ds=tf.data.Dataset.from_tensors(segment_TF)\n",
|
|
" pred = unet_model.predict(segment_TF_ds.batch(1))\n",
|
|
" pred=pred[0]\n",
|
|
" residual=segment_TF-pred[0]\n",
|
|
" residual=np.array(residual)\n",
|
|
" pred_time=do_istft(pred[0])\n",
|
|
" residual_time=do_istft(residual)\n",
|
|
" residual_time=np.array(residual_time)\n",
|
|
"\n",
|
|
" if pointer==0:\n",
|
|
" pred_time=np.concatenate((pred_time[0:int(segment_size-overlapsize)], np.multiply(pred_time[int(segment_size-overlapsize):segment_size],window_right)), axis=0)\n",
|
|
" residual_time=np.concatenate((residual_time[0:int(segment_size-overlapsize)], np.multiply(residual_time[int(segment_size-overlapsize):segment_size],window_right)), axis=0)\n",
|
|
" else:\n",
|
|
" pred_time=np.concatenate((np.multiply(pred_time[0:int(overlapsize)], window_left), pred_time[int(overlapsize):int(segment_size-overlapsize)], np.multiply(pred_time[int(segment_size-overlapsize):int(segment_size)],window_right)), axis=0)\n",
|
|
" residual_time=np.concatenate((np.multiply(residual_time[0:int(overlapsize)], window_left), residual_time[int(overlapsize):int(segment_size-overlapsize)], np.multiply(residual_time[int(segment_size-overlapsize):int(segment_size)],window_right)), axis=0)\n",
|
|
" \n",
|
|
" denoised_data[pointer:pointer+segment_size]=denoised_data[pointer:pointer+segment_size]+pred_time\n",
|
|
" residual_noise[pointer:pointer+segment_size]=residual_noise[pointer:pointer+segment_size]+residual_time\n",
|
|
"\n",
|
|
" pointer=pointer+segment_size-overlapsize\n",
|
|
" else: \n",
|
|
" segment=data[pointer::]\n",
|
|
" lensegment=len(segment)\n",
|
|
" segment=np.concatenate((segment, np.zeros(shape=(int(segment_size-len(segment)),))), axis=0)\n",
|
|
" audio_finished=True\n",
|
|
" #dostft\n",
|
|
" segment_TF=do_stft(segment)\n",
|
|
"\n",
|
|
" segment_TF_ds=tf.data.Dataset.from_tensors(segment_TF)\n",
|
|
"\n",
|
|
" pred = unet_model.predict(segment_TF_ds.batch(1))\n",
|
|
" pred=pred[0]\n",
|
|
" residual=segment_TF-pred[0]\n",
|
|
" residual=np.array(residual)\n",
|
|
" pred_time=do_istft(pred[0])\n",
|
|
" pred_time=np.array(pred_time)\n",
|
|
" pred_time=pred_time[0:segment_size]\n",
|
|
" residual_time=do_istft(residual)\n",
|
|
" residual_time=np.array(residual_time)\n",
|
|
" residual_time=residual_time[0:segment_size]\n",
|
|
" if pointer==0:\n",
|
|
" pred_time=pred_time\n",
|
|
" residual_time=residual_time\n",
|
|
" else:\n",
|
|
" pred_time=np.concatenate((np.multiply(pred_time[0:int(overlapsize)], window_left), pred_time[int(overlapsize):int(segment_size)]),axis=0)\n",
|
|
" residual_time=np.concatenate((np.multiply(residual_time[0:int(overlapsize)], window_left), residual_time[int(overlapsize):int(segment_size)]),axis=0)\n",
|
|
"\n",
|
|
" denoised_data[pointer::]=denoised_data[pointer::]+pred_time[0:lensegment]\n",
|
|
" residual_noise[pointer::]=residual_noise[pointer::]+residual_time[0:lensegment]\n",
|
|
" return denoised_data"
|
|
],
|
|
"metadata": {
|
|
"id": "LcSmbzm_z8w9"
|
|
},
|
|
"id": "LcSmbzm_z8w9",
|
|
"execution_count": 72,
|
|
"outputs": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"from google.colab import files\n",
|
|
"uploaded=files.upload()"
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"resources": {
|
|
"http://localhost:8080/nbextensions/google.colab/files.js": {
|
|
"data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
|
|
"ok": true,
|
|
"headers": [
|
|
[
|
|
"content-type",
|
|
"application/javascript"
|
|
]
|
|
],
|
|
"status": 200,
|
|
"status_text": ""
|
|
}
|
|
},
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 75
|
|
},
|
|
"id": "50Kmdy6AtbhW",
|
|
"outputId": "31d357e7-5adb-45f4-a3fe-3bb11d05a5af"
|
|
},
|
|
"id": "50Kmdy6AtbhW",
|
|
"execution_count": 75,
|
|
"outputs": [
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/html": [
|
|
"\n",
|
|
" <input type=\"file\" id=\"files-d94b6f39-a36a-4c09-b590-17eb2e0fd976\" name=\"files[]\" multiple disabled\n",
|
|
" style=\"border:none\" />\n",
|
|
" <output id=\"result-d94b6f39-a36a-4c09-b590-17eb2e0fd976\">\n",
|
|
" Upload widget is only available when the cell has been executed in the\n",
|
|
" current browser session. Please rerun this cell to enable.\n",
|
|
" </output>\n",
|
|
" <script src=\"/nbextensions/google.colab/files.js\"></script> "
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {}
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Saving Carmen-Habanera_(Love_is_Like_a_Woo_-_Marguerite_D'Alvarez_noisy_input.wav to Carmen-Habanera_(Love_is_Like_a_Woo_-_Marguerite_D'Alvarez_noisy_input.wav\n"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
"for fn in uploaded.keys():\n",
|
|
" print('Denoising uploaded file \"{name}\"'.format(\n",
|
|
" name=fn))\n",
|
|
" denoise_data=denoise_audio(fn)"
|
|
],
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "0po6zpvrylc2",
|
|
"outputId": "0d2b228e-dad8-40f8-f10a-118ea115180d"
|
|
},
|
|
"id": "0po6zpvrylc2",
|
|
"execution_count": null,
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stderr",
|
|
"text": [
|
|
"\r 0%| | 0/41 [00:00<?, ?it/s]"
|
|
]
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Denoising uploaded file \"Carmen-Habanera_(Love_is_Like_a_Woo_-_Marguerite_D'Alvarez_noisy_input.wav\"\n",
|
|
"float64\n"
|
|
]
|
|
},
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stderr",
|
|
"text": [
|
|
" 71%|███████ | 29/41 [09:59<04:09, 20.77s/it]"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"source": [
|
|
""
|
|
],
|
|
"metadata": {
|
|
"id": "3tEshWBezYvf"
|
|
},
|
|
"id": "3tEshWBezYvf",
|
|
"execution_count": null,
|
|
"outputs": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.5"
|
|
},
|
|
"colab": {
|
|
"name": "demo.ipynb",
|
|
"provenance": [],
|
|
"include_colab_link": true
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
} |