Music-Split / app.py
amirgame197's picture
Update app.py
c56a4ac verified
raw
history blame
1.63 kB
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()