Spaces:
Runtime error
Runtime error
| import os | |
| import gradio as gr | |
| from audio_separator.separator import Separator | |
| # Define models | |
| models = { | |
| "Roformer": { | |
| 'BS-Roformer-Viperx-1297.ckpt': 'model_bs_roformer_ep_317_sdr_12.9755.ckpt', | |
| 'BS-Roformer-Viperx-1296.ckpt': 'model_bs_roformer_ep_368_sdr_12.9628.ckpt', | |
| 'BS-Roformer-Viperx-1053.ckpt': 'model_bs_roformer_ep_937_sdr_10.5309.ckpt', | |
| 'Mel-Roformer-Viperx-1143.ckpt': 'model_mel_band_roformer_ep_3005_sdr_11.4360.ckpt' | |
| }, | |
| "MDX23C": [ | |
| 'MDX23C_D1581.ckpt', | |
| 'MDX23C-8KFFT-InstVoc_HQ.ckpt', | |
| 'MDX23C-8KFFT-InstVoc_HQ_2.ckpt', | |
| ], | |
| "MDXNet": [ | |
| 'UVR-MDX-NET-Inst_full_292.onnx', | |
| 'UVR-MDX-NET_Inst_187_beta.onnx', | |
| # Add remaining models as needed | |
| ], | |
| "VRArch": [ | |
| '1_HP-UVR.pth', | |
| '2_HP-UVR.pth', | |
| # Add remaining models as needed | |
| ], | |
| "Demucs": [ | |
| 'htdemucs_ft.yaml', | |
| 'htdemucs.yaml', | |
| # Add remaining models as needed | |
| ] | |
| } | |
| # Function for separating the audio | |
| def separate_audio(audio, model_name): | |
| if audio is None: | |
| return None, None | |
| # Get the selected model path | |
| model_path = None | |
| for model_group in models.values(): | |
| if isinstance(model_group, dict): | |
| model_path = model_group.get(model_name) | |
| if model_path: | |
| break | |
| elif model_name in model_group: | |
| model_path = model_name | |
| break | |
| if model_path is None: | |
| return None, None | |
| # Set up output directory and models for separation | |
| output_dir = "./output" | |
| os.makedirs(output_dir, exist_ok=True) | |
| separator = Separator(output_dir=output_dir) | |
| # Define output paths | |
| vocals_path = os.path.join(output_dir, 'Vocals.wav') | |
| instrumental_path = os.path.join(output_dir, 'Instrumental.wav') | |
| with gr.Progress() as progress: | |
| progress(0, "Loading model...") | |
| separator.load_model(model_filename=model_path) | |
| progress(20, "Model loaded. Starting separation...") | |
| # Step 3: Splitting track into Vocal and Instrumental | |
| voc_inst = separator.separate(audio) | |
| # Check if separation was successful | |
| if len(voc_inst) != 2: | |
| return None, None | |
| # Save the separated files | |
| os.rename(voc_inst[0], instrumental_path) | |
| os.rename(voc_inst[1], vocals_path) | |
| progress(100, "Separation complete!") | |
| # Return paths to the processed files | |
| return instrumental_path, vocals_path | |
| # Define the Gradio Interface | |
| with gr.Blocks(theme="NoCrypt/[email protected]") as demo: | |
| gr.Markdown("# Audio Separator Gradio Demo") | |
| with gr.Row(): | |
| with gr.Column(): | |
| link_input = gr.Audio(label="Upload Audio File", type="filepath") | |
| model_dropdown = gr.Dropdown(label="Select Model", choices=list( | |
| models["Roformer"].keys()) + models["MDX23C"] + models["MDXNet"] + models["VRArch"] + models["Demucs"]) | |
| separate_button = gr.Button("Separate Audio") | |
| with gr.Column(): | |
| instrumental_output = gr.Audio(label="Instrumental Output", type="filepath") | |
| vocals_output = gr.Audio(label="Vocals Output", type="filepath") | |
| # Define button functionality | |
| separate_button.click( | |
| separate_audio, | |
| inputs=[link_input, model_dropdown], | |
| outputs=[ | |
| instrumental_output, | |
| vocals_output, | |
| ] | |
| ) | |
| # Launch the Gradio app | |
| demo.launch(debug=True, share=True) | |