File size: 1,012 Bytes
d43e763
021aa92
 
 
 
 
d43e763
 
c0c025d
d43e763
 
 
 
021aa92
c0c025d
 
021aa92
c0c025d
33a256b
c0c025d
 
 
 
 
021aa92
33a256b
 
 
021aa92
c0c025d
021aa92
 
 
d43e763
c0c025d
021aa92
d43e763
021aa92
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
import librosa
import gradio as gr
import subprocess
import os
import uuid

MAX_DURATION = 60  # seconds

def clean_audio(audio_path):
    duration = librosa.get_duration(path=audio_path)
    if duration > MAX_DURATION:
        raise gr.Error("❌ Audio too long. Max 60 seconds allowed.")

    uid = str(uuid.uuid4())
    out_dir = f"/tmp/out_{uid}"
    os.makedirs(out_dir, exist_ok=True)

    cmd = [
        "python", "-m", "demucs",
        "-n", "htdemucs",
        audio_path,
        "-o", out_dir
    ]
    subprocess.run(cmd, check=True)

    model_dir = os.path.join(out_dir, "htdemucs")
    song_dir = os.listdir(model_dir)[0]
    vocals_path = os.path.join(model_dir, song_dir, "vocals.wav")

    return vocals_path

gr.Interface(
    fn=clean_audio,
    inputs=gr.Audio(type="filepath", label="Upload Audio"),
    outputs=gr.Audio(type="filepath", label="Clean Vocals"),
    title="AI Voice Cleaner & Vocal Remover",
    description="Demucs-based vocal separation (HF Spaces compatible)"
).launch()