import spaces import demucs.separate import subprocess import os import uuid import gradio as gr from pydub import AudioSegment import shutil @spaces.GPU def process_song(url): uuid_str = str(uuid.uuid4()) cmd = f"spotdl {url} --output audio{uuid_str}" subprocess.run(cmd, shell=True) files = os.listdir(f"audio{uuid_str}") audio_files = [file for file in files if file.endswith((".mp3", ".wav", ".ogg"))] old_path = os.path.join(f"audio{uuid_str}", audio_files[0]) new_path = os.path.join(f"audio{uuid_str}", "audio.mp3") os.rename(old_path, new_path) demucs.separate.main( [ "--mp3", "--two-stems", "vocals", "-n", "htdemucs", new_path, "-o", f"output{uuid_str}", ] ) sound = AudioSegment.from_mp3(f"./output{uuid_str}/htdemucs/audio/no_vocals.mp3") sound.export("output.mp3", format="mp3", bitrate="192k") shutil.rmtree(f"audio{uuid_str}") shutil.rmtree(f"output{uuid_str}") return "output.mp3" iface = gr.Interface( fn=process_song, inputs=gr.Textbox(placeholder="Enter the Spotify URL", label="Song"), outputs=gr.Audio(label="Karaoke audio"), ) iface.launch()