File size: 2,449 Bytes
e568d17
 
 
 
 
 
 
 
 
 
 
 
 
 
57c6cf0
e568d17
 
 
 
 
232d8ce
e568d17
 
 
 
 
 
 
 
 
 
232d8ce
e568d17
 
232d8ce
 
 
 
 
e568d17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57c6cf0
 
e568d17
 
 
39f9418
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
import os
import gradio as gr
from scipy.io.wavfile import write
import subprocess 


from audio_separator import Separator



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

    command = "python3 -m demucs.separate -n htdemucs_6s -d cpu test.wav -o out"
    process = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print("Demucs script output:", process.stdout.decode())
  
    os.makedirs("out", exist_ok=True)
    write('test.wav', audio[0], audio[1])
    result = os.system("python3 -m demucs.separate -n htdemucs_6s -d cpu test.wav -o out")
    print(f"Demucs script result: {result}")
    
    # Initialize the Separator with the audio file and model name
    separator = Separator("./out/mdx_extra_q/test/vocals.wav", model_name='UVR_MDXNET_KARA_2',use_cuda=False,output_format='mp3')
    primary_stem_path, secondary_stem_path = separator.separate()
    
    print(f'Primary stem saved at {primary_stem_path}')
    print(f'Secondary stem saved at {secondary_stem_path}')

    # Check if files exist before returning
    files = ["./out/htdemucs_6s/test/vocals.wav",
            secondary_stem_path,
            primary_stem_path,
             "./out/htdemucs_6s/test/bass.wav",
             "./out/htdemucs_6s/test/drums.wav",
             "./out/htdemucs_6s/test/other.wav",
              "./out/htdemucs_6s/test/piano.wav",
              "./out/htdemucs_6s/test/guitar.wav",
            ]

    
    for file in files:
        if not os.path.isfile(file):
            print(f"File not found: {file}")
        else:
            print(f"File exists: {file}")

    return files
  
title = "Source Sepration 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="Full Vocals"),
    gr.components.Audio(type="filepath", label="Lead Vocals"),
    gr.components.Audio(type="filepath", label="Chorus"),
     gr.components.Audio(type="filepath", label="Bass"),
     gr.components.Audio(type="filepath", label="Drums"),
     gr.components.Audio(type="filepath", label="Other"),
     gr.components.Audio(type="filepath", label="Piano"),
     gr.components.Audio(type="filepath", label="Guitar"),
    ],
    title=title,
    description=description,
).launch(share=True)