Add files via upload

This commit is contained in:
Anjok07
2022-06-03 04:08:37 -05:00
committed by GitHub
parent 3f62d7e877
commit aa2dd10834
5 changed files with 845 additions and 361 deletions

665
UVR.py
View File

@@ -104,6 +104,7 @@ DEFAULT_DATA = {
'break': False, 'break': False,
#Advanced Options #Advanced Options
'appendensem': False, 'appendensem': False,
'demucs_only': False,
#MDX-Net #MDX-Net
'demucsmodel': True, 'demucsmodel': True,
'non_red': False, 'non_red': False,
@@ -113,9 +114,17 @@ DEFAULT_DATA = {
'chunks': 'Auto', 'chunks': 'Auto',
'n_fft_scale': 6144, 'n_fft_scale': 6144,
'dim_f': 2048, 'dim_f': 2048,
'overlap': 0.5,
'shifts': 0,
'margin': 44100,
'channel': 64,
'compensate': 1.03597672895,
'mdxnetModeltype': 'Vocals (Custom)',
'noisereduc_s': '3', 'noisereduc_s': '3',
'mixing': 'default', 'mixing': 'Default',
'mdxnetModel': 'UVR-MDX-NET-1', 'mdxnetModel': 'UVR-MDX-NET 1',
'DemucsModel': 'demucs_extra-3646af93_org.th',
'ModelParams': 'Auto',
} }
def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: int = 0) -> ImageTk.PhotoImage: def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: int = 0) -> ImageTk.PhotoImage:
@@ -351,6 +360,9 @@ class MainWindow(TkinterDnD.Tk):
self.lastInstrumentalModels = [] self.lastInstrumentalModels = []
self.MDXLabel_to_path = defaultdict(lambda: '') self.MDXLabel_to_path = defaultdict(lambda: '')
self.lastMDXModels = [] self.lastMDXModels = []
self.DemucsLabel_to_path = defaultdict(lambda: '')
self.ModelParamsLabel_to_path = defaultdict(lambda: '')
self.lastModelParams = []
# -Tkinter Value Holders- # -Tkinter Value Holders-
data = load_data() data = load_data()
@@ -373,6 +385,7 @@ class MainWindow(TkinterDnD.Tk):
self.mdxensemchoose_b_var = tk.StringVar(value=data['mdx_ensem_b']) self.mdxensemchoose_b_var = tk.StringVar(value=data['mdx_ensem_b'])
#Advanced Options #Advanced Options
self.appendensem_var = tk.BooleanVar(value=data['appendensem']) self.appendensem_var = tk.BooleanVar(value=data['appendensem'])
self.demucs_only_var = tk.BooleanVar(value=data['demucs_only'])
# Processing Options # Processing Options
self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) self.gpuConversion_var = tk.BooleanVar(value=data['gpu'])
self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) self.postprocessing_var = tk.BooleanVar(value=data['postprocess'])
@@ -395,6 +408,12 @@ class MainWindow(TkinterDnD.Tk):
self.agg_var = tk.StringVar(value=data['agg']) self.agg_var = tk.StringVar(value=data['agg'])
self.n_fft_scale_var = tk.StringVar(value=data['n_fft_scale']) self.n_fft_scale_var = tk.StringVar(value=data['n_fft_scale'])
self.dim_f_var = tk.StringVar(value=data['dim_f']) self.dim_f_var = tk.StringVar(value=data['dim_f'])
self.overlap_var = tk.StringVar(value=data['overlap'])
self.shifts_var = tk.StringVar(value=data['shifts'])
self.channel_var = tk.StringVar(value=data['channel'])
self.margin_var = tk.StringVar(value=data['margin'])
self.compensate_var = tk.StringVar(value=data['compensate'])
self.mdxnetModeltype_var = tk.StringVar(value=data['mdxnetModeltype'])
# Instrumental or Vocal Only # Instrumental or Vocal Only
self.voc_only_var = tk.BooleanVar(value=data['voc_only']) self.voc_only_var = tk.BooleanVar(value=data['voc_only'])
self.inst_only_var = tk.BooleanVar(value=data['inst_only']) self.inst_only_var = tk.BooleanVar(value=data['inst_only'])
@@ -409,6 +428,8 @@ class MainWindow(TkinterDnD.Tk):
self.last_ensChoose = self.ensChoose_var.get() self.last_ensChoose = self.ensChoose_var.get()
# Choose MDX-NET Model # Choose MDX-NET Model
self.mdxnetModel_var = tk.StringVar(value=data['mdxnetModel']) self.mdxnetModel_var = tk.StringVar(value=data['mdxnetModel'])
self.DemucsModel_var = tk.StringVar(value=data['DemucsModel'])
self.ModelParams_var = tk.StringVar(value=data['ModelParams'])
self.last_mdxnetModel = self.mdxnetModel_var.get() self.last_mdxnetModel = self.mdxnetModel_var.get()
# Other # Other
self.inputPathsEntry_var = tk.StringVar(value='') self.inputPathsEntry_var = tk.StringVar(value='')
@@ -432,8 +453,8 @@ class MainWindow(TkinterDnD.Tk):
def create_widgets(self): def create_widgets(self):
"""Create window widgets""" """Create window widgets"""
self.title_Label = tk.Button(master=self, self.title_Label = tk.Label(master=self,
image=self.logo_img, compound=tk.TOP, borderwidth=0, command=self.open_appdir_filedialog) image=self.logo_img, compound=tk.TOP)
self.filePaths_Frame = ttk.Frame(master=self) self.filePaths_Frame = ttk.Frame(master=self)
self.fill_filePaths_Frame() self.fill_filePaths_Frame()
@@ -463,8 +484,7 @@ class MainWindow(TkinterDnD.Tk):
self.progressbar = ttk.Progressbar(master=self, variable=self.progress_var) self.progressbar = ttk.Progressbar(master=self, variable=self.progress_var)
self.command_Text = ThreadSafeConsole(master=self, self.command_Text = ThreadSafeConsole(master=self,
background='#0e0e0f',fg='#898b8e', font=('Century Gothic', 11), background='#0e0e0f',fg='#898b8e', font=('Century Gothic', 11),borderwidth=0)
borderwidth=0,)
self.command_Text.write(f'Ultimate Vocal Remover [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]\n') self.command_Text.write(f'Ultimate Vocal Remover [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]\n')
@@ -588,12 +608,13 @@ class MainWindow(TkinterDnD.Tk):
# -Column 1- # -Column 1-
# Choose Conversion Method # Choose Conversion Method
self.options_aiModel_Label = tk.Label(master=self.options_Frame, self.options_aiModel_Label = tk.Button(master=self.options_Frame,
text='Choose Process Method', anchor=tk.CENTER, text='Choose Process Method', anchor=tk.CENTER,
background='#0e0e0f', font=self.font, foreground='#13a4c9') background='#0e0e0f', font=self.font, foreground='#13a4c9', borderwidth=0, command=self.open_appdir_filedialog)
self.options_aiModel_Optionmenu = ttk.OptionMenu(self.options_Frame, self.options_aiModel_Optionmenu = ttk.OptionMenu(self.options_Frame,
self.aiModel_var, self.aiModel_var,
None, 'VR Architecture', 'MDX-Net', 'Ensemble Mode') None, 'VR Architecture', 'MDX-Net', 'Ensemble Mode')
# Choose Instrumental Model # Choose Instrumental Model
self.options_instrumentalModel_Label = tk.Button(master=self.options_Frame, self.options_instrumentalModel_Label = tk.Button(master=self.options_Frame,
text='Choose Main Model', text='Choose Main Model',
@@ -628,16 +649,18 @@ class MainWindow(TkinterDnD.Tk):
# -Column 2- # -Column 2-
# WINDOW SIZE # WINDOW SIZE
self.options_winSize_Label = tk.Label(master=self.options_Frame, self.options_winSize_Label = tk.Button(master=self.options_Frame,
text='Window Size', anchor=tk.CENTER, text='Window Size', anchor=tk.CENTER,
background='#0e0e0f', font=self.font, foreground='#13a4c9') background='#0e0e0f', font=self.font, foreground='#13a4c9',
borderwidth=0, command=self.advanced_vr_options)
self.options_winSize_Optionmenu = ttk.OptionMenu(self.options_Frame, self.options_winSize_Optionmenu = ttk.OptionMenu(self.options_Frame,
self.winSize_var, self.winSize_var,
None, '320', '512','1024') None, '320', '512','1024')
# MDX-chunks # MDX-chunks
self.options_chunks_Label = tk.Label(master=self.options_Frame, self.options_chunks_Label = tk.Button(master=self.options_Frame,
text='Chunks', text='Chunks',
background='#0e0e0f', font=self.font, foreground='#13a4c9') background='#0e0e0f', font=self.font, foreground='#13a4c9',
borderwidth=0, command=self.advanced_mdx_options)
self.options_chunks_Optionmenu = ttk.OptionMenu(self.options_Frame, self.options_chunks_Optionmenu = ttk.OptionMenu(self.options_Frame,
self.chunks_var, self.chunks_var,
None, 'Auto', '1', '5', '10', '15', '20', None, 'Auto', '1', '5', '10', '15', '20',
@@ -683,9 +706,10 @@ class MainWindow(TkinterDnD.Tk):
# -Column 3- # -Column 3-
# AGG # AGG
self.options_agg_Label = tk.Label(master=self.options_Frame, self.options_agg_Label = tk.Button(master=self.options_Frame,
text='Aggression Setting', text='Aggression Setting',
background='#0e0e0f', font=self.font, foreground='#13a4c9') background='#0e0e0f', font=self.font, foreground='#13a4c9',
borderwidth=0, command=self.advanced_vr_options)
self.options_agg_Optionmenu = ttk.OptionMenu(self.options_Frame, self.options_agg_Optionmenu = ttk.OptionMenu(self.options_Frame,
self.agg_var, self.agg_var,
None, '1', '2', '3', '4', '5', None, '1', '2', '3', '4', '5',
@@ -694,9 +718,10 @@ class MainWindow(TkinterDnD.Tk):
'18', '19', '20') '18', '19', '20')
# MDX-noisereduc_s # MDX-noisereduc_s
self.options_noisereduc_s_Label = tk.Label(master=self.options_Frame, self.options_noisereduc_s_Label = tk.Button(master=self.options_Frame,
text='Noise Reduction', text='Noise Reduction',
background='#0e0e0f', font=self.font, foreground='#13a4c9') background='#0e0e0f', font=self.font, foreground='#13a4c9',
borderwidth=0, command=self.advanced_mdx_options)
self.options_noisereduc_s_Optionmenu = ttk.OptionMenu(self.options_Frame, self.options_noisereduc_s_Optionmenu = ttk.OptionMenu(self.options_Frame,
self.noisereduc_s_var, self.noisereduc_s_var,
None, 'None', '0', '1', '2', '3', '4', '5', None, 'None', '0', '1', '2', '3', '4', '5',
@@ -856,6 +881,21 @@ class MainWindow(TkinterDnD.Tk):
self.non_red_var.trace_add('write', self.non_red_var.trace_add('write',
lambda *args: self.update_states()) lambda *args: self.update_states())
self.mdxnetModeltype_var.trace_add('write',
lambda *args: self.update_states())
self.n_fft_scale_var.trace_add('write',
lambda *args: self.update_states())
self.dim_f_var.trace_add('write',
lambda *args: self.update_states())
self.demucsmodel_var.trace_add('write',
lambda *args: self.update_states())
self.demucs_only_var.trace_add('write',
lambda *args: self.update_states())
# Opening filedialogs # Opening filedialogs
def open_file_filedialog(self): def open_file_filedialog(self):
"""Make user select music files""" """Make user select music files"""
@@ -1007,6 +1047,7 @@ class MainWindow(TkinterDnD.Tk):
'gpu': 0 if self.gpuConversion_var.get() else -1, 'gpu': 0 if self.gpuConversion_var.get() else -1,
'postprocess': self.postprocessing_var.get(), 'postprocess': self.postprocessing_var.get(),
'appendensem': self.appendensem_var.get(), 'appendensem': self.appendensem_var.get(),
'demucs_only': self.demucs_only_var.get(),
'tta': self.tta_var.get(), 'tta': self.tta_var.get(),
'save': self.save_var.get(), 'save': self.save_var.get(),
'output_image': self.outputImage_var.get(), 'output_image': self.outputImage_var.get(),
@@ -1023,6 +1064,8 @@ class MainWindow(TkinterDnD.Tk):
'break': False, 'break': False,
'ensChoose': ensChoose, 'ensChoose': ensChoose,
'mdxnetModel': mdxnetModel, 'mdxnetModel': mdxnetModel,
'DemucsModel': self.DemucsModel_var.get(),
'ModelParams': self.ModelParams_var.get(),
# Other Variables (Tkinter) # Other Variables (Tkinter)
'window': self, 'window': self,
'text_widget': self.command_Text, 'text_widget': self.command_Text,
@@ -1040,6 +1083,12 @@ class MainWindow(TkinterDnD.Tk):
'mixing': mixing, 'mixing': mixing,
'n_fft_scale': self.n_fft_scale_var.get(), 'n_fft_scale': self.n_fft_scale_var.get(),
'dim_f': self.dim_f_var.get(), 'dim_f': self.dim_f_var.get(),
'overlap': self.overlap_var.get(),
'shifts': self.shifts_var.get(),
'margin': self.margin_var.get(),
'channel': self.channel_var.get(),
'compensate': self.compensate_var.get(),
'mdxnetModeltype': self.mdxnetModeltype_var.get(),
}, },
daemon=True daemon=True
).start() ).start()
@@ -1061,11 +1110,11 @@ class MainWindow(TkinterDnD.Tk):
"""Update the dropdown menu""" """Update the dropdown menu"""
self.update_available_models() self.update_available_models()
self.after(3000, self.update_loop) self.after(1000, self.update_loop)
def update_available_models(self): def update_available_models(self):
""" """
Loop through every model (.pth) in the models directory Loop through every VR model (.pth) in the models directory
and add to the select your model list and add to the select your model list
""" """
temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, 'Main_Models') # nopep8 temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, 'Main_Models') # nopep8
@@ -1086,8 +1135,10 @@ class MainWindow(TkinterDnD.Tk):
self.lastInstrumentalModels = new_InstrumentalModels self.lastInstrumentalModels = new_InstrumentalModels
#print(self.instrumentalLabel_to_path) #print(self.instrumentalLabel_to_path)
"""
Loop through every MDX-Net model (.onnx) in the models directory
and add to the select your model list
"""
temp_MDXModels_dir = os.path.join(instrumentalModels_dir, 'MDX_Net_Models') # nopep8 temp_MDXModels_dir = os.path.join(instrumentalModels_dir, 'MDX_Net_Models') # nopep8
@@ -1095,7 +1146,6 @@ class MainWindow(TkinterDnD.Tk):
new_MDXModels = os.listdir(temp_MDXModels_dir) new_MDXModels = os.listdir(temp_MDXModels_dir)
if new_MDXModels != self.lastMDXModels: if new_MDXModels != self.lastMDXModels:
#print(new_MDXModels)
self.MDXLabel_to_path.clear() self.MDXLabel_to_path.clear()
self.options_mdxnetModel_Optionmenu['menu'].delete(0, 'end') self.options_mdxnetModel_Optionmenu['menu'].delete(0, 'end')
for file_name_1 in natsort.natsorted(new_MDXModels): for file_name_1 in natsort.natsorted(new_MDXModels):
@@ -1104,15 +1154,15 @@ class MainWindow(TkinterDnD.Tk):
for char in b: for char in b:
file_name_1 = file_name_1.replace(char, "") file_name_1 = file_name_1.replace(char, "")
c = ["UVR_MDXNET_9662"] c = ["UVR_MDXNET_3_9662"]
for char in c: for char in c:
file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 3") file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 3")
d = ["UVR_MDXNET_9682"] d = ["UVR_MDXNET_2_9682"]
for char in d: for char in d:
file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 2") file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 2")
e = ["UVR_MDXNET_9703"] e = ["UVR_MDXNET_1_9703"]
for char in e: for char in e:
file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 1") file_name_1 = file_name_1.replace(char, "UVR-MDX-NET 1")
@@ -1120,15 +1170,57 @@ class MainWindow(TkinterDnD.Tk):
for char in f: for char in f:
file_name_1 = file_name_1.replace(char, "UVR-MDX-NET Karaoke") file_name_1 = file_name_1.replace(char, "UVR-MDX-NET Karaoke")
#file_name = f'{os.path.basename(path)}'
print(file_name_1)
self.options_mdxnetModel_Optionmenu['menu'].add_radiobutton(label=file_name_1, self.options_mdxnetModel_Optionmenu['menu'].add_radiobutton(label=file_name_1,
command=tk._setit(self.mdxnetModel_var, file_name_1)) command=tk._setit(self.mdxnetModel_var, file_name_1))
self.lastMDXModels = new_MDXModels self.lastMDXModels = new_MDXModels
"""
Loop through every Demucs model (.th, .pth) in the models directory
and add to the select your model list
"""
try:
temp_DemucsModels_dir = os.path.join(instrumentalModels_dir, 'Demucs_Model') # nopep8
new_DemucsModels = os.listdir(temp_DemucsModels_dir)
if new_DemucsModels != self.lastDemucsModels:
#print(new_MDXModels)
self.DemucsLabel_to_path.clear()
self.options_DemucsModel_Optionmenu['menu'].delete(0, 'end')
for file_name_2 in natsort.natsorted(new_DemucsModels):
if file_name_2.endswith(('.th', '.pth')):
self.options_DemucsModel_Optionmenu['menu'].add_radiobutton(label=file_name_2,
command=tk._setit(self.DemucsModel_var, file_name_2))
self.lastDemucsModels = new_DemucsModels
except:
pass
"""
Loop through every model param (.json) in the models directory
and add to the select your model list
"""
try:
temp_ModelParams_dir = 'lib_v5\modelparams' # nopep8
new_ModelParams = os.listdir(temp_ModelParams_dir)
if new_ModelParams != self.lastModelParams:
#print(new_MDXModels)
self.ModelParamsLabel_to_path.clear()
self.options_ModelParams_Optionmenu['menu'].delete(0, 'end')
for file_name_3 in natsort.natsorted(new_ModelParams):
if file_name_3.endswith(('.json', 'Auto')):
self.options_ModelParams_Optionmenu['menu'].add_radiobutton(label=file_name_3,
command=tk._setit(self.ModelParams_var, file_name_3))
self.lastModelParams = new_ModelParams
except:
pass
def update_states(self): def update_states(self):
""" """
Vary the states for all widgets based Vary the states for all widgets based
@@ -1462,6 +1554,90 @@ class MainWindow(TkinterDnD.Tk):
self.options_non_red_Checkbutton.configure(state=tk.NORMAL) self.options_non_red_Checkbutton.configure(state=tk.NORMAL)
if self.mdxnetModeltype_var.get() == 'Vocals (Default)':
self.n_fft_scale_var.set('6144')
self.dim_f_var.set('2048')
try:
self.options_n_fft_scale_Entry.configure(state=tk.DISABLED)
self.options_dim_f_Entry.configure(state=tk.DISABLED)
self.options_n_fft_scale_Opt.configure(state=tk.DISABLED)
self.options_dim_f_Opt.configure(state=tk.DISABLED)
except:
pass
if self.mdxnetModeltype_var.get() == 'Other (Default)':
self.n_fft_scale_var.set('8192')
self.dim_f_var.set('2048')
try:
self.options_n_fft_scale_Entry.configure(state=tk.DISABLED)
self.options_dim_f_Entry.configure(state=tk.DISABLED)
self.options_n_fft_scale_Opt.configure(state=tk.DISABLED)
self.options_dim_f_Opt.configure(state=tk.DISABLED)
except:
pass
if self.mdxnetModeltype_var.get() == 'Drums (Default)':
self.n_fft_scale_var.set('4096')
self.dim_f_var.set('2048')
try:
self.options_n_fft_scale_Entry.configure(state=tk.DISABLED)
self.options_dim_f_Entry.configure(state=tk.DISABLED)
self.options_n_fft_scale_Opt.configure(state=tk.DISABLED)
self.options_dim_f_Opt.configure(state=tk.DISABLED)
except:
pass
if self.mdxnetModeltype_var.get() == 'Bass (Default)':
self.n_fft_scale_var.set('16384')
self.dim_f_var.set('2048')
try:
self.options_n_fft_scale_Entry.configure(state=tk.DISABLED)
self.options_dim_f_Entry.configure(state=tk.DISABLED)
self.options_n_fft_scale_Opt.configure(state=tk.DISABLED)
self.options_dim_f_Opt.configure(state=tk.DISABLED)
except:
pass
if self.mdxnetModeltype_var.get() == 'Vocals (Custom)':
try:
self.options_n_fft_scale_Entry.configure(state=tk.NORMAL)
self.options_dim_f_Entry.configure(state=tk.NORMAL)
self.options_n_fft_scale_Opt.configure(state=tk.NORMAL)
self.options_dim_f_Opt.configure(state=tk.NORMAL)
except:
pass
if self.mdxnetModeltype_var.get() == 'Other (Custom)':
try:
self.options_n_fft_scale_Entry.configure(state=tk.NORMAL)
self.options_dim_f_Entry.configure(state=tk.NORMAL)
self.options_n_fft_scale_Opt.configure(state=tk.NORMAL)
self.options_dim_f_Opt.configure(state=tk.NORMAL)
except:
pass
if self.mdxnetModeltype_var.get() == 'Drums (Custom)':
try:
self.options_n_fft_scale_Entry.configure(state=tk.NORMAL)
self.options_dim_f_Entry.configure(state=tk.NORMAL)
self.options_n_fft_scale_Opt.configure(state=tk.NORMAL)
self.options_dim_f_Opt.configure(state=tk.NORMAL)
except:
pass
if self.mdxnetModeltype_var.get() == 'Bass (Custom)':
try:
self.options_n_fft_scale_Entry.configure(state=tk.NORMAL)
self.options_dim_f_Entry.configure(state=tk.NORMAL)
self.options_n_fft_scale_Opt.configure(state=tk.NORMAL)
self.options_dim_f_Opt.configure(state=tk.NORMAL)
except:
pass
if self.demucs_only_var.get() == True:
self.demucsmodel_var.set(True)
self.update_inputPaths() self.update_inputPaths()
def deselect_models(self): def deselect_models(self):
@@ -1524,6 +1700,232 @@ class MainWindow(TkinterDnD.Tk):
opener = "open" if sys.platform == "darwin" else "xdg-open" opener = "open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, filename]) subprocess.call([opener, filename])
def advanced_vr_options(self):
"""
Open Help Guide
"""
top= Toplevel(self)
top.geometry("600x500")
window_height = 600
window_width = 500
top.title("Advanced VR Options")
top.resizable(False, False) # This code helps to disable windows from resizing
screen_width = top.winfo_screenwidth()
screen_height = top.winfo_screenheight()
x_cordinate = int((screen_width/2) - (window_width/2))
y_cordinate = int((screen_height/2) - (window_height/2))
top.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
# change title bar icon
top.iconbitmap('img\\UVR-Icon-v2.ico')
tabControl = ttk.Notebook(top)
tab1 = ttk.Frame(tabControl)
tabControl.add(tab1, text ='Advanced Settings')
tabControl.pack(expand = 1, fill ="both")
tab1.grid_rowconfigure(0, weight=1)
tab1.grid_columnconfigure(0, weight=1)
frame0=Frame(tab1, highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=30)
l0=tk.Label(frame0, text='Window Size (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=1,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.winSize_var, justify="center")
l0.grid(row=2,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Aggression Setting (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=3,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.agg_var, justify="center")
l0.grid(row=4,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Select Model Param\n(Can\'t change Model Params in Ensemble Mode)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=5,column=0,padx=0,pady=10)
self.options_ModelParams_Optionmenu = l0=ttk.OptionMenu(frame0, self.ModelParams_var)
self.options_ModelParams_Optionmenu
l0.grid(row=7,column=0,padx=0,pady=0)
l0=ttk.Checkbutton(frame0, text='Save Output Image(s) of Spectrogram(s)', variable=self.outputImage_var)
l0.grid(row=8,column=0,padx=0,pady=10)
self.ModelParamsLabel_to_path = defaultdict(lambda: '')
self.lastModelParams = []
self.update_states()
def advanced_mdx_options(self):
"""
Open Help Guide
"""
top= Toplevel(self)
top.geometry("600x550")
window_height = 600
window_width = 550
top.title("Advanced MDX-Net Options")
top.resizable(False, False) # This code helps to disable windows from resizing
screen_width = top.winfo_screenwidth()
screen_height = top.winfo_screenheight()
x_cordinate = int((screen_width/2) - (window_width/2))
y_cordinate = int((screen_height/2) - (window_height/2))
top.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
# change title bar icon
top.iconbitmap('img\\UVR-Icon-v2.ico')
tabControl = ttk.Notebook(top)
tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tab3 = ttk.Frame(tabControl)
tabControl.add(tab1, text ='Advanced Settings')
tabControl.add(tab2, text ='Demucs Settings')
tabControl.add(tab3, text ='Advanced ONNX Model Settings')
tabControl.pack(expand = 1, fill ="both")
tab1.grid_rowconfigure(0, weight=1)
tab1.grid_columnconfigure(0, weight=1)
tab2.grid_rowconfigure(0, weight=1)
tab2.grid_columnconfigure(0, weight=1)
tab3.grid_rowconfigure(0, weight=1)
tab3.grid_columnconfigure(0, weight=1)
frame0=Frame(tab1, highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=30)
l0=tk.Label(frame0, text='Chunks (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=0,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.chunks_var, justify='center')
l0.grid(row=1,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Noise Reduction (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=2,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.noisereduc_s_var, justify='center')
l0.grid(row=3,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Chunk Margin', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=4,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.margin_var, justify='center')
l0.grid(row=5,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Volume Compensation', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=6,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.compensate_var, justify='center')
l0.grid(row=7,column=0,padx=0,pady=0)
frame0=Frame(tab2, highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=30)
l0=tk.Label(frame0, text='Choose Demucs Model', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=0,column=0,padx=0,pady=0)
self.options_DemucsModel_Optionmenu = l0=ttk.OptionMenu(frame0, self.DemucsModel_var)
self.options_DemucsModel_Optionmenu
l0.grid(row=2,column=0,padx=0,pady=0)
l0=tk.Button(frame0, text='(Click here to add more Demucs models)', font=("Century Gothic", "8"), foreground='#13a4c9', borderwidth=0, command=self.open_Modelfolder_de)
l0.grid(row=1,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Mixing Algorithm', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=3,column=0,padx=0,pady=10)
l0=ttk.OptionMenu(frame0, self.mixing_var, None, 'Default', 'Min_Mag', 'Max_Mag', 'Invert_p')
l0.grid(row=4,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Channel', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=5,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.channel_var, justify='center')
l0.grid(row=6,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Shifts\n(Higher values use more resources and increase processing times)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=7,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.shifts_var, justify='center')
l0.grid(row=8,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='Overlap', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=9,column=0,padx=0,pady=10)
l0=ttk.Entry(frame0, textvariable=self.overlap_var, justify='center')
l0.grid(row=10,column=0,padx=0,pady=0)
l0=ttk.Checkbutton(frame0, text='Run Demucs Model Only', variable=self.demucs_only_var)
l0.grid(row=12,column=0,padx=0,pady=10)
frame0=Frame(tab3, highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=30)
l0=tk.Label(frame0, text='Stem Type', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=1,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.mdxnetModeltype_var, None, 'Vocals (Default)', 'Other (Default)', 'Bass (Default)', 'Drums (Default)', 'Vocals (Custom)', 'Other (Custom)', 'Bass (Custom)', 'Drums (Custom)')
l0.grid(row=2,column=0,padx=0,pady=10)
l0=tk.Label(frame0, text='N_FFT Scale', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=3,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='(Manual Set)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=3,column=1,padx=0,pady=0)
self.options_n_fft_scale_Opt = l0=ttk.OptionMenu(frame0, self.n_fft_scale_var, None, '4096', '6144', '7680', '8192', '16384')
self.options_n_fft_scale_Opt
l0.grid(row=4,column=0,padx=0,pady=0)
self.options_n_fft_scale_Entry = l0=ttk.Entry(frame0, textvariable=self.n_fft_scale_var, justify='center')
self.options_n_fft_scale_Entry
l0.grid(row=4,column=1,padx=0,pady=0)
l0=tk.Label(frame0, text='Dim_f', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=5,column=0,padx=0,pady=0)
l0=tk.Label(frame0, text='(Manual Set)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=5,column=1,padx=0,pady=0)
self.options_dim_f_Opt = l0=ttk.OptionMenu(frame0, self.dim_f_var, None, '2048', '3072', '4096')
self.options_dim_f_Opt
l0.grid(row=6,column=0,padx=0,pady=0)
self.options_dim_f_Entry = l0=ttk.Entry(frame0, textvariable=self.dim_f_var, justify='center')
self.options_dim_f_Entry
l0.grid(row=6,column=1,padx=0,pady=0)
self.DemucsLabel_to_path = defaultdict(lambda: '')
self.lastDemucsModels = []
self.update_states()
def custom_ensemble(self): def custom_ensemble(self):
""" """
Open Help Guide Open Help Guide
@@ -1683,7 +2085,8 @@ class MainWindow(TkinterDnD.Tk):
l0=ttk.Checkbutton(frame0, text='Post-Process (VR Architecture Only)', variable=self.postprocessing_var) l0=ttk.Checkbutton(frame0, text='Post-Process (VR Architecture Only)', variable=self.postprocessing_var)
l0.grid(row=3,column=2,padx=0,pady=0) l0.grid(row=3,column=2,padx=0,pady=0)
l0=ttk.Button(frame0,text='Open Models Directory', command=self.open_Modelfolder_filedialog)
l0.grid(row=4,column=2,padx=0,pady=10)
def help(self): def help(self):
""" """
@@ -1949,160 +2352,47 @@ class MainWindow(TkinterDnD.Tk):
frame0=Frame(tab9,highlightbackground='red',highlightthicknes=0) frame0=Frame(tab9,highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=0) frame0.grid(row=0,column=0,padx=0,pady=0)
l0=Label(frame0,text="MDX-Net/VR Ensemble Options",font=("Century Gothic", "10", "bold", "underline"), justify="center", fg="#f4f4f4") l0=Label(frame0,text="Advanced Option Guide",font=("Century Gothic", "12", "bold", "underline"), fg="#f4f4f4")
l0.grid(row=0,column=0,padx=0,pady=0)
l0=ttk.Button(frame0,text="Ensemble Customization Options", command=self.custom_ensemble)
l0.grid(row=1,column=0,padx=20,pady=10) l0.grid(row=1,column=0,padx=20,pady=10)
l0=tk.Label(frame0,text='MDX-Net Model\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9') l0=ttk.Button(frame0,text="Advanced MDX-Net Options", command=self.advanced_mdx_options)
l0.grid(row=2,column=0,padx=0,pady=0) l0.grid(row=2,column=0,padx=20,pady=10)
l0=ttk.OptionMenu(frame0, self.mdxensemchoose_var, None, 'UVR-MDX-NET 1', 'UVR-MDX-NET 2', 'UVR-MDX-NET 3', l0=ttk.Button(frame0,text="Advanced VR Options", command=self.advanced_vr_options)
'UVR-MDX-NET Karaoke') l0.grid(row=3,column=0,padx=20,pady=10)
l0.grid(row=3,column=0,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 1\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=4,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=5,column=0,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 2\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=6,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_mdx_a_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=7,column=0,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 3\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=8,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_mdx_b_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=9,column=0,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 4\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=10,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_mdx_c_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=11,column=0,padx=0,pady=0)
l0=tk.Label(frame0,text='\nMDX-Net Model 2\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=12,column=0,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.mdxensemchoose_b_var, None, 'No Model', 'UVR-MDX-NET 1', 'UVR-MDX-NET 2', 'UVR-MDX-NET 3',
'UVR-MDX-NET Karaoke')
l0.grid(row=13,column=0,padx=0,pady=0)
l0=Label(frame0,text="Basic Ensemble Options",font=("Century Gothic", "10", "bold", "underline"), justify="center", fg="#f4f4f4")
l0.grid(row=1,column=1,padx=20,pady=10)
l0=tk.Label(frame0,text='VR Model 1\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=2,column=1,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_a_var, None, '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=3,column=1,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 2\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=4,column=1,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_b_var, None, '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=5,column=1,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 3\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=6,column=1,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_c_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=7,column=1,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 4\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=8,column=1,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_d_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=9,column=1,padx=0,pady=0)
l0=tk.Label(frame0,text='\nVR Model 5\n',font=("Century Gothic", "9", "bold"), justify="center", foreground='#13a4c9')
l0.grid(row=10,column=1,padx=0,pady=0)
l0=ttk.OptionMenu(frame0, self.vrensemchoose_e_var, None, 'No Model', '1_HP-UVR', '2_HP-UVR', '3_HP-Vocal-UVR',
'4_HP-Vocal-UVR', '5_HP-Karaoke-UVR', '6_HP-Karaoke-UVR', '7_HP2-UVR', '8_HP2-UVR',
'9_HP2-UVR', '10_SP-UVR-2B-32000-1', '11_SP-UVR-2B-32000-2', '12_SP-UVR-3B-44100', '13_SP-UVR-4B-44100-1',
'14_SP-UVR-4B-44100-2', '15_SP-UVR-MID-44100-1', '16_SP-UVR-MID-44100-2',
'MGM_MAIN_v4', 'MGM_HIGHEND_v4', 'MGM_LOWEND_A_v4', 'MGM_LOWEND_B_v4')
l0.grid(row=11,column=1,padx=0,pady=0)
l0=Label(frame0,text="Additional Options",font=("Century Gothic", "10", "bold", "underline"), justify="center", fg="#f4f4f4")
l0.grid(row=1,column=2,padx=0,pady=0)
l0=ttk.Checkbutton(frame0, text='Append Ensemble Name to Final Output', variable=self.appendensem_var)
l0.grid(row=2,column=2,padx=0,pady=0)
l0=ttk.Checkbutton(frame0, text='Save Output Image Spectrogram (VR Architecture Only)', variable=self.outputImage_var)
l0.grid(row=3,column=2,padx=0,pady=0)
l0=Label(frame0,text="Set Outside Parameters",font=("Century Gothic", "10", "bold", "underline"), fg="#f4f4f4")
l0.grid(row=4,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='Window Size (VR Architecture)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=5,column=2,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.winSize_var)
l0.grid(row=6,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='Aggression Setting (VR Architecture)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=7,column=2,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.agg_var)
l0.grid(row=8,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='Chunks (MDX-Net)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=9,column=2,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.chunks_var)
l0.grid(row=10,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='N_FFT Scale (MDX-Net)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=11,column=2,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.n_fft_scale_var)
l0.grid(row=12,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='Dim_f (MDX-Net)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=13,column=2,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.dim_f_var)
l0.grid(row=14,column=2,padx=0,pady=0)
l0=ttk.Button(frame0,text='Open Utagoe', command=self.utagoe_start) l0=ttk.Button(frame0,text='Open Utagoe', command=self.utagoe_start)
l0.grid(row=4,column=0,padx=20,pady=10)
l0=Label(frame0,text="Set Dropdown Parameters Manually",font=("Century Gothic", "10", "bold", "underline"), fg="#f4f4f4")
l0.grid(row=5,column=0,padx=30,pady=20)
l0=tk.Label(frame0, text='Chunks (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=6,column=0,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.chunks_var, justify='center')
l0.grid(row=7,column=0,padx=20,pady=10)
l0=tk.Label(frame0, text='Noise Reduction (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=8,column=0,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.noisereduc_s_var, justify='center')
l0.grid(row=9,column=0,padx=20,pady=10)
l0=tk.Label(frame0, text='Window Size (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=10,column=0,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.winSize_var, justify="center")
l0.grid(row=11,column=0,padx=20,pady=10)
l0=tk.Label(frame0, text='Aggression Setting (Set Manually)', font=("Century Gothic", "9"), foreground='#13a4c9')
l0.grid(row=12,column=0,padx=0,pady=0)
l0=ttk.Entry(frame0, textvariable=self.agg_var, justify="center")
l0.grid(row=13,column=0,padx=20,pady=10)
frame0=Frame(tab10,highlightbackground='red',highlightthicknes=0) frame0=Frame(tab10,highlightbackground='red',highlightthicknes=0)
frame0.grid(row=0,column=0,padx=0,pady=30) frame0.grid(row=0,column=0,padx=0,pady=30)
@@ -2437,6 +2727,8 @@ class MainWindow(TkinterDnD.Tk):
l0=ttk.Entry(frame0, textvariable=self.chunks_var) l0=ttk.Entry(frame0, textvariable=self.chunks_var)
l0.grid(row=10,column=2,padx=0,pady=0) l0.grid(row=10,column=2,padx=0,pady=0)
l0=tk.Label(frame0, text='N_FFT Scale (MDX-Net)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9') l0=tk.Label(frame0, text='N_FFT Scale (MDX-Net)', font=("Century Gothic", "9", "bold"), foreground='#13a4c9')
l0.grid(row=11,column=2,padx=0,pady=0) l0.grid(row=11,column=2,padx=0,pady=0)
@@ -2496,6 +2788,16 @@ class MainWindow(TkinterDnD.Tk):
opener = "open" if sys.platform == "darwin" else "xdg-open" opener = "open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, filename]) subprocess.call([opener, filename])
def open_Modelfolder_de(self):
"""Let user paste a ".pth" model to use for the vocal seperation"""
filename = 'models\Demucs_Model'
if sys.platform == "win32":
os.startfile(filename)
else:
opener = "open" if sys.platform == "darwin" else "xdg-open"
subprocess.call([opener, filename])
def open_appdir_filedialog(self): def open_appdir_filedialog(self):
pathname = '.' pathname = '.'
@@ -2545,6 +2847,7 @@ class MainWindow(TkinterDnD.Tk):
'mdx_ensem_b': self.mdxensemchoose_b_var.get(), 'mdx_ensem_b': self.mdxensemchoose_b_var.get(),
'gpu': self.gpuConversion_var.get(), 'gpu': self.gpuConversion_var.get(),
'appendensem': self.appendensem_var.get(), 'appendensem': self.appendensem_var.get(),
'demucs_only': self.demucs_only_var.get(),
'postprocess': self.postprocessing_var.get(), 'postprocess': self.postprocessing_var.get(),
'tta': self.tta_var.get(), 'tta': self.tta_var.get(),
'save': self.save_var.get(), 'save': self.save_var.get(),
@@ -2559,6 +2862,8 @@ class MainWindow(TkinterDnD.Tk):
'algo': self.algo_var.get(), 'algo': self.algo_var.get(),
'ensChoose': self.ensChoose_var.get(), 'ensChoose': self.ensChoose_var.get(),
'mdxnetModel': self.mdxnetModel_var.get(), 'mdxnetModel': self.mdxnetModel_var.get(),
'DemucsModel': self.DemucsModel_var.get(),
'ModelParams': self.ModelParams_var.get(),
#MDX-Net #MDX-Net
'demucsmodel': self.demucsmodel_var.get(), 'demucsmodel': self.demucsmodel_var.get(),
'non_red': self.non_red_var.get(), 'non_red': self.non_red_var.get(),
@@ -2568,6 +2873,12 @@ class MainWindow(TkinterDnD.Tk):
'chunks': chunks, 'chunks': chunks,
'n_fft_scale': self.n_fft_scale_var.get(), 'n_fft_scale': self.n_fft_scale_var.get(),
'dim_f': self.dim_f_var.get(), 'dim_f': self.dim_f_var.get(),
'overlap': self.overlap_var.get(),
'shifts': self.shifts_var.get(),
'margin': self.margin_var.get(),
'channel': self.channel_var.get(),
'compensate': self.compensate_var.get(),
'mdxnetModeltype': self.mdxnetModeltype_var.get(),
'noisereduc_s': noisereduc_s, 'noisereduc_s': noisereduc_s,
'mixing': mixing, 'mixing': mixing,
}, },

View File

@@ -62,11 +62,16 @@ class Predictor():
self.demucs.load_state_dict(torch.load(demucs_name)) self.demucs.load_state_dict(torch.load(demucs_name))
widget_text.write('Done!\n') widget_text.write('Done!\n')
self.demucs.eval() self.demucs.eval()
self.onnx_models = {} self.onnx_models = {}
c = 0 c = 0
print('stemtype: ', modeltype)
self.models = get_models('tdf_extra', load=False, device=cpu, stems=modeltype, n_fft_scale=n_fft_scale_set, dim_f=dim_f_set) self.models = get_models('tdf_extra', load=False, device=cpu, stems=modeltype, n_fft_scale=n_fft_scale_set, dim_f=dim_f_set)
widget_text.write(base_text + 'Loading ONNX model... ') if not data['demucs_only']:
widget_text.write(base_text + 'Loading ONNX model... ')
update_progress(**progress_kwargs, update_progress(**progress_kwargs,
step=0.1) step=0.1)
c+=1 c+=1
@@ -85,7 +90,9 @@ class Predictor():
print(str(device)) print(str(device))
self.onnx_models[c] = ort.InferenceSession(os.path.join('models/MDX_Net_Models', str(model_set) + '.onnx'), providers=run_type) self.onnx_models[c] = ort.InferenceSession(os.path.join('models/MDX_Net_Models', str(model_set) + '.onnx'), providers=run_type)
widget_text.write('Done!\n')
if not data['demucs_only']:
widget_text.write('Done!\n')
def prediction(self, m): def prediction(self, m):
#mix, rate = sf.read(m) #mix, rate = sf.read(m)
@@ -100,8 +107,18 @@ class Predictor():
#Main Save Path #Main Save Path
save_path = os.path.dirname(_basename) save_path = os.path.dirname(_basename)
print('stemset_n: ', stemset_n)
#Vocal Path #Vocal Path
vocal_name = '(Vocals)' if stemset_n == '(Vocals)':
vocal_name = '(Vocals)'
elif stemset_n == '(Other)':
vocal_name = '(Other)'
elif stemset_n == '(Drums)':
vocal_name = '(Drums)'
elif stemset_n == '(Bass)':
vocal_name = '(Bass)'
if data['modelFolder']: if data['modelFolder']:
vocal_path = '{save_path}/{file_name}.wav'.format( vocal_path = '{save_path}/{file_name}.wav'.format(
save_path=save_path, save_path=save_path,
@@ -124,7 +141,16 @@ class Predictor():
file_name = f'{os.path.basename(_basename)}_{vocal_name}',) file_name = f'{os.path.basename(_basename)}_{vocal_name}',)
#Instrumental Path #Instrumental Path
Instrumental_name = '(Instrumental)'
if stemset_n == '(Vocals)':
Instrumental_name = '(Instrumental)'
elif stemset_n == '(Other)':
Instrumental_name = '(No_Other)'
elif stemset_n == '(Drums)':
Instrumental_name = '(No_Drums)'
elif stemset_n == '(Bass)':
Instrumental_name = '(No_Bass)'
if data['modelFolder']: if data['modelFolder']:
Instrumental_path = '{save_path}/{file_name}.wav'.format( Instrumental_path = '{save_path}/{file_name}.wav'.format(
save_path=save_path, save_path=save_path,
@@ -147,7 +173,15 @@ class Predictor():
file_name = f'{os.path.basename(_basename)}_{Instrumental_name}',) file_name = f'{os.path.basename(_basename)}_{Instrumental_name}',)
#Non-Reduced Vocal Path #Non-Reduced Vocal Path
vocal_name = '(Vocals)' if stemset_n == '(Vocals)':
vocal_name = '(Vocals)'
elif stemset_n == '(Other)':
vocal_name = '(Other)'
elif stemset_n == '(Drums)':
vocal_name = '(Drums)'
elif stemset_n == '(Bass)':
vocal_name = '(Bass)'
if data['modelFolder']: if data['modelFolder']:
non_reduced_vocal_path = '{save_path}/{file_name}.wav'.format( non_reduced_vocal_path = '{save_path}/{file_name}.wav'.format(
save_path=save_path, save_path=save_path,
@@ -222,7 +256,7 @@ class Predictor():
step=(0.9)) step=(0.9))
widget_text.write('Done!\n') widget_text.write('Done!\n')
widget_text.write(base_text + 'Performing Noise Reduction... ') widget_text.write(base_text + 'Performing Noise Reduction... ')
reduction_sen = float(int(data['noisereduc_s'])/10) reduction_sen = float(data['noisereduc_s'])/10
subprocess.call("lib_v5\\sox\\sox.exe" + ' "' + subprocess.call("lib_v5\\sox\\sox.exe" + ' "' +
f"{str(non_reduced_vocal_path)}" + '" "' + f"{str(vocal_path)}" + '" ' + f"{str(non_reduced_vocal_path)}" + '" "' + f"{str(vocal_path)}" + '" ' +
"noisered lib_v5\\sox\\mdxnetnoisereduc.prof " + f"{reduction_sen}", "noisered lib_v5\\sox\\mdxnetnoisereduc.prof " + f"{reduction_sen}",
@@ -442,8 +476,6 @@ class Predictor():
except: except:
pass pass
if data['noisereduc_s'] == 'None': if data['noisereduc_s'] == 'None':
pass pass
elif data['non_red'] == True: elif data['non_red'] == True:
@@ -536,7 +568,8 @@ class Predictor():
if not data['demucsmodel']: if not data['demucsmodel']:
sources = self.demix_base(segmented_mix, margin_size=margin) sources = self.demix_base(segmented_mix, margin_size=margin)
elif data['demucs_only']:
sources = self.demix_demucs(segmented_mix, margin_size=margin)
else: # both, apply spec effects else: # both, apply spec effects
base_out = self.demix_base(segmented_mix, margin_size=margin) base_out = self.demix_base(segmented_mix, margin_size=margin)
demucs_out = self.demix_demucs(segmented_mix, margin_size=margin) demucs_out = self.demix_demucs(segmented_mix, margin_size=margin)
@@ -545,10 +578,10 @@ class Predictor():
print('Warning: there are {} nan values in the array(s).'.format(nan_count)) print('Warning: there are {} nan values in the array(s).'.format(nan_count))
demucs_out, base_out = np.nan_to_num(demucs_out), np.nan_to_num(base_out) demucs_out, base_out = np.nan_to_num(demucs_out), np.nan_to_num(base_out)
sources = {} sources = {}
print(data['mixing'])
sources[3] = (spec_effects(wave=[demucs_out[3],base_out[0]], sources[3] = (spec_effects(wave=[demucs_out[source_val],base_out[0]],
algorithm='default', algorithm=data['mixing'],
value=b[3])*1.03597672895) # compensation value=b[3])*float(data['compensate'])) # compensation
return sources return sources
def demix_base(self, mixes, margin_size): def demix_base(self, mixes, margin_size):
@@ -607,6 +640,7 @@ class Predictor():
return _sources return _sources
def demix_demucs(self, mix, margin_size): def demix_demucs(self, mix, margin_size):
print('shift_set ', shift_set)
processed = {} processed = {}
demucsitera = len(mix) demucsitera = len(mix)
demucsitera_calc = demucsitera * 2 demucsitera_calc = demucsitera * 2
@@ -622,7 +656,6 @@ class Predictor():
cmix = torch.tensor(cmix, dtype=torch.float32) cmix = torch.tensor(cmix, dtype=torch.float32)
ref = cmix.mean(0) ref = cmix.mean(0)
cmix = (cmix - ref.mean()) / ref.std() cmix = (cmix - ref.mean()) / ref.std()
shift_set = 0
with torch.no_grad(): with torch.no_grad():
sources = apply_model(self.demucs, cmix.to(device), split=True, overlap=overlap_set, shifts=shift_set) sources = apply_model(self.demucs, cmix.to(device), split=True, overlap=overlap_set, shifts=shift_set)
sources = (sources * ref.std() + ref.mean()).cpu().numpy() sources = (sources * ref.std() + ref.mean()).cpu().numpy()
@@ -650,16 +683,22 @@ data = {
'chunks': 10, 'chunks': 10,
'non_red': False, 'non_red': False,
'noisereduc_s': 3, 'noisereduc_s': 3,
'mixing': 'default',
'modelFolder': False, 'modelFolder': False,
'voc_only': False, 'voc_only': False,
'inst_only': False, 'inst_only': False,
'break': False,
'n_fft_scale': 6144, 'n_fft_scale': 6144,
'dim_f': 2048, 'dim_f': 2048,
'overlap': 0.5,
'shifts': 0,
'margin': 44100,
'channel': 64,
'compensate': 1.03597672895,
'demucs_only': False,
'mixing': 'Default',
'DemucsModel': 'demucs_extra-3646af93_org.th',
# Choose Model # Choose Model
'mdxnetModel': 'UVR-MDX-NET 1', 'mdxnetModel': 'UVR-MDX-NET 1',
'high_end_process': 'mirroring', 'mdxnetModeltype': 'Vocals (Custom)',
} }
default_chunks = data['chunks'] default_chunks = data['chunks']
default_noisereduc_s = data['noisereduc_s'] default_noisereduc_s = data['noisereduc_s']
@@ -696,9 +735,6 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
global widget_text global widget_text
global gui_progress_bar global gui_progress_bar
global music_file global music_file
global channel_set
global margin_set
global overlap_set
global default_chunks global default_chunks
global default_noisereduc_s global default_noisereduc_s
global _basename global _basename
@@ -710,15 +746,18 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
global base_text global base_text
global model_set global model_set
global model_set_name global model_set_name
global stemset_n
global channel_set
global margin_set
global overlap_set
global shift_set
global source_val
# Update default settings # Update default settings
default_chunks = data['chunks'] default_chunks = data['chunks']
default_noisereduc_s = data['noisereduc_s'] default_noisereduc_s = data['noisereduc_s']
channel_set = int(64)
margin_set = int(44100)
overlap_set = float(0.5)
widget_text = text_widget widget_text = text_widget
gui_progress_bar = progress_var gui_progress_bar = progress_var
@@ -735,7 +774,6 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
ffmp_err = """audioread\__init__.py", line 116, in audio_open""" ffmp_err = """audioread\__init__.py", line 116, in audio_open"""
sf_write_err = "sf.write" sf_write_err = "sf.write"
try: try:
with open('errorlog.txt', 'w') as f: with open('errorlog.txt', 'w') as f:
f.write(f'No errors to report at this time.' + f'\n\nLast Process Method Used: MDX-Net' + f.write(f'No errors to report at this time.' + f'\n\nLast Process Method Used: MDX-Net' +
@@ -745,38 +783,112 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
data.update(kwargs) data.update(kwargs)
if data['mdxnetModeltype'] == 'Vocals (Custom)':
stemset = 'v'
source_val_set = 3
stem_name = '(Vocals)'
if data['mdxnetModeltype'] == 'Other (Custom)':
stemset = 'o'
source_val_set = 2
stem_name = '(Other)'
if data['mdxnetModeltype'] == 'Drums (Custom)':
stemset = 'd'
source_val_set = 1
stem_name = '(Drums)'
if data['mdxnetModeltype'] == 'Bass (Custom)':
stemset = 'b'
source_val_set = 0
stem_name = '(Bass)'
if data['mdxnetModeltype'] == 'Vocals (Default)':
stemset = 'v'
source_val_set = 3
stem_name = '(Vocals)'
if data['mdxnetModeltype'] == 'Other (Default)':
stemset = 'o'
source_val_set = 2
stem_name = '(Other)'
if data['mdxnetModeltype'] == 'Drums (Default)':
stemset = 'd'
source_val_set = 1
stem_name = '(Drums)'
if data['mdxnetModeltype'] == 'Bass (Default)':
stemset = 'b'
source_val_set = 0
stem_name = '(Bass)'
if data['mdxnetModel'] == 'UVR-MDX-NET 1': if data['mdxnetModel'] == 'UVR-MDX-NET 1':
model_set = 'UVR_MDXNET_9703' model_set = 'UVR_MDXNET_1_9703'
model_set_name = 'UVR_MDXNET_9703' model_set_name = 'UVR_MDXNET_1_9703'
modeltype = 'vocals-one' modeltype = 'v'
stemset_n = '(Vocals)'
source_val = 3
n_fft_scale_set=6144 n_fft_scale_set=6144
dim_f_set=2048 dim_f_set=2048
elif data['mdxnetModel'] == 'UVR-MDX-NET 2': elif data['mdxnetModel'] == 'UVR-MDX-NET 2':
model_set = 'UVR_MDXNET_9682' model_set = 'UVR_MDXNET_2_9682'
model_set_name = 'UVR_MDXNET_9682' model_set_name = 'UVR_MDXNET_2_9682'
modeltype = 'vocals-one' modeltype = 'v'
stemset_n = '(Vocals)'
source_val = 3
n_fft_scale_set=6144 n_fft_scale_set=6144
dim_f_set=2048 dim_f_set=2048
elif data['mdxnetModel'] == 'UVR-MDX-NET 3': elif data['mdxnetModel'] == 'UVR-MDX-NET 3':
model_set = 'UVR_MDXNET_9662' model_set = 'UVR_MDXNET_3_9662'
model_set_name = 'UVR_MDXNET_9662' model_set_name = 'UVR_MDXNET_3_9662'
modeltype = 'v'
stemset_n = '(Vocals)'
source_val = 3
n_fft_scale_set=6144 n_fft_scale_set=6144
dim_f_set=2048 dim_f_set=2048
elif data['mdxnetModel'] == 'UVR-MDX-NET Karaoke': elif data['mdxnetModel'] == 'UVR-MDX-NET Karaoke':
model_set = 'UVR_MDXNET_KARA' model_set = 'UVR_MDXNET_KARA'
model_set_name = 'UVR_MDXNET_Karaoke' model_set_name = 'UVR_MDXNET_Karaoke'
modeltype = 'vocals-one' modeltype = 'v'
stemset_n = '(Vocals)'
source_val = 3
n_fft_scale_set=6144 n_fft_scale_set=6144
dim_f_set=2048 dim_f_set=2048
elif data['mdxnetModel'] == 'other':
model_set = 'other'
model_set_name = 'other'
modeltype = 'o'
stemset_n = '(Other)'
source_val = 2
n_fft_scale_set=8192
dim_f_set=2048
elif data['mdxnetModel'] == 'drums':
model_set = 'drums'
model_set_name = 'drums'
modeltype = 'd'
stemset_n = '(Drums)'
source_val = 1
n_fft_scale_set=4096
dim_f_set=2048
elif data['mdxnetModel'] == 'bass':
model_set = 'bass'
model_set_name = 'bass'
modeltype = 'b'
stemset_n = '(Bass)'
source_val = 0
n_fft_scale_set=16384
dim_f_set=2048
else: else:
model_set = data['mdxnetModel'] model_set = data['mdxnetModel']
model_set_name = data['mdxnetModel'] model_set_name = data['mdxnetModel']
modeltype = 'vocals-two' modeltype = stemset
stemset_n = stem_name
source_val = source_val_set
n_fft_scale_set=int(data['n_fft_scale']) n_fft_scale_set=int(data['n_fft_scale'])
dim_f_set=int(data['dim_f']) dim_f_set=int(data['dim_f'])
print(n_fft_scale_set) print(n_fft_scale_set)
print(dim_f_set) print(dim_f_set)
print(data['DemucsModel'])
overlap_set = float(data['overlap'])
channel_set = int(data['channel'])
margin_set = int(data['margin'])
shift_set = int(data['shifts'])
stime = time.perf_counter() stime = time.perf_counter()
progress_var.set(0) progress_var.set(0)
@@ -799,12 +911,21 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
print(model_set) print(model_set)
try: try:
if float(data['noisereduc_s']) >= 10:
text_widget.write('Error: Noise Reduction only supports values between 0-10.\nPlease set a value between 0-10 (with or without decimals) and try again.')
progress_var.set(0)
button_widget.configure(state=tk.NORMAL) # Enable Button
return
total, used, free = shutil.disk_usage("/") total, used, free = shutil.disk_usage("/")
total_space = int(total/1.074e+9) total_space = int(total/1.074e+9)
used_space = int(used/1.074e+9) used_space = int(used/1.074e+9)
free_space = int(free/1.074e+9) free_space = int(free/1.074e+9)
if int(free/1.074e+9) <= int(2): if int(free/1.074e+9) <= int(2):
text_widget.write('Error: Not enough storage on main drive to continue. Your main drive must have \nat least 3 GB\'s of storage in order for this application function properly. \n\nPlease ensure your main drive has at least 3 GB\'s of storage and try again.\n\n') text_widget.write('Error: Not enough storage on main drive to continue. Your main drive must have \nat least 3 GB\'s of storage in order for this application function properly. \n\nPlease ensure your main drive has at least 3 GB\'s of storage and try again.\n\n')
text_widget.write('Detected Total Space: ' + str(total_space) + ' GB' + '\n') text_widget.write('Detected Total Space: ' + str(total_space) + ' GB' + '\n')
@@ -837,12 +958,14 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
e = os.path.join(data["export_path"]) e = os.path.join(data["export_path"])
demucsmodel = 'models/Demucs_Model/demucs_extra-3646af93_org.th' demucsmodel = 'models/Demucs_Model/' + str(data['DemucsModel'])
pred = Predictor() pred = Predictor()
pred.prediction_setup(demucs_name=demucsmodel, pred.prediction_setup(demucs_name=demucsmodel,
channels=channel_set) channels=channel_set)
print(demucsmodel)
# split # split
pred.prediction( pred.prediction(
m=music_file, m=music_file,

View File

@@ -52,7 +52,8 @@ data = {
# Constants # Constants
'window_size': 512, 'window_size': 512,
'agg': 10, 'agg': 10,
'high_end_process': 'mirroring' 'high_end_process': 'mirroring',
'ModelParams': 'Auto'
} }
default_window_size = data['window_size'] default_window_size = data['window_size']
@@ -428,159 +429,167 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
#v5 Models #v5 Models
if model_hash == '47939caf0cfe52a0e81442b85b971dfd': if model_hash == '47939caf0cfe52a0e81442b85b971dfd':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if model_hash == '4e4ecb9764c50a8c414fee6e10395bbe': if model_hash == '4e4ecb9764c50a8c414fee6e10395bbe':
model_params_d=str('lib_v5/modelparams/4band_v2.json') model_params_auto=str('lib_v5/modelparams/4band_v2.json')
param_name=str('4band_v2') param_name_auto=str('4band_v2')
if model_hash == 'e60a1e84803ce4efc0a6551206cc4b71': if model_hash == 'e60a1e84803ce4efc0a6551206cc4b71':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if model_hash == 'a82f14e75892e55e994376edbf0c8435': if model_hash == 'a82f14e75892e55e994376edbf0c8435':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if model_hash == '6dd9eaa6f0420af9f1d403aaafa4cc06': if model_hash == '6dd9eaa6f0420af9f1d403aaafa4cc06':
model_params_d=str('lib_v5/modelparams/4band_v2_sn.json') model_params_auto=str('lib_v5/modelparams/4band_v2_sn.json')
param_name=str('4band_v2_sn') param_name_auto=str('4band_v2_sn')
if model_hash == '5c7bbca45a187e81abbbd351606164e5': if model_hash == '5c7bbca45a187e81abbbd351606164e5':
model_params_d=str('lib_v5/modelparams/3band_44100_msb2.json') model_params_auto=str('lib_v5/modelparams/3band_44100_msb2.json')
param_name=str('3band_44100_msb2') param_name_auto=str('3band_44100_msb2')
if model_hash == 'd6b2cb685a058a091e5e7098192d3233': if model_hash == 'd6b2cb685a058a091e5e7098192d3233':
model_params_d=str('lib_v5/modelparams/3band_44100_msb2.json') model_params_auto=str('lib_v5/modelparams/3band_44100_msb2.json')
param_name=str('3band_44100_msb2') param_name_auto=str('3band_44100_msb2')
if model_hash == 'c1b9f38170a7c90e96f027992eb7c62b': if model_hash == 'c1b9f38170a7c90e96f027992eb7c62b':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if model_hash == 'c3448ec923fa0edf3d03a19e633faa53': if model_hash == 'c3448ec923fa0edf3d03a19e633faa53':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if model_hash == '68aa2c8093d0080704b200d140f59e54': if model_hash == '68aa2c8093d0080704b200d140f59e54':
model_params_d=str('lib_v5/modelparams/3band_44100.json') model_params_auto=str('lib_v5/modelparams/3band_44100.json')
param_name=str('3band_44100.json') param_name_auto=str('3band_44100.json')
if model_hash == 'fdc83be5b798e4bd29fe00fe6600e147': if model_hash == 'fdc83be5b798e4bd29fe00fe6600e147':
model_params_d=str('lib_v5/modelparams/3band_44100_mid.json') model_params_auto=str('lib_v5/modelparams/3band_44100_mid.json')
param_name=str('3band_44100_mid.json') param_name_auto=str('3band_44100_mid.json')
if model_hash == '2ce34bc92fd57f55db16b7a4def3d745': if model_hash == '2ce34bc92fd57f55db16b7a4def3d745':
model_params_d=str('lib_v5/modelparams/3band_44100_mid.json') model_params_auto=str('lib_v5/modelparams/3band_44100_mid.json')
param_name=str('3band_44100_mid.json') param_name_auto=str('3band_44100_mid.json')
if model_hash == '52fdca89576f06cf4340b74a4730ee5f': if model_hash == '52fdca89576f06cf4340b74a4730ee5f':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100.json') param_name_auto=str('4band_44100.json')
if model_hash == '41191165b05d38fc77f072fa9e8e8a30': if model_hash == '41191165b05d38fc77f072fa9e8e8a30':
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100.json') param_name_auto=str('4band_44100.json')
if model_hash == '89e83b511ad474592689e562d5b1f80e': if model_hash == '89e83b511ad474592689e562d5b1f80e':
model_params_d=str('lib_v5/modelparams/2band_32000.json') model_params_auto=str('lib_v5/modelparams/2band_32000.json')
param_name=str('2band_32000.json') param_name_auto=str('2band_32000.json')
if model_hash == '0b954da81d453b716b114d6d7c95177f': if model_hash == '0b954da81d453b716b114d6d7c95177f':
model_params_d=str('lib_v5/modelparams/2band_32000.json') model_params_auto=str('lib_v5/modelparams/2band_32000.json')
param_name=str('2band_32000.json') param_name_auto=str('2band_32000.json')
#v4 Models #v4 Models
if model_hash == '6a00461c51c2920fd68937d4609ed6c8': if model_hash == '6a00461c51c2920fd68937d4609ed6c8':
model_params_d=str('lib_v5/modelparams/1band_sr16000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr16000_hl512.json')
param_name=str('1band_sr16000_hl512') param_name_auto=str('1band_sr16000_hl512')
if model_hash == '0ab504864d20f1bd378fe9c81ef37140': if model_hash == '0ab504864d20f1bd378fe9c81ef37140':
model_params_d=str('lib_v5/modelparams/1band_sr32000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr32000_hl512.json')
param_name=str('1band_sr32000_hl512') param_name_auto=str('1band_sr32000_hl512')
if model_hash == '7dd21065bf91c10f7fccb57d7d83b07f': if model_hash == '7dd21065bf91c10f7fccb57d7d83b07f':
model_params_d=str('lib_v5/modelparams/1band_sr32000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr32000_hl512.json')
param_name=str('1band_sr32000_hl512') param_name_auto=str('1band_sr32000_hl512')
if model_hash == '80ab74d65e515caa3622728d2de07d23': if model_hash == '80ab74d65e515caa3622728d2de07d23':
model_params_d=str('lib_v5/modelparams/1band_sr32000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr32000_hl512.json')
param_name=str('1band_sr32000_hl512') param_name_auto=str('1band_sr32000_hl512')
if model_hash == 'edc115e7fc523245062200c00caa847f': if model_hash == 'edc115e7fc523245062200c00caa847f':
model_params_d=str('lib_v5/modelparams/1band_sr33075_hl384.json') model_params_auto=str('lib_v5/modelparams/1band_sr33075_hl384.json')
param_name=str('1band_sr33075_hl384') param_name_auto=str('1band_sr33075_hl384')
if model_hash == '28063e9f6ab5b341c5f6d3c67f2045b7': if model_hash == '28063e9f6ab5b341c5f6d3c67f2045b7':
model_params_d=str('lib_v5/modelparams/1band_sr33075_hl384.json') model_params_auto=str('lib_v5/modelparams/1band_sr33075_hl384.json')
param_name=str('1band_sr33075_hl384') param_name_auto=str('1band_sr33075_hl384')
if model_hash == 'b58090534c52cbc3e9b5104bad666ef2': if model_hash == 'b58090534c52cbc3e9b5104bad666ef2':
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl512.json')
param_name=str('1band_sr44100_hl512') param_name_auto=str('1band_sr44100_hl512')
if model_hash == '0cdab9947f1b0928705f518f3c78ea8f': if model_hash == '0cdab9947f1b0928705f518f3c78ea8f':
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl512.json')
param_name=str('1band_sr44100_hl512') param_name_auto=str('1band_sr44100_hl512')
if model_hash == 'ae702fed0238afb5346db8356fe25f13': if model_hash == 'ae702fed0238afb5346db8356fe25f13':
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl1024.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl1024.json')
param_name=str('1band_sr44100_hl1024') param_name_auto=str('1band_sr44100_hl1024')
#User Models #User Models
#1 Band #1 Band
if '1band_sr16000_hl512' in ModelName: if '1band_sr16000_hl512' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr16000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr16000_hl512.json')
param_name=str('1band_sr16000_hl512') param_name_auto=str('1band_sr16000_hl512')
if '1band_sr32000_hl512' in ModelName: if '1band_sr32000_hl512' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr32000_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr32000_hl512.json')
param_name=str('1band_sr32000_hl512') param_name_auto=str('1band_sr32000_hl512')
if '1band_sr33075_hl384' in ModelName: if '1band_sr33075_hl384' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr33075_hl384.json') model_params_auto=str('lib_v5/modelparams/1band_sr33075_hl384.json')
param_name=str('1band_sr33075_hl384') param_name_auto=str('1band_sr33075_hl384')
if '1band_sr44100_hl256' in ModelName: if '1band_sr44100_hl256' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl256.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl256.json')
param_name=str('1band_sr44100_hl256') param_name_auto=str('1band_sr44100_hl256')
if '1band_sr44100_hl512' in ModelName: if '1band_sr44100_hl512' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl512.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl512.json')
param_name=str('1band_sr44100_hl512') param_name_auto=str('1band_sr44100_hl512')
if '1band_sr44100_hl1024' in ModelName: if '1band_sr44100_hl1024' in ModelName:
model_params_d=str('lib_v5/modelparams/1band_sr44100_hl1024.json') model_params_auto=str('lib_v5/modelparams/1band_sr44100_hl1024.json')
param_name=str('1band_sr44100_hl1024') param_name_auto=str('1band_sr44100_hl1024')
#2 Band #2 Band
if '2band_44100_lofi' in ModelName: if '2band_44100_lofi' in ModelName:
model_params_d=str('lib_v5/modelparams/2band_44100_lofi.json') model_params_auto=str('lib_v5/modelparams/2band_44100_lofi.json')
param_name=str('2band_44100_lofi') param_name_auto=str('2band_44100_lofi')
if '2band_32000' in ModelName: if '2band_32000' in ModelName:
model_params_d=str('lib_v5/modelparams/2band_32000.json') model_params_auto=str('lib_v5/modelparams/2band_32000.json')
param_name=str('2band_32000') param_name_auto=str('2band_32000')
if '2band_48000' in ModelName: if '2band_48000' in ModelName:
model_params_d=str('lib_v5/modelparams/2band_48000.json') model_params_auto=str('lib_v5/modelparams/2band_48000.json')
param_name=str('2band_48000') param_name_auto=str('2band_48000')
#3 Band #3 Band
if '3band_44100' in ModelName: if '3band_44100' in ModelName:
model_params_d=str('lib_v5/modelparams/3band_44100.json') model_params_auto=str('lib_v5/modelparams/3band_44100.json')
param_name=str('3band_44100') param_name_auto=str('3band_44100')
if '3band_44100_mid' in ModelName: if '3band_44100_mid' in ModelName:
model_params_d=str('lib_v5/modelparams/3band_44100_mid.json') model_params_auto=str('lib_v5/modelparams/3band_44100_mid.json')
param_name=str('3band_44100_mid') param_name_auto=str('3band_44100_mid')
if '3band_44100_msb2' in ModelName: if '3band_44100_msb2' in ModelName:
model_params_d=str('lib_v5/modelparams/3band_44100_msb2.json') model_params_auto=str('lib_v5/modelparams/3band_44100_msb2.json')
param_name=str('3band_44100_msb2') param_name_auto=str('3band_44100_msb2')
#4 Band #4 Band
if '4band_44100' in ModelName: if '4band_44100' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100.json') model_params_auto=str('lib_v5/modelparams/4band_44100.json')
param_name=str('4band_44100') param_name_auto=str('4band_44100')
if '4band_44100_mid' in ModelName: if '4band_44100_mid' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100_mid.json') model_params_auto=str('lib_v5/modelparams/4band_44100_mid.json')
param_name=str('4band_44100_mid') param_name_auto=str('4band_44100_mid')
if '4band_44100_msb' in ModelName: if '4band_44100_msb' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100_msb.json') model_params_auto=str('lib_v5/modelparams/4band_44100_msb.json')
param_name=str('4band_44100_msb') param_name_auto=str('4band_44100_msb')
if '4band_44100_msb2' in ModelName: if '4band_44100_msb2' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100_msb2.json') model_params_auto=str('lib_v5/modelparams/4band_44100_msb2.json')
param_name=str('4band_44100_msb2') param_name_auto=str('4band_44100_msb2')
if '4band_44100_reverse' in ModelName: if '4band_44100_reverse' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100_reverse.json') model_params_auto=str('lib_v5/modelparams/4band_44100_reverse.json')
param_name=str('4band_44100_reverse') param_name_auto=str('4band_44100_reverse')
if '4band_44100_sw' in ModelName: if '4band_44100_sw' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_44100_sw.json') model_params_auto=str('lib_v5/modelparams/4band_44100_sw.json')
param_name=str('4band_44100_sw') param_name_auto=str('4band_44100_sw')
if '4band_v2' in ModelName: if '4band_v2' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_v2.json') model_params_auto=str('lib_v5/modelparams/4band_v2.json')
param_name=str('4band_v2') param_name_auto=str('4band_v2')
if '4band_v2_sn' in ModelName: if '4band_v2_sn' in ModelName:
model_params_d=str('lib_v5/modelparams/4band_v2_sn.json') model_params_auto=str('lib_v5/modelparams/4band_v2_sn.json')
param_name=str('4band_v2_sn') param_name_auto=str('4band_v2_sn')
if 'tmodelparam' in ModelName: if 'tmodelparam' in ModelName:
model_params_d=str('lib_v5/modelparams/tmodelparam.json') model_params_auto=str('lib_v5/modelparams/tmodelparam.json')
param_name=str('User Model Param Set') param_name_auto=str('User Model Param Set')
text_widget.write(' Done!\n') text_widget.write(' Done!\n')
if data['ModelParams'] == 'Auto':
param_name = param_name_auto
model_params_d = model_params_auto
else:
param_name = str(data['ModelParams'])
model_params_d = str('lib_v5/modelparams/' + data['ModelParams'])
try: try:
print('Model Parameters:', model_params_d) print('Model Parameters:', model_params_d)
text_widget.write(base_text + 'Loading assigned model parameters ' + '\"' + param_name + '\"... ') text_widget.write(base_text + 'Loading assigned model parameters ' + '\"' + param_name + '\"... ')
@@ -617,6 +626,7 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
button_widget.configure(state=tk.NORMAL) # Enable Button button_widget.configure(state=tk.NORMAL) # Enable Button
return return
mp = ModelParameters(model_params_d) mp = ModelParameters(model_params_d)
text_widget.write('Done!\n') text_widget.write('Done!\n')
# -Instrumental- # -Instrumental-

View File

@@ -71,8 +71,10 @@ class Predictor():
self.onnx_models = {} self.onnx_models = {}
c = 0 c = 0
self.models = get_models('tdf_extra', load=False, device=cpu, stems=modeltype) self.models = get_models('tdf_extra', load=False, device=cpu, stems=modeltype, n_fft_scale=n_fft_scale_set, dim_f=dim_f_set)
widget_text.write(base_text + 'Loading ONNX model... ') if not data['demucs_only']:
widget_text.write(base_text + 'Loading ONNX model... ')
update_progress(**progress_kwargs, update_progress(**progress_kwargs,
step=0.1) step=0.1)
c+=1 c+=1
@@ -92,7 +94,9 @@ class Predictor():
print('model_set: ', model_set) print('model_set: ', model_set)
self.onnx_models[c] = ort.InferenceSession(os.path.join('models/MDX_Net_Models', model_set), providers=run_type) self.onnx_models[c] = ort.InferenceSession(os.path.join('models/MDX_Net_Models', model_set), providers=run_type)
widget_text.write('Done!\n')
if not data['demucs_only']:
widget_text.write('Done!\n')
def prediction(self, m): def prediction(self, m):
#mix, rate = sf.read(m) #mix, rate = sf.read(m)
@@ -181,7 +185,7 @@ class Predictor():
step=(0.9)) step=(0.9))
widget_text.write('Done!\n') widget_text.write('Done!\n')
widget_text.write(base_text + 'Performing Noise Reduction... ') widget_text.write(base_text + 'Performing Noise Reduction... ')
reduction_sen = float(int(data['noisereduc_s'])/10) reduction_sen = float(data['noisereduc_s'])/10
subprocess.call("lib_v5\\sox\\sox.exe" + ' "' + subprocess.call("lib_v5\\sox\\sox.exe" + ' "' +
f"{str(non_reduced_vocal_path)}" + '" "' + f"{str(vocal_path)}" + '" ' + f"{str(non_reduced_vocal_path)}" + '" "' + f"{str(vocal_path)}" + '" ' +
"noisered lib_v5\\sox\\mdxnetnoisereduc.prof " + f"{reduction_sen}", "noisered lib_v5\\sox\\mdxnetnoisereduc.prof " + f"{reduction_sen}",
@@ -353,7 +357,8 @@ class Predictor():
if not data['demucsmodel']: if not data['demucsmodel']:
sources = self.demix_base(segmented_mix, margin_size=margin) sources = self.demix_base(segmented_mix, margin_size=margin)
elif data['demucs_only']:
sources = self.demix_demucs(segmented_mix, margin_size=margin)
else: # both, apply spec effects else: # both, apply spec effects
base_out = self.demix_base(segmented_mix, margin_size=margin) base_out = self.demix_base(segmented_mix, margin_size=margin)
demucs_out = self.demix_demucs(segmented_mix, margin_size=margin) demucs_out = self.demix_demucs(segmented_mix, margin_size=margin)
@@ -364,8 +369,8 @@ class Predictor():
sources = {} sources = {}
sources[3] = (spec_effects(wave=[demucs_out[3],base_out[0]], sources[3] = (spec_effects(wave=[demucs_out[3],base_out[0]],
algorithm='default', algorithm=data['mixing'],
value=b[3])*1.03597672895) # compensation value=b[3])*float(data['compensate'])) # compensation
return sources return sources
def demix_base(self, mixes, margin_size): def demix_base(self, mixes, margin_size):
@@ -439,7 +444,6 @@ class Predictor():
cmix = torch.tensor(cmix, dtype=torch.float32) cmix = torch.tensor(cmix, dtype=torch.float32)
ref = cmix.mean(0) ref = cmix.mean(0)
cmix = (cmix - ref.mean()) / ref.std() cmix = (cmix - ref.mean()) / ref.std()
shift_set = 0
with torch.no_grad(): with torch.no_grad():
sources = apply_model(self.demucs, cmix.to(device), split=True, overlap=overlap_set, shifts=shift_set) sources = apply_model(self.demucs, cmix.to(device), split=True, overlap=overlap_set, shifts=shift_set)
sources = (sources * ref.std() + ref.mean()).cpu().numpy() sources = (sources * ref.std() + ref.mean()).cpu().numpy()
@@ -562,11 +566,20 @@ data = {
'chunks': 'auto', 'chunks': 'auto',
'non_red': False, 'non_red': False,
'noisereduc_s': 3, 'noisereduc_s': 3,
'mixing': 'default',
'ensChoose': 'Basic Ensemble', 'ensChoose': 'Basic Ensemble',
'algo': 'Instrumentals (Min Spec)', 'algo': 'Instrumentals (Min Spec)',
#Advanced Options #Advanced Options
'appendensem': False, 'appendensem': False,
'overlap': 0.5,
'shifts': 0,
'margin': 44100,
'channel': 64,
'compensate': 1.03597672895,
'demucs_only': False,
'mixing': 'Default',
'DemucsModel': 'demucs_extra-3646af93_org.th',
# Models # Models
'instrumentalModel': None, 'instrumentalModel': None,
'useModel': None, 'useModel': None,
@@ -602,9 +615,6 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
global widget_text global widget_text
global gui_progress_bar global gui_progress_bar
global music_file global music_file
global channel_set
global margin_set
global overlap_set
global default_chunks global default_chunks
global default_noisereduc_s global default_noisereduc_s
global base_name global base_name
@@ -615,14 +625,18 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
global model_set_name global model_set_name
global ModelName_2 global ModelName_2
global channel_set
global margin_set
global overlap_set
global shift_set
global n_fft_scale_set
global dim_f_set
# Update default settings # Update default settings
default_chunks = data['chunks'] default_chunks = data['chunks']
default_noisereduc_s = data['noisereduc_s'] default_noisereduc_s = data['noisereduc_s']
channel_set = int(64)
margin_set = int(44100)
overlap_set = float(0.5)
widget_text = text_widget widget_text = text_widget
gui_progress_bar = progress_var gui_progress_bar = progress_var
@@ -647,6 +661,15 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
except: except:
pass pass
overlap_set = float(data['overlap'])
channel_set = int(data['channel'])
margin_set = int(data['margin'])
shift_set = int(data['shifts'])
n_fft_scale_set=6144
dim_f_set=2048
global nn_arch_sizes global nn_arch_sizes
global nn_architecture global nn_architecture
@@ -1195,11 +1218,11 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
#MDX-Net Model #MDX-Net Model
if data['mdx_ensem'] == 'UVR-MDX-NET 1': if data['mdx_ensem'] == 'UVR-MDX-NET 1':
mdx_ensem = 'UVR_MDXNET_9703' mdx_ensem = 'UVR_MDXNET_1_9703'
if data['mdx_ensem'] == 'UVR-MDX-NET 2': if data['mdx_ensem'] == 'UVR-MDX-NET 2':
mdx_ensem = 'UVR_MDXNET_9682' mdx_ensem = 'UVR_MDXNET_2_9682'
if data['mdx_ensem'] == 'UVR-MDX-NET 3': if data['mdx_ensem'] == 'UVR-MDX-NET 3':
mdx_ensem = 'UVR_MDXNET_9662' mdx_ensem = 'UVR_MDXNET_3_9662'
if data['mdx_ensem'] == 'UVR-MDX-NET Karaoke': if data['mdx_ensem'] == 'UVR-MDX-NET Karaoke':
mdx_ensem = 'UVR_MDXNET_KARA' mdx_ensem = 'UVR_MDXNET_KARA'
@@ -1207,11 +1230,11 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
#MDX-Net Model 2 #MDX-Net Model 2
if data['mdx_ensem_b'] == 'UVR-MDX-NET 1': if data['mdx_ensem_b'] == 'UVR-MDX-NET 1':
mdx_ensem_b = 'UVR_MDXNET_9703' mdx_ensem_b = 'UVR_MDXNET_1_9703'
if data['mdx_ensem_b'] == 'UVR-MDX-NET 2': if data['mdx_ensem_b'] == 'UVR-MDX-NET 2':
mdx_ensem_b = 'UVR_MDXNET_9682' mdx_ensem_b = 'UVR_MDXNET_2_9682'
if data['mdx_ensem_b'] == 'UVR-MDX-NET 3': if data['mdx_ensem_b'] == 'UVR-MDX-NET 3':
mdx_ensem_b = 'UVR_MDXNET_9662' mdx_ensem_b = 'UVR_MDXNET_3_9662'
if data['mdx_ensem_b'] == 'UVR-MDX-NET Karaoke': if data['mdx_ensem_b'] == 'UVR-MDX-NET Karaoke':
mdx_ensem_b = 'UVR_MDXNET_Karaoke' mdx_ensem_b = 'UVR_MDXNET_Karaoke'
if data['mdx_ensem_b'] == 'No Model': if data['mdx_ensem_b'] == 'No Model':
@@ -1925,23 +1948,23 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
else: else:
text_widget.write('Ensemble Mode - Running Model - ' + mdx_name + '\n\n') text_widget.write('Ensemble Mode - Running Model - ' + mdx_name + '\n\n')
if mdx_name == 'UVR_MDXNET_9703': if mdx_name == 'UVR_MDXNET_1_9703':
mdx_ensem_b = 'UVR_MDXNET_9703' mdx_ensem_b = 'UVR_MDXNET_1_9703'
model_set = 'UVR_MDXNET_9703.onnx' model_set = 'UVR_MDXNET_1_9703.onnx'
model_set_name = 'UVR_MDXNET_9703' model_set_name = 'UVR_MDXNET_1_9703'
modeltype = 'vocals-one' modeltype = 'v'
if mdx_name == 'UVR_MDXNET_9682': if mdx_name == 'UVR_MDXNET_2_9682':
model_set = 'UVR_MDXNET_9682.onnx' model_set = 'UVR_MDXNET_2_9682.onnx'
model_set_name = 'UVR_MDXNET_9682' model_set_name = 'UVR_MDXNET_2_9682'
modeltype = 'vocals-one' modeltype = 'v'
if mdx_name == 'UVR_MDXNET_9662': if mdx_name == 'UVR_MDXNET_3_9662':
model_set = 'UVR_MDXNET_9662.onnx' model_set = 'UVR_MDXNET_3_9662.onnx'
model_set_name = 'UVR_MDXNET_9662' model_set_name = 'UVR_MDXNET_3_9662'
modeltype = 'vocals-one' modeltype = 'v'
if mdx_name == 'UVR_MDXNET_Karaoke': if mdx_name == 'UVR_MDXNET_Karaoke':
model_set = 'UVR_MDXNET_KARA.onnx' model_set = 'UVR_MDXNET_KARA.onnx'
model_set_name = 'UVR_MDXNET_Karaoke' model_set_name = 'UVR_MDXNET_Karaoke'
modeltype = 'vocals-one' modeltype = 'v'
update_progress(**progress_kwargs, update_progress(**progress_kwargs,
step=0) step=0)
@@ -1958,7 +1981,7 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
e = os.path.join(data["export_path"]) e = os.path.join(data["export_path"])
demucsmodel = 'models/Demucs_Model/demucs_extra-3646af93_org.th' demucsmodel = 'models/Demucs_Model/' + str(data['DemucsModel'])
pred = Predictor() pred = Predictor()
pred.prediction_setup(demucs_name=demucsmodel, pred.prediction_setup(demucs_name=demucsmodel,

View File

@@ -60,18 +60,18 @@ def istft(spec, hl):
return wave return wave
def spec_effects(wave, algorithm='default', value=None): def spec_effects(wave, algorithm='Default', value=None):
spec = [stft(wave[0],2048,1024),stft(wave[1],2048,1024)] spec = [stft(wave[0],2048,1024),stft(wave[1],2048,1024)]
if algorithm == 'min_mag': if algorithm == 'Min_Mag':
v_spec_m = np.where(np.abs(spec[1]) <= np.abs(spec[0]), spec[1], spec[0]) v_spec_m = np.where(np.abs(spec[1]) <= np.abs(spec[0]), spec[1], spec[0])
wave = istft(v_spec_m,1024) wave = istft(v_spec_m,1024)
elif algorithm == 'max_mag': elif algorithm == 'Max_Mag':
v_spec_m = np.where(np.abs(spec[1]) >= np.abs(spec[0]), spec[1], spec[0]) v_spec_m = np.where(np.abs(spec[1]) >= np.abs(spec[0]), spec[1], spec[0])
wave = istft(v_spec_m,1024) wave = istft(v_spec_m,1024)
elif algorithm == 'default': elif algorithm == 'Default':
#wave = [istft(spec[0],1024),istft(spec[1],1024)] #wave = [istft(spec[0],1024),istft(spec[1],1024)]
wave = (wave[1] * value) + (wave[0] * (1-value)) wave = (wave[1] * value) + (wave[0] * (1-value))
elif algorithm == 'invert_p': elif algorithm == 'Invert_p':
X_mag = np.abs(spec[0]) X_mag = np.abs(spec[0])
y_mag = np.abs(spec[1]) y_mag = np.abs(spec[1])
max_mag = np.where(X_mag >= y_mag, X_mag, y_mag) max_mag = np.where(X_mag >= y_mag, X_mag, y_mag)
@@ -80,26 +80,43 @@ def spec_effects(wave, algorithm='default', value=None):
return wave return wave
def get_models(name, device, n_fft_scale, dim_f, load=True, stems='vocals-onevocals-two'): def get_models(name, device, n_fft_scale, dim_f, load=True, stems='bdov'):
if name=='tdf_extra': if name=='tdf_extra':
models = [] models = []
if 'vocals-one' in stems: if 'b' in stems:
models.append( models.append(
Conv_TDF_net_trim( Conv_TDF_net_trim(
device=device, load=load, n_fft_scale=n_fft_scale, device=device, load=load, n_fft_scale=n_fft_scale,
model_name='Conv-TDF', target_name='vocals-one', model_name='Conv-TDF', target_name='bass',
L=11, dim_f=dim_f, dim_t=8 L=11, dim_f=dim_f, dim_t=8
) )
) )
if 'vocals-two' in stems: if 'd' in stems:
models.append( models.append(
Conv_TDF_net_trim( Conv_TDF_net_trim(
device=device, load=load, n_fft_scale=n_fft_scale, device=device, load=load, n_fft_scale=n_fft_scale,
model_name='Conv-TDF', target_name='vocals-two', model_name='Conv-TDF', target_name='drums',
L=9, dim_f=dim_f, dim_t=7
)
)
if 'o' in stems:
models.append(
Conv_TDF_net_trim(
device=device, load=load, n_fft_scale=n_fft_scale,
model_name='Conv-TDF', target_name='other',
L=11, dim_f=dim_f, dim_t=8 L=11, dim_f=dim_f, dim_t=8
) )
) )
if 'v' in stems:
models.append(
Conv_TDF_net_trim(
device=device, load=load, n_fft_scale=n_fft_scale,
model_name='Conv-TDF', target_name='vocals',
L=11, dim_f=dim_f, dim_t=8
)
)
return models return models
else: else: