import os import sys import subprocess sys.path.append(os.getcwd()) from main.app.core.ui import gr_info, gr_warning from main.app.variables import python, translations, configs, config def separator_music(input, output_audio, format, shifts, segments_size, overlap, clean_audio, clean_strength, denoise, separator_model, kara_model, backing, reverb, backing_reverb, hop_length, batch_size, sample_rate): output = os.path.dirname(output_audio) or output_audio if not input or not os.path.exists(input) or os.path.isdir(input): gr_warning(translations["input_not_valid"]) return [None]*4 if not os.path.exists(output): gr_warning(translations["output_not_valid"]) return [None]*4 if not os.path.exists(output): os.makedirs(output) gr_info(translations["start"].format(start=translations["separator_music"])) if config.debug_mode: subprocess.run([python, configs["separate_path"], "--input_path", input, "--output_path", output, "--format", format, "--shifts", str(shifts), "--segments_size", str(segments_size), "--overlap", str(overlap), "--mdx_hop_length", str(hop_length), "--mdx_batch_size", str(batch_size), "--clean_audio", str(clean_audio), "--clean_strength", str(clean_strength), "--kara_model", kara_model, "--backing", str(backing), "--mdx_denoise", str(denoise), "--reverb", str(reverb), "--backing_reverb", str(backing_reverb), "--model_name", separator_model, "--sample_rate", str(sample_rate)]) else: from main.inference.separator_music import separate separate(input, output, format, shifts, segments_size, overlap, hop_length, batch_size, clean_audio, clean_strength, separator_model, kara_model, backing, denoise, reverb, backing_reverb, sample_rate) gr_info(translations["success"]) filename, _ = os.path.splitext(os.path.basename(input)) output = os.path.join(output, filename) return [os.path.join(output, f"Original_Vocals_No_Reverb.{format}") if reverb else os.path.join(output, f"Original_Vocals.{format}"), os.path.join(output, f"Instruments.{format}"), (os.path.join(output, f"Main_Vocals_No_Reverb.{format}") if reverb else os.path.join(output, f"Main_Vocals.{format}") if backing else None), (os.path.join(output, f"Backing_Vocals_No_Reverb.{format}") if backing_reverb else os.path.join(output, f"Backing_Vocals.{format}") if backing else None)] if os.path.isfile(input) else [None]*4