File size: 4,203 Bytes
bb25927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac7919b
bb25927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac7919b
bb25927
 
 
 
 
 
 
ac7919b
bb25927
 
 
 
 
 
 
ac7919b
bb25927
 
 
 
ac7919b
bb25927
 
 
 
 
 
 
 
 
ac7919b
 
bb25927
 
ac7919b
bb25927
 
 
 
 
 
 
 
ac7919b
bb25927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ac7919b
bb25927
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", "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()