File size: 4,207 Bytes
5d03fef
 
 
a5e574f
5d03fef
ccd7ab6
5d03fef
a5e574f
5d03fef
a5e574f
 
 
 
 
 
 
5d03fef
a5e574f
5d03fef
 
a5e574f
 
 
 
 
 
 
5d03fef
 
4ba75fd
 
 
a0f1b34
 
 
 
 
 
5d03fef
 
a0f1b34
5d03fef
 
a152a0a
 
5d03fef
 
a152a0a
 
5d03fef
a5e574f
 
 
5d03fef
 
 
 
 
 
 
64d0573
 
 
 
 
 
 
 
a5e574f
 
5d03fef
a5e574f
4ba75fd
a5e574f
 
 
 
4ba75fd
 
 
 
 
 
 
 
 
 
a0f1b34
 
 
 
 
 
 
 
 
 
 
 
 
5d03fef
64d0573
 
 
 
 
 
 
 
 
5d03fef
a152a0a
 
5d03fef
64d0573
 
5d03fef
a5e574f
5d03fef
4228e0b
5d03fef
 
 
4228e0b
 
 
64d0573
 
 
 
 
 
 
4228e0b
64d0573
4228e0b
64d0573
5d03fef
 
64d0573
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import gradio as gr
import subprocess

def run_ultrasinger(opt_i, youtube_link, opt_o, mode, whisper_model, language, crepe_model, extra, device):
    # Construct the command based on inputs
    cmd = ["python", "src/UltraSinger.py"]

    # Add input option
    if opt_i:
        cmd.extend(["-i", f'"{opt_i.name}"'])
    elif youtube_link:
        cmd.extend(["-i", f'"{youtube_link}"'])
    else:
        return "Error: No input file or YouTube link provided", ""

    # Add output folder option
    if opt_o:
        cmd.extend(["-o", f'"{opt_o}"'])

    # Add mode
    if mode != "default":
        mode_flags = {
            "Create Ultrastar txt file": "-u",
            "Create MIDI file": "-m",
            "Create sheet file": "-s"
        }
        cmd.append(mode_flags[mode])

    # Add transcription options
    if whisper_model:
        cmd.extend(["--whisper", whisper_model])
    if language:
        language_codes = {
            "English": "en", "French": "fr", "German": "de", "Spanish": "es",
            "Italian": "it", "Japanese": "ja", "Chinese": "zh", "Dutch": "nl",
            "Ukrainian": "uk", "Portuguese": "pt"
        }
        cmd.extend(["--language", language_codes[language]])

    # Add pitcher options
    cmd.extend(["--crepe", crepe_model])

    # Add extra options
    if extra:
        cmd.extend(extra.split())

    # Add device options
    if device:
        cmd.extend(device.split())

    # Debug: Print the command to check if it's constructed correctly
    print("Running command:", ' '.join(cmd))

    # Execute the command
    try:
        result = subprocess.run(cmd, capture_output=True, text=True)
        return result.stdout, result.stderr
    except Exception as e:
        return str(e), "Error occurred during execution"

def load_text_file(file_path):
    try:
        with open(file_path, 'r') as file:
            return file.read()
    except Exception as e:
        return str(e)

# Define Gradio inputs and outputs for UltraSinger
opt_i = gr.File(label="Ultrastar.txt or audio file (.mp3, .wav)")
youtube_link = gr.Textbox(label="YouTube Link", placeholder="Enter YouTube URL here")
opt_o = gr.Textbox(label="Output folder")
mode = gr.Radio(
    label="Mode options", 
    choices=[
        "default", "Create Ultrastar txt file", "Create MIDI file", 
        "Create sheet file"
    ], 
    value="default"
)
whisper_model = gr.Dropdown(
    label="Whisper Model", 
    choices=[
        "tiny", "base", "small", "medium", "large-v1", "large-v2", 
        "tiny.en", "base.en", "small.en", "medium.en"
    ], 
    value="large-v2"
)
language = gr.Dropdown(
    label="Language", 
    choices=[
        "English", "French", "German", "Spanish", "Italian", 
        "Japanese", "Chinese", "Dutch", "Ukrainian", "Portuguese"
    ], 
    value="English"
)
crepe_model = gr.Radio(
    label="Crepe Model", 
    choices=["full", "tiny"], 
    value="full"
)
extra = gr.Textbox(label="Extra options (e.g., --hyphenation True)")
device = gr.Dropdown(
    label="Device options",
    choices=[
        "", "--force_cpu True", "--force_cpu False", 
        "--force_whisper_cpu True", "--force_whisper_cpu False", 
        "--force_crepe_cpu True", "--force_crepe_cpu False"
    ],
    value=""
)

output_text = gr.Textbox(label="Standard Output")
error_text = gr.Textbox(label="Error Output")

# Define Gradio interface for UltraSinger
ultrasinger_tab = gr.Interface(
    fn=run_ultrasinger,
    inputs=[opt_i, youtube_link, opt_o, mode, whisper_model, language, crepe_model, extra, device],
    outputs=[output_text, error_text],
    title="UltraSinger UI",
    description="Upload an Ultrastar.txt or an audio file, set the options, and run UltraSinger."
)

# Load content for Tab 1 and Tab 2
tab1_content = load_text_file("info.txt")
tab2_content = load_text_file("usdb.txt")

# Create Gradio tabs
with gr.Blocks(theme="soft") as demo:
    with gr.Tabs():
        with gr.TabItem("UltraSinger"):
            ultrasinger_tab.render()
        with gr.TabItem("Info"):
            gr.Markdown(tab1_content)
        with gr.TabItem("FOR USDB USERS"):
            gr.Markdown(tab2_content)

# Launch the app
if __name__ == "__main__":
    demo.launch()