import gradio as gr import os import time import random import subprocess def separate_audio(audio_path): stem_count = 2 print(f"{audio_path=}") head, tail = os.path.split(audio_path) gradio_temp_path = head audio_filename = tail.split('.')[0] print(f"{gradio_temp_path=}") print(f"{audio_filename=}") print(f"{stem_count=}") os.makedirs(gradio_temp_path + f"/{audio_filename}/", exist_ok=True) command = f"spleeter separate -p spleeter:{stem_count}stems {audio_path} -o {gradio_temp_path}/" command = command.split() print(f"{command=}") result = subprocess.run(command) print(result) subprocess.run((f"ffmpeg -y -i {gradio_temp_path}/{audio_filename}/accompaniment.wav {gradio_temp_path}/{audio_filename}/accompaniment.mp3").split()) subprocess.run((f"ffmpeg -y -i {gradio_temp_path}/{audio_filename}/vocals.wav {gradio_temp_path}/{audio_filename}/vocals.mp3").split()) accompaniment_path = os.path.join(gradio_temp_path, audio_filename, "accompaniment.mp3") vocals_path = os.path.join(gradio_temp_path, audio_filename, "vocals.mp3") return accompaniment_path, vocals_path iface = gr.Interface( fn=separate_audio, title="Professional(😂) One click music vocal extraction using Spleeter", description="Usage Example: you can import the vocal to one of those voice changers then combine instrument with the result to get the normal music but with a changed vocal!", inputs=[gr.Audio(type="filepath", label="Audio File")], outputs=[gr.Audio(type="filepath", label='Accompaniment'), gr.Audio(type="filepath", label='Vocals')], live=True ) iface.launch()