File size: 1,996 Bytes
ed2622c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import gradio as gr
from scipy.io.wavfile import write
import subprocess

from audio_separator import Separator  # Ensure this is correctly implemented

def inference(audio):
    os.makedirs("out", exist_ok=True)
    audio_path = 'test.wav'
    write(audio_path, audio[0], audio[1])

    try:
        # Using subprocess.run for better control
        command = f"python3 -m demucs.separate -n htdemucs_6s -d cpu {audio_path} -o out"
        process = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print("Demucs script output:", process.stdout.decode())
    except subprocess.CalledProcessError as e:
        print("Error in Demucs script:", e.stderr.decode())
        return None

    try:
        # Separating the stems using your custom separator
        separator = Separator("./out/htdemucs_6s/test/vocals.wav", model_name='UVR_MDXNET_KARA_2', use_cuda=False, output_format='mp3')
        primary_stem_path, secondary_stem_path = separator.separate()
    except Exception as e:
        print("Error in custom separation:", str(e))
        return None

    # Collecting all file paths
    files = [f"./out/htdemucs_6s/test/{stem}.wav" for stem in ["vocals", "bass", "drums", "other", "piano", "guitar"]]
    files.extend([secondary_stem_path,primary_stem_path ])

    # Check if files exist
    existing_files = [file for file in files if os.path.isfile(file)]
    if not existing_files:
        print("No files were created.")
        return None

    return existing_files

# Gradio Interface
title = "Source Separation Demo"
description = "Music Source Separation in the Waveform Domain. To use it, simply upload your audio."
gr.Interface(
    inference, 
    gr.components.Audio(type="numpy", label="Input"), 
    [gr.components.Audio(type="filepath", label=stem) for stem in ["Full Vocals","Bass", "Drums", "Other", "Piano", "Guitar", "Lead Vocals", "Chorus" ]],
    title=title,
    description=description,
).launch()