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()