import gradio as gr import subprocess import os def run_ultrasinger(opt_i, opt_o, mode, whisper_model, language, crepe_model, extra, device): # Construct the command based on inputs cmd = ["python", "UltraSinger.py"] # Add options if opt_i: cmd.extend(["-i", opt_i.name]) if opt_o: cmd.extend(["-o", opt_o]) # Add mode if mode: cmd.extend(mode.split()) # Add transcription options if whisper_model: cmd.extend(["--whisper", whisper_model]) if language: cmd.extend(["--language", language]) # Add pitcher options if crepe_model: cmd.extend(["--crepe", "full"]) else: cmd.extend(["--crepe", "tiny"]) # Add extra options if extra: cmd.extend(extra.split()) # Add device options if device: cmd.extend(device.split()) # 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)") opt_o = gr.Textbox(label="Output folder") mode = gr.Dropdown( label="Mode options", choices=["default", "-u", "-m", "-s", "-r", "-p"], 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.Textbox(label="Language (e.g., en)") crepe_model = gr.Checkbox(label="Use Full Crepe Model", value=True) 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, opt_o, mode, whisper_model, language, crepe_model, extra, device], outputs=[output_text, error_text], title="UltraSinger App", description="Upload an Ultrastar.txt or an audio file, set the options, and run UltraSinger." ) # Define Gradio interfaces for the other two tabs tab1_content = gr.Interface( fn=lambda: load_text_file("info.txt"), inputs=[], outputs=gr.Textbox(label="Tab 1 Content"), title="Info" ) tab2_content = gr.Interface( fn=lambda: load_text_file("usdb.txt"), inputs=[], outputs=gr.Textbox(label="Tab 2 Content"), title="FOR USDB USERS" ) # Create Gradio tabs with gr.Blocks(theme="soft") as demo: with gr.Tabs(): with gr.TabItem("UltraSinger"): ultrasinger_tab.render() with gr.TabItem("Info"): tab1_content.render() with gr.TabItem("FOR USDB USERS"): tab2_content.render() # Launch the app if __name__ == "__main__": demo.launch()