Spaces:
Sleeping
Sleeping
File size: 3,420 Bytes
a20b9cf 20bfe49 a20b9cf 20bfe49 3697795 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 3697795 a20b9cf 20bfe49 a20b9cf 20bfe49 3697795 20bfe49 a20b9cf 11c328a 20bfe49 3697795 a20b9cf 20bfe49 a20b9cf 20bfe49 3697795 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 a20b9cf 20bfe49 3697795 20bfe49 a20b9cf 20bfe49 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
import os
import tempfile
import subprocess
import gradio as gr
import logging
from pathlib import Path
import sys
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("demucs")
DEFAULT_MODEL = "htdemucs"
print("✅ App is starting...")
print(f"✅ Using Python at {sys.executable}")
def run_demucs(audio_path, selected_stems, model_name=DEFAULT_MODEL):
try:
logger.info(f"Running Demucs on {audio_path}")
print("🔄 Starting demucs process...")
output_dir = tempfile.mkdtemp()
cmd = f"{sys.executable} -m demucs -n {model_name} -o {output_dir} \"{audio_path}\""
logger.info(f"Executing command: {cmd}")
print(f"🧪 Running command: {cmd}")
process = subprocess.Popen(
cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
stdout, stderr = process.communicate()
print("✅ Process finished.")
print("STDOUT:\n", stdout)
print("STDERR:\n", stderr)
if process.returncode != 0:
logger.error(f"Demucs error: {stderr}")
raise gr.Error(f"Demucs failed: {stderr}")
track_name = Path(audio_path).stem
stem_dir = Path(output_dir) / model_name / track_name
output_files = []
for stem in selected_stems:
stem_path = stem_dir / f"{stem}.wav"
if stem_path.exists():
output_files.append(str(stem_path))
if not output_files:
raise gr.Error("No stems were generated")
return output_files
except Exception as e:
logger.error(f"Error: {str(e)}")
raise gr.Error(f"Process failed: {str(e)}")
def create_interface():
with gr.Blocks() as interface:
gr.Markdown("# 🎚️ Demucs Stem Splitter")
with gr.Row():
audio_input = gr.Audio(type="filepath", label="Upload Audio File")
with gr.Row():
vocals = gr.Checkbox(label="Vocals", value=True)
drums = gr.Checkbox(label="Drums", value=True)
bass = gr.Checkbox(label="Bass", value=True)
other = gr.Checkbox(label="Other", value=True)
with gr.Row():
model_selector = gr.Dropdown(
label="Model",
choices=["htdemucs", "mdx_extra", "mdx_extra_q"],
value="htdemucs"
)
with gr.Row():
submit_btn = gr.Button("Split Stems")
output = gr.File(label="Output Stems", file_count="multiple")
def process(audio_file, vocals_enabled, drums_enabled, bass_enabled, other_enabled, model):
selected = [stem for stem, enabled in [
("vocals", vocals_enabled),
("drums", drums_enabled),
("bass", bass_enabled),
("other", other_enabled),
] if enabled]
if not selected:
raise gr.Error("Please select at least one stem")
return run_demucs(audio_file, selected, model)
submit_btn.click(
fn=process,
inputs=[audio_input, vocals, drums, bass, other, model_selector],
outputs=output
)
return interface
def main():
print("🚀 Launching Gradio interface...")
interface = create_interface()
interface.launch()
if __name__ == '__main__':
main()
|