File size: 2,481 Bytes
a4a8a73
 
 
 
 
36a8214
a4a8a73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36a8214
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
# gui.py

import gradio as gr
from downloader import downloader_conf, url_media_conf, url_button_conf, show_components_downloader
from pipeline import sound_separate
from log import logger  # ensure logger source is consistent

# Constants
TITLE = "<center><strong><font size='7'>Audio🔹separator</font></strong></center>"
DESCRIPTION = "This demo uses the MDX-Net models for vocal and background sound separation."


def get_gui(theme):
    with gr.Blocks(theme=theme) as app:
        gr.Markdown(TITLE)
        gr.Markdown(DESCRIPTION)

        # Downloader UI
        downloader_gui = downloader_conf()
        with gr.Row():
            with gr.Column(scale=2):
                url_media_gui = url_media_conf()
            with gr.Column(scale=1):
                url_button_gui = url_button_conf()

        downloader_gui.change(
            show_components_downloader,
            [downloader_gui],
            [url_media_gui, url_button_gui]
        )

        # Audio file upload input
        aud = gr.File(label="Audio file", type="filepath")

        url_button_gui.click(
            fn=audio_downloader,
            inputs=[url_media_gui],
            outputs=[aud]
        )

        # Stem choice
        stem_gui = gr.Radio(choices=["vocal", "background"], value="vocal", label="Stem")

        # Options for effects
        main_gui = gr.Checkbox(False, label="Main")
        dereverb_gui = gr.Checkbox(False, label="Dereverb", visible=True)
        vocal_effects_gui = gr.Checkbox(False, label="Vocal Effects", visible=True)
        background_effects_gui = gr.Checkbox(False, label="Background Effects", visible=False)

        stem_gui.change(
            lambda stem: (
                gr.update(visible=stem == "vocal"),
                gr.update(visible=stem == "vocal"),
                gr.update(visible=stem == "vocal"),
                gr.update(visible=stem == "background"),
            ),
            [stem_gui],
            [main_gui, dereverb_gui, vocal_effects_gui, background_effects_gui]
        )

        # Basic trigger
        button_base = gr.Button("Inference", variant="primary")
        output_base = gr.File(label="Result", file_count="multiple", interactive=False)

        button_base.click(
            fn=sound_separate,
            inputs=[
                aud, stem_gui, main_gui, dereverb_gui,
                vocal_effects_gui, background_effects_gui
            ],
            outputs=[output_base]
        )

    return app