Spaces:
Paused
Paused
| import gradio as gr | |
| import os, sys | |
| from colorama import Fore | |
| from rvcsynch import download_from_url | |
| now_dir = os.getcwd() | |
| sys.path.append(now_dir) | |
| def show_available(filepath,format=None): | |
| if format: | |
| print(f"Format: {format}") | |
| files = [] | |
| for file in os.listdir(filepath): | |
| if file.endswith(format): | |
| print(f"Matches format: {file}") | |
| files.append(file) | |
| else: | |
| print(f"Does not match format: {file}") | |
| print(f"Matches: {files}") | |
| if len(files) < 1: | |
| return [''] | |
| return files | |
| if len(os.listdir(filepath)) < 1: | |
| return [''] | |
| return os.listdir(filepath) | |
| # Function to detect the .pth and .index files | |
| def detect_files(model_name): | |
| model_dir = f"{now_dir}/assets/weights/{model_name}" | |
| index_dir = f"{now_dir}/logs/{model_name}" | |
| # Detect .pth file | |
| model_pth_file = None | |
| for file in os.listdir(model_dir): | |
| if file.endswith(".pth"): | |
| model_pth_file = os.path.join(model_dir, file) | |
| break | |
| # Detect .index file | |
| index_file = None | |
| for file in os.listdir(index_dir): | |
| if file.endswith(".index"): | |
| index_file = os.path.join(index_dir, file) | |
| break | |
| if model_pth_file and index_file: | |
| return f"Model .pth file: {model_pth_file}\nIndex file: {index_file}" | |
| else: | |
| return "Model .pth or index file not found." | |
| # Function to process the audio using the detected files | |
| def process_audio(model_name, pitch, input_path, f0_method, save_as, index_rate, volume_normalization, consonant_protection): | |
| model_dir = f"{now_dir}/assets/weights/{model_name}" | |
| index_dir = f"{now_dir}/logs/{model_name}" | |
| # Detect files | |
| model_pth_file = None | |
| index_file = None | |
| for file in os.listdir(model_dir): | |
| if file.endswith(".pth"): | |
| model_pth_file = os.path.join(model_dir, file) | |
| break | |
| for file in os.listdir(index_dir): | |
| if file.endswith(".index"): | |
| index_file = os.path.join(index_dir, file) | |
| break | |
| if not model_pth_file or not index_file: | |
| return "Model .pth or index file not found.", None | |
| if not os.path.exists(input_path): | |
| return f"{input_path} was not found in your RVC folder.", None | |
| # Set environment variables for paths | |
| os.environ['index_root'] = os.path.dirname(index_file) | |
| index_path = os.path.basename(index_file) | |
| os.environ['weight_root'] = os.path.dirname(model_pth_file) | |
| # Remove any previous output | |
| if os.path.exists(save_as): | |
| os.remove(save_as) | |
| # Execute the CLI command | |
| os.system(f"python {now_dir}/tools/infer_cli.py --f0up_key {pitch} --input_path {input_path} --index_path {index_path} --f0method {f0_method} --opt_path {save_as} --model_name {model_name} --index_rate {index_rate} --device 'cuda:0' --is_half True --filter_radius 3 --resample_sr 0 --rms_mix_rate {volume_normalization} --protect {consonant_protection}") | |
| if os.path.exists(save_as): | |
| return "Processing complete. Here is your output audio:", save_as | |
| else: | |
| return "Error in processing audio.", None | |
| # Gradio interface | |
| with gr.Blocks(theme="gradio/soft") as demo: | |
| gr.Markdown("# 🔊 ** RVC GUI**") | |
| with gr.Tabs(): | |
| model_name = gr.Textbox(label="Model Name", value="Ren") | |
| pitch = gr.Slider(minimum=-12, maximum=12, step=1, label="Pitch", value=0) | |
| with gr.Tab("Infernece"): | |
| input_path = gr.Dropdown(label="",choices=show_available('audios'),value='',interactive=True) | |
| f0_method = gr.Radio(choices=["rmvpe", "pm", "crepe"], label="F0 Method", value="rmvpe") | |
| save_as = gr.Textbox(label="Save As", value="/content/RVC/audios/cli_output.wav") | |
| index_rate = gr.Slider(minimum=0, maximum=1, step=0.01, label="Index Rate", value=0.5) | |
| volume_normalization = gr.Slider(minimum=0, maximum=1, step=0.01, label="Volume Normalization", value=0) | |
| consonant_protection = gr.Slider(minimum=0, maximum=1, step=0.01, label="Consonant Protection", value=0.5) | |
| output_text = gr.Textbox(label="Output") | |
| output_audio = gr.Audio(label="Processed Audio") | |
| # Button to detect files | |
| detect_btn = gr.Button("Detect Files") | |
| detect_btn.click(fn=detect_files, inputs=[model_name], outputs=output_text) | |
| # Button to process the audio and return audio output | |
| submit_btn = gr.Button("Submit") | |
| submit_btn.click(fn=process_audio, | |
| inputs=[model_name, pitch, input_path, f0_method, save_as, index_rate, volume_normalization, consonant_protection], | |
| outputs=[output_text, output_audio]) | |
| with gr.Tab("Download a model"): | |
| url = gr.Textbox(label="url models...") | |
| url_name = gr.Textbox(label="models names...") | |
| download_fm = gr.Button("download model") | |
| download_fm.click(fn=download_from_url, inputs=[url, url_name], outputs=url_name) | |
| # Launch the app | |
| demo.launch() | |