import gradio as gr import os import random import subprocess def separate_audio(audio_path, stem_count): 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=}") command = f"spleeter separate -p spleeter:{stem_count}stems {audio_path}" command = command.split() print(f"{command=}") result = subprocess.run(command, capture_output=True) print(result) if result.returncode != 0: print(f"Error: {result.stderr}") return [] randomnumber = str(random.randint(111111111, 999999999)) output_folder = f"{gradio_temp_path}/separated_audio/{randomnumber}" os.makedirs(output_folder, exist_ok=True) # Ensure the output directory exists paths = [] stems = ['vocals', 'drums', 'bass', 'other', 'piano'] for i, stem in enumerate(stems[:stem_count]): stem_path = os.path.join(output_folder, f"{stem}.wav") if os.path.exists(stem_path): paths.append((stem.capitalize(), stem_path)) # Return audio components for Gradio interface audio_outputs = [] for label, path in paths: audio_outputs.append(gr.Audio(file=path, label=label)) return audio_outputs iface = gr.Interface( fn=separate_audio, inputs=[gr.Audio(type="filepath"), gr.Radio([2, 4, 5])], outputs=[gr.Audio(label="Accompaniment"), gr.Audio(label="Vocals"), gr.Audio(label="Drums"), gr.Audio(label="Bass"), gr.Audio(label="Other"), gr.Audio(label="Piano")] ) iface.launch()