Merge branch 'feature-resolutionType' of https://github.com/Anjok07/ultimatevocalremovergui into feature-resolutionType

This commit is contained in:
Dilan Boskan 2021-01-15 10:51:47 +01:00
commit 3498dfedf1
8 changed files with 61 additions and 28 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@ data.pkl
model_iter26_sr33075_hl384_w512.pth model_iter26_sr33075_hl384_w512.pth
baseline.pth baseline.pth
temp.wav temp.wav
models/**/*.pth

View File

@ -62,6 +62,7 @@ DEFAULT_DATA = {
'modelStackedLabel': '', 'modelStackedLabel': '',
'aiModel': 'v4', 'aiModel': 'v4',
'resType': 'Kaiser Fast', 'resType': 'Kaiser Fast',
'manType': False,
'useModel': 'instrumental', 'useModel': 'instrumental',
'lastDir': None, 'lastDir': None,
@ -247,7 +248,7 @@ class MainWindow(TkinterDnD.Tk):
PROGRESS_HEIGHT = 26 PROGRESS_HEIGHT = 26
PADDING = 10 PADDING = 10
COL1_ROWS = 9 COL1_ROWS = 9.5
COL2_ROWS = 8.1 COL2_ROWS = 8.1
COL3_ROWS = 5.5 COL3_ROWS = 5.5
@ -306,6 +307,7 @@ class MainWindow(TkinterDnD.Tk):
self.hopValue_var = tk.StringVar(value=data['hop_length']) self.hopValue_var = tk.StringVar(value=data['hop_length'])
self.winSize_var = tk.StringVar(value=data['window_size']) self.winSize_var = tk.StringVar(value=data['window_size'])
self.nfft_var = tk.StringVar(value=data['n_fft']) self.nfft_var = tk.StringVar(value=data['n_fft'])
self.manType_var = tk.BooleanVar(value=data['manType'])
# AI model # AI model
self.aiModel_var = tk.StringVar(value=data['aiModel']) self.aiModel_var = tk.StringVar(value=data['aiModel'])
self.resType_var = tk.StringVar(value=data['resType']) self.resType_var = tk.StringVar(value=data['resType'])
@ -468,6 +470,11 @@ class MainWindow(TkinterDnD.Tk):
text='Model Test Mode', text='Model Test Mode',
variable=self.modelFolder_var, variable=self.modelFolder_var,
) )
# Manual Constants
self.options_manType_Checkbutton = ttk.Checkbutton(master=self.options_Frame,
text='Custom parameters',
variable=self.manType_var,
)
# -Column 2- # -Column 2-
# SR # SR
self.options_sr_Entry = ttk.Entry(master=self.options_Frame, self.options_sr_Entry = ttk.Entry(master=self.options_Frame,
@ -550,6 +557,9 @@ class MainWindow(TkinterDnD.Tk):
# Model Folder # Model Folder
self.options_modelFolder_Checkbutton.place(x=0, y=0, width=0, height=0, self.options_modelFolder_Checkbutton.place(x=0, y=0, width=0, height=0,
relx=0, rely=7/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) relx=0, rely=7/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS)
# Manual Constants
self.options_manType_Checkbutton.place(x=0, y=0, width=0, height=0,
relx=0, rely=8/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS)
# -Column 2- # -Column 2-
# SR # SR
self.options_sr_Label.place(x=5, y=4, width=5, height=-8, self.options_sr_Label.place(x=5, y=4, width=5, height=-8,
@ -605,6 +615,8 @@ class MainWindow(TkinterDnD.Tk):
lambda *args: self.decode_modelNames()) lambda *args: self.decode_modelNames())
self.stackedModel_var.trace_add('write', self.stackedModel_var.trace_add('write',
lambda *args: self.decode_modelNames()) lambda *args: self.decode_modelNames())
self.manType_var.trace_add('write',
lambda *args: self.decode_modelNames())
# Model deselect # Model deselect
self.aiModel_var.trace_add('write', self.aiModel_var.trace_add('write',
lambda *args: self.deselect_models()) lambda *args: self.deselect_models())
@ -659,7 +671,8 @@ class MainWindow(TkinterDnD.Tk):
instrumental = get_model_values(self.instrumentalModel_var.get()) instrumental = get_model_values(self.instrumentalModel_var.get())
stacked = get_model_values(self.stackedModel_var.get()) stacked = get_model_values(self.stackedModel_var.get())
try: try:
if [bool(instrumental), bool(stacked)].count(True) == 2: if ([bool(instrumental), bool(stacked)].count(True) == 2 and
not self.manType_var.get()):
sr = DEFAULT_DATA['sr'] sr = DEFAULT_DATA['sr']
hop_length = DEFAULT_DATA['hop_length'] hop_length = DEFAULT_DATA['hop_length']
window_size = DEFAULT_DATA['window_size'] window_size = DEFAULT_DATA['window_size']
@ -744,6 +757,8 @@ class MainWindow(TkinterDnD.Tk):
'n_fft': n_fft, # not needed for v2 'n_fft': n_fft, # not needed for v2
# Resolution Type # Resolution Type
'resType': resType, 'resType': resType,
# Parsed constants should be fixed
'manType': self.manType_var.get(),
# Other Variables (Tkinter) # Other Variables (Tkinter)
'window': self, 'window': self,
'text_widget': self.command_Text, 'text_widget': self.command_Text,
@ -776,7 +791,14 @@ class MainWindow(TkinterDnD.Tk):
# Loop through each constant (key) and its widgets # Loop through each constant (key) and its widgets
for key, (widget, var) in widgetsVars.items(): for key, (widget, var) in widgetsVars.items():
if stacked_selectable: if self.manType_var.get():
if str(widget.cget('state')) != 'normal':
# Manual typing and widget not enabled
widget.configure(state=tk.NORMAL)
if '/' in str(var.get()):
var.set(var.get().split('/')[0])
continue
elif stacked_selectable:
if instrumental_selectable: if instrumental_selectable:
if (key in instrumental.keys() and if (key in instrumental.keys() and
key in stacked.keys()): key in stacked.keys()):
@ -784,16 +806,14 @@ class MainWindow(TkinterDnD.Tk):
widget.configure(state=tk.DISABLED) widget.configure(state=tk.DISABLED)
var.set('%d/%d' % (instrumental[key], stacked[key])) var.set('%d/%d' % (instrumental[key], stacked[key]))
continue continue
else: elif key in stacked.keys():
if key in stacked.keys():
# Only stacked selectable # Only stacked selectable
widget.configure(state=tk.DISABLED) widget.configure(state=tk.DISABLED)
var.set(stacked[key]) var.set(stacked[key])
continue continue
else: elif (key in instrumental.keys() and
# Stacked model can not be selected
if (key in instrumental.keys() and
instrumental_selectable): instrumental_selectable):
# Stacked model can not be selected
widget.configure(state=tk.DISABLED) widget.configure(state=tk.DISABLED)
var.set(instrumental[key]) var.set(instrumental[key])
continue continue
@ -959,7 +979,8 @@ class MainWindow(TkinterDnD.Tk):
# Get constants # Get constants
instrumental = get_model_values(self.instrumentalModel_var.get()) instrumental = get_model_values(self.instrumentalModel_var.get())
stacked = get_model_values(self.stackedModel_var.get()) stacked = get_model_values(self.stackedModel_var.get())
if [bool(instrumental), bool(stacked)].count(True) == 2: if ([bool(instrumental), bool(stacked)].count(True) == 2 and
not self.manType_var.get()):
sr = DEFAULT_DATA['sr'] sr = DEFAULT_DATA['sr']
hop_length = DEFAULT_DATA['hop_length'] hop_length = DEFAULT_DATA['hop_length']
window_size = DEFAULT_DATA['window_size'] window_size = DEFAULT_DATA['window_size']
@ -993,6 +1014,7 @@ class MainWindow(TkinterDnD.Tk):
'modelStackedLabel': self.stackedModel_var.get(), 'modelStackedLabel': self.stackedModel_var.get(),
'aiModel': self.aiModel_var.get(), 'aiModel': self.aiModel_var.get(),
'resType': self.resType_var.get(), 'resType': self.resType_var.get(),
'manType': self.manType_var.get(),
}) })
self.destroy() self.destroy()

View File

@ -54,7 +54,9 @@ data = {
'window_size': 320, 'window_size': 320,
'n_fft': 2_048, 'n_fft': 2_048,
# Resolution Type # Resolution Type
'resType': 'kaiser_fast' 'resType': 'kaiser_fast',
# Parsed constants should be fixed
'manType': False,
} }
default_sr = data['sr'] default_sr = data['sr']
default_hop_length = data['hop_length'] default_hop_length = data['hop_length']
@ -94,6 +96,10 @@ def update_constants(model_name):
data['window_size'] = default_window_size data['window_size'] = default_window_size
data['n_fft'] = default_n_fft data['n_fft'] = default_n_fft
if data['manType']:
# Default constants should be fixed
return
for text_part in text_parts: for text_part in text_parts:
if 'sr' in text_part: if 'sr' in text_part:
text_part = text_part.replace('sr', '') text_part = text_part.replace('sr', '')
@ -371,6 +377,8 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
folder_path = os.path.join(data["export_path"], modelFolderName) folder_path = os.path.join(data["export_path"], modelFolderName)
if not os.path.isdir(folder_path): if not os.path.isdir(folder_path):
os.mkdir(folder_path) os.mkdir(folder_path)
else:
folder_path = ''
# Determine Loops # Determine Loops
total_loops = data['stackPasses'] total_loops = data['stackPasses']
@ -378,10 +386,9 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
total_loops += 1 total_loops += 1
for file_num, music_file in enumerate(data['input_paths'], start=1): for file_num, music_file in enumerate(data['input_paths'], start=1):
try:
# Determine File Name # Determine File Name
base_name = os.path.join(folder_path, f'{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}') base_name = os.path.join(folder_path, f'{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}')
try:
for loop_num in range(total_loops): for loop_num in range(total_loops):
# -Determine which model will be used- # -Determine which model will be used-
if not loop_num: if not loop_num:

View File

@ -176,7 +176,9 @@ data = {
'window_size': 320, 'window_size': 320,
'n_fft': 2_048, 'n_fft': 2_048,
# Resolution Type # Resolution Type
'resType': 'kaiser_fast' 'resType': 'kaiser_fast',
# Parsed constants should be fixed
'manType': False,
} }
default_sr = data['sr'] default_sr = data['sr']
default_hop_length = data['hop_length'] default_hop_length = data['hop_length']
@ -214,6 +216,10 @@ def update_constants(model_name):
data['window_size'] = default_window_size data['window_size'] = default_window_size
data['n_fft'] = default_n_fft data['n_fft'] = default_n_fft
if data['manType']:
# Default constants should be fixed
return
for text_part in text_parts: for text_part in text_parts:
if 'sr' in text_part: if 'sr' in text_part:
text_part = text_part.replace('sr', '') text_part = text_part.replace('sr', '')
@ -378,16 +384,17 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress
folder_path = os.path.join(data["export_path"], modelFolderName) folder_path = os.path.join(data["export_path"], modelFolderName)
if not os.path.isdir(folder_path): if not os.path.isdir(folder_path):
os.mkdir(folder_path) os.mkdir(folder_path)
else:
folder_path = ''
# Determine Loops # Determine Loops
total_loops = data['stackPasses'] total_loops = data['stackPasses']
if not data['stackOnly']: if not data['stackOnly']:
total_loops += 1 total_loops += 1
for file_num, music_file in enumerate(data['input_paths'], start=1): for file_num, music_file in enumerate(data['input_paths'], start=1):
try:
# Determine File Name # Determine File Name
base_name = os.path.join(folder_path, f'{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}') base_name = os.path.join(folder_path, f'{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}')
try:
# --Seperate Music Files-- # --Seperate Music Files--
for loop_num in range(total_loops): for loop_num in range(total_loops):
# -Determine which model will be used- # -Determine which model will be used-

View File

@ -1 +0,0 @@
Models Go Here

View File

@ -1 +0,0 @@
Models Go Here

View File

@ -1 +0,0 @@
Models Go Here

View File

@ -1 +0,0 @@
Models Go Here