{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append('../')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "unet\\diffusion_pytorch_model.safetensors not found\n", "unet\\diffusion_pytorch_model.safetensors not found\n" ] } ], "source": [ "import generation_utilities\n", "import numpy as np\n", "import librosa\n", "from glob import glob\n", "import random\n", "import IPython.display as ipd\n", "import soundfile as sf\n", "import importlib\n", "import ipywidgets as widgets\n", "import numpy as np\n", "importlib.reload(generation_utilities)\n", "import os\n", "os.environ[\"KMP_DUPLICATE_LIB_OK\"]=\"TRUE\"" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'22': '../input_songs\\\\22.mp3',\n", " 'Anti-Hero': '../input_songs\\\\Anti-Hero.mp3',\n", " 'Back-To-December': '../input_songs\\\\Back-To-December.mp3',\n", " 'Blank-Space': '../input_songs\\\\Blank-Space.mp3',\n", " 'Cardigan': '../input_songs\\\\Cardigan.mp3',\n", " 'Delicate': '../input_songs\\\\Delicate.mp3',\n", " 'Love-Story': '../input_songs\\\\Love-Story.mp3',\n", " 'Lover': '../input_songs\\\\Lover.mp3',\n", " 'uploaded_song': '../input_songs\\\\uploaded_song.mp3',\n", " 'Willow': '../input_songs\\\\Willow.mp3',\n", " 'You-Belong-With-Me': '../input_songs\\\\You-Belong-With-Me.mp3'}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "music = glob(\"../input_songs/*.mp3\")\n", "\n", "## Create music dictionary with keys as song names and values as path\n", "music_dict = {}\n", "for song in music:\n", " song_name = song.split(\"\\\\\")[-1].split(\".\")[0]\n", " music_dict[song_name] = song\n", "\n", "music_dict" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def load_songs_as_numpy_array(song_dict):\n", " song_names = list(song_dict.keys())\n", " song_paths = list(song_dict.values())\n", "\n", " song_selector = widgets.SelectMultiple(\n", " options=song_names,\n", " description='Select songs:',\n", " rows=len(song_names),\n", " layout=widgets.Layout(width='400px')\n", " )\n", "\n", " ## Add a slider between 0 and 1 to select the similarity\n", " similarity_slider = widgets.FloatSlider(\n", " value=0.75,\n", " min=0,\n", " max=1.0,\n", " step=0.05,\n", " description='Similarity:',\n", " disabled=False,\n", " continuous_update=False,\n", " orientation='horizontal',\n", " readout=True,\n", " readout_format='.2f',\n", " )\n", "\n", "\n", " select_button = widgets.Button(description='Select')\n", " output = widgets.Output()\n", "\n", " def on_select_button_clicked(_):\n", " selected_songs = [librosa.load(song_paths[i], sr=22050)[0] for i in song_selector.index] \n", " name = '+'.join([song_names[i] for i in song_selector.index])\n", "\n", " with output:\n", " output.clear_output()\n", " print(f'Selected songs: {name}')\n", " ## Get similarity from the slider\n", " similarity = similarity_slider.value\n", " spec, song = generation_utilities.generate_songs(selected_songs, similarity=similarity, quality=500, merging_quality=100, device='cuda')\n", "\n", " ## Play all the selected songs\n", " print(\"Selected songs: \")\n", " for s in selected_songs:\n", " ipd.display(ipd.Audio(s, rate=22050))\n", "\n", " # Play song\n", " print(\"\\n\\nGenerated song: \")\n", " ipd.display(ipd.Audio(song, rate=22050))\n", "\n", " ## Get a rating from the user with ipywidgets\n", " rating = widgets.Text(\n", " value='',\n", " placeholder='Type something',\n", " description='Rating:',\n", " disabled=False\n", " )\n", " display(rating)\n", " ## Make a submit button\n", " submit_button = widgets.Button(description='Submit')\n", " display(submit_button)\n", "\n", " def on_submit_button_clicked(_):\n", " ## Convert rating to float\n", " rating_value = float(rating.value)\n", "\n", " ## Save the song\n", " total_files = glob('../DataSet/Song/*')\n", " sf.write(f'../DataSet/Song/{len(total_files)}_{name}_{similarity}_{rating_value}.wav', song, 22050, 'PCM_24')\n", "\n", " ## Save the spectrogram\n", " total_files = glob('../DataSet/Spec/*')\n", " np.save(f'../DataSet/Spec/{len(total_files)}_{name}_{similarity}_{rating_value}.npy', spec)\n", "\n", " with output:\n", " output.clear_output()\n", " print(\"Saved\")\n", "\n", "\n", " submit_button.on_click(on_submit_button_clicked)\n", " \n", " select_button.on_click(on_select_button_clicked)\n", "\n", " display(song_selector)\n", " display(select_button)\n", " display(similarity_slider)\n", " display(output)\n", "\n", "\n", " # return selected_songs, name\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c2beb314b7784af097f04ad2bfd70046", "version_major": 2, "version_minor": 0 }, "text/plain": [ "SelectMultiple(description='Select songs:', layout=Layout(width='400px'), options=('22', 'Anti-Hero', 'Back-To…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2edb699552dd4196bec2683395fc0f11", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Button(description='Select', style=ButtonStyle())" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "80b12515c92242ffa9483eb3982464a2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "FloatSlider(value=0.75, continuous_update=False, description='Similarity:', max=1.0, step=0.05)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ef000bfed4b94491931224b0cb0ce823", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "load_songs_as_numpy_array(music_dict)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import os\n", "os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Merging songs...\n", "Generating song...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7ea21aa7cb7249d4ba35c63506cf0031", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/100 [00:00,\n", " array([-2.02207055e-04, -9.85335573e-05, -1.04858875e-04, ...,\n", " -2.07161275e-03, -6.43183384e-03, -6.42244611e-03], dtype=float32))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "generation_utilities.generate_songs([librosa.load(music_dict[\"22\"], sr=22050)[0]] ,)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from streamlit_extras.switch_page_button import switch_page\n", "\n", "switch_page(\"New page name\")" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }