From adf8ede2e52765eaae8281b3465f31c163947a11 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:26:24 -0600 Subject: [PATCH 001/100] Delete augment.py --- augment.py | 76 ------------------------------------------------------ 1 file changed, 76 deletions(-) delete mode 100644 augment.py diff --git a/augment.py b/augment.py deleted file mode 100644 index 467230a..0000000 --- a/augment.py +++ /dev/null @@ -1,76 +0,0 @@ -import argparse -import os -import subprocess - -import librosa -import numpy as np -import soundfile as sf -from tqdm import tqdm - -from lib import spec_utils - - -if __name__ == '__main__': - p = argparse.ArgumentParser() - p.add_argument('--sr', '-r', type=int, default=44100) - p.add_argument('--hop_length', '-l', type=int, default=1024) - p.add_argument('--pitch', '-p', type=int, default=-2) - p.add_argument('--mixture_dataset', '-m', required=True) - p.add_argument('--instrumental_dataset', '-i', required=True) - args = p.parse_args() - - input_exts = ['.wav', '.m4a', '.3gp', '.oma', '.mp3', '.mp4'] - X_list = sorted([ - os.path.join(args.mixture_dataset, fname) - for fname in os.listdir(args.mixture_dataset) - if os.path.splitext(fname)[1] in input_exts]) - y_list = sorted([ - os.path.join(args.instrumental_dataset, fname) - for fname in os.listdir(args.instrumental_dataset) - if os.path.splitext(fname)[1] in input_exts]) - - input_i = 'input_i_{}.wav'.format(args.pitch) - input_v = 'input_v_{}.wav'.format(args.pitch) - output_i = 'output_i_{}.wav'.format(args.pitch) - output_v = 'output_v_{}.wav'.format(args.pitch) - cmd_i = 'soundstretch {} {} -pitch={}'.format(input_i, output_i, args.pitch) - cmd_v = 'soundstretch {} {} -pitch={}'.format(input_v, output_v, args.pitch) - suffix = '_pitch{}.npy'.format(args.pitch) - - filelist = list(zip(X_list, y_list)) - for mix_path, inst_path in tqdm(filelist): - X, _ = librosa.load( - mix_path, args.sr, False, dtype=np.float32, res_type='kaiser_fast') - y, _ = librosa.load( - inst_path, args.sr, False, dtype=np.float32, res_type='kaiser_fast') - - X, _ = librosa.effects.trim(X) - y, _ = librosa.effects.trim(y) - X, y = spec_utils.align_wave_head_and_tail(X, y, args.sr) - - v = X - y - sf.write(input_i, y.T, args.sr) - sf.write(input_v, v.T, args.sr) - subprocess.call(cmd_i, stderr=subprocess.DEVNULL) - subprocess.call(cmd_v, stderr=subprocess.DEVNULL) - - y, _ = librosa.load( - output_i, args.sr, False, dtype=np.float32, res_type='kaiser_fast') - v, _ = librosa.load( - output_v, args.sr, False, dtype=np.float32, res_type='kaiser_fast') - X = y + v - - spec = spec_utils.calc_spec(X, args.hop_length) - basename, _ = os.path.splitext(os.path.basename(mix_path)) - outpath = os.path.join(args.mixture_dataset, basename + suffix) - np.save(outpath, np.abs(spec)) - - spec = spec_utils.calc_spec(y, args.hop_length) - basename, _ = os.path.splitext(os.path.basename(inst_path)) - outpath = os.path.join(args.instrumental_dataset, basename + suffix) - np.save(outpath, np.abs(spec)) - - os.remove(input_i) - os.remove(input_v) - os.remove(output_i) - os.remove(output_v) From 75c0352ddb7adc7a6600e972ad940d1fe6d2ff7f Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:26:39 -0600 Subject: [PATCH 002/100] Delete train.py --- train.py | 223 ------------------------------------------------------- 1 file changed, 223 deletions(-) delete mode 100644 train.py diff --git a/train.py b/train.py deleted file mode 100644 index 420f487..0000000 --- a/train.py +++ /dev/null @@ -1,223 +0,0 @@ -import argparse -from datetime import datetime as dt -import gc -import json -import os -import random - -import numpy as np -import torch -import torch.nn as nn - -from lib import dataset -from lib import nets -from lib import spec_utils - - -def train_val_split(mix_dir, inst_dir, val_rate, val_filelist_json): - input_exts = ['.wav', '.m4a', '.3gp', '.oma', '.mp3', '.mp4'] - X_list = sorted([ - os.path.join(mix_dir, fname) - for fname in os.listdir(mix_dir) - if os.path.splitext(fname)[1] in input_exts]) - y_list = sorted([ - os.path.join(inst_dir, fname) - for fname in os.listdir(inst_dir) - if os.path.splitext(fname)[1] in input_exts]) - - filelist = list(zip(X_list, y_list)) - random.shuffle(filelist) - - val_filelist = [] - if val_filelist_json is not None: - with open(val_filelist_json, 'r', encoding='utf8') as f: - val_filelist = json.load(f) - - if len(val_filelist) == 0: - val_size = int(len(filelist) * val_rate) - train_filelist = filelist[:-val_size] - val_filelist = filelist[-val_size:] - else: - train_filelist = [ - pair for pair in filelist - if list(pair) not in val_filelist] - - return train_filelist, val_filelist - - -def train_inner_epoch(X_train, y_train, model, optimizer, batchsize, instance_loss): - sum_loss = 0 - model.train() - aux_crit = nn.L1Loss() - criterion = nn.L1Loss(reduction='none') - perm = np.random.permutation(len(X_train)) - for i in range(0, len(X_train), batchsize): - local_perm = perm[i: i + batchsize] - X_batch = torch.from_numpy(X_train[local_perm]).cpu() - y_batch = torch.from_numpy(y_train[local_perm]).cpu() - - model.zero_grad() - mask, aux = model(X_batch) - - aux_loss = aux_crit(X_batch * aux, y_batch) - X_batch = spec_utils.crop_center(mask, X_batch, False) - y_batch = spec_utils.crop_center(mask, y_batch, False) - abs_diff = criterion(X_batch * mask, y_batch) - - loss = abs_diff.mean() * 0.9 + aux_loss * 0.1 - loss.backward() - optimizer.step() - - abs_diff_np = abs_diff.detach().cpu().numpy() - instance_loss[local_perm] += abs_diff_np.mean(axis=(1, 2, 3)) - sum_loss += float(loss.detach().cpu().numpy()) * len(X_batch) - - return sum_loss / len(X_train) - - -def val_inner_epoch(dataloader, model): - sum_loss = 0 - model.eval() - criterion = nn.L1Loss() - with torch.no_grad(): - for X_batch, y_batch in dataloader: - X_batch = X_batch.cpu() - y_batch = y_batch.cpu() - mask = model.predict(X_batch) - X_batch = spec_utils.crop_center(mask, X_batch, False) - y_batch = spec_utils.crop_center(mask, y_batch, False) - - loss = criterion(X_batch * mask, y_batch) - sum_loss += float(loss.detach().cpu().numpy()) * len(X_batch) - - return sum_loss / len(dataloader.dataset) - - -def main(): - p = argparse.ArgumentParser() - p.add_argument('--gpu', '-g', type=int, default=-1) - p.add_argument('--seed', '-s', type=int, default=2019) - p.add_argument('--sr', '-r', type=int, default=44100) - p.add_argument('--hop_length', '-l', type=int, default=1024) - p.add_argument('--mixture_dataset', '-m', required=True) - p.add_argument('--instrumental_dataset', '-i', required=True) - p.add_argument('--learning_rate', type=float, default=0.001) - p.add_argument('--lr_min', type=float, default=0.0001) - p.add_argument('--lr_decay_factor', type=float, default=0.9) - p.add_argument('--lr_decay_patience', type=int, default=6) - p.add_argument('--batchsize', '-B', type=int, default=4) - p.add_argument('--cropsize', '-c', type=int, default=256) - p.add_argument('--val_rate', '-v', type=float, default=0.1) - p.add_argument('--val_filelist', '-V', type=str, default=None) - p.add_argument('--val_batchsize', '-b', type=int, default=4) - p.add_argument('--val_cropsize', '-C', type=int, default=512) - p.add_argument('--patches', '-p', type=int, default=16) - p.add_argument('--epoch', '-E', type=int, default=100) - p.add_argument('--inner_epoch', '-e', type=int, default=4) - p.add_argument('--oracle_rate', '-O', type=float, default=0) - p.add_argument('--oracle_drop_rate', '-o', type=float, default=0.5) - p.add_argument('--mixup_rate', '-M', type=float, default=0.0) - p.add_argument('--mixup_alpha', '-a', type=float, default=1.0) - p.add_argument('--pretrained_model', '-P', type=str, default=None) - p.add_argument('--debug', '-d', action='store_true') - args = p.parse_args() - - random.seed(args.seed) - np.random.seed(args.seed) - torch.manual_seed(args.seed) - timestamp = dt.now().strftime('%Y%m%d%H%M%S') - - model = nets.CascadedASPPNet() - if args.pretrained_model is not None: - model.load_state_dict(torch.load(args.pretrained_model)) - if args.gpu >= 0: - model.cuda() - - optimizer = torch.optim.Adam(model.parameters(), lr=args.learning_rate) - scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( - optimizer, - factor=args.lr_decay_factor, - patience=args.lr_decay_patience, - min_lr=args.lr_min, - verbose=True) - - train_filelist, val_filelist = train_val_split( - mix_dir=args.mixture_dataset, - inst_dir=args.instrumental_dataset, - val_rate=args.val_rate, - val_filelist_json=args.val_filelist) - - if args.debug: - print('### DEBUG MODE') - train_filelist = train_filelist[:1] - val_filelist = val_filelist[:1] - - with open('val_{}.json'.format(timestamp), 'w', encoding='utf8') as f: - json.dump(val_filelist, f, ensure_ascii=False) - - for i, (X_fname, y_fname) in enumerate(val_filelist): - print(i + 1, os.path.basename(X_fname), os.path.basename(y_fname)) - - val_dataset = dataset.make_validation_set( - filelist=val_filelist, - cropsize=args.val_cropsize, - sr=args.sr, - hop_length=args.hop_length, - offset=model.offset) - val_dataloader = torch.utils.data.DataLoader( - dataset=val_dataset, - batch_size=args.val_batchsize, - shuffle=False, - num_workers=4) - - log = [] - oracle_X = None - oracle_y = None - best_loss = np.inf - for epoch in range(args.epoch): - X_train, y_train = dataset.make_training_set( - train_filelist, args.cropsize, args.patches, args.sr, args.hop_length, model.offset) - - X_train, y_train = dataset.mixup_generator( - X_train, y_train, args.mixup_rate, args.mixup_alpha) - - if oracle_X is not None and oracle_y is not None: - perm = np.random.permutation(len(oracle_X)) - X_train[perm] = oracle_X - y_train[perm] = oracle_y - - print('# epoch', epoch) - instance_loss = np.zeros(len(X_train), dtype=np.float32) - for inner_epoch in range(args.inner_epoch): - print(' * inner epoch {}'.format(inner_epoch)) - train_loss = train_inner_epoch( - X_train, y_train, model, optimizer, args.batchsize, instance_loss) - val_loss = val_inner_epoch(val_dataloader, model) - - print(' * training loss = {:.6f}, validation loss = {:.6f}' - .format(train_loss * 1000, val_loss * 1000)) - - scheduler.step(val_loss) - - if val_loss < best_loss: - best_loss = val_loss - print(' * best validation loss') - model_path = 'models/model_iter{}.pth'.format(epoch) - torch.save(model.state_dict(), model_path) - - log.append([train_loss, val_loss]) - with open('log_{}.json'.format(timestamp), 'w', encoding='utf8') as f: - json.dump(log, f, ensure_ascii=False) - - if args.oracle_rate > 0: - instance_loss /= args.inner_epoch - oracle_X, oracle_y, idx = dataset.get_oracle_data( - X_train, y_train, instance_loss, args.oracle_rate, args.oracle_drop_rate) - print(' * oracle loss = {:.6f}'.format(instance_loss[idx].mean())) - - del X_train, y_train - gc.collect() - - -if __name__ == '__main__': - main() From fe3f6d883baea0ef086b77f504d81f4ff690375e Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:26:48 -0600 Subject: [PATCH 003/100] Delete inference.py --- inference.py | 200 --------------------------------------------------- 1 file changed, 200 deletions(-) delete mode 100644 inference.py diff --git a/inference.py b/inference.py deleted file mode 100644 index 2b05552..0000000 --- a/inference.py +++ /dev/null @@ -1,200 +0,0 @@ -import argparse -import os - -import cv2 -import librosa -import numpy as np -import soundfile as sf -from tqdm import tqdm - -from lib import dataset -from lib import nets -from lib import spec_utils - -# Variable manipulation and command line text parsing -import torch -import tkinter as tk -import traceback # Error Message Recent Calls - - -class Namespace: - """ - Replaces ArgumentParser - """ - - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -def main(window: tk.Wm, input_paths: list, gpu: bool = -1, - model: str = 'models/baseline.pth', sr: int = 44100, hop_length: int = 1024, - window_size: int = 512, out_mask: bool = False, postprocess: bool = False, - export_path: str = '', loops: int = 1, - # Other Variables (Tkinter) - progress_var: tk.Variable = None, button_widget: tk.Button = None, command_widget: tk.Text = None, - ): - def load_model(): - args.command_widget.write('Loading model...\n') # nopep8 Write Command Text - device = torch.device('cpu') - model = nets.CascadedASPPNet() - model.load_state_dict(torch.load(args.model, map_location=device)) - if torch.cuda.is_available() and args.gpu >= 0: - device = torch.device('cuda:{}'.format(args.gpu)) - model.to(device) - args.command_widget.write('Done!\n') # nopep8 Write Command Text - - return model, device - - def load_wave_source(): - args.command_widget.write(base_text + 'Loading wave source...\n') # nopep8 Write Command Text - X, sr = librosa.load(music_file, - args.sr, - False, - dtype=np.float32, - res_type='kaiser_fast') - args.command_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text - - return X, sr - - def stft_wave_source(X): - args.command_widget.write(base_text + 'Stft of wave source...\n') # nopep8 Write Command Text - X = spec_utils.calc_spec(X, args.hop_length) - X, phase = np.abs(X), np.exp(1.j * np.angle(X)) - coeff = X.max() - X /= coeff - - offset = model.offset - l, r, roi_size = dataset.make_padding( - X.shape[2], args.window_size, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') - X_roll = np.roll(X_pad, roi_size // 2, axis=2) - - model.eval() - with torch.no_grad(): - masks = [] - masks_roll = [] - length = int(np.ceil(X.shape[2] / roi_size)) - for i in tqdm(range(length)): - progress_var.set(base_progress + max_progress * (0.1 + (0.6/length * i))) # nopep8 Update Progress - start = i * roi_size - X_window = torch.from_numpy(np.asarray([ - X_pad[:, :, start:start + args.window_size], - X_roll[:, :, start:start + args.window_size] - ])).to(device) - pred = model.predict(X_window) - pred = pred.detach().cpu().numpy() - masks.append(pred[0]) - masks_roll.append(pred[1]) - - mask = np.concatenate(masks, axis=2)[:, :, :X.shape[2]] - mask_roll = np.concatenate(masks_roll, axis=2)[ - :, :, :X.shape[2]] - mask = (mask + np.roll(mask_roll, -roi_size // 2, axis=2)) / 2 - - if args.postprocess: - vocal = X * (1 - mask) * coeff - mask = spec_utils.mask_uninformative(mask, vocal) - args.command_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text - - inst = X * mask * coeff - vocal = X * (1 - mask) * coeff - - return inst, vocal, phase, mask - - def invert_instrum_vocal(inst, vocal, phase): - args.command_widget.write(base_text + 'Inverse stft of instruments and vocals...\n') # nopep8 Write Command Text - - wav_instrument = spec_utils.spec_to_wav(inst, phase, args.hop_length) # nopep8 - wav_vocals = spec_utils.spec_to_wav(vocal, phase, args.hop_length) # nopep8 - - args.command_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text - - return wav_instrument, wav_vocals - - def save_files(wav_instrument, wav_vocals): - args.command_widget.write(base_text + 'Saving Files...\n') # nopep8 Write Command Text - sf.write(f'{export_path}/{base_name}_(Instrumental).wav', - wav_instrument.T, sr) - if cur_loop == 0: - sf.write(f'{export_path}/{base_name}_(Vocals).wav', - wav_vocals.T, sr) - if (cur_loop == (args.loops - 1) and - args.loops > 1): - sf.write(f'{export_path}/{base_name}_(Last_Vocals).wav', - wav_vocals.T, sr) - - args.command_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text - - def create_mask(): - args.command_widget.write(base_text + 'Creating Mask...\n') # nopep8 Write Command Text - norm_mask = np.uint8((1 - mask) * 255).transpose(1, 2, 0) - norm_mask = np.concatenate([ - np.max(norm_mask, axis=2, keepdims=True), - norm_mask], axis=2)[::-1] - _, bin_mask = cv2.imencode('.png', norm_mask) - args.command_widget.write(base_text + 'Saving Mask...\n') # nopep8 Write Command Text - with open(f'{export_path}/{base_name}_(Mask).png', mode='wb') as f: - bin_mask.tofile(f) - args.command_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text - - args = Namespace(input=input_paths, gpu=gpu, model=model, - sr=sr, hop_length=hop_length, window_size=window_size, - out_mask=out_mask, postprocess=postprocess, export=export_path, - loops=loops, - # Other Variables (Tkinter) - window=window, progress_var=progress_var, - button_widget=button_widget, command_widget=command_widget, - ) - args.command_widget.clear() # Clear Command Text - args.button_widget.configure(state=tk.DISABLED) # Disable Button - total_files = len(args.input) # Used to calculate progress - - model, device = load_model() - - for file_num, music_file in enumerate(args.input, start=1): - try: - base_name = f'{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}' - for cur_loop in range(args.loops): - if cur_loop > 0: - args.command_widget.write(f'File {file_num}/{total_files}: ' + 'Next Pass!\n') # nopep8 Write Command Text - music_file = f'{export_path}/{base_name}_(Instrumental).wav' - base_progress = 100 / \ - (total_files*args.loops) * \ - ((file_num*args.loops)-((args.loops-1) - cur_loop)-1) - base_text = 'File {file_num}/{total_files}:{loop} '.format( - file_num=file_num, - total_files=total_files, - loop='' if args.loops <= 1 else f' ({cur_loop+1}/{args.loops})') - max_progress = 100 / (total_files*args.loops) - progress_var.set(base_progress + max_progress * 0.05) # nopep8 Update Progress - - X, sr = load_wave_source() - progress_var.set(base_progress + max_progress * 0.1) # nopep8 Update Progress - - inst, vocal, phase, mask = stft_wave_source(X) - progress_var.set(base_progress + max_progress * 0.7) # nopep8 Update Progress - - wav_instrument, wav_vocals = invert_instrum_vocal(inst, vocal, phase) # nopep8 - progress_var.set(base_progress + max_progress * 0.8) # nopep8 Update Progress - - save_files(wav_instrument, wav_vocals) - progress_var.set(base_progress + max_progress * 0.9) # nopep8 Update Progress - - if args.out_mask: - create_mask() - progress_var.set(base_progress + max_progress * 1) # nopep8 Update Progress - - args.command_widget.write(base_text + 'Completed Seperation!\n\n') # nopep8 Write Command Text - except Exception as e: - traceback_text = ''.join(traceback.format_tb(e.__traceback__)) - print(traceback_text) - print(type(e).__name__, e) - tk.messagebox.showerror(master=args.window, - title='Untracked Error', - message=f'Traceback Error: "{traceback_text}"\n{type(e).__name__}: "{e}"\nFile: {music_file}\n\nPlease contact the creator and attach a screenshot of this error with the file which caused it!') - args.button_widget.configure(state=tk.NORMAL) # Enable Button - return - - progress_var.set(100) # Update Progress - args.command_widget.write(f'Conversion(s) Completed and Saving all Files!') # nopep8 Write Command Text - args.button_widget.configure(state=tk.NORMAL) # Enable Button From c3fca2aa72102fb0b37e97c8acd8245cf4ebf708 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:27:04 -0600 Subject: [PATCH 004/100] Delete VocalRemover.py --- VocalRemover.py | 542 ------------------------------------------------ 1 file changed, 542 deletions(-) delete mode 100644 VocalRemover.py diff --git a/VocalRemover.py b/VocalRemover.py deleted file mode 100644 index 16ee1a5..0000000 --- a/VocalRemover.py +++ /dev/null @@ -1,542 +0,0 @@ -# GUI modules -import tkinter as tk -import tkinter.ttk as ttk -import tkinter.messagebox -import tkinter.filedialog -import tkinter.font -from datetime import datetime -# Images -from PIL import Image -from PIL import ImageTk -import pickle # Save Data -# Other Modules -import subprocess # Run python file -# Pathfinding -import pathlib -import os -from collections import defaultdict -# Used for live text displaying -import queue -import threading # Run the algorithm inside a thread - -import torch -import inference - -# --Global Variables-- -base_path = os.path.dirname(__file__) -os.chdir(base_path) # Change the current working directory to the base path -models_dir = os.path.join(base_path, 'models') -logo_path = os.path.join(base_path, 'Images/UVR-logo.png') -DEFAULT_DATA = { - 'exportPath': '', - 'gpuConversion': False, - 'postprocessing': False, - 'mask': False, - 'stackLoops': False, - 'srValue': 44100, - 'hopValue': 1024, - 'stackLoopsNum': 1, - 'winSize': 512, -} -# Supported Music Files -AVAILABLE_FORMATS = ['.mp3', '.mp4', '.m4a', '.flac', '.wav'] - - -def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: int = 0) -> tuple: - """ - Open the image on the path and apply given settings\n - Paramaters: - path(str): - Absolute path of the image - size(tuple): - first value - width - second value - height - keep_aspect(bool): - keep aspect ratio of image and resize - to maximum possible width and height - (maxima are given by size) - rotate(int): - clockwise rotation of image - Returns(tuple): - (ImageTk.PhotoImage, Image) - """ - img = Image.open(path) - ratio = img.height/img.width - img = img.rotate(angle=-rotate) - if size is not None: - size = (int(size[0]), int(size[1])) - if keep_aspect: - img = img.resize((size[0], int(size[0] * ratio)), Image.ANTIALIAS) - else: - img = img.resize(size, Image.ANTIALIAS) - img = img.convert(mode='RGBA') - return ImageTk.PhotoImage(img), img - - -def save_data(data): - """ - Saves given data as a .pkl (pickle) file - - Paramters: - data(dict): - Dictionary containing all the necessary data to save - """ - # Open data file, create it if it does not exist - with open('data.pkl', 'wb') as data_file: - pickle.dump(data, data_file) - - -def load_data() -> dict: - """ - Loads saved pkl file and returns the stored data - - Returns(dict): - Dictionary containing all the saved data - """ - try: - with open('data.pkl', 'rb') as data_file: # Open data file - data = pickle.load(data_file) - - return data - except (ValueError, FileNotFoundError): - # Data File is corrupted or not found so recreate it - save_data(data=DEFAULT_DATA) - - return load_data() - - -class ThreadSafeConsole(tk.Text): - """ - Text Widget which is thread safe for tkinter - """ - - def __init__(self, master, **options): - tk.Text.__init__(self, master, **options) - self.queue = queue.Queue() - self.update_me() - - def write(self, line): - self.queue.put(line) - - def clear(self): - self.queue.put(None) - - def update_me(self): - self.configure(state=tk.NORMAL) - try: - while 1: - line = self.queue.get_nowait() - if line is None: - self.delete(1.0, tk.END) - else: - self.insert(tk.END, str(line)) - self.see(tk.END) - self.update_idletasks() - except queue.Empty: - pass - self.configure(state=tk.DISABLED) - self.after(100, self.update_me) - - -class MainWindow(tk.Tk): - # --Constants-- - # None - - def __init__(self): - # Run the __init__ method on the tk.Tk class - super().__init__() - - # --Window Settings-- - self.title('Desktop Application') - # Set Geometry and Center Window - self.geometry('{width}x{height}+{xpad}+{ypad}'.format( - width=530, - height=690, - xpad=int(self.winfo_screenwidth()/2 - 530/2), - ypad=int(self.winfo_screenheight()/2 - 690/2))) - self.configure(bg='#FFFFFF') # Set background color to white - self.resizable(False, False) - self.update() - - # --Variables-- - self.logo_img = open_image(path=logo_path, - size=(self.winfo_width(), 9999), - keep_aspect=True)[0] - self.label_to_path = defaultdict(lambda: '') - # -Tkinter Value Holders- - data = load_data() - self.exportPath_var = tk.StringVar(value=data['exportPath']) - self.filePaths = '' - self.gpuConversion_var = tk.BooleanVar(value=data['gpuConversion']) - self.postprocessing_var = tk.BooleanVar(value=data['postprocessing']) - self.mask_var = tk.BooleanVar(value=data['mask']) - self.stackLoops_var = tk.IntVar(value=data['stackLoops']) - self.srValue_var = tk.IntVar(value=data['srValue']) - self.hopValue_var = tk.IntVar(value=data['hopValue']) - self.winSize_var = tk.IntVar(value=data['winSize']) - self.stackLoopsNum_var = tk.IntVar(value=data['stackLoopsNum']) - self.model_var = tk.StringVar(value='') - - self.progress_var = tk.IntVar(value=0) - - # --Widgets-- - self.create_widgets() - self.configure_widgets() - self.place_widgets() - - self.update_available_models() - self.update_stack_state() - - # -Widget Methods- - def create_widgets(self): - """Create window widgets""" - self.title_Label = tk.Label(master=self, bg='white', - image=self.logo_img, compound=tk.TOP) - self.filePaths_Frame = tk.Frame(master=self, bg='white') - self.fill_filePaths_Frame() - - self.options_Frame = tk.Frame(master=self, bg='white') - self.fill_options_Frame() - - self.conversion_Button = ttk.Button(master=self, - text='Start Conversion', - command=self.start_conversion) - - self.progressbar = ttk.Progressbar(master=self, - variable=self.progress_var) - - self.command_Text = ThreadSafeConsole(master=self, - background='#EFEFEF', - borderwidth=0,) - self.command_Text.write(f'COMMAND LINE [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]') # nopep8 - - def configure_widgets(self): - """Change widget styling and appearance""" - ttk.Style().configure('TCheckbutton', background='white') - - def place_widgets(self): - """Place main widgets""" - self.title_Label.place(x=-2, y=-2) - - self.filePaths_Frame.place(x=10, y=0, width=-20, height=0, - relx=0, rely=0.19, relwidth=1, relheight=0.14) - self.options_Frame.place(x=25, y=15, width=-50, height=-30, - relx=0, rely=0.33, relwidth=1, relheight=0.23) - self.conversion_Button.place(x=10, y=5, width=-20, height=-10, - relx=0, rely=0.56, relwidth=1, relheight=0.07) - self.command_Text.place(x=15, y=10, width=-30, height=-10, - relx=0, rely=0.63, relwidth=1, relheight=0.28) - self.progressbar.place(x=25, y=15, width=-50, height=-30, - relx=0, rely=0.91, relwidth=1, relheight=0.09) - - def fill_filePaths_Frame(self): - """Fill Frame with neccessary widgets""" - # -Create Widgets- - # Save To Option - self.filePaths_saveTo_Button = ttk.Button(master=self.filePaths_Frame, - text='Save to', - command=self.open_export_filedialog) - self.filePaths_saveTo_Entry = ttk.Entry(master=self.filePaths_Frame, - textvariable=self.exportPath_var, - state=tk.DISABLED - ) - # Select Music Files Option - self.filePaths_musicFile_Button = ttk.Button(master=self.filePaths_Frame, - text='Select Your Audio File(s)', - command=self.open_file_filedialog) - self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - text=self.filePaths, - state=tk.DISABLED - ) - # -Place Widgets- - # Save To Option - self.filePaths_saveTo_Button.place(x=0, y=5, width=0, height=-10, - relx=0, rely=0, relwidth=0.3, relheight=0.5) - self.filePaths_saveTo_Entry.place(x=10, y=7, width=-20, height=-14, - relx=0.3, rely=0, relwidth=0.7, relheight=0.5) - # Select Music Files Option - self.filePaths_musicFile_Button.place(x=0, y=5, width=0, height=-10, - relx=0, rely=0.5, relwidth=0.4, relheight=0.5) - self.filePaths_musicFile_Entry.place(x=10, y=7, width=-20, height=-14, - relx=0.4, rely=0.5, relwidth=0.6, relheight=0.5) - - def fill_options_Frame(self): - """Fill Frame with neccessary widgets""" - # -Create Widgets- - # GPU Selection - self.options_gpu_Checkbutton = ttk.Checkbutton(master=self.options_Frame, - text='GPU Conversion', - variable=self.gpuConversion_var, - ) - # Postprocessing - self.options_post_Checkbutton = ttk.Checkbutton(master=self.options_Frame, - text='Post-Process (Dev Opt)', - variable=self.postprocessing_var, - ) - # Mask - self.options_mask_Checkbutton = ttk.Checkbutton(master=self.options_Frame, - text='Save Mask PNG', - variable=self.mask_var, - ) - # SR - self.options_sr_Entry = ttk.Entry(master=self.options_Frame, - textvariable=self.srValue_var,) - self.options_sr_Label = tk.Label(master=self.options_Frame, - text='SR', anchor=tk.W, - background='white') - # HOP LENGTH - self.options_hop_Entry = ttk.Entry(master=self.options_Frame, - textvariable=self.hopValue_var,) - self.options_hop_Label = tk.Label(master=self.options_Frame, - text='HOP LENGTH', anchor=tk.W, - background='white') - # WINDOW SIZE - self.options_winSize_Entry = ttk.Entry(master=self.options_Frame, - textvariable=self.winSize_var,) - self.options_winSize_Label = tk.Label(master=self.options_Frame, - text='WINDOW SIZE', anchor=tk.W, - background='white') - # Stack Loops - self.options_stack_Checkbutton = ttk.Checkbutton(master=self.options_Frame, - text='Stack Passes', - variable=self.stackLoops_var, - ) - self.options_stack_Entry = ttk.Entry(master=self.options_Frame, - textvariable=self.stackLoopsNum_var,) - self.options_stack_Checkbutton.configure(command=self.update_stack_state) # nopep8 - # Choose Model - self.options_model_Label = tk.Label(master=self.options_Frame, - text='Choose Your Model', - background='white') - self.options_model_Optionmenu = ttk.OptionMenu(self.options_Frame, - self.model_var, - 1, - *[1, 2]) - self.options_model_Button = ttk.Button(master=self.options_Frame, - text='Add Your Own Model', - command=self.open_newModel_filedialog) - # -Place Widgets- - # GPU Selection - self.options_gpu_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=0, relwidth=1/3, relheight=1/4) - self.options_post_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=1/4, relwidth=1/3, relheight=1/4) - self.options_mask_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=2/4, relwidth=1/3, relheight=1/4) - # Stack Loops - self.options_stack_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=3/4, relwidth=1/3/4*3, relheight=1/4) - self.options_stack_Entry.place(x=0, y=4, width=0, height=-8, - relx=1/3/4*2.4, rely=3/4, relwidth=1/3/4*0.9, relheight=1/4) - # SR - self.options_sr_Entry.place(x=-5, y=4, width=5, height=-8, - relx=1/3, rely=0, relwidth=1/3/4, relheight=1/4) - self.options_sr_Label.place(x=10, y=4, width=-10, height=-8, - relx=1/3/4 + 1/3, rely=0, relwidth=1/3/4*3, relheight=1/4) - # HOP LENGTH - self.options_hop_Entry.place(x=-5, y=4, width=5, height=-8, - relx=1/3, rely=1/4, relwidth=1/3/4, relheight=1/4) - self.options_hop_Label.place(x=10, y=4, width=-10, height=-8, - relx=1/3/4 + 1/3, rely=1/4, relwidth=1/3/4*3, relheight=1/4) - # WINDOW SIZE - self.options_winSize_Entry.place(x=-5, y=4, width=5, height=-8, - relx=1/3, rely=2/4, relwidth=1/3/4, relheight=1/4) - self.options_winSize_Label.place(x=10, y=4, width=-10, height=-8, - relx=1/3/4 + 1/3, rely=2/4, relwidth=1/3/4*3, relheight=1/4) - # Choose Model - self.options_model_Label.place(x=0, y=0, width=0, height=-10, - relx=2/3, rely=0, relwidth=1/3, relheight=1/3) - self.options_model_Optionmenu.place(x=15, y=-2.5, width=-30, height=-10, - relx=2/3, rely=1/3, relwidth=1/3, relheight=1/3) - self.options_model_Button.place(x=15, y=0, width=-30, height=-5, - relx=2/3, rely=2/3, relwidth=1/3, relheight=1/3) - - # Opening filedialogs - def open_file_filedialog(self): - """Make user select music files""" - paths = tk.filedialog.askopenfilenames( - parent=self, - title=f'Select Music Files', - initialdir='/', - initialfile='', - filetypes=[ - ('; '.join(AVAILABLE_FORMATS).replace('.', ''), - '*' + ' *'.join(AVAILABLE_FORMATS)), - ]) - if paths: # Path selected - for path in paths: - if not path.lower().endswith(tuple(AVAILABLE_FORMATS)): - tk.messagebox.showerror(master=self, - title='Invalid File', - message='Please select a \"{}\" audio file!'.format('" or "'.join(AVAILABLE_FORMATS)), # nopep8 - detail=f'File: {path}') - return - self.filePaths = paths - # Change the entry text - self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) - self.filePaths_musicFile_Entry.delete(0, tk.END) - self.filePaths_musicFile_Entry.insert(0, self.filePaths) - self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) - - def open_export_filedialog(self): - """Make user select a folder to export the converted files in""" - path = tk.filedialog.askdirectory( - parent=self, - title=f'Select Folder', - initialdir='/',) - if path: # Path selected - self.exportPath_var.set(path) - - def open_newModel_filedialog(self): - """Make user select a ".pth" model to use for the vocal removing""" - path = tk.filedialog.askopenfilename( - parent=self, - title=f'Select Model File', - initialdir='/', - initialfile='', - filetypes=[ - ('pth', '*.pth'), - ]) - - if path: # Path selected - if path.lower().endswith(('.pth')): - self.add_available_model(abs_path=path) - else: - tk.messagebox.showerror(master=self, - title='Invalid File', - message=f'Please select a PyTorch model file ".pth"!', - detail=f'File: {path}') - return - - def start_conversion(self): - """ - Start the conversion for all the given mp3 and wav files - """ - # -Get all variables- - input_paths = self.filePaths - export_path = self.exportPath_var.get() - model_path = self.label_to_path[self.model_var.get()] - try: - sr = self.srValue_var.get() - hop_length = self.hopValue_var.get() - window_size = self.winSize_var.get() - loops_num = self.stackLoopsNum_var.get() - except tk.TclError: # Non integer was put in entry box - tk.messagebox.showwarning(master=self, - title='Invalid Input', - message='Please make sure you only input integer numbers!') - return - except SyntaxError: # Non integer was put in entry box - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file!\nPlease make sure that your files still exist and end with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') - return - - # -Check for invalid inputs- - if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) - for path in input_paths]): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file!\nPlease make sure that your files still exist and end with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') - return - if not os.path.isdir(export_path): - tk.messagebox.showwarning(master=self, - title='Invalid Export Directory', - message='You have selected an invalid export directory!\nPlease make sure that your directory still exists!') - return - if not os.path.isfile(model_path): - tk.messagebox.showwarning(master=self, - title='Invalid Model File', - message='You have selected an invalid model file!\nPlease make sure that your model file still exists!') - return - - # -Save Data- - save_data(data={ - 'exportPath': export_path, - 'gpuConversion': self.gpuConversion_var.get(), - 'postprocessing': self.postprocessing_var.get(), - 'mask': self.mask_var.get(), - 'stackLoops': self.stackLoops_var.get(), - 'gpuConversion': self.gpuConversion_var.get(), - 'srValue': sr, - 'hopValue': hop_length, - 'winSize': window_size, - 'stackLoopsNum': loops_num, - }) - - # -Run the algorithm- - threading.Thread(target=inference.main, - kwargs={ - 'input_paths': input_paths, - 'gpu': 0 if self.gpuConversion_var.get() else -1, - 'postprocess': self.postprocessing_var.get(), - 'out_mask': self.mask_var.get(), - 'model': model_path, - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'export_path': export_path, - 'loops': loops_num, - # Other Variables (Tkinter) - 'window': self, - 'command_widget': self.command_Text, - 'button_widget': self.conversion_Button, - 'progress_var': self.progress_var, - }, - daemon=True - ).start() - - # Models - def update_available_models(self): - """ - Loop through every model (.pth) in the models directory - and add to the select your model list - """ - # Delete all previous options - self.model_var.set('') - self.options_model_Optionmenu['menu'].delete(0, 'end') - - for file_name in os.listdir(models_dir): - if file_name.endswith('.pth'): - # Add Radiobutton to the Options Menu - self.options_model_Optionmenu['menu'].add_radiobutton(label=file_name, - command=tk._setit(self.model_var, file_name)) - # Link the files name to its absolute path - self.label_to_path[file_name] = os.path.join(models_dir, file_name) # nopep8 - - def add_available_model(self, abs_path: str): - """ - Add the given absolute path of the file (.pth) to the available options - and set the currently selected model to this one - """ - if abs_path.endswith('.pth'): - file_name = f'[CUSTOM] {os.path.basename(abs_path)}' - # Add Radiobutton to the Options Menu - self.options_model_Optionmenu['menu'].add_radiobutton(label=file_name, - command=tk._setit(self.model_var, file_name)) - # Set selected model to the newly added one - self.model_var.set(file_name) - # Link the files name to its absolute path - self.label_to_path[file_name] = abs_path # nopep8 - else: - tk.messagebox.showerror(master=self, - title='Invalid File', - message='Please select a model file with the ".pth" ending!', - detail=f'File: {abs_path}') - - def update_stack_state(self): - """ - Vary the stack Entry fro disabled/enabled based on the - stackLoops variable, which is connected to the checkbutton - """ - if self.stackLoops_var.get(): - self.options_stack_Entry.configure(state=tk.NORMAL) - else: - self.options_stack_Entry.configure(state=tk.DISABLED) - self.stackLoopsNum_var.set(1) - - -if __name__ == "__main__": - root = MainWindow() - - root.mainloop() From 9a4b454004c2fffd60832fcbcb0ed40da151d23b Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:27:17 -0600 Subject: [PATCH 005/100] Delete README.md --- README.md | 56 ------------------------------------------------------- 1 file changed, 56 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 2eb18d8..0000000 --- a/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Ultimate Vocal Remover GUI (Develop Version) - -***NEW VERSION COMING 11/14/2020!*** - -![alt text](https://github.com/Anjok07/ultimatevocalremovergui/blob/develop/Images/UVR-app.jpg) - -This is a deep-learning-based tool that extracts the instrumental from a track containing vocals. This project is a GUI version of the vocal remover created and posted by tsurumeso. This would not have been possible without tsurumeso's work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) - -## Installation - -The application was made with Tkinter for cross platform compatibility, so this should work with Windows, Mac, and Linux systems. I've only personally tested this on Windows 10 & Linux Ubuntu. - -### Install Required Applications & Packages - -1. Download & install Python 3.7 (Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows) -2. Once Python has installed, open the Windows Command Prompt and run the following installs - -- If you plan on doing conversions with your Nvidia GPU, please install the following - -``` -pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html -``` -- If you don't have a compatible Nvidia GPU and plan on only using the CPU version please do not check the "GPU Conversion" option in the GUI and install the following - - -``` -pip install torch==1.5.0+cpu torchvision==0.6.0+cpu -f https://download.pytorch.org/whl/torch_stable.html -``` -- The rest need to be installed regardless! - - -``` -pip install Pillow -pip install tqdm==4.30.0 -pip install librosa==0.6.3 -pip install opencv-python -pip install numba==0.48.0 -pip install SoundFile -pip install soundstretch -``` -3. For the ability to convert mp3, mp4, m4a, and flac files, you'll need ffmpeg installed and configured! - -### Getting the Vocal Remover GUI & Models -Download the latest version from [here](https://github.com/Anjok07/ultimatevocalremovergui/releases/tag/v2.2.0-GUI-Dev). - -## Running the Vocal Remover Application GUI -1. Place this folder where ever you wish (I put mine in my documents folder) and open the file labeled "VocalRemover.py" (I reccomend you create a shortcut for the file labeled "VocalRemover.py" to your desktop) -2. Open the application - -### Notes Regarding the GUI - - - The application will automatically remember your "save to" path upon closing and reopening until you change it - - You can select as many files as you like. Multiple conversions are supported! - - Conversions on wav files should always work with no issue. However, you will need to install and configure ffmpeg in order for conversions on mp3, mp4, m4a, and FLAC formats. If you select non-wav music files without having ffmpeg configured and attempt a conversion it will freeze and you will have to restart the application. - - Only check the GPU box if you have the Cuda driver installed for your Nvidia GPU. Most Nvidia GPU's released prior to 2015 or with less than 4GB's of V-RAM might not be compatible. -- The dropdown model menu consists of a provisional model that I trained with roughly 200 tracks. I included the option to add your own model as well if you've trained your own. Alternatively, you can also simply add a model to the models directory and restart the application, as it will automatically show there. -- The SR, N FFT, HOP LENGTH, and WINDOW SIZE parameters are set to the defaults. Those were the parameters used in training, so changing them may result in poor conversion performance unless the model is compatible with the changes made. Those are essentially advanced settings, so I recommend you leave them as is unless you know exactly what you're doing. -- The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. This model is only meant for instrumentals created via converted tracks that ran through one of the main models! -- The "Stack Passes" option should only be used with the Stacked Model. This option allows you to set the amount of times you want a track to run through a model. The amount of times you need to run it through will vary greatly by track. Most tracks won't require any more than 2-5 passes. If you do 5 or more passes on a track you risk quality degradation. When doing stack passes the first and last "vocal" track will give you an idea of how much static was removed. -- Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. From 779e1eb1161b8c9af9df7f87c83bcc461a8c3f77 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:27:44 -0600 Subject: [PATCH 006/100] Delete dataset.py --- lib/dataset.py | 119 ------------------------------------------------- 1 file changed, 119 deletions(-) delete mode 100644 lib/dataset.py diff --git a/lib/dataset.py b/lib/dataset.py deleted file mode 100644 index b89c016..0000000 --- a/lib/dataset.py +++ /dev/null @@ -1,119 +0,0 @@ -import os - -import numpy as np -import torch -from tqdm import tqdm - -from lib import spec_utils - - -class VocalRemoverValidationSet(torch.utils.data.Dataset): - - def __init__(self, filelist): - self.filelist = filelist - - def __len__(self): - return len(self.filelist) - - def __getitem__(self, idx): - path = self.filelist[idx] - data = np.load(path) - - return data['X'], data['y'] - - -def mixup_generator(X, y, rate, alpha): - perm = np.random.permutation(len(X))[:int(len(X) * rate)] - for i in range(len(perm) - 1): - lam = np.random.beta(alpha, alpha) - X[perm[i]] = lam * X[perm[i]] + (1 - lam) * X[perm[i + 1]] - y[perm[i]] = lam * y[perm[i]] + (1 - lam) * y[perm[i + 1]] - - return X, y - - -def get_oracle_data(X, y, instance_loss, oracle_rate, oracle_drop_rate): - k = int(len(X) * oracle_rate * (1 / (1 - oracle_drop_rate))) - n = int(len(X) * oracle_rate) - idx = np.argsort(instance_loss)[::-1][:k] - idx = np.random.choice(idx, n, replace=False) - oracle_X = X[idx].copy() - oracle_y = y[idx].copy() - - return oracle_X, oracle_y, idx - - -def make_padding(width, cropsize, offset): - left = offset - roi_size = cropsize - left * 2 - if roi_size == 0: - roi_size = cropsize - right = roi_size - (width % roi_size) + left - - return left, right, roi_size - - -def make_training_set(filelist, cropsize, patches, sr, hop_length, offset): - len_dataset = patches * len(filelist) - X_dataset = np.zeros( - (len_dataset, 2, hop_length, cropsize), dtype=np.float32) - y_dataset = np.zeros( - (len_dataset, 2, hop_length, cropsize), dtype=np.float32) - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - p = np.random.uniform() - if p < 0.1: - X_path.replace(os.path.splitext(X_path)[1], '_pitch-1.wav') - y_path.replace(os.path.splitext(y_path)[1], '_pitch-1.wav') - elif p < 0.2: - X_path.replace(os.path.splitext(X_path)[1], '_pitch1.wav') - y_path.replace(os.path.splitext(y_path)[1], '_pitch1.wav') - - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length) - coeff = np.max([X.max(), y.max()]) - X, y = X / coeff, y / coeff - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') - - starts = np.random.randint(0, X_pad.shape[2] - cropsize, patches) - ends = starts + cropsize - for j in range(patches): - idx = i * patches + j - X_dataset[idx] = X_pad[:, :, starts[j]:ends[j]] - y_dataset[idx] = y_pad[:, :, starts[j]:ends[j]] - if np.random.uniform() < 0.5: - # swap channel - X_dataset[idx] = X_dataset[idx, ::-1] - y_dataset[idx] = y_dataset[idx, ::-1] - - return X_dataset, y_dataset - - -def make_validation_set(filelist, cropsize, sr, hop_length, offset): - patch_list = [] - outdir = 'cs{}_sr{}_hl{}_of{}'.format(cropsize, sr, hop_length, offset) - os.makedirs(outdir, exist_ok=True) - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - basename = os.path.splitext(os.path.basename(X_path))[0] - - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length) - coeff = np.max([X.max(), y.max()]) - X, y = X / coeff, y / coeff - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') - - len_dataset = int(np.ceil(X.shape[2] / roi_size)) - for j in range(len_dataset): - outpath = os.path.join(outdir, '{}_p{}.npz'.format(basename, j)) - start = j * roi_size - if not os.path.exists(outpath): - np.savez( - outpath, - X=X_pad[:, :, start:start + cropsize], - y=y_pad[:, :, start:start + cropsize]) - patch_list.append(outpath) - - return VocalRemoverValidationSet(patch_list) From 7d56807de29669d5eb5cf17df45ef8779bf85f40 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:27:53 -0600 Subject: [PATCH 007/100] Delete layers.py --- lib/layers.py | 117 -------------------------------------------------- 1 file changed, 117 deletions(-) delete mode 100644 lib/layers.py diff --git a/lib/layers.py b/lib/layers.py deleted file mode 100644 index 98c4abe..0000000 --- a/lib/layers.py +++ /dev/null @@ -1,117 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from lib import spec_utils - - -class Conv2DBNActiv(nn.Module): - - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False), - nn.BatchNorm2d(nout), - activ() - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False), - nn.Conv2d( - nin, nout, - kernel_size=1, - bias=False), - nn.BatchNorm2d(nout), - activ() - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv( - nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv( - nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dropout=False): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) - if skip is not None: - x = spec_utils.crop_center(x, skip) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - - def __init__(self, nin, nout, dilations=(4, 8, 16)): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0) - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0]) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1]) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2]) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0), - nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate(self.conv1(x), size=(h, w), mode='bilinear', align_corners=True) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle From 87ddb3658478eb91401b0d5b21ee6f2ba0da5a15 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:27:59 -0600 Subject: [PATCH 008/100] Delete nets.py --- lib/nets.py | 86 ----------------------------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 lib/nets.py diff --git a/lib/nets.py b/lib/nets.py deleted file mode 100644 index b75b519..0000000 --- a/lib/nets.py +++ /dev/null @@ -1,86 +0,0 @@ -import torch -from torch import nn - -from lib import layers - - -class BaseASPPNet(nn.Module): - - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - - def __init__(self): - super(CascadedASPPNet, self).__init__() - self.low_band_net = BaseASPPNet(2, 32, ((2, 4), (4, 8), (8, 16))) - self.high_band_net = BaseASPPNet(2, 32, ((2, 4), (4, 8), (8, 16))) - - self.bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.full_band_net = BaseASPPNet(16, 32) - - self.out = nn.Sequential( - layers.Conv2DBNActiv(32, 16, 3, 1, 1), - nn.Conv2d(16, 2, 1, bias=False)) - self.aux_out = nn.Conv2d(32, 2, 1, bias=False) - - self.offset = 128 - - def __call__(self, x): - bandw = x.size()[2] // 2 - aux = torch.cat([ - self.low_band_net(x[:, :, :bandw]), - self.high_band_net(x[:, :, bandw:]) - ], dim=2) - - h = torch.cat([x, aux], dim=1) - h = self.full_band_net(self.bridge(h)) - - h = torch.sigmoid(self.out(h)) - aux = torch.sigmoid(self.aux_out(aux)) - - return h, aux - - def predict(self, x): - bandw = x.size()[2] // 2 - aux = torch.cat([ - self.low_band_net(x[:, :, :bandw]), - self.high_band_net(x[:, :, bandw:]) - ], dim=2) - - h = torch.cat([x, aux], dim=1) - h = self.full_band_net(self.bridge(h)) - - h = torch.sigmoid(self.out(h)) - if self.offset > 0: - h = h[:, :, :, self.offset:-self.offset] - assert h.size()[3] > 0 - - return h From 6b333e4aa1d4b3272b23e4b24b9287553f93adc5 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:28:05 -0600 Subject: [PATCH 009/100] Delete spec_utils.py --- lib/spec_utils.py | 136 ---------------------------------------------- 1 file changed, 136 deletions(-) delete mode 100644 lib/spec_utils.py diff --git a/lib/spec_utils.py b/lib/spec_utils.py deleted file mode 100644 index be61986..0000000 --- a/lib/spec_utils.py +++ /dev/null @@ -1,136 +0,0 @@ -import os - -import librosa -import numpy as np -import soundfile as sf -import torch - - -def crop_center(h1, h2, concat=True): - # s_freq = (h2.shape[2] - h1.shape[2]) // 2 - # e_freq = s_freq + h1.shape[2] - h1_shape = h1.size() - h2_shape = h2.size() - if h2_shape[3] < h1_shape[3]: - raise ValueError('h2_shape[3] must be greater than h1_shape[3]') - s_time = (h2_shape[3] - h1_shape[3]) // 2 - e_time = s_time + h1_shape[3] - h2 = h2[:, :, :, s_time:e_time] - if concat: - return torch.cat([h1, h2], dim=1) - else: - return h2 - - -def calc_spec(X, hop_length): - n_fft = (hop_length - 1) * 2 - audio_left = np.asfortranarray(X[0]) - audio_right = np.asfortranarray(X[1]) - spec_left = librosa.stft(audio_left, n_fft, hop_length=hop_length) - spec_right = librosa.stft(audio_right, n_fft, hop_length=hop_length) - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def mask_uninformative(mask, ref, thres=0.3, min_range=64, fade_area=32): - if min_range < fade_area * 2: - raise ValueError('min_range must be >= fade_area * 2') - idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] - starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) - ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) - uninformative = np.where(ends - starts > min_range)[0] - if len(uninformative) > 0: - starts = starts[uninformative] - ends = ends[uninformative] - old_e = None - for s, e in zip(starts, ends): - if old_e is not None and s - old_e < fade_area: - s = old_e - fade_area * 2 - elif s != 0: - start_mask = mask[:, :, s:s + fade_area] - np.clip( - start_mask + np.linspace(0, 1, fade_area), 0, 1, - out=start_mask) - if e != mask.shape[2]: - end_mask = mask[:, :, e - fade_area:e] - np.clip( - end_mask + np.linspace(1, 0, fade_area), 0, 1, - out=end_mask) - mask[:, :, s + fade_area:e - fade_area] = 1 - old_e = e - - return mask - - -def align_wave_head_and_tail(a, b, sr): - a_mono = a[:, :sr * 4].sum(axis=0) - b_mono = b[:, :sr * 4].sum(axis=0) - a_mono -= a_mono.mean() - b_mono -= b_mono.mean() - offset = len(a_mono) - 1 - delay = np.argmax(np.correlate(a_mono, b_mono, 'full')) - offset - - if delay > 0: - a = a[:, delay:] - else: - b = b[:, np.abs(delay):] - if a.shape[1] < b.shape[1]: - b = b[:, :a.shape[1]] - else: - a = a[:, :b.shape[1]] - - return a, b - - -def cache_or_load(mix_path, inst_path, sr, hop_length): - _, mix_ext = os.path.splitext(mix_path) - _, inst_ext = os.path.splitext(inst_path) - spec_mix_path = mix_path.replace(mix_ext, '.npy') - spec_inst_path = inst_path.replace(inst_ext, '.npy') - - if os.path.exists(spec_mix_path) and os.path.exists(spec_inst_path): - X = np.load(spec_mix_path) - y = np.load(spec_inst_path) - else: - X, _ = librosa.load( - mix_path, sr, False, dtype=np.float32, res_type='kaiser_fast') - y, _ = librosa.load( - inst_path, sr, False, dtype=np.float32, res_type='kaiser_fast') - X, _ = librosa.effects.trim(X) - y, _ = librosa.effects.trim(y) - X, y = align_wave_head_and_tail(X, y, sr) - - X = np.abs(calc_spec(X, hop_length)) - y = np.abs(calc_spec(y, hop_length)) - - _, ext = os.path.splitext(mix_path) - np.save(spec_mix_path, X) - np.save(spec_inst_path, y) - - return X, y - - -def spec_to_wav(mag, phase, hop_length): - spec = mag * phase - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - wav_left = librosa.istft(spec_left, hop_length=hop_length) - wav_right = librosa.istft(spec_right, hop_length=hop_length) - wav = np.asfortranarray([wav_left, wav_right]) - - return wav - - -if __name__ == "__main__": - import sys - X, _ = librosa.load( - sys.argv[1], 44100, False, dtype=np.float32, res_type='kaiser_fast') - y, _ = librosa.load( - sys.argv[2], 44100, False, dtype=np.float32, res_type='kaiser_fast') - X, _ = librosa.effects.trim(X) - y, _ = librosa.effects.trim(y) - X, y = align_wave_head_and_tail(X, y, 44100) - sf.write('test_i.wav', y.T, 44100) - sf.write('test_m.wav', X.T, 44100) - sf.write('test_v.wav', (X - y).T, 44100) From 0b2de344ca154f210bed4562a473acee5c2d0922 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:28:21 -0600 Subject: [PATCH 010/100] Delete UVR-logo.png --- Images/UVR-logo.png | Bin 102738 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Images/UVR-logo.png diff --git a/Images/UVR-logo.png b/Images/UVR-logo.png deleted file mode 100644 index 8cbf20913559e2da2668c2d85279ee3e92c01101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102738 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ʝ71?k8B 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%0DSj<?+U|b~X*T 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 a{r>@8xz;wA*^RdV0000 Date: Mon, 9 Nov 2020 04:28:36 -0600 Subject: [PATCH 011/100] Delete UVR-App.jpg --- Images/UVR-App.jpg | Bin 85828 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Images/UVR-App.jpg diff --git a/Images/UVR-App.jpg b/Images/UVR-App.jpg deleted file mode 100644 index 858cd2887a918fbb70e800011c37638537f5619e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85828 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 Date: Mon, 9 Nov 2020 04:28:46 -0600 Subject: [PATCH 012/100] Delete Model Goes Here.txt --- models/Model Goes Here.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 models/Model Goes Here.txt diff --git a/models/Model Goes Here.txt b/models/Model Goes Here.txt deleted file mode 100644 index e051db2..0000000 --- a/models/Model Goes Here.txt +++ /dev/null @@ -1 +0,0 @@ -Model Goes Here \ No newline at end of file From 974419c523b99e82ff6dd7d37e2dbabb7a32e986 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:28:56 -0600 Subject: [PATCH 013/100] Delete Mixtures Go Here.txt --- dataset/mixtures/Mixtures Go Here.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dataset/mixtures/Mixtures Go Here.txt diff --git a/dataset/mixtures/Mixtures Go Here.txt b/dataset/mixtures/Mixtures Go Here.txt deleted file mode 100644 index 1bda6e8..0000000 --- a/dataset/mixtures/Mixtures Go Here.txt +++ /dev/null @@ -1 +0,0 @@ -Mixtures Go Here \ No newline at end of file From c1e6166ad68118ecf1c440497a946b063e1e27ce Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:29:04 -0600 Subject: [PATCH 014/100] Delete Instrumentals Go Here.txt --- dataset/instruments/Instrumentals Go Here.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dataset/instruments/Instrumentals Go Here.txt diff --git a/dataset/instruments/Instrumentals Go Here.txt b/dataset/instruments/Instrumentals Go Here.txt deleted file mode 100644 index ef28293..0000000 --- a/dataset/instruments/Instrumentals Go Here.txt +++ /dev/null @@ -1 +0,0 @@ -Instrumentals Go Here \ No newline at end of file From 545ab10d47e6552348ee075d4871e9f3d80a1930 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:31:56 -0600 Subject: [PATCH 015/100] Add files via upload --- img/UVR-logo.png | Bin 0 -> 102738 bytes img/UVRBETA.jpg | Bin 0 -> 119592 bytes img/refresh.png | Bin 0 -> 1619 bytes lib_v2/dataset.py | 119 ++++++++++++++++++++++++ lib_v2/layers.py | 117 +++++++++++++++++++++++ lib_v2/nets.py | 86 +++++++++++++++++ lib_v2/spec_utils.py | 136 +++++++++++++++++++++++++++ lib_v4/dataset.py | 170 ++++++++++++++++++++++++++++++++++ lib_v4/layers.py | 116 +++++++++++++++++++++++ lib_v4/nets.py | 108 ++++++++++++++++++++++ lib_v4/spec_utils.py | 216 +++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 1068 insertions(+) create mode 100644 img/UVR-logo.png create mode 100644 img/UVRBETA.jpg create mode 100644 img/refresh.png create mode 100644 lib_v2/dataset.py create mode 100644 lib_v2/layers.py create mode 100644 lib_v2/nets.py create mode 100644 lib_v2/spec_utils.py create mode 100644 lib_v4/dataset.py create mode 100644 lib_v4/layers.py create mode 100644 lib_v4/nets.py create mode 100644 lib_v4/spec_utils.py diff --git a/img/UVR-logo.png b/img/UVR-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8cbf20913559e2da2668c2d85279ee3e92c01101 GIT binary patch literal 102738 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ʝ71?k8B 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%0DSj<?+U|b~X*T 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�ian@R`#;p3jJP5wZ)n zIgZik;f6abxyZO@xjT+mu88Z+3Y+tCec2beT(d}GLnMN7EB@4GOH#O4DaMMT)u6{- zeJS%0zt@F$!)R><;Y829Ic4v&b|uL92f5r-R$S{>c_mA{>F z81UEmApDm6MpFYRM@9^0j$f%q4{ZaC9#SF;p?Th-MU3agpI4kqK0lYv zZfk9i)_c0AO!(s$+mFUZn_CcViMg~?g8k5NP2cQLYDFIGxdFX&D^pb$NB1?RpY_Z6 zlL7#H1EY8m7(ulM(ZpJSO?*~^Rg}=|fWm|WC)#&3i0M0r-sa_7rV#1Bci858(acMC z+shhPVF^$v{OCvQ%3J(Pz$EurmQFUkY$>L1S3s$6v}*O zzzOVQ`v|^N#Ef+_9=hI({{TWf{-KhecK^ThIkbk`I&6g|ny?=Id9x%5ym`D8y!jY< zwtWn|_cCo80|5^qbtHyc0Js8k$<;K_#R!wY7i%Ba5hkHrTc1ak^2S!r`sKf|WUH>PBU)@U1T)0BHH;NCJu2vsi4gi&e61agND?bBG zN_t@6#IByy*Kv}u#23*VoF}7T$ylm@K^~Sw<^g1%W7S!MD7F zRr<^E4lS1~uRx2;8WRaez2a{r)`=dD*QBP8 jJ>c`QW=RTi#o}lvEPLUwRXJm8Z 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�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

WykGKay@oj2Gz2%n6n6bDy)9a+ekFzqkERLH%_7 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Ξ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 {tkdnd::_begin_drag press 1 %W %s %X %Y %x %y} + bind TkDND_Drag1 {tkdnd::_begin_drag motion 1 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag press 2 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag motion 2 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag press 3 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag motion 3 %W %s %X %Y %x %y} + + # ---------------------------------------------------------------------------- + # Command tkdnd::initialise: Initialise the TkDND package. + # ---------------------------------------------------------------------------- + proc initialise { dir PKG_LIB_FILE PACKAGE_NAME} { + variable _platform_namespace + variable _drop_file_temp_dir + variable _windowingsystem + global env + + switch [tk windowingsystem] { + x11 { + set _windowingsystem x11 + } + win32 - + windows { + set _windowingsystem windows + } + aqua { + set _windowingsystem aqua + } + default { + error "unknown Tk windowing system" + } + } + + ## Get User's home directory: We try to locate the proper path from a set of + ## environmental variables... + foreach var {HOME HOMEPATH USERPROFILE ALLUSERSPROFILE APPDATA} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)]} { + set UserHomeDir $env($var) + break + } + } + } + + ## Should use [tk windowingsystem] instead of tcl platform array: + ## OS X returns "unix," but that's not useful because it has its own + ## windowing system, aqua + ## Under windows we have to also combine HOMEDRIVE & HOMEPATH... + if {![info exists UserHomeDir] && + [string equal $_windowingsystem windows] && + [info exists env(HOMEDRIVE)] && [info exists env(HOMEPATH)]} { + if {[file isdirectory $env(HOMEDRIVE)$env(HOMEPATH)]} { + set UserHomeDir $env(HOMEDRIVE)$env(HOMEPATH) + } + } + ## Have we located the needed path? + if {![info exists UserHomeDir]} { + set UserHomeDir [pwd] + } + set UserHomeDir [file normalize $UserHomeDir] + + ## Try to locate a temporary directory... + foreach var {TKDND_TEMP_DIR TEMP TMP} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)] && [file writable $env($var)]} { + set _drop_file_temp_dir $env($var) + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + foreach _dir [list "$UserHomeDir/Local Settings/Temp" \ + "$UserHomeDir/AppData/Local/Temp" \ + /tmp \ + C:/WINDOWS/Temp C:/Temp C:/tmp \ + D:/WINDOWS/Temp D:/Temp D:/tmp] { + if {[file isdirectory $_dir] && [file writable $_dir]} { + set _drop_file_temp_dir $_dir + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + set _drop_file_temp_dir $UserHomeDir + } + set _drop_file_temp_dir [file native $_drop_file_temp_dir] + + source $dir/tkdnd_generic.tcl + switch $_windowingsystem { + x11 { + source $dir/tkdnd_unix.tcl + set _platform_namespace xdnd + } + win32 - + windows { + source $dir/tkdnd_windows.tcl + set _platform_namespace olednd + } + aqua { + source $dir/tkdnd_macosx.tcl + set _platform_namespace macdnd + } + default { + error "unknown Tk windowing system" + } + } + load $dir/$PKG_LIB_FILE $PACKAGE_NAME + source $dir/tkdnd_compat.tcl + ${_platform_namespace}::initialise + };# initialise + + proc GetDropFileTempDirectory { } { + variable _drop_file_temp_dir + return $_drop_file_temp_dir + } + proc SetDropFileTempDirectory { dir } { + variable _drop_file_temp_dir + set _drop_file_temp_dir $dir + } + +};# namespace ::tkdnd + +# ---------------------------------------------------------------------------- +# Command tkdnd::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::drag_source { mode path { types {} } { event 1 } + { tagprefix TkDND_Drag } } { + set tags [bindtags $path] + set idx [lsearch $tags ${tagprefix}$event] + switch -- $mode { + register { + if { $idx != -1 } { + ## No need to do anything! + # bindtags $path [lreplace $tags $idx $idx ${tagprefix}$event] + } else { + bindtags $path [linsert $tags 1 ${tagprefix}$event] + } + _drag_source_update_types $path $types + } + unregister { + if { $idx != -1 } { + bindtags $path [lreplace $tags $idx $idx] + } + } + } +};# tkdnd::drag_source + +proc ::tkdnd::_drag_source_update_types { path types } { + set types [platform_specific_types $types] + set old_types [bind $path <>] + foreach type $types { + if {[lsearch $old_types $type] < 0} {lappend old_types $type} + } + bind $path <> $old_types +};# ::tkdnd::_drag_source_update_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::drop_target { mode path { types {} } } { + variable _windowingsystem + set types [platform_specific_types $types] + switch -- $mode { + register { + switch $_windowingsystem { + x11 { + _register_types $path [winfo toplevel $path] $types + } + win32 - + windows { + _RegisterDragDrop $path + bind $path {+ tkdnd::_RevokeDragDrop %W} + } + aqua { + macdnd::registerdragwidget [winfo toplevel $path] $types + } + default { + error "unknown Tk windowing system" + } + } + set old_types [bind $path <>] + set new_types {} + foreach type $types { + if {[lsearch -exact $old_types $type] < 0} {lappend new_types $type} + } + if {[llength $new_types]} { + bind $path <> [concat $old_types $new_types] + } + } + unregister { + switch $_windowingsystem { + x11 { + } + win32 - + windows { + _RevokeDragDrop $path + } + aqua { + error todo + } + default { + error "unknown Tk windowing system" + } + } + bind $path <> {} + } + } +};# tkdnd::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_begin_drag { event button source state X Y x y } { + variable _x0 + variable _y0 + variable _state + + switch -- $event { + press { + set _x0 $X + set _y0 $Y + set _state "press" + } + motion { + if { ![info exists _state] } { + # This is just extra protection. There seem to be + # rare cases where the motion comes before the press. + return + } + if { [string equal $_state "press"] } { + variable _dx + variable _dy + if { abs($_x0-$X) > ${_dx} || abs($_y0-$Y) > ${_dy} } { + set _state "done" + _init_drag $button $source $state $X $Y $x $y + } + } + } + } +};# tkdnd::_begin_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_init_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_init_drag { button source state rootX rootY X Y } { + # Call the <> binding. + set cmd [bind $source <>] + # puts "CMD: $cmd" + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y \ + %S $state %e <> %A \{\} %% % \ + %t [bind $source <>]] $cmd] + set code [catch {uplevel \#0 $cmd} info options] + # puts "CODE: $code ---- $info" + switch -exact -- $code { + 0 {} + 3 - 4 { + # FRINK: nocheck + return + } + default { + return -options $options $info + } + } + + set len [llength $info] + if {$len == 3} { + foreach { actions types _data } $info { break } + set types [platform_specific_types $types] + set data [list] + foreach type $types { + lappend data $_data + } + unset _data + } elseif {$len == 2} { + foreach { actions _data } $info { break } + set data [list]; set types [list] + foreach {t d} $_data { + foreach t [platform_specific_types $t] { + lappend types $t; lappend data $d + } + } + unset _data t d + } else { + if {$len == 1 && [string equal [lindex $actions 0] "refuse_drop"]} { + return + } + error "not enough items in the result of the <>\ + event binding. Either 2 or 3 items are expected. The command + executed was: \"$cmd\"\nResult was: \"$info\"" + } + set action refuse_drop + variable _windowingsystem + # puts "Source: \"$source\"" + # puts "Types: \"[join $types {", "}]\"" + # puts "Actions: \"[join $actions {", "}]\"" + # puts "Button: \"$button\"" + # puts "Data: \"[string range $data 0 100]\"" + switch $_windowingsystem { + x11 { + set action [xdnd::_dodragdrop $source $actions $types $data $button] + } + win32 - + windows { + set action [_DoDragDrop $source $actions $types $data $button] + } + aqua { + set action [macdnd::dodragdrop $source $actions $types $data $button] + } + default { + error "unknown Tk windowing system" + } + } + ## Call _end_drag to notify the widget of the result of the drag + ## operation... + _end_drag $button $source {} $action {} $data {} $state $rootX $rootY $X $Y + } +};# tkdnd::_init_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_end_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_end_drag { button source target action type data result + state rootX rootY X Y } { + set rootX 0 + set rootY 0 + # Call the <> binding. + set cmd [bind $source <>] + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y %% % \ + %S $state %e <> %A \{$action\}] $cmd] + set info [uplevel \#0 $cmd] + # if { $info != "" } { + # variable _windowingsystem + # foreach { actions types data } $info { break } + # set types [platform_specific_types $types] + # switch $_windowingsystem { + # x11 { + # error "dragging from Tk widgets not yet supported" + # } + # win32 - + # windows { + # set action [_DoDragDrop $source $actions $types $data $button] + # } + # aqua { + # macdnd::dodragdrop $source $actions $types $data + # } + # default { + # error "unknown Tk windowing system" + # } + # } + # ## Call _end_drag to notify the widget of the result of the drag + # ## operation... + # _end_drag $button $source {} $action {} $data {} $state $rootX $rootY + # } + } +};# tkdnd::_end_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_types $types +}; # tkdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_type $type +}; # tkdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_type $type +}; # tkdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::bytes_to_string +# ---------------------------------------------------------------------------- +proc ::tkdnd::bytes_to_string { bytes } { + set string {} + foreach byte $bytes { + append string [binary format c $byte] + } + return $string +};# tkdnd::bytes_to_string + +# ---------------------------------------------------------------------------- +# Command tkdnd::urn_unquote +# ---------------------------------------------------------------------------- +proc ::tkdnd::urn_unquote {url} { + set result "" + set start 0 + while {[regexp -start $start -indices {%[0-9a-fA-F]{2}} $url match]} { + foreach {first last} $match break + append result [string range $url $start [expr {$first - 1}]] + append result [format %c 0x[string range $url [incr first] $last]] + set start [incr last] + } + append result [string range $url $start end] + return [encoding convertfrom utf-8 $result] +};# tkdnd::urn_unquote diff --git a/tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib b/tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib new file mode 100644 index 0000000000000000000000000000000000000000..c5a956bfdf01319ce0574a1ae86e13454ce22a5f GIT binary patch literal 2064 zcmcIl&2G~`5dQ2W0wRP$L82F=R8;&NaDE!MjZ}dPMG)0ZtHiz5P2-kYq)k=Axwo89 z4}E~V01rXWJt1-A$brWQGxn}y<3MVptg<^hv*Vq=Z#Hu)t<(15i)4!8jP@sA=74|ab)PH9t7H?P(1UMmog+CH7x#|)JyV*!(G^f)+ zL4rdlO}b4lEd>~I`Y8-)JWzm}ltCVvv%mN0{e08sfVZ^yEEz!!vp^p&g=pzZsAM+vx-wwPK91|5gv`(*`vq=$D)<^y5^i>Z* zUp+_J-SG%={G(tEA!tDg89`qpBPb(iipaQ5r5}%O04z%Tpw-2J2b zbeS&hUhcl|Fkr~;t4KNP{g8~HtT&|`Unjqh$c;%aX2LhFQXRdRAbbK&pWityB|iY6 aKdgB7C+-J*VZ60DvZVypf`5lG7Jmcz8jGp` literal 0 HcmV?d00001 diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl new file mode 100644 index 0000000..efc96f7 --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl @@ -0,0 +1,160 @@ +# +# tkdnd_compat.tcl -- +# +# This file implements some utility procedures, to support older versions +# of the TkDND package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval compat { + +};# namespace compat + +# ---------------------------------------------------------------------------- +# Command ::dnd +# ---------------------------------------------------------------------------- +proc ::dnd {method window args} { + switch $method { + bindtarget { + switch [llength $args] { + 0 {return [tkdnd::compat::bindtarget0 $window]} + 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2] [lindex $args 3]]} + } + } + cleartarget { + return [tkdnd::compat::cleartarget $window] + } + bindsource { + switch [llength $args] { + 0 {return [tkdnd::compat::bindsource0 $window]} + 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + } + } + clearsource { + return [tkdnd::compat::clearsource $window] + } + drag { + return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] + } + } + error "invalid number of arguments!" +};# ::dnd + +# ---------------------------------------------------------------------------- +# Command compat::bindtarget +# ---------------------------------------------------------------------------- +proc compat::bindtarget0 {window} { + return [bind $window <>] +};# compat::bindtarget0 + +proc compat::bindtarget1 {window type} { + return [bindtarget2 $window $type ] +};# compat::bindtarget1 + +proc compat::bindtarget2 {window type event} { + switch $event { + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + } +};# compat::bindtarget2 + +proc compat::bindtarget3 {window type event script} { + set type [normalise_type $type] + ::tkdnd::drop_target register $window [list $type] + switch $event { + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + } +};# compat::bindtarget3 + +proc compat::bindtarget4 {window type event script priority} { + return [bindtarget3 $window $type $event $script] +};# compat::bindtarget4 + +proc compat::normalise_type { type } { + switch $type { + text/plain - + {text/plain;charset=UTF-8} - + Text {return DND_Text} + text/uri-list - + Files {return DND_Files} + default {return $type} + } +};# compat::normalise_type + +# ---------------------------------------------------------------------------- +# Command compat::bindsource +# ---------------------------------------------------------------------------- +proc compat::bindsource0 {window} { + return [bind $window <>] +};# compat::bindsource0 + +proc compat::bindsource1 {window type} { + return [bindsource2 $window $type ] +};# compat::bindsource1 + +proc compat::bindsource2 {window type script} { + set type [normalise_type $type] + ::tkdnd::drag_source register $window $type + bind $window <> "list {copy} {%t} \[$script\]" +};# compat::bindsource2 + +proc compat::bindsource3 {window type script priority} { + return [bindsource2 $window $type $script] +};# compat::bindsource3 + +# ---------------------------------------------------------------------------- +# Command compat::cleartarget +# ---------------------------------------------------------------------------- +proc compat::cleartarget {window} { +};# compat::cleartarget + +# ---------------------------------------------------------------------------- +# Command compat::clearsource +# ---------------------------------------------------------------------------- +proc compat::clearsource {window} { +};# compat::clearsource diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_generic.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_generic.tcl new file mode 100644 index 0000000..698b464 --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_generic.tcl @@ -0,0 +1,520 @@ +# +# tkdnd_generic.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval generic { + variable _types {} + variable _typelist {} + variable _codelist {} + variable _actionlist {} + variable _pressedkeys {} + variable _action {} + variable _common_drag_source_types {} + variable _common_drop_target_types {} + variable _drag_source {} + variable _drop_target {} + + variable _last_mouse_root_x 0 + variable _last_mouse_root_y 0 + + variable _tkdnd2platform + variable _platform2tkdnd + + proc debug {msg} { + puts $msg + };# debug + + proc initialise { } { + };# initialise + + proc initialise_platform_to_tkdnd_types { types } { + variable _platform2tkdnd + variable _tkdnd2platform + set _platform2tkdnd [dict create {*}$types] + set _tkdnd2platform [dict create] + foreach type [dict keys $_platform2tkdnd] { + dict lappend _tkdnd2platform [dict get $_platform2tkdnd $type] $type + } + };# initialise_platform_to_tkdnd_types + + proc initialise_tkdnd_to_platform_types { types } { + variable _tkdnd2platform + set _tkdnd2platform [dict create {*}$types] + };# initialise_tkdnd_to_platform_types + +};# namespace generic + +# ---------------------------------------------------------------------------- +# Command generic::HandleEnter +# ---------------------------------------------------------------------------- +proc generic::HandleEnter { drop_target drag_source typelist codelist + actionlist pressedkeys } { + variable _typelist; set _typelist $typelist + variable _pressedkeys; set _pressedkeys $pressedkeys + variable _action; set _action refuse_drop + variable _common_drag_source_types; set _common_drag_source_types {} + variable _common_drop_target_types; set _common_drop_target_types {} + variable _actionlist + variable _drag_source; set _drag_source $drag_source + variable _drop_target; set _drop_target {} + variable _actionlist; set _actionlist $actionlist + variable _codelist set _codelist $codelist + + variable _last_mouse_root_x; set _last_mouse_root_x 0 + variable _last_mouse_root_y; set _last_mouse_root_y 0 + # debug "\n===============================================================" + # debug "generic::HandleEnter: drop_target=$drop_target,\ + # drag_source=$drag_source,\ + # typelist=$typelist" + # debug "generic::HandleEnter: ACTION: default" + return default +};# generic::HandleEnter + +# ---------------------------------------------------------------------------- +# Command generic::HandlePosition +# ---------------------------------------------------------------------------- +proc generic::HandlePosition { drop_target drag_source pressedkeys + rootX rootY { time 0 } } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + # debug "generic::HandlePosition: drop_target=$drop_target,\ + # _drop_target=$_drop_target, rootX=$rootX, rootY=$rootY" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + # debug "generic::HandlePosition: no or empty _drag_source:\ + # return refuse_drop" + return refuse_drop + } + + if {$drag_source ne "" && $drag_source ne $_drag_source} { + debug "generic position event from unexpected source: $_drag_source\ + != $drag_source" + return refuse_drop + } + + set _pressedkeys $pressedkeys + + ## Does the new drop target support any of our new types? + # foreach {common_drag_source_types common_drop_target_types} \ + # [GetWindowCommonTypes $drop_target $_typelist] {break} + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [FindWindowWithCommonTypes $drop_target $_typelist] {break} + set data [GetDroppedData $time] + + # debug "\t($_drop_target) -> ($drop_target)" + if {$drop_target != $_drop_target} { + if {[string length $_drop_target]} { + ## Call the <> event. + # debug "\t<> on $_drop_target" + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + uplevel \#0 $cmd + } + } + set _drop_target $drop_target + set _action refuse_drop + + if {[llength $common_drag_source_types]} { + set _action [lindex $_actionlist 0] + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + ## Drop target supports at least one type. Send a <>. + # puts "<> -> $drop_target" + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + focus $drop_target + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + } + } + } + + set _drop_target {} + if {[llength $common_drag_source_types]} { + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + set _drop_target $drop_target + ## Drop target supports at least one type. Send a <>. + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + # Return values: copy, move, link, ask, private, refuse_drop, default + # debug "generic::HandlePosition: ACTION: $_action" + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandlePosition + +# ---------------------------------------------------------------------------- +# Command generic::HandleLeave +# ---------------------------------------------------------------------------- +proc generic::HandleLeave { } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + if {![info exists _drop_target]} {set _drop_target {}} + # debug "generic::HandleLeave: _drop_target=$_drop_target" + if {[info exists _drop_target] && [string length $_drop_target]} { + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target \ + %X $_last_mouse_root_x %Y $_last_mouse_root_y \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + foreach var {_types _typelist _actionlist _pressedkeys _action + _common_drag_source_types _common_drop_target_types + _drag_source _drop_target} { + set $var {} + } +};# generic::HandleLeave + +# ---------------------------------------------------------------------------- +# Command generic::HandleDrop +# ---------------------------------------------------------------------------- +proc generic::HandleDrop {drop_target drag_source pressedkeys rootX rootY time } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + set _pressedkeys $pressedkeys + + # puts "generic::HandleDrop: $time" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + return refuse_drop + } + if {![info exists _drop_target] && ![string length $_drop_target]} { + return refuse_drop + } + if {![llength $_common_drag_source_types]} {return refuse_drop} + ## Get the dropped data. + set data [GetDroppedData $time] + ## Try to select the most specific <> event. + foreach type [concat $_common_drag_source_types $_common_drop_target_types] { + set type [platform_independent_type $type] + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action + } + } + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandleDrop + +# ---------------------------------------------------------------------------- +# Command generic::GetWindowCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetWindowCommonTypes { win typelist } { + set types [bind $win <>] + # debug ">> Accepted types: $win $_types" + set common_drag_source_types {} + set common_drop_target_types {} + if {[llength $types]} { + ## Examine the drop target types, to find at least one match with the drag + ## source types... + set supported_types [supported_types $typelist] + foreach type $types { + foreach matched [lsearch -glob -all -inline $supported_types $type] { + ## Drop target supports this type. + lappend common_drag_source_types $matched + lappend common_drop_target_types $type + } + } + } + list $common_drag_source_types $common_drop_target_types +};# generic::GetWindowCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::FindWindowWithCommonTypes +# ---------------------------------------------------------------------------- +proc generic::FindWindowWithCommonTypes { win typelist } { + set toplevel [winfo toplevel $win] + while {![string equal $win $toplevel]} { + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + set win [winfo parent $win] + } + ## We have reached the toplevel, which may be also a target (SF Bug #30) + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + return { {} {} {} } +};# generic::FindWindowWithCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDroppedData +# ---------------------------------------------------------------------------- +proc generic::GetDroppedData { time } { + variable _dropped_data + return $_dropped_data +};# generic::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::SetDroppedData +# ---------------------------------------------------------------------------- +proc generic::SetDroppedData { data } { + variable _dropped_data + set _dropped_data $data +};# generic::SetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSource +# ---------------------------------------------------------------------------- +proc generic::GetDragSource { } { + variable _drag_source + return $_drag_source +};# generic::GetDragSource + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTarget +# ---------------------------------------------------------------------------- +proc generic::GetDropTarget { } { + variable _drop_target + return $_drop_target +};# generic::GetDropTarget + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDragSourceCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTargetCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDropTargetCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDropTargetCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_types +# ---------------------------------------------------------------------------- +proc generic::platform_specific_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_specific_type $type]] + } + return $new_types +}; # generic::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_type +# ---------------------------------------------------------------------------- +proc generic::platform_specific_type { type } { + variable _tkdnd2platform + if {[dict exists $_tkdnd2platform $type]} { + return [dict get $_tkdnd2platform $type] + } + list $type +}; # generic::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_independent_type $type]] + } + return $new_types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_independent_type +# ---------------------------------------------------------------------------- +proc generic::platform_independent_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return [dict get $_platform2tkdnd $type] + } + return $type +}; # generic::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command generic::supported_types +# ---------------------------------------------------------------------------- +proc generic::supported_types { types } { + set new_types {} + foreach type $types { + if {[supported_type $type]} {lappend new_types $type} + } + return $new_types +}; # generic::supported_types + +# ---------------------------------------------------------------------------- +# Command generic::supported_type +# ---------------------------------------------------------------------------- +proc generic::supported_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return 1 + } + return 0 +}; # generic::supported_type diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl new file mode 100644 index 0000000..307f6da --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl @@ -0,0 +1,144 @@ +# +# tkdnd_macosx.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. + +# This software is copyrighted by: +# Georgios Petasis, Athens, Greece. +# e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr +# +# Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, +# kw@codebykevin.com +# +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +#basic API for Mac Drag and Drop + +#two data types supported: strings and file paths + +#two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget + +#data retrieval mechanism: text or file paths are copied from drag clipboard to system clipboard and retrieved via [clipboard get]; array of file paths is converted to single tab-separated string, can be split into Tcl list + +if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { + error {TkAqua Cocoa required} +} + +namespace eval macdnd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + NSPasteboardTypeString DND_Text \ + NSFilenamesPboardType DND_Files \ + NSPasteboardTypeHTML DND_HTML \ + ] + };# initialise + +};# namespace macdnd + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleEnter +# ---------------------------------------------------------------------------- +proc macdnd::HandleEnter { path drag_source typelist { data {} } } { + variable _pressedkeys + variable _actionlist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# macdnd::HandleEnter + +# ---------------------------------------------------------------------------- +# Command macdnd::HandlePosition +# ---------------------------------------------------------------------------- +proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { + variable _pressedkeys + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# macdnd::HandlePosition + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleLeave +# ---------------------------------------------------------------------------- +proc macdnd::HandleLeave { args } { + ::tkdnd::generic::HandleLeave +};# macdnd::HandleLeave + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleDrop +# ---------------------------------------------------------------------------- +proc macdnd::HandleDrop { drop_target data args } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y 0 +};# macdnd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command macdnd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc macdnd::GetDragSourceCommonTypes { } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# macdnd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # macdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # macdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # macdnd::platform_independent_type diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_unix.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_unix.tcl new file mode 100644 index 0000000..56d17c4 --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_unix.tcl @@ -0,0 +1,810 @@ +# +# tkdnd_unix.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval xdnd { + variable _dragging 0 + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + text/plain\;charset=utf-8 DND_Text \ + UTF8_STRING DND_Text \ + text/plain DND_Text \ + STRING DND_Text \ + TEXT DND_Text \ + COMPOUND_TEXT DND_Text \ + text/uri-list DND_Files \ + text/html\;charset=utf-8 DND_HTML \ + text/html DND_HTML \ + application/x-color DND_Color \ + ] + };# initialise + +};# namespace xdnd + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndEnter { path drag_source typelist time { data {} } } { + variable _pressedkeys + variable _actionlist + variable _typelist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + set _typelist $typelist + # puts "xdnd::HandleXdndEnter: $time" + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# xdnd::HandleXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndPosition { drop_target rootX rootY time {drag_source {}} } { + variable _pressedkeys + variable _typelist + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + # puts "xdnd::HandleXdndPosition: $time" + ## Get the dropped data... + catch { + ::tkdnd::generic::SetDroppedData [GetPositionData $drop_target $_typelist $time] + } + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# xdnd::HandleXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndLeave { } { + ::tkdnd::generic::HandleLeave +};# xdnd::HandleXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndDrop { time } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData [GetDroppedData \ + [::tkdnd::generic::GetDragSource] [::tkdnd::generic::GetDropTarget] \ + [::tkdnd::generic::GetDragSourceCommonTypes] $time] + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y $time +};# xdnd::HandleXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::GetPositionData +# ---------------------------------------------------------------------------- +proc xdnd::GetPositionData { drop_target typelist time } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + GetDroppedData [::tkdnd::generic::GetDragSource] $drop_target \ + $common_drag_source_types $time +};# xdnd::GetPositionData + +# ---------------------------------------------------------------------------- +# Command xdnd::GetDroppedData +# ---------------------------------------------------------------------------- +proc xdnd::GetDroppedData { _drag_source _drop_target _common_drag_source_types time } { + if {![llength $_common_drag_source_types]} { + error "no common data types between the drag source and drop target widgets" + } + ## Is drag source in this application? + if {[catch {winfo pathname -displayof $_drop_target $_drag_source} p]} { + set _use_tk_selection 0 + } else { + set _use_tk_selection 1 + } + foreach type $_common_drag_source_types { + # puts "TYPE: $type ($_drop_target)" + # _get_selection $_drop_target $time $type + if {$_use_tk_selection} { + if {![catch { + selection get -displayof $_drop_target -selection XdndSelection \ + -type $type + } result options]} { + return [normalise_data $type $result] + } + } else { + # puts "_selection_get -displayof $_drop_target -selection XdndSelection \ + # -type $type -time $time" + #after 100 [list focus -force $_drop_target] + #after 50 [list raise [winfo toplevel $_drop_target]] + if {![catch { + _selection_get -displayof $_drop_target -selection XdndSelection \ + -type $type -time $time + } result options]} { + return [normalise_data $type $result] + } + } + } + return -options $options $result +};# xdnd::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # xdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # xdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # xdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command xdnd::_normalise_data +# ---------------------------------------------------------------------------- +proc xdnd::normalise_data { type data } { + # Tk knows how to interpret the following types: + # STRING, TEXT, COMPOUND_TEXT + # UTF8_STRING + # Else, it returns a list of 8 or 32 bit numbers... + switch -glob $type { + STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data} + text/html { + if {[catch { + encoding convertfrom unicode $data + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/html\;charset=utf-8 - + text/plain\;charset=utf-8 - + text/plain { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/uri-list* { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + ## Get rid of \r\n + set string [string trim [string map {\r\n \n} $string]] + set files {} + foreach quoted_file [split $string] { + set file [tkdnd::urn_unquote $quoted_file] + switch -glob $file { + \#* {} + file://* {lappend files [string range $file 7 end]} + ftp://* - + https://* - + http://* {lappend files $quoted_file} + default {lappend files $file} + } + } + return $files + } + application/x-color { + return $data + } + text/x-moz-url - + application/q-iconlist - + default {return $data} + } +}; # xdnd::normalise_data + +############################################################################# +## +## XDND drag implementation +## +############################################################################# + +# ---------------------------------------------------------------------------- +# Command xdnd::_selection_ownership_lost +# ---------------------------------------------------------------------------- +proc xdnd::_selection_ownership_lost {} { + variable _dragging + set _dragging 0 +};# _selection_ownership_lost + +# ---------------------------------------------------------------------------- +# Command xdnd::_dodragdrop +# ---------------------------------------------------------------------------- +proc xdnd::_dodragdrop { source actions types data button } { + variable _dragging + + # puts "xdnd::_dodragdrop: source: $source, actions: $actions, types: $types,\ + # data: \"$data\", button: $button" + if {$_dragging} { + ## We are in the middle of another drag operation... + error "another drag operation in progress" + } + + variable _dodragdrop_drag_source $source + variable _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_proxy 0 + variable _dodragdrop_actions $actions + variable _dodragdrop_action_descriptions $actions + variable _dodragdrop_actions_len [llength $actions] + variable _dodragdrop_types $types + variable _dodragdrop_types_len [llength $types] + variable _dodragdrop_data $data + variable _dodragdrop_transfer_data {} + variable _dodragdrop_button $button + variable _dodragdrop_time 0 + variable _dodragdrop_default_action refuse_drop + variable _dodragdrop_waiting_status 0 + variable _dodragdrop_drop_target_accepts_drop 0 + variable _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_current_cursor $_dodragdrop_default_action + variable _dodragdrop_drop_occured 0 + variable _dodragdrop_selection_requestor 0 + + ## + ## If we have more than 3 types, the property XdndTypeList must be set on + ## the drag source widget... + ## + if {$_dodragdrop_types_len > 3} { + _announce_type_list $_dodragdrop_drag_source $_dodragdrop_types + } + + ## + ## Announce the actions & their descriptions on the XdndActionList & + ## XdndActionDescription properties... + ## + _announce_action_list $_dodragdrop_drag_source $_dodragdrop_actions \ + $_dodragdrop_action_descriptions + + ## + ## Arrange selection handlers for our drag source, and all the supported types + ## + registerSelectionHandler $source $types + + ## + ## Step 1: When a drag begins, the source takes ownership of XdndSelection. + ## + selection own -command ::tkdnd::xdnd::_selection_ownership_lost \ + -selection XdndSelection $source + set _dragging 1 + + ## Grab the mouse pointer... + _grab_pointer $source $_dodragdrop_default_action + + ## Register our generic event handler... + # The generic event callback will report events by modifying variable + # ::xdnd::_dodragdrop_event: a dict with event information will be set as + # the value of the variable... + _register_generic_event_handler + + ## Set a timeout for debugging purposes... + # after 60000 {set ::tkdnd::xdnd::_dragging 0} + + tkwait variable ::tkdnd::xdnd::_dragging + _SendXdndLeave + + set _dragging 0 + _ungrab_pointer $source + _unregister_generic_event_handler + catch {selection clear -selection XdndSelection} + unregisterSelectionHandler $source $types + return $_dodragdrop_drop_target_accepts_action +};# xdnd::_dodragdrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_process_drag_events +# ---------------------------------------------------------------------------- +proc xdnd::_process_drag_events {event} { + # The return value from proc is normally 0. A non-zero return value indicates + # that the event is not to be handled further; that is, proc has done all + # processing that is to be allowed for the event + variable _dragging + if {!$_dragging} {return 0} + # puts $event + + variable _dodragdrop_time + set time [dict get $event time] + set type [dict get $event type] + if {$time < $_dodragdrop_time && ![string equal $type SelectionRequest]} { + return 0 + } + set _dodragdrop_time $time + + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_default_action + switch $type { + MotionNotify { + set rootx [dict get $event x_root] + set rooty [dict get $event y_root] + set window [_find_drop_target_window $_dodragdrop_drag_source \ + $rootx $rooty] + if {[string length $window]} { + ## Examine the modifiers to suggest an action... + set _dodragdrop_default_action [_default_action $event] + ## Is it a Tk widget? + # set path [winfo containing $rootx $rooty] + # puts "Window under mouse: $window ($path)" + if {$_dodragdrop_drop_target != $window} { + ## Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + ## Is there a proxy? If not, _find_drop_target_proxy returns the + ## target window, so we always get a valid "proxy". + set proxy [_find_drop_target_proxy $_dodragdrop_drag_source $window] + ## Send XdndEnter to $window + _SendXdndEnter $window $proxy + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } else { + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } + } else { + ## No window under the mouse. Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + } + } + ButtonPress { + } + ButtonRelease { + variable _dodragdrop_button + set button [dict get $event button] + if {$button == $_dodragdrop_button} { + ## The button that initiated the drag was released. Trigger drop... + _SendXdndDrop + } + return 1 + } + KeyPress { + } + KeyRelease { + set keysym [dict get $event keysym] + switch $keysym { + Escape { + ## The user has pressed escape. Abort... + if {$_dragging} {set _dragging 0} + } + } + } + SelectionRequest { + variable _dodragdrop_selection_requestor + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + set _dodragdrop_selection_requestor [dict get $event requestor] + set _dodragdrop_selection_property [dict get $event property] + set _dodragdrop_selection_selection [dict get $event selection] + set _dodragdrop_selection_target [dict get $event target] + set _dodragdrop_selection_time $time + return 0 + } + default { + return 0 + } + } + return 0 +};# _process_drag_events + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndEnter {window proxy} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_types + variable _dodragdrop_waiting_status + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_target > 0} _SendXdndLeave + if {$_dodragdrop_drop_occured} return + set _dodragdrop_drop_target $window + set _dodragdrop_drop_target_proxy $proxy + set _dodragdrop_waiting_status 0 + if {$_dodragdrop_drop_target < 1} return + # puts "XdndEnter: $_dodragdrop_drop_target $_dodragdrop_drop_target_proxy" + _send_XdndEnter $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $_dodragdrop_types +};# xdnd::_SendXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndPosition {rootx rooty action} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_waiting_status + ## Arrange a new XdndPosition, to be send periodically... + variable _dodragdrop_xdnd_position_heartbeat + catch {after cancel $_dodragdrop_xdnd_position_heartbeat} + set _dodragdrop_xdnd_position_heartbeat [after 200 \ + [list ::tkdnd::xdnd::_SendXdndPosition $rootx $rooty $action]] + if {$_dodragdrop_waiting_status} {return} + # puts "XdndPosition: $_dodragdrop_drop_target $rootx $rooty $action" + _send_XdndPosition $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $rootx $rooty $action + set _dodragdrop_waiting_status 1 +};# xdnd::_SendXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndStatus +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndStatus {event} { + variable _dodragdrop_drop_target + variable _dodragdrop_waiting_status + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_waiting_status 0 + foreach key {target accept want_position action x y w h} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor + # puts "XdndStatus: $event" +};# xdnd::_HandleXdndStatus + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndFinished +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndFinished {event} { + variable _dodragdrop_xdnd_finished_event_after_id + catch {after cancel $_dodragdrop_xdnd_finished_event_after_id} + set _dodragdrop_xdnd_finished_event_after_id {} + variable _dodragdrop_drop_target + set _dodragdrop_drop_target 0 + variable _dragging + if {$_dragging} {set _dragging 0} + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + if {[dict size $event]} { + foreach key {target accept action} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + } else { + set _dodragdrop_drop_target_accepts_drop 0 + } + if {!$_dodragdrop_drop_target_accepts_drop} { + set _dodragdrop_drop_target_accepts_action refuse_drop + } + # puts "XdndFinished: $event" +};# xdnd::_HandleXdndFinished + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndLeave {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_target_proxy + # puts "XdndLeave: $_dodragdrop_drop_target" + _send_XdndLeave $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy + set _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_drop_target_accepts_drop 0 + set _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor +};# xdnd::_SendXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndDrop {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} { + ## The mouse has been released over a widget that does not accept drops. + _HandleXdndFinished {} + return + } + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} {return} + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + set _dodragdrop_drop_occured 1 + _update_cursor clock + + if {!$_dodragdrop_drop_target_accepts_drop} { + _SendXdndLeave + _HandleXdndFinished {} + return + } + # puts "XdndDrop: $_dodragdrop_drop_target" + variable _dodragdrop_drop_timestamp + set _dodragdrop_drop_timestamp [_send_XdndDrop \ + $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy] + set _dodragdrop_drop_target 0 + # puts "XdndDrop: $_dodragdrop_drop_target" + ## Arrange a timeout for receiving XdndFinished... + variable _dodragdrop_xdnd_finished_event_after_id + set _dodragdrop_xdnd_finished_event_after_id \ + [after 10000 [list ::tkdnd::xdnd::_HandleXdndFinished {}]] +};# xdnd::_SendXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_update_cursor +# ---------------------------------------------------------------------------- +proc xdnd::_update_cursor { {cursor {}}} { + # puts "_update_cursor $cursor" + variable _dodragdrop_current_cursor + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + if {![string length $cursor]} { + set cursor refuse_drop + if {$_dodragdrop_drop_target_accepts_drop} { + set cursor $_dodragdrop_drop_target_accepts_action + } + } + if {![string equal $cursor $_dodragdrop_current_cursor]} { + _set_pointer_cursor $_dodragdrop_drag_source $cursor + set _dodragdrop_current_cursor $cursor + } +};# xdnd::_update_cursor + +# ---------------------------------------------------------------------------- +# Command xdnd::_default_action +# ---------------------------------------------------------------------------- +proc xdnd::_default_action {event} { + variable _dodragdrop_actions + variable _dodragdrop_actions_len + if {$_dodragdrop_actions_len == 1} {return [lindex $_dodragdrop_actions 0]} + + set alt [dict get $event Alt] + set shift [dict get $event Shift] + set control [dict get $event Control] + + if {$shift && $control && [lsearch $_dodragdrop_actions link] != -1} { + return link + } elseif {$control && [lsearch $_dodragdrop_actions copy] != -1} { + return copy + } elseif {$shift && [lsearch $_dodragdrop_actions move] != -1} { + return move + } elseif {$alt && [lsearch $_dodragdrop_actions link] != -1} { + return link + } + return default +};# xdnd::_default_action + +# ---------------------------------------------------------------------------- +# Command xdnd::getFormatForType +# ---------------------------------------------------------------------------- +proc xdnd::getFormatForType {type} { + switch -glob [string tolower $type] { + text/plain\;charset=utf-8 - + text/html\;charset=utf-8 - + utf8_string {set format UTF8_STRING} + text/html - + text/plain - + string - + text - + compound_text {set format STRING} + text/uri-list* {set format UTF8_STRING} + application/x-color {set format $type} + default {set format $type} + } + return $format +};# xdnd::getFormatForType + +# ---------------------------------------------------------------------------- +# Command xdnd::registerSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::registerSelectionHandler {source types} { + foreach type $types { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source [list ::tkdnd::xdnd::_SendData $type] + } +};# xdnd::registerSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::unregisterSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::unregisterSelectionHandler {source types} { + foreach type $types { + catch { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source {} + } + } +};# xdnd::unregisterSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::_convert_to_unsigned +# ---------------------------------------------------------------------------- +proc xdnd::_convert_to_unsigned {data format} { + switch $format { + 8 { set mask 0xff } + 16 { set mask 0xffff } + 32 { set mask 0xffffff } + default {error "unsupported format $format"} + } + ## Convert signed integer into unsigned... + set d [list] + foreach num $data { + lappend d [expr { $num & $mask }] + } + return $d +};# xdnd::_convert_to_unsigned + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendData +# ---------------------------------------------------------------------------- +proc xdnd::_SendData {type offset bytes args} { + variable _dodragdrop_drag_source + variable _dodragdrop_types + variable _dodragdrop_data + variable _dodragdrop_transfer_data + + ## The variable _dodragdrop_data contains a list of data, one for each + ## type in the _dodragdrop_types variable. We have to search types, and find + ## the corresponding entry in the _dodragdrop_data list. + set index [lsearch $_dodragdrop_types $type] + if {$index < 0} { + error "unable to locate data suitable for type \"$type\"" + } + set typed_data [lindex $_dodragdrop_data $index] + set format 8 + if {$offset == 0} { + ## Prepare the data to be transferred... + switch -glob $type { + text/plain* - UTF8_STRING - STRING - TEXT - COMPOUND_TEXT { + binary scan [encoding convertto utf-8 $typed_data] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + text/uri-list* { + set files [list] + foreach file $typed_data { + switch -glob $file { + *://* {lappend files $file} + default {lappend files file://$file} + } + } + binary scan [encoding convertto utf-8 "[join $files \r\n]\r\n"] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + application/x-color { + set format 16 + ## Try to understand the provided data: we accept a standard Tk colour, + ## or a list of 3 values (red green blue) or a list of 4 values + ## (red green blue opacity). + switch [llength $typed_data] { + 1 { set color [winfo rgb $_dodragdrop_drag_source $typed_data] + lappend color 65535 } + 3 { set color $typed_data; lappend color 65535 } + 4 { set color $typed_data } + default {error "unknown color data: \"$typed_data\""} + } + ## Convert the 4 elements into 16 bit values... + set _dodragdrop_transfer_data [list] + foreach c $color { + lappend _dodragdrop_transfer_data [format 0x%04X $c] + } + } + default { + set format 32 + binary scan $typed_data c* _dodragdrop_transfer_data + } + } + } + + ## + ## Data has been split into bytes. Count the bytes requested, and return them + ## + set data [lrange $_dodragdrop_transfer_data $offset [expr {$offset+$bytes-1}]] + switch $format { + 8 { + set data [encoding convertfrom utf-8 [binary format c* $data]] + } + 16 { + variable _dodragdrop_selection_requestor + if {$_dodragdrop_selection_requestor} { + ## Tk selection cannot process this format (only 8 & 32 supported). + ## Call our XChangeProperty... + set numItems [llength $data] + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + XChangeProperty $_dodragdrop_drag_source \ + $_dodragdrop_selection_requestor \ + $_dodragdrop_selection_property \ + $_dodragdrop_selection_target \ + $format \ + $_dodragdrop_selection_time \ + $data $numItems + return -code break + } + } + 32 { + } + default { + error "unsupported format $format" + } + } + # puts "SendData: $type $offset $bytes $args ($typed_data)" + # puts " $data" + return $data +};# xdnd::_SendData diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_utils.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_utils.tcl new file mode 100644 index 0000000..ee961dd --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_utils.tcl @@ -0,0 +1,252 @@ +# +# tkdnd_utils.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +package require tkdnd +namespace eval ::tkdnd { + namespace eval utils { + };# namespace ::tkdnd::utils + namespace eval text { + variable _drag_tag tkdnd::drag::selection::tag + variable _state {} + variable _drag_source_widget {} + variable _drop_target_widget {} + variable _now_dragging 0 + };# namespace ::tkdnd::text +};# namespace ::tkdnd + +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag clear 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag motion 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_TextAutoScan %W %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag reset 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag clear 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag motion 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag reset 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag clear 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag motion 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag reset 3 %W %s %X %Y %x %y} + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drag_source { mode path { types DND_Text } { event 1 } { tagprefix TkDND_Drag_Text } { tag sel } } { + switch -exact -- $mode { + register { + $path tag bind $tag \ + "tkdnd::text::_begin_drag press ${event} %W %s %X %Y %x %y" + ## Set a binding to the widget, to put selection as data... + bind $path <> "::tkdnd::text::DragInitCmd $path {%t} $tag" + ## Set a binding to the widget, to remove selection if action is move... + bind $path <> "::tkdnd::text::DragEndCmd $path %A $tag" + } + unregister { + $path tag bind $tag {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drag_source $mode $path $types $event $tagprefix +};# ::tkdnd::text::drag_source + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drop_target { mode path { types DND_Text } } { + switch -exact -- $mode { + register { + bind $path <> "::tkdnd::text::DropPosition $path %X %Y %A %a %m" + bind $path <> "::tkdnd::text::Drop $path %D %X %Y %A %a %m" + } + unregister { + bind $path <> {} + bind $path <> {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drop_target $mode $path $types +};# ::tkdnd::text::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragInitCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragInitCmd { path { types DND_Text } { tag sel } { actions { copy move } } } { + ## Save the selection indices... + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget $path + set _drop_target_widget {} + _save_selection $path $tag + list $actions $types [$path get $tag.first $tag.last] +};# ::tkdnd::text::DragInitCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragEndCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragEndCmd { path action { tag sel } } { + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget {} + set _drop_target_widget {} + _restore_selection $path $tag + switch -exact -- $action { + move { + ## Delete the original selected text... + variable _selection_first + variable _selection_last + $path delete $_selection_first $_selection_last + } + } +};# ::tkdnd::text::DragEndCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DropPosition +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DropPosition { path X Y action actions keys} { + variable _drag_source_widget + variable _drop_target_widget + set _drop_target_widget $path + ## This check is primitive, a more accurate one is needed! + if {$path eq $_drag_source_widget} { + ## This is a drag within the same widget! Set action to move... + if {"move" in $actions} {set action move} + } + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y; update + return $action +};# ::tkdnd::text::DropPosition + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::Drop +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::Drop { path data X Y action actions keys } { + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y + $path insert [$path index insert] $data + return $action +};# ::tkdnd::text::Drop + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_save_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_save_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + variable _selection_tag $tag + set _selection_first [$path index $tag.first] + set _selection_last [$path index $tag.last] + $path tag add $_drag_tag $_selection_first $_selection_last + $path tag configure $_drag_tag \ + -background [$path tag cget $tag -background] \ + -foreground [$path tag cget $tag -foreground] +};# tkdnd::text::_save_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_restore_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_restore_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + $path tag delete $_drag_tag + $path tag remove $tag 0.0 end + #$path tag add $tag $_selection_first $_selection_last +};# tkdnd::text::_restore_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_begin_drag { event button source state X Y x y } { + variable _drop_target_widget + variable _state + # puts "::tkdnd::text::_begin_drag $event $button $source $state $X $Y $x $y" + + switch -exact -- $event { + clear { + switch -exact -- $_state { + press { + ## Do not execute other bindings, as they will erase selection... + return -code break + } + } + set _state clear + } + motion { + variable _now_dragging + if {$_now_dragging} {return -code break} + if { [string equal $_state "press"] } { + variable _x0; variable _y0 + if { abs($_x0-$X) > ${::tkdnd::_dx} || abs($_y0-$Y) > ${::tkdnd::_dy} } { + set _state "done" + set _drop_target_widget {} + set _now_dragging 1 + set code [catch { + ::tkdnd::_init_drag $button $source $state $X $Y $x $y + } info options] + set _drop_target_widget {} + set _now_dragging 0 + if {$code != 0} { + ## Something strange occurred... + return -options $options $info + } + } + return -code break + } + set _state clear + } + press { + variable _x0; variable _y0 + set _x0 $X + set _y0 $Y + set _state "press" + } + reset { + set _state {} + } + } + if {$source eq $_drop_target_widget} {return -code break} + return -code continue +};# tkdnd::text::_begin_drag + +proc tkdnd::text::_TextAutoScan {w x y} { + variable _now_dragging + if {$_now_dragging} {return -code break} + return -code continue +};# tkdnd::text::_TextAutoScan diff --git a/tkinterdnd2/tkdnd/win64/tkdnd_windows.tcl b/tkinterdnd2/tkdnd/win64/tkdnd_windows.tcl new file mode 100644 index 0000000..a1d01f3 --- /dev/null +++ b/tkinterdnd2/tkdnd/win64/tkdnd_windows.tcl @@ -0,0 +1,167 @@ +# +# tkdnd_windows.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval olednd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + CF_UNICODETEXT DND_Text \ + CF_TEXT DND_Text \ + CF_HDROP DND_Files \ + UniformResourceLocator DND_URL \ + CF_HTML DND_HTML \ + {HTML Format} DND_HTML \ + CF_RTF DND_RTF \ + CF_RTFTEXT DND_RTF \ + {Rich Text Format} DND_RTF \ + ] + # FileGroupDescriptorW DND_Files \ + # FileGroupDescriptor DND_Files \ + + ## Mapping from TkDND types to platform types... + ::tkdnd::generic::initialise_tkdnd_to_platform_types [list \ + DND_Text {CF_UNICODETEXT CF_TEXT} \ + DND_Files {CF_HDROP} \ + DND_URL {UniformResourceLocator UniformResourceLocatorW} \ + DND_HTML {CF_HTML {HTML Format}} \ + DND_RTF {CF_RTF CF_RTFTEXT {Rich Text Format}} \ + ] + };# initialise + +};# namespace olednd + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragEnter +# ---------------------------------------------------------------------------- +proc olednd::HandleDragEnter { drop_target typelist actionlist pressedkeys + rootX rootY codelist { data {} } } { + ::tkdnd::generic::SetDroppedData $data + focus $drop_target + ::tkdnd::generic::HandleEnter $drop_target 0 $typelist \ + $codelist $actionlist $pressedkeys + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragEnter + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragOver +# ---------------------------------------------------------------------------- +proc olednd::HandleDragOver { drop_target pressedkeys rootX rootY } { + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragOver + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragLeave +# ---------------------------------------------------------------------------- +proc olednd::HandleDragLeave { drop_target } { + ::tkdnd::generic::HandleLeave + if {$::tkdnd::_auto_update} {update idletasks} +};# olednd::HandleDragLeave + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDrop +# ---------------------------------------------------------------------------- +proc olednd::HandleDrop { drop_target pressedkeys rootX rootY type data } { + ::tkdnd::generic::SetDroppedData [normalise_data $type $data] + set action [::tkdnd::generic::HandleDrop $drop_target {} \ + $pressedkeys $rootX $rootY 0] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command olednd::GetDataType +# ---------------------------------------------------------------------------- +proc olednd::GetDataType { drop_target typelist } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + lindex $common_drag_source_types 0 +};# olednd::GetDataType + +# ---------------------------------------------------------------------------- +# Command olednd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc olednd::GetDragSourceCommonTypes { drop_target } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# olednd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_types +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # olednd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_type +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # olednd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_independent_type +# ---------------------------------------------------------------------------- +proc olednd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # olednd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command olednd::normalise_data +# ---------------------------------------------------------------------------- +proc olednd::normalise_data { type data } { + switch [lindex [::tkdnd::generic::platform_independent_type $type] 0] { + DND_Text {return $data} + DND_Files {return $data} + DND_HTML {return [encoding convertfrom utf-8 $data]} + default {return $data} + } +}; # olednd::normalise_data From e3144bd8ce14c8937cf741afde39a8e649253559 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 15:47:28 -0600 Subject: [PATCH 038/100] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 38edd6a..5abc2c9 100644 --- a/README.md +++ b/README.md @@ -89,8 +89,6 @@ python VocalRemover.py - The "Stack Passes" option should only be used with the Stacked Model. This option allows you to set the amount of times you want a track to run through a model. The amount of times you need to run it through will vary greatly by track. Most tracks won't require any more than 2-5 passes. If you do 5 or more passes on a track you risk quality degradation. - Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. -``` - ## References - [1] Jansson et al., "Singing Voice Separation with Deep U-Net Convolutional Networks", https://ismir2017.smcnus.org/wp-content/uploads/2017/10/171_Paper.pdf - [2] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf From 2344e40db792141bd39279c89eca3fbda2be8e29 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 22:58:58 +0100 Subject: [PATCH 039/100] Attempt at fix for issue #19 --- VocalRemover.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VocalRemover.py b/VocalRemover.py index d6d0a0b..5f5da78 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -620,7 +620,7 @@ class MainWindow(TkinterDnD.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() - input_paths = self.inputPaths_var.get() + input_paths = list(self.inputPaths_var.get()) instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants From f0a2dbc3f62194f9db3b6de9f1fd61d8585cdb7e Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 23:18:20 +0100 Subject: [PATCH 040/100] Implemented Visual Fix for #21 --- VocalRemover.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/VocalRemover.py b/VocalRemover.py index 5f5da78..82a1c58 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -299,6 +299,7 @@ class MainWindow(TkinterDnD.Tk): self.aiModel_var = tk.StringVar(value=data['aiModel']) self.last_aiModel = self.aiModel_var.get() # Other + self.inputPathsEntry_var = tk.StringVar(value='') self.lastDir = data['lastDir'] # nopep8 self.progress_var = tk.IntVar(value=0) # Font @@ -313,6 +314,11 @@ class MainWindow(TkinterDnD.Tk): self.update_states() self.update_loop() + + # Display the multiple selected music files more visually understandable + self.inputPaths_var.trace_add('write', + lambda *args: self.inputPathsEntry_var.set('; '.join(list(self.inputPaths_var.get())))) + # -Widget Methods- def create_widgets(self): """Create window widgets""" @@ -396,7 +402,7 @@ class MainWindow(TkinterDnD.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - textvariable=self.inputPaths_var, + textvariable=self.inputPathsEntry_var, state=tk.DISABLED ) # -Place Widgets- From a7d1daa4bb4e2d4c5d3c3ea26a3473d2629f2401 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 21:56:35 -0600 Subject: [PATCH 041/100] Update README.md --- README.md | 61 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 5abc2c9..725091d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) -A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support in helping bring this project to life! +A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support and hard work in helping bring this project to life! ## Installation @@ -15,53 +15,56 @@ The application was made with Tkinter for cross platform compatibility, so this ### Install Required Applications & Packages 1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) (Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows) -2. Once Python has installed, open the Windows Command Prompt and run the following installs- +2. Once Python has installed, download Ultimate Vocal Remover GUI Version 4.1.0 here (link pending) +3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish (your documents folder is recommended for ease of access). +4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - ``` pip install --no-cache-dir -r requirements.txt pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html ``` -### Getting & Running the Vocal Remover GUI & Models +### Running the Vocal Remover GUI & Models -1. Download Ultimate Vocal Remover GUI Version 4.1.0 here -2. Place the UVR-V4GUI folder where ever you wish (I put mine in my documents folder) and open the file labeled "VocalRemover.py" (I recommend you create a shortcut for the file labeled "VocalRemover.py" to your desktop) -3. Open the application and proceed to the next section for more information +1. Open the file labeled *'VocalRemover.py'*. +2. It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. +3. If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. ## Option Guide ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. -- Please note - The TTA option and the ability to set the N_FFT value is not possible in the v2 AI engine as those are v4 options. +- **Please note** - The TTA option and the ability to set the N_FFT value are strictly **v4*** options. ### Model Selections: -- Choose Main Model - Here is where you choose the main model to convert your tracks with. -- Choose Stacked Model - These models are only meant to process converted tracks. Selecting the "Stack Passes" option will enable you to select a stacked model to run with the main model. If you wish to only run a stacked model on a track, make sure the "Stack Conversion Only" option is checked. -- Keep in mind the dropdown options change between upon choosing a new AI engine! +- **Choose Main Model** - Here is where you choose the main model to convert your tracks with. +- **Choose Stacked Model** - These models are meant to clean up vocal residue left over in the form of vocal pinches and static. The stacked models provided are only meant for instrumental outputs generated by a track that ran through one of the main models. Selecting the *'Stack Passes'* option will enable you to select a stacked model to run with the main model. If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only* option is checked. +- The v2 & v4 AI engines use different sets of models. The available models for each engine will automatically populate within the model selection dropdowns based on which engine was selected. ### Parameter Values: -All models released by me will have the values it was trained on appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values in the application, so please do not change the model files names. If there are no value appended to the end of the model, the defaults are set and the value field will be editable. The default values are - +All models released by me will have the values they were trained with appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values within the application, so please do not change the model files names. If there are no values appended to the end of a model, the value fields will be editable and auto-populate with default values. The default values are - -- SR - 44100 -- HOP LENGTH - 1024 -- WINDOW SIZE - 512 -- N_FFT - 2048 +- **SR** - 44100 +- **HOP LENGTH** - 1024 +- **WINDOW SIZE** - 512 +- **N_FFT** - 2048 ### Checkboxes: -- GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda) -- Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well -- TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note, this option is NOT compatible with the v2 AI engine. -- Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. -- Stack Passes - This option allows you to set the number of times you would like a track to run through a stacked model -- Stack Conversion Only - Selecting this will allow you to run a pair through the stacked model only. -- Model Test Mode - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will automatically generate a new folder with the name of the selected model in the "Save to" path you have chosen. The completed files will have the selected model name appended to it and be saved to the auto-generated folder. +- **GPU Conversion** - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). +- **Post-process** - This option can potentially identify left over instrumental artifacts in the vocal outputs. This option may improve the separation on some songs. I recommend only using it if conversions don't come out well. +- **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. However, having this selected will prolong the time it takes to complete a conversion. *Please note, this option is NOT compatible with the v2 AI engine.* +- **Output Image** - This option will include a spectrogram of the instrumental & vocal track outputs. +- **Stack Passes** - This option allows you to set the number of times you would like a track to run through a stacked model. +- **Stack Conversion Only** - Selecting this will allow you to bypass the main model and run a track through a stacked model only. +- **Save All Stacked Outputs** - Having this selected during stacked conversions will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of outputs will depend on how many stack passes you chose. +- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. The instrumental & vocal outputs will have the selected model(s) name(s) appended to them and save to the auto-generated directory. ### Other Buttons: -- Add New Model - This button will automatically take you to the models folder. If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! All new models added will automatically be detected without having to restart the application. +- **Add New Model** - This button will automatically take you to the models folder. If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! All new models added will automatically be detected without having to restart the application. - Restart Button - If the application hangs for any reason you can hit the circular arrow button immediately to the right of the "Start Conversion" button. ## Models Included: @@ -70,23 +73,25 @@ Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS - (Pending) +A special thank you to aufr33 for helping expand the dataset and dilligent advice! + ## Troubleshooting: -- If the VocalRemover.py file won't open under any circumstances and you have exhausted all other resources, please do the following - +- If the VocalRemover.py file won't open *under any circumstances* and you have exhausted all other resources, please do the following - 1. Open the cmd prompt from the UVR-V4GUI directory 2. Run the following command - ``` python VocalRemover.py ``` -3. Copy and paste the error in the cmd prompt to the issues center here on my GitHub. +3. Copy and paste the error in the cmd prompt to the issues center on the GitHub repository. ## Other GUI Notes: -- The application will automatically remember your "save to" path upon closing and reopening until you change it +- The application will automatically remember your *'save to'* path upon closing and reopening until you change it - You can select as many files as you like. Multiple conversions are supported! -- The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. They are only meant for instrumentals created via converted tracks previously run through one of the main models! -- The "Stack Passes" option should only be used with the Stacked Model. This option allows you to set the amount of times you want a track to run through a model. The amount of times you need to run it through will vary greatly by track. Most tracks won't require any more than 2-5 passes. If you do 5 or more passes on a track you risk quality degradation. +- The ability to drag & drop files to convert has also been added. +- The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. The stacked models provided are only meant for instrumental outputs from track run through one of the main models. - Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. ## References From 9604782f38e581789344dcd3be39f09cb48a74b7 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 22:02:53 -0600 Subject: [PATCH 042/100] Update README.md --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 725091d..cb25aa4 100644 --- a/README.md +++ b/README.md @@ -65,30 +65,32 @@ All models released by me will have the values they were trained with appended t ### Other Buttons: - **Add New Model** - This button will automatically take you to the models folder. If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! All new models added will automatically be detected without having to restart the application. -- Restart Button - If the application hangs for any reason you can hit the circular arrow button immediately to the right of the "Start Conversion" button. +- **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. ## Models Included: -Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS LISTED AS THE PARAMETERS ARE SPECIFIED IN THE FILENAMES!): +***PLEASE NOTE: Please do not change the name of the models provided! The required perameters are specified in the filenames.*** -- (Pending) +Here's a list of the models included within the package - -A special thank you to aufr33 for helping expand the dataset and dilligent advice! +- *(list pending)* + +A special thank you to aufr33 for helping expand the dataset used to train these models and for the dilligent advice! ## Troubleshooting: -- If the VocalRemover.py file won't open *under any circumstances* and you have exhausted all other resources, please do the following - +- If the VocalRemover.py file won't open *under any circumstances* and all other resources have been exhausted, please do the following - 1. Open the cmd prompt from the UVR-V4GUI directory 2. Run the following command - ``` python VocalRemover.py ``` -3. Copy and paste the error in the cmd prompt to the issues center on the GitHub repository. +3. Copy and paste the error output in the cmd prompt to the issues center on the GitHub repository. ## Other GUI Notes: -- The application will automatically remember your *'save to'* path upon closing and reopening until you change it +- The application will automatically remember your *'save to'* path upon closing and reopening until you change it. - You can select as many files as you like. Multiple conversions are supported! - The ability to drag & drop files to convert has also been added. - The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. The stacked models provided are only meant for instrumental outputs from track run through one of the main models. From ae5c26a5b37a91976df1d00caf989f6c21775b18 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 22:03:42 -0600 Subject: [PATCH 043/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cb25aa4..4a89749 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Parameter Values: -All models released by me will have the values they were trained with appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values within the application, so please do not change the model files names. If there are no values appended to the end of a model, the value fields will be editable and auto-populate with default values. The default values are - +All models released here will have the values they were trained with appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values within the application, so please do not change the model files names. If there are no values appended to the end of a model, the value fields will be editable and auto-populate with default values. The default values are - - **SR** - 44100 - **HOP LENGTH** - 1024 From fe4c7c15dfa504e2e5e493d315229b787ec76392 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 22:07:48 -0600 Subject: [PATCH 044/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a89749..5c870f1 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ All models released here will have the values they were trained with appended to - **Output Image** - This option will include a spectrogram of the instrumental & vocal track outputs. - **Stack Passes** - This option allows you to set the number of times you would like a track to run through a stacked model. - **Stack Conversion Only** - Selecting this will allow you to bypass the main model and run a track through a stacked model only. -- **Save All Stacked Outputs** - Having this selected during stacked conversions will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of outputs will depend on how many stack passes you chose. +- **Save All Stacked Outputs** - If you are performing a stacked conversion, having this option selected will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of outputs will depend on how many stack passes you chose. - **Model Test Mode** - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. The instrumental & vocal outputs will have the selected model(s) name(s) appended to them and save to the auto-generated directory. ### Other Buttons: From 7b8def7d690caad407647c7d2ba86362104b746a Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 01:05:00 -0600 Subject: [PATCH 045/100] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5c870f1..03cf42f 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,11 @@ This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) -A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support and hard work in helping bring this project to life! +A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for helping bring this project to life, your hard work is greatly appreciated. ## Installation -The application was made with Tkinter for cross platform compatibility, so this should work with Windows, Mac, and Linux systems. I've only personally tested this on Windows 10 & Linux Ubuntu. +The application was made with Tkinter for cross platform compatibility, so this should work with Windows, Mac, and Linux systems. This application has only been tested on Windows 10 & Linux Ubuntu. ### Install Required Applications & Packages @@ -27,15 +27,15 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Running the Vocal Remover GUI & Models 1. Open the file labeled *'VocalRemover.py'*. -2. It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. -3. If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. + - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. + - If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. ## Option Guide ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. -- **Please note** - The TTA option and the ability to set the N_FFT value are strictly **v4*** options. + - **Please note**, The TTA option and the ability to set the N_FFT value are strictly **v4*** options. ### Model Selections: From 67f95cfcaf8fca6ce0296ed4ac19e4b322155387 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 02:19:02 -0600 Subject: [PATCH 046/100] Update README.md --- README.md | 73 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 03cf42f..3043a8a 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,11 @@ The application was made with Tkinter for cross platform compatibility, so this ### Install Required Applications & Packages -1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) (Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows) +1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) + - Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows 2. Once Python has installed, download Ultimate Vocal Remover GUI Version 4.1.0 here (link pending) -3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish (your documents folder is recommended for ease of access). +3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. + - Your documents folder is recommended for ease of access. 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - ``` @@ -27,8 +29,8 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Running the Vocal Remover GUI & Models 1. Open the file labeled *'VocalRemover.py'*. - - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - - If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. + - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. + - If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. ## Option Guide @@ -39,32 +41,55 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Model Selections: +The v2 & v4 AI engines use different sets of models. The available models for each engine will automatically populate within the model selection dropdowns based on which engine was selected. + - **Choose Main Model** - Here is where you choose the main model to convert your tracks with. -- **Choose Stacked Model** - These models are meant to clean up vocal residue left over in the form of vocal pinches and static. The stacked models provided are only meant for instrumental outputs generated by a track that ran through one of the main models. Selecting the *'Stack Passes'* option will enable you to select a stacked model to run with the main model. If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only* option is checked. -- The v2 & v4 AI engines use different sets of models. The available models for each engine will automatically populate within the model selection dropdowns based on which engine was selected. + - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. + - The variety of models allows the user the chance to determine which one works best for the type of music they're converting. + - The *'Model Test Option'* will allow the user to more easily determine which model is best for the track(s) being converted. +- **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. + - The stacked models provided are only meant to process instrumental outputs created by a main model. + - Selecting the *'Stack Passes'* option will enable you to select a stacked model to run with the main model. + - If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only'* option is checked. + - The varying main model/stacked model combination options allows the user more flexibility in finding what blend works best for the track(s) they are proessing. + - To reiterate, the *'Model Test Option'* makes testing different model blends easier on the user, that's what it is there for. ### Parameter Values: -All models released here will have the values they were trained with appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values within the application, so please do not change the model files names. If there are no values appended to the end of a model, the value fields will be editable and auto-populate with default values. The default values are - +All models released here will have the values they were trained with appended to the end of their filenames like so, **'MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth'**. The *'_sr44100_hl512_w512_nf2048'* portion automatically sets the *SR*, *HOP LENGNTH*, *WINDOW SIZE*, & *N_FFT* values within the application, so please do not change the model files names. If there are no values appended to the end of the models' filename, the value fields will be editable and auto-populate with default values. -- **SR** - 44100 -- **HOP LENGTH** - 1024 -- **WINDOW SIZE** - 512 -- **N_FFT** - 2048 +- **Default Values:** + - **SR** - 44100 + - **HOP LENGTH** - 1024 + - **WINDOW SIZE** - 512 + - **N_FFT** - 2048 ### Checkboxes: -- **GPU Conversion** - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). -- **Post-process** - This option can potentially identify left over instrumental artifacts in the vocal outputs. This option may improve the separation on some songs. I recommend only using it if conversions don't come out well. -- **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. However, having this selected will prolong the time it takes to complete a conversion. *Please note, this option is NOT compatible with the v2 AI engine.* -- **Output Image** - This option will include a spectrogram of the instrumental & vocal track outputs. -- **Stack Passes** - This option allows you to set the number of times you would like a track to run through a stacked model. -- **Stack Conversion Only** - Selecting this will allow you to bypass the main model and run a track through a stacked model only. -- **Save All Stacked Outputs** - If you are performing a stacked conversion, having this option selected will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of outputs will depend on how many stack passes you chose. -- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. The instrumental & vocal outputs will have the selected model(s) name(s) appended to them and save to the auto-generated directory. +- **GPU Conversion** - Seclecting this option ensures the GPU is used for conversions. + - NOTE: It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). +- **Post-process** - This option can potentially identify left over instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. + - NOTE: Having this option selected can have an adverse effect on the conversion process, depending on the track. Because of this, it's recommended as a last resort. +- **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. + - Having this selected will increase the time it takes to complete a conversion. + - This option is NOT compatible with the v2 AI engine. +- **Output Image** - Selecting this option will include the spectrograms of the instrumental & vocal track audio outputs. +- **Stack Passes** - This option allows the user to set the number of times a track is to run through a stacked model. + - The best range is 3-5 passes, anymore can cause quality degradation of the track. +- **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. +- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. + - Each output filename will be appended with the number of passes it has had. + - For example, if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. + - This option can be very useful in determining the optimal number of passes needed to clean a track. +- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. + - When this option is selected the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. + - The instrumental & vocal outputs filenames will have the selected model(s) name(s) appended to them and save to the auto-generated directory. ### Other Buttons: -- **Add New Model** - This button will automatically take you to the models folder. If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! All new models added will automatically be detected without having to restart the application. +- **Add New Model** - This button will automatically take you to the models folder. + - If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! + - If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. + - The application will automatically detect any models added without having to restart the application. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. ## Models Included: @@ -79,7 +104,7 @@ A special thank you to aufr33 for helping expand the dataset used to train these ## Troubleshooting: -- If the VocalRemover.py file won't open *under any circumstances* and all other resources have been exhausted, please do the following - +- If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - 1. Open the cmd prompt from the UVR-V4GUI directory 2. Run the following command - @@ -91,9 +116,9 @@ python VocalRemover.py ## Other GUI Notes: - The application will automatically remember your *'save to'* path upon closing and reopening until you change it. -- You can select as many files as you like. Multiple conversions are supported! -- The ability to drag & drop files to convert has also been added. -- The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. The stacked models provided are only meant for instrumental outputs from track run through one of the main models. + - It will also remember the last directory you accessed to select music. +- Multiple conversions are supported. +- The ability to drag & drop audio files to convert has also been added. - Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. ## References From 53fa654ca072c534d8008c4e7655c567caabea12 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 03:21:11 -0600 Subject: [PATCH 047/100] Update README.md --- README.md | 54 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 3043a8a..2192482 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ # Ultimate Vocal Remover GUI v4.0.0 + +![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) -![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) +## About -This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) +This application is a GUI version of the vocal remover AI's created and posted by GitHub user tsurumeso. You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover). Please note that we do not maintain or directly support any of tsurumesos AI application code. Direct support and development for the **Ultimate Vocal Remover GUI** is only maintained within this repository. -A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for helping bring this project to life, your hard work is greatly appreciated. +- **Special Thanks** + - [tsurumeso](https://github.com/tsurumeso) - The engeneer who authored the AI code. Thank you for the hard work and dedication put into the AI application this GUI is built around! + - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor, thank you for helping bring this GUI to life, your hard work and continued support is greatly appreciated! ## Installation @@ -14,9 +18,9 @@ The application was made with Tkinter for cross platform compatibility, so this ### Install Required Applications & Packages -1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) - - Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows -2. Once Python has installed, download Ultimate Vocal Remover GUI Version 4.1.0 here (link pending) +1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe) (Windows link) + - Ensure the *"Add Python 3.7 to PATH"* box is checked +2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.1.0** here (link pending) 3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. - Your documents folder is recommended for ease of access. 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - @@ -28,9 +32,9 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Running the Vocal Remover GUI & Models -1. Open the file labeled *'VocalRemover.py'*. - - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - - If you are having issues opening the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. +- Open the file labeled *'VocalRemover.py'*. + - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. + - If you are unabled to open the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. ## Option Guide @@ -54,7 +58,7 @@ The v2 & v4 AI engines use different sets of models. The available models for ea - The varying main model/stacked model combination options allows the user more flexibility in finding what blend works best for the track(s) they are proessing. - To reiterate, the *'Model Test Option'* makes testing different model blends easier on the user, that's what it is there for. -### Parameter Values: +### Parameter Values All models released here will have the values they were trained with appended to the end of their filenames like so, **'MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth'**. The *'_sr44100_hl512_w512_nf2048'* portion automatically sets the *SR*, *HOP LENGNTH*, *WINDOW SIZE*, & *N_FFT* values within the application, so please do not change the model files names. If there are no values appended to the end of the models' filename, the value fields will be editable and auto-populate with default values. @@ -64,7 +68,7 @@ All models released here will have the values they were trained with appended to - **WINDOW SIZE** - 512 - **N_FFT** - 2048 -### Checkboxes: +### Checkboxes - **GPU Conversion** - Seclecting this option ensures the GPU is used for conversions. - NOTE: It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). - **Post-process** - This option can potentially identify left over instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. @@ -92,7 +96,7 @@ All models released here will have the values they were trained with appended to - The application will automatically detect any models added without having to restart the application. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. -## Models Included: +## Models Included ***PLEASE NOTE: Please do not change the name of the models provided! The required perameters are specified in the filenames.*** @@ -102,7 +106,15 @@ Here's a list of the models included within the package - A special thank you to aufr33 for helping expand the dataset used to train these models and for the dilligent advice! -## Troubleshooting: +## Other GUI Notes + +- The application will automatically remember your *'save to'* path upon closing and reopening until you change it. + - It will also remember the last directory you accessed to select files to be processed. +- Multiple conversions are supported. +- The ability to drag & drop audio files to convert has also been added. +- Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. We are not responsible for for any hardware damage. + +## Troubleshooting - If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - @@ -113,15 +125,13 @@ python VocalRemover.py ``` 3. Copy and paste the error output in the cmd prompt to the issues center on the GitHub repository. -## Other GUI Notes: +## License -- The application will automatically remember your *'save to'* path upon closing and reopening until you change it. - - It will also remember the last directory you accessed to select music. -- Multiple conversions are supported. -- The ability to drag & drop audio files to convert has also been added. -- Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. +The **Ultimate Vocal Remover GUI** code is [MIT-licensed](LICENSE). + +## Contributing + +For anyone interested in the ongoing develpment of **Ultimate Vocal Remover GUI** please send us a pull request and we will review it. This project is 100% open-source and free for anyone to use and/or modify as they wish. ## References -- [1] Jansson et al., "Singing Voice Separation with Deep U-Net Convolutional Networks", https://ismir2017.smcnus.org/wp-content/uploads/2017/10/171_Paper.pdf -- [2] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf -- [3] Liutkus et al., "The 2016 Signal Separation Evaluation Campaign", Latent Variable Analysis and Signal Separation - 12th International Conference +- [1] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf From 259f7a3c3e77e18b0fa32640e97fae150e0820f1 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 03:23:26 -0600 Subject: [PATCH 048/100] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2192482..7ebd5d8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Ultimate Vocal Remover GUI v4.0.0 -![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) + + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 3127c1f06b3296c06105c1d91d3525f6272fba80 Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Tue, 10 Nov 2020 10:27:28 +0100 Subject: [PATCH 049/100] Revert Drag & Drop feature --- VocalRemover.py | 176 +++++++++++++++--------------------------------- 1 file changed, 55 insertions(+), 121 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index 82a1c58..ea811e1 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -4,7 +4,6 @@ import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import tkinter.font -from tkinterdnd2 import TkinterDnD, DND_FILES # Enable Drag & Drop from datetime import datetime # Images from PIL import Image @@ -94,7 +93,6 @@ def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: def save_data(data): """ Saves given data as a .pkl (pickle) file - Paramters: data(dict): Dictionary containing all the necessary data to save @@ -107,7 +105,6 @@ def save_data(data): def load_data() -> dict: """ Loads saved pkl file and returns the stored data - Returns(dict): Dictionary containing all the saved data """ @@ -169,30 +166,6 @@ def get_model_values(model_name): return model_values -def drop(var, event, accept_mode: str = 'files'): - """ - Drag & Drop verification process - """ - path = event.data - - if accept_mode == 'folder': - path = path.replace('{', '').replace('}', '') - if not os.path.isdir(path): - tk.messagebox.showerror(title='Invalid Folder', - message='Your given export path is not a valid folder!') - return - elif accept_mode == 'files': - # Clean path text and set path to the list of paths - path = path[:-1] - path = path.replace('{', '') - path = path.split('} ') - else: - # Invalid accept mode - return - - var.set(path) - - class ThreadSafeConsole(tk.Text): """ Text Widget which is thread safe for tkinter @@ -226,7 +199,7 @@ class ThreadSafeConsole(tk.Text): self.after(100, self.update_me) -class MainWindow(TkinterDnD.Tk): +class MainWindow(tk.Tk): # --Constants-- # Layout IMAGE_HEIGHT = 140 @@ -258,7 +231,6 @@ class MainWindow(TkinterDnD.Tk): xpad=int(self.winfo_screenwidth()/2 - 550/2), ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) self.configure(bg='#000000') # Set background color to black - self.protocol("WM_DELETE_WINDOW", self.save_values) self.resizable(False, False) self.update() @@ -275,7 +247,7 @@ class MainWindow(TkinterDnD.Tk): data = load_data() # Paths self.exportPath_var = tk.StringVar(value=data['export_path']) - self.inputPaths_var = tk.StringVar(value='') + self.inputPaths = [] # Processing Options self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) @@ -299,7 +271,6 @@ class MainWindow(TkinterDnD.Tk): self.aiModel_var = tk.StringVar(value=data['aiModel']) self.last_aiModel = self.aiModel_var.get() # Other - self.inputPathsEntry_var = tk.StringVar(value='') self.lastDir = data['lastDir'] # nopep8 self.progress_var = tk.IntVar(value=0) # Font @@ -307,18 +278,12 @@ class MainWindow(TkinterDnD.Tk): # --Widgets-- self.create_widgets() self.configure_widgets() - self.bind_widgets() self.place_widgets() self.update_available_models() self.update_states() self.update_loop() - - # Display the multiple selected music files more visually understandable - self.inputPaths_var.trace_add('write', - lambda *args: self.inputPathsEntry_var.set('; '.join(list(self.inputPaths_var.get())))) - # -Widget Methods- def create_widgets(self): """Create window widgets""" @@ -354,21 +319,6 @@ class MainWindow(TkinterDnD.Tk): font=self.font, foreground='white') ttk.Style().configure('T', font=self.font, foreground='white') - def bind_widgets(self): - """Bind widgets to the drag & drop mechanic""" - self.filePaths_saveTo_Button.drop_target_register(DND_FILES) - self.filePaths_saveTo_Entry.drop_target_register(DND_FILES) - self.filePaths_musicFile_Button.drop_target_register(DND_FILES) - self.filePaths_musicFile_Entry.drop_target_register(DND_FILES) - self.filePaths_saveTo_Button.dnd_bind('<>', - lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) - self.filePaths_saveTo_Entry.dnd_bind('<>', - lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) - self.filePaths_musicFile_Button.dnd_bind('<>', - lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) - self.filePaths_musicFile_Entry.dnd_bind('<>', - lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) - def place_widgets(self): """Place main widgets""" self.title_Label.place(x=-2, y=-2) @@ -402,7 +352,7 @@ class MainWindow(TkinterDnD.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - textvariable=self.inputPathsEntry_var, + text=self.inputPaths, state=tk.DISABLED ) # -Place Widgets- @@ -605,7 +555,13 @@ class MainWindow(TkinterDnD.Tk): initialdir=self.lastDir, ) if paths: # Path selected - self.inputPaths_var.set(paths) + self.inputPaths = paths + # Change the entry text + self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) + self.filePaths_musicFile_Entry.delete(0, tk.END) + self.filePaths_musicFile_Entry.insert(0, self.inputPaths) + self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) + self.lastDir = os.path.dirname(paths[0]) def open_export_filedialog(self): @@ -626,7 +582,6 @@ class MainWindow(TkinterDnD.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() - input_paths = list(self.inputPaths_var.get()) instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants @@ -656,13 +611,12 @@ class MainWindow(TkinterDnD.Tk): return # -Check for invalid inputs- - for path in input_paths: - if not os.path.isfile(path): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file! Please make sure that the file still exists!', - detail=f'File path: {path}') - return + if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) + for path in self.inputPaths]): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') + return if not os.path.isdir(export_path): tk.messagebox.showwarning(master=self, title='Invalid Export Directory', @@ -682,6 +636,27 @@ class MainWindow(TkinterDnD.Tk): message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') return + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': stackPasses, + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': 'instrumental', # Always instrumental + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + if self.aiModel_var.get() == 'v2': inference = inference_v2 elif self.aiModel_var.get() == 'v4': @@ -693,7 +668,7 @@ class MainWindow(TkinterDnD.Tk): threading.Thread(target=inference.main, kwargs={ # Paths - 'input_paths': input_paths, + 'input_paths': self.inputPaths, 'export_path': export_path, # Processing Options 'gpu': 0 if self.gpuConversion_var.get() else -1, @@ -749,19 +724,20 @@ class MainWindow(TkinterDnD.Tk): # Loop through each constant (key) and its widgets for key, (widget, var) in widgetsVars.items(): if stacked_selectable: - if instrumental_selectable: - if (key in instrumental.keys() and - key in stacked.keys()): - # Both models have set constants - widget.configure(state=tk.DISABLED) - var.set('%d/%d' % (instrumental[key], stacked[key])) - continue - else: - if key in stacked.keys(): + # Stacked model can be selected + if key in stacked.keys(): + if (key in stacked.keys() and + not instrumental_selectable): # Only stacked selectable widget.configure(state=tk.DISABLED) var.set(stacked[key]) continue + elif (key in instrumental.keys() and + instrumental_selectable): + # Both models have set constants + widget.configure(state=tk.DISABLED) + var.set('%d/%d' % (instrumental[key], stacked[key])) + continue else: # Stacked model can not be selected if (key in instrumental.keys() and @@ -859,6 +835,7 @@ class MainWindow(TkinterDnD.Tk): # Instrumental Model self.options_instrumentalModel_Label.configure(foreground='#000') self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + self.instrumentalModel_var.set('') # Stack Model if stackLoops > 0: @@ -906,57 +883,14 @@ class MainWindow(TkinterDnD.Tk): """ Restart the application after asking for confirmation """ - save = tk.messagebox.askyesno(title='Confirmation', - message='The application will restart. Do you want to save the data?') - if save: - self.save_values() - subprocess.Popen(f'python "{__file__}"', shell=True) - exit() - - def save_values(self): - """ - Save the data of the application - """ - export_path = self.exportPath_var.get() - # Get constants - instrumental = get_model_values(self.instrumentalModel_var.get()) - stacked = get_model_values(self.stackedModel_var.get()) - if [bool(instrumental), bool(stacked)].count(True) == 2: - sr = DEFAULT_DATA['sr'] - hop_length = DEFAULT_DATA['hop_length'] - window_size = DEFAULT_DATA['window_size'] - n_fft = DEFAULT_DATA['n_fft'] - else: - sr = self.srValue_var.get() - hop_length = self.hopValue_var.get() - window_size = self.winSize_var.get() - n_fft = self.nfft_var.get() - - # -Save Data- - save_data(data={ - 'export_path': export_path, - 'gpu': self.gpuConversion_var.get(), - 'postprocess': self.postprocessing_var.get(), - 'tta': self.tta_var.get(), - 'output_image': self.outputImage_var.get(), - 'stack': self.stack_var.get(), - 'stackOnly': self.stackOnly_var.get(), - 'stackPasses': self.stackLoops_var.get(), - 'saveAllStacked': self.saveAllStacked_var.get(), - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'n_fft': n_fft, - 'useModel': 'instrumental', - 'lastDir': self.lastDir, - 'modelFolder': self.modelFolder_var.get(), - 'aiModel': self.aiModel_var.get(), - }) - - self.destroy() + proceed = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart and lose unsaved data. Do you wish to proceed?') + if proceed: + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() if __name__ == "__main__": root = MainWindow() - root.mainloop() + root.mainloop() \ No newline at end of file From 12d0f1a733833b501562502f8767a0abd253df74 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 03:46:17 -0600 Subject: [PATCH 050/100] Update README.md --- README.md | 49 ++++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 7ebd5d8..400af94 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,12 @@ This application is a GUI version of the vocal remover AI's created and posted by GitHub user tsurumeso. You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover). Please note that we do not maintain or directly support any of tsurumesos AI application code. Direct support and development for the **Ultimate Vocal Remover GUI** is only maintained within this repository. - **Special Thanks** - - [tsurumeso](https://github.com/tsurumeso) - The engeneer who authored the AI code. Thank you for the hard work and dedication put into the AI application this GUI is built around! + - [tsurumeso](https://github.com/tsurumeso) - The engineer who authored the AI code. Thank you for the hard work and dedication put into the AI application this GUI is built around! - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor, thank you for helping bring this GUI to life, your hard work and continued support is greatly appreciated! ## Installation -The application was made with Tkinter for cross platform compatibility, so this should work with Windows, Mac, and Linux systems. This application has only been tested on Windows 10 & Linux Ubuntu. +The application was made with Tkinter for cross-platform compatibility, so this should work with Windows, Mac, and Linux systems. This application has only been tested on Windows 10 & Linux Ubuntu. ### Install Required Applications & Packages @@ -35,14 +35,14 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - - If you are unabled to open the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. + - If you are unable to open the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. ## Option Guide ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. - - **Please note**, The TTA option and the ability to set the N_FFT value are strictly **v4*** options. + - **Please note**, The TTA option and the ability to set the N_FFT value is only available for the v4 engine. ### Model Selections: @@ -70,18 +70,18 @@ All models released here will have the values they were trained with appended to - **N_FFT** - 2048 ### Checkboxes -- **GPU Conversion** - Seclecting this option ensures the GPU is used for conversions. +- **GPU Conversion** - Selecting this option ensures the GPU is used for conversions. - NOTE: It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). -- **Post-process** - This option can potentially identify left over instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. - - NOTE: Having this option selected can have an adverse effect on the conversion process, depending on the track. Because of this, it's recommended as a last resort. +- **Post-process** - This option can potentially identify leftover instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. + - **NOTE:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. - **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. - Having this selected will increase the time it takes to complete a conversion. - - This option is NOT compatible with the v2 AI engine. -- **Output Image** - Selecting this option will include the spectrograms of the instrumental & vocal track audio outputs. + - This option is ***not*** compatible with the *v2 AI engine*. +- **Output Image** - Selecting this option will include the images of the spectrograms for the instrumental & vocal audio outputs. - **Stack Passes** - This option allows the user to set the number of times a track is to run through a stacked model. - - The best range is 3-5 passes, anymore can cause quality degradation of the track. + - The best range is 3-5 passes, any more than 5 can cause quality degradation of the track. - **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. -- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to your *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. +- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to the *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. - Each output filename will be appended with the number of passes it has had. - For example, if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. - This option can be very useful in determining the optimal number of passes needed to clean a track. @@ -93,19 +93,29 @@ All models released here will have the values they were trained with appended to - **Add New Model** - This button will automatically take you to the models folder. - If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! - - If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. - - The application will automatically detect any models added without having to restart the application. + - For example, if you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. + - The application will automatically detect any models added the correct directories without needing a restart. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. ## Models Included -***PLEASE NOTE: Please do not change the name of the models provided! The required perameters are specified in the filenames.*** +**PLEASE NOTE:** Do not change the name of the models provided! The required parameters are specified and appended to the end of the filenames. -Here's a list of the models included within the package - +Here's a list of the models included within the package - -- *(list pending)* +- **v2 AI Engine** + - **Main Models** + - *(list pending)* + - **Stacked Models** + - *(list pending)* + +- **v4 AI Engine** + - **Main Models** + - *(list pending)* + - **Stacked Models** + - *(list pending)* -A special thank you to aufr33 for helping expand the dataset used to train these models and for the dilligent advice! +A special thank you to aufr33 for helping me expand the dataset used to train these models and for the helpful training tips. ## Other GUI Notes @@ -113,7 +123,8 @@ A special thank you to aufr33 for helping expand the dataset used to train these - It will also remember the last directory you accessed to select files to be processed. - Multiple conversions are supported. - The ability to drag & drop audio files to convert has also been added. -- Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. We are not responsible for for any hardware damage. +- Conversion times will greatly depend on your hardware. + - This application will *not* be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. ***We are not responsible for any hardware damage.*** ## Troubleshooting @@ -132,7 +143,7 @@ The **Ultimate Vocal Remover GUI** code is [MIT-licensed](LICENSE). ## Contributing -For anyone interested in the ongoing develpment of **Ultimate Vocal Remover GUI** please send us a pull request and we will review it. This project is 100% open-source and free for anyone to use and/or modify as they wish. +For anyone interested in the ongoing development of **Ultimate Vocal Remover GUI** please send us a pull request and we will review it. This project is 100% open-source and free for anyone to use and/or modify as they wish. ## References - [1] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf From a3e445c656d2e07ade9d4bb01e06752add736a56 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 03:55:40 -0600 Subject: [PATCH 051/100] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 400af94..d4ab186 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. - - **Please note**, The TTA option and the ability to set the N_FFT value is only available for the v4 engine. + - **Please note:** The TTA option and the ability to set the N_FFT value is only available for the v4 engine. ### Model Selections: @@ -50,14 +50,14 @@ The v2 & v4 AI engines use different sets of models. The available models for ea - **Choose Main Model** - Here is where you choose the main model to convert your tracks with. - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. - - The variety of models allows the user the chance to determine which one works best for the type of music they're converting. - - The *'Model Test Option'* will allow the user to more easily determine which model is best for the track(s) being converted. + - The variety of models gives the user the chance to determine which one works best for whatever type of music they're converting. + - The [*'Model Test Option'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes it easier for the user to compare and determine which model is best for the track(s) being processed. - **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. - The stacked models provided are only meant to process instrumental outputs created by a main model. - - Selecting the *'Stack Passes'* option will enable you to select a stacked model to run with the main model. + - Selecting the [*'Stack Passes'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option will enable you to select a stacked model to run with the main model. - If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only'* option is checked. - The varying main model/stacked model combination options allows the user more flexibility in finding what blend works best for the track(s) they are proessing. - - To reiterate, the *'Model Test Option'* makes testing different model blends easier on the user, that's what it is there for. + - To reiterate, the [*'Model Test Option'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes testing and comparing different model blends easier on the user. ### Parameter Values From 0c90111018ad24b8803a6fa84fb38c9f8414204d Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 03:59:02 -0600 Subject: [PATCH 052/100] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d4ab186..45b86e3 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ The application was made with Tkinter for cross-platform compatibility, so this 1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe) (Windows link) - Ensure the *"Add Python 3.7 to PATH"* box is checked -2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.1.0** here (link pending) +2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.0.0** here (link pending) 3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. - Your documents folder is recommended for ease of access. 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - @@ -35,7 +35,7 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - - If you are unable to open the *'VocalRemover.py'* file, please go to the **troubleshooting** section below. + - If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. ## Option Guide @@ -128,7 +128,7 @@ A special thank you to aufr33 for helping me expand the dataset used to train th ## Troubleshooting -- If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - +If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - 1. Open the cmd prompt from the UVR-V4GUI directory 2. Run the following command - From 6693a39219e3b47e67cf1fb15018ec4c6edc05f1 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 04:02:35 -0600 Subject: [PATCH 053/100] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 45b86e3..c5401dc 100644 --- a/README.md +++ b/README.md @@ -51,13 +51,13 @@ The v2 & v4 AI engines use different sets of models. The available models for ea - **Choose Main Model** - Here is where you choose the main model to convert your tracks with. - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. - The variety of models gives the user the chance to determine which one works best for whatever type of music they're converting. - - The [*'Model Test Option'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes it easier for the user to compare and determine which model is best for the track(s) being processed. + - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes it easier for the user to compare and determine which model is best for the track(s) being processed. - **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. - The stacked models provided are only meant to process instrumental outputs created by a main model. - Selecting the [*'Stack Passes'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option will enable you to select a stacked model to run with the main model. - If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only'* option is checked. - The varying main model/stacked model combination options allows the user more flexibility in finding what blend works best for the track(s) they are proessing. - - To reiterate, the [*'Model Test Option'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes testing and comparing different model blends easier on the user. + - To reiterate, the [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes testing and comparing different model blends easier on the user. ### Parameter Values @@ -71,7 +71,7 @@ All models released here will have the values they were trained with appended to ### Checkboxes - **GPU Conversion** - Selecting this option ensures the GPU is used for conversions. - - NOTE: It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). + - **NOTE:** This option will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). - **Post-process** - This option can potentially identify leftover instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. - **NOTE:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. - **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. @@ -83,7 +83,7 @@ All models released here will have the values they were trained with appended to - **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. - **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to the *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. - Each output filename will be appended with the number of passes it has had. - - For example, if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. + - **Example:** if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. - This option can be very useful in determining the optimal number of passes needed to clean a track. - **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. - When this option is selected the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. @@ -93,7 +93,7 @@ All models released here will have the values they were trained with appended to - **Add New Model** - This button will automatically take you to the models folder. - If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! - - For example, if you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. + - **Example:** If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. - The application will automatically detect any models added the correct directories without needing a restart. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. From 4b13ac9989471f3d53215bd9ca32df73c6edf238 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 11:22:36 +0100 Subject: [PATCH 054/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c5401dc..dad52de 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 1a0b7e9b5ba9a45cfd60a7d5297120352fc7352b Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 11:23:17 +0100 Subject: [PATCH 055/100] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dad52de..a0402e0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Ultimate Vocal Remover GUI v4.0.0 - - - +

[![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 7ffaf2a97985090544c5cf9d86d18d11c0e9704c Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 11:23:47 +0100 Subject: [PATCH 056/100] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index a0402e0..8f62201 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 -
-
[![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From a4a1554fa538cff68420e3e8c188a055973264d3 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 11:24:09 +0100 Subject: [PATCH 057/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f62201..b1c7ef5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From a6696ccf52004f52586f3f10741cea36c6c9cc42 Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Tue, 10 Nov 2020 11:51:26 +0100 Subject: [PATCH 058/100] Fixed Entry not being filled on music file selection --- VocalRemover.py | 169 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 117 insertions(+), 52 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index ea811e1..01a79f3 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -4,6 +4,7 @@ import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import tkinter.font +from tkinterdnd2 import TkinterDnD, DND_FILES # Enable Drag & Drop from datetime import datetime # Images from PIL import Image @@ -93,6 +94,7 @@ def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: def save_data(data): """ Saves given data as a .pkl (pickle) file + Paramters: data(dict): Dictionary containing all the necessary data to save @@ -105,6 +107,7 @@ def save_data(data): def load_data() -> dict: """ Loads saved pkl file and returns the stored data + Returns(dict): Dictionary containing all the saved data """ @@ -166,6 +169,33 @@ def get_model_values(model_name): return model_values +def drop(event, accept_mode: str = 'files'): + """ + Drag & Drop verification process + """ + path = event.data + + if accept_mode == 'folder': + path = path.replace('{', '').replace('}', '') + if not os.path.isdir(path): + tk.messagebox.showerror(title='Invalid Folder', + message='Your given export path is not a valid folder!') + return + # Set Variables + root.exportPath_var.set(path) + elif accept_mode == 'files': + # Clean path text and set path to the list of paths + path = path[:-1] + path = path.replace('{', '') + path = path.split('} ') + # Set Variables + root.inputPaths = path + root.inputPathsEntry_var.set('; '.join(path)) + else: + # Invalid accept mode + return + + class ThreadSafeConsole(tk.Text): """ Text Widget which is thread safe for tkinter @@ -199,7 +229,7 @@ class ThreadSafeConsole(tk.Text): self.after(100, self.update_me) -class MainWindow(tk.Tk): +class MainWindow(TkinterDnD.Tk): # --Constants-- # Layout IMAGE_HEIGHT = 140 @@ -231,6 +261,7 @@ class MainWindow(tk.Tk): xpad=int(self.winfo_screenwidth()/2 - 550/2), ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) self.configure(bg='#000000') # Set background color to black + self.protocol("WM_DELETE_WINDOW", self.save_values) self.resizable(False, False) self.update() @@ -271,6 +302,7 @@ class MainWindow(tk.Tk): self.aiModel_var = tk.StringVar(value=data['aiModel']) self.last_aiModel = self.aiModel_var.get() # Other + self.inputPathsEntry_var = tk.StringVar(value='') self.lastDir = data['lastDir'] # nopep8 self.progress_var = tk.IntVar(value=0) # Font @@ -278,6 +310,7 @@ class MainWindow(tk.Tk): # --Widgets-- self.create_widgets() self.configure_widgets() + self.bind_widgets() self.place_widgets() self.update_available_models() @@ -319,6 +352,21 @@ class MainWindow(tk.Tk): font=self.font, foreground='white') ttk.Style().configure('T', font=self.font, foreground='white') + def bind_widgets(self): + """Bind widgets to the drag & drop mechanic""" + self.filePaths_saveTo_Button.drop_target_register(DND_FILES) + self.filePaths_saveTo_Entry.drop_target_register(DND_FILES) + self.filePaths_musicFile_Button.drop_target_register(DND_FILES) + self.filePaths_musicFile_Entry.drop_target_register(DND_FILES) + self.filePaths_saveTo_Button.dnd_bind('<>', + lambda e: drop(e, accept_mode='folder')) + self.filePaths_saveTo_Entry.dnd_bind('<>', + lambda e: drop(e, accept_mode='folder')) + self.filePaths_musicFile_Button.dnd_bind('<>', + lambda e: drop(e, accept_mode='files')) + self.filePaths_musicFile_Entry.dnd_bind('<>', + lambda e: drop(e, accept_mode='files')) + def place_widgets(self): """Place main widgets""" self.title_Label.place(x=-2, y=-2) @@ -352,7 +400,7 @@ class MainWindow(tk.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - text=self.inputPaths, + textvariable=self.inputPathsEntry_var, state=tk.DISABLED ) # -Place Widgets- @@ -556,12 +604,7 @@ class MainWindow(tk.Tk): ) if paths: # Path selected self.inputPaths = paths - # Change the entry text - self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) - self.filePaths_musicFile_Entry.delete(0, tk.END) - self.filePaths_musicFile_Entry.insert(0, self.inputPaths) - self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) - + self.inputPathsEntry_var.set('; '.join(paths)) self.lastDir = os.path.dirname(paths[0]) def open_export_filedialog(self): @@ -582,6 +625,7 @@ class MainWindow(tk.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() + input_paths = self.inputPaths instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants @@ -611,12 +655,13 @@ class MainWindow(tk.Tk): return # -Check for invalid inputs- - if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) - for path in self.inputPaths]): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') - return + for path in input_paths: + if not os.path.isfile(path): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file! Please make sure that the file still exists!', + detail=f'File path: {path}') + return if not os.path.isdir(export_path): tk.messagebox.showwarning(master=self, title='Invalid Export Directory', @@ -636,27 +681,6 @@ class MainWindow(tk.Tk): message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') return - # -Save Data- - save_data(data={ - 'export_path': export_path, - 'gpu': self.gpuConversion_var.get(), - 'postprocess': self.postprocessing_var.get(), - 'tta': self.tta_var.get(), - 'output_image': self.outputImage_var.get(), - 'stack': self.stack_var.get(), - 'stackOnly': self.stackOnly_var.get(), - 'stackPasses': stackPasses, - 'saveAllStacked': self.saveAllStacked_var.get(), - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'n_fft': n_fft, - 'useModel': 'instrumental', # Always instrumental - 'lastDir': self.lastDir, - 'modelFolder': self.modelFolder_var.get(), - 'aiModel': self.aiModel_var.get(), - }) - if self.aiModel_var.get() == 'v2': inference = inference_v2 elif self.aiModel_var.get() == 'v4': @@ -668,7 +692,7 @@ class MainWindow(tk.Tk): threading.Thread(target=inference.main, kwargs={ # Paths - 'input_paths': self.inputPaths, + 'input_paths': input_paths, 'export_path': export_path, # Processing Options 'gpu': 0 if self.gpuConversion_var.get() else -1, @@ -724,20 +748,19 @@ class MainWindow(tk.Tk): # Loop through each constant (key) and its widgets for key, (widget, var) in widgetsVars.items(): if stacked_selectable: - # Stacked model can be selected - if key in stacked.keys(): - if (key in stacked.keys() and - not instrumental_selectable): - # Only stacked selectable - widget.configure(state=tk.DISABLED) - var.set(stacked[key]) - continue - elif (key in instrumental.keys() and - instrumental_selectable): + if instrumental_selectable: + if (key in instrumental.keys() and + key in stacked.keys()): # Both models have set constants widget.configure(state=tk.DISABLED) var.set('%d/%d' % (instrumental[key], stacked[key])) continue + else: + if key in stacked.keys(): + # Only stacked selectable + widget.configure(state=tk.DISABLED) + var.set(stacked[key]) + continue else: # Stacked model can not be selected if (key in instrumental.keys() and @@ -835,7 +858,6 @@ class MainWindow(tk.Tk): # Instrumental Model self.options_instrumentalModel_Label.configure(foreground='#000') self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - self.instrumentalModel_var.set('') # Stack Model if stackLoops > 0: @@ -883,11 +905,54 @@ class MainWindow(tk.Tk): """ Restart the application after asking for confirmation """ - proceed = tk.messagebox.askyesno(title='Confirmation', - message='The application will restart and lose unsaved data. Do you wish to proceed?') - if proceed: - subprocess.Popen(f'python "{__file__}"', shell=True) - exit() + save = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart. Do you want to save the data?') + if save: + self.save_values() + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() + + def save_values(self): + """ + Save the data of the application + """ + export_path = self.exportPath_var.get() + # Get constants + instrumental = get_model_values(self.instrumentalModel_var.get()) + stacked = get_model_values(self.stackedModel_var.get()) + if [bool(instrumental), bool(stacked)].count(True) == 2: + sr = DEFAULT_DATA['sr'] + hop_length = DEFAULT_DATA['hop_length'] + window_size = DEFAULT_DATA['window_size'] + n_fft = DEFAULT_DATA['n_fft'] + else: + sr = self.srValue_var.get() + hop_length = self.hopValue_var.get() + window_size = self.winSize_var.get() + n_fft = self.nfft_var.get() + + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': self.stackLoops_var.get(), + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': 'instrumental', + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + + self.destroy() if __name__ == "__main__": From 3a4a801862c216857413d889c0d136d269f35543 Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Tue, 10 Nov 2020 11:57:50 +0100 Subject: [PATCH 059/100] Bug fix --- .../__pycache__/TkinterDnD.cpython-37.pyc | Bin 12011 -> 0 bytes tkinterdnd2/__pycache__/__init__.cpython-37.pyc | Bin 686 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc delete mode 100644 tkinterdnd2/__pycache__/__init__.cpython-37.pyc diff --git a/tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc b/tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc deleted file mode 100644 index 517bb22d7c058ad5f76dcbb062659d9bf13d1fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12011 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 L`xn~UV)1_fHnM9O diff --git a/tkinterdnd2/__pycache__/__init__.cpython-37.pyc b/tkinterdnd2/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 8c0bd96de34309211514eb4b6e8c7d7e4fd77b45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmZva&2G~`5XWuDiJi~pqYqG(Q;-r>l}l zfzE+S;rKxCCRex|JFiNq3Hh$@rerC Date: Tue, 10 Nov 2020 12:15:01 +0100 Subject: [PATCH 060/100] Folder Name Change #22 Changed folder name 'Instrumental' to 'Main' --- VocalRemover.py | 8 ++++---- .../Models Go Here.txt | 0 .../Models Go Here.txt | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename models/v2/{Instrumental Models => Main Models}/Models Go Here.txt (100%) rename models/v4/{Instrumental Models => Main Models}/Models Go Here.txt (100%) diff --git a/VocalRemover.py b/VocalRemover.py index 01a79f3..c3f5115 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -499,7 +499,7 @@ class MainWindow(TkinterDnD.Tk): # -Column 3- # Choose Instrumental Model self.options_instrumentalModel_Label = tk.Label(master=self.options_Frame, - text='Choose Instrumental Model', + text='Choose Main Model', background='#a7a7a7', font=self.font, relief="ridge") self.options_instrumentalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, self.instrumentalModel_var) @@ -670,8 +670,8 @@ class MainWindow(TkinterDnD.Tk): if not self.stackOnly_var.get(): if not os.path.isfile(instrumentalModel_path): tk.messagebox.showwarning(master=self, - title='Invalid Instrumental Model File', - message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') + title='Invalid Main Model File', + message='You have selected an invalid main model file!\nPlease make sure that your model file still exists!') return if (self.stackOnly_var.get() or stackPasses > 0): @@ -785,7 +785,7 @@ class MainWindow(TkinterDnD.Tk): Loop through every model (.pth) in the models directory and add to the select your model list """ - temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, self.aiModel_var.get(), 'Instrumental Models') # nopep8 + temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, self.aiModel_var.get(), 'Main Models') # nopep8 temp_stackedModels_dir = os.path.join(stackedModels_dir, self.aiModel_var.get(), 'Stacked Models') # Instrumental models new_InstrumentalModels = os.listdir(temp_instrumentalModels_dir) diff --git a/models/v2/Instrumental Models/Models Go Here.txt b/models/v2/Main Models/Models Go Here.txt similarity index 100% rename from models/v2/Instrumental Models/Models Go Here.txt rename to models/v2/Main Models/Models Go Here.txt diff --git a/models/v4/Instrumental Models/Models Go Here.txt b/models/v4/Main Models/Models Go Here.txt similarity index 100% rename from models/v4/Instrumental Models/Models Go Here.txt rename to models/v4/Main Models/Models Go Here.txt From 121e8380cccbda66a67149f56013ae813887b290 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 12:20:27 +0100 Subject: [PATCH 061/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1c7ef5..8f62201 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 067fc3812b3185e4555249ded4af3a53062dd899 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Tue, 10 Nov 2020 12:20:37 +0100 Subject: [PATCH 062/100] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8f62201..e2877bb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Ultimate Vocal Remover GUI v4.0.0 + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 228ed2d48ea906a53d63bf14d5e77afff7e9714b Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Tue, 10 Nov 2020 12:24:15 +0100 Subject: [PATCH 063/100] Synced README.md with beta --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b1c7ef5..e2877bb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Ultimate Vocal Remover GUI v4.0.0 - + + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 638b7529b8759da9a726d1d3e47545df41965812 Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Tue, 10 Nov 2020 13:02:48 +0100 Subject: [PATCH 064/100] Fixed Stacked Folder Naming Convention Bug --- inference_v2.py | 24 ++++++++++-------------- inference_v4.py | 24 ++++++++++-------------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/inference_v2.py b/inference_v2.py index b530adf..a9d196c 100644 --- a/inference_v2.py +++ b/inference_v2.py @@ -269,7 +269,7 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress """Save output music files""" vocal_name = None instrumental_name = None - folder = '' + save_path = os.path.dirname(base_name) # Get the Suffix Name if (not loop_num or @@ -302,13 +302,11 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress # Reverse names vocal_name, instrumental_name = instrumental_name, vocal_name elif data['saveAllStacked']: - folder = os.path.splitext(os.path.basename(base_name))[0] + ' Stacked Outputs' # nopep8 - folder = os.path.basename(folder) + '/' - folder_path = os.path.dirname(base_name) - folder_path = os.path.join(folder_path, folder) + folder_name = os.path.basename(base_name) + ' Stacked Outputs' # nopep8 + save_path = os.path.join(save_path, folder_name) - if not os.path.isdir(folder_path): - os.mkdir(folder_path) + if not os.path.isdir(save_path): + os.mkdir(save_path) if data['stackOnly']: vocal_name = f'(Vocal_{loop_num}_Stacked_Output)' @@ -333,18 +331,16 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress # -Save files- # Instrumental if instrumental_name is not None: - instrumental_path = '{base_path}/{folder}{file_name}.wav'.format( - base_path=os.path.dirname(base_name), - folder=folder, + instrumental_path = '{save_path}/{file_name}.wav'.format( + save_path=save_path, file_name=f'{os.path.basename(base_name)}_{instrumental_name}{appendModelFolderName}', ) sf.write(instrumental_path, wav_instrument.T, sr) # Vocal if vocal_name is not None: - vocal_path = '{base_path}/{folder}{file_name}.wav'.format( - base_path=os.path.dirname(base_name), - folder=folder, + vocal_path = '{save_path}/{file_name}.wav'.format( + save_path=save_path, file_name=f'{os.path.basename(base_name)}_{vocal_name}{appendModelFolderName}', ) sf.write(vocal_path, @@ -486,4 +482,4 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress progress_var.set(0) # Update Progress text_widget.write(f'Conversion(s) Completed and Saving all Files!\n') # nopep8 Write Command Text text_widget.write(f'Time Elapsed: {time.strftime("%H:%M:%S", time.gmtime(int(time.perf_counter() - stime)))}') # nopep8 - button_widget.configure(state=tk.NORMAL) # Enable Button + button_widget.configure(state=tk.NORMAL) # Enable Button \ No newline at end of file diff --git a/inference_v4.py b/inference_v4.py index 5d8fd8b..cfd9b10 100644 --- a/inference_v4.py +++ b/inference_v4.py @@ -283,7 +283,7 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress """Save output music files""" vocal_name = None instrumental_name = None - folder = '' + save_path = os.path.dirname(base_name) # Get the Suffix Name if (not loop_num or @@ -316,13 +316,11 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress # Reverse names vocal_name, instrumental_name = instrumental_name, vocal_name elif data['saveAllStacked']: - folder = os.path.splitext(os.path.basename(base_name))[0] + ' Stacked Outputs' # nopep8 - folder = os.path.basename(folder) + '/' - folder_path = os.path.dirname(base_name) - folder_path = os.path.join(folder_path, folder) + folder_name = os.path.basename(base_name) + ' Stacked Outputs' # nopep8 + save_path = os.path.join(save_path, folder_name) - if not os.path.isdir(folder_path): - os.mkdir(folder_path) + if not os.path.isdir(save_path): + os.mkdir(save_path) if data['stackOnly']: vocal_name = f'(Vocal_{loop_num}_Stacked_Output)' @@ -347,9 +345,8 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress # -Save files- # Instrumental if instrumental_name is not None: - instrumental_path = '{base_path}/{folder}{file_name}.wav'.format( - base_path=os.path.dirname(base_name), - folder=folder, + instrumental_path = '{save_path}/{file_name}.wav'.format( + save_path=save_path, file_name=f'{os.path.basename(base_name)}_{instrumental_name}{appendModelFolderName}', ) @@ -357,9 +354,8 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress wav_instrument.T, sr) # Vocal if vocal_name is not None: - vocal_path = '{base_path}/{folder}{file_name}.wav'.format( - base_path=os.path.dirname(base_name), - folder=folder, + vocal_path = '{save_path}/{file_name}.wav'.format( + save_path=save_path, file_name=f'{os.path.basename(base_name)}_{vocal_name}{appendModelFolderName}', ) sf.write(vocal_path, @@ -522,4 +518,4 @@ def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress progress_var.set(0) text_widget.write(f'Conversion(s) Completed and Saving all Files!\n') text_widget.write(f'Time Elapsed: {time.strftime("%H:%M:%S", time.gmtime(int(time.perf_counter() - stime)))}') # nopep8 - button_widget.configure(state=tk.NORMAL) # Enable Button + button_widget.configure(state=tk.NORMAL) # Enable Button \ No newline at end of file From fdaf51da3d4c1951b820678e32e18a55fba1b73d Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 19:29:24 -0600 Subject: [PATCH 065/100] Update README.md --- README.md | 55 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index e2877bb..f5916a5 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,15 @@ ## About -This application is a GUI version of the vocal remover AI's created and posted by GitHub user tsurumeso. You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover). Please note that we do not maintain or directly support any of tsurumesos AI application code. Direct support and development for the **Ultimate Vocal Remover GUI** is only maintained within this repository. +This application is a GUI version of the vocal remover AI created and posted by GitHub user [tsurumeso](https://github.com/tsurumeso). You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover). - **Special Thanks** - - [tsurumeso](https://github.com/tsurumeso) - The engineer who authored the AI code. Thank you for the hard work and dedication put into the AI application this GUI is built around! - - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor, thank you for helping bring this GUI to life, your hard work and continued support is greatly appreciated! + - [tsurumeso](https://github.com/tsurumeso) - The engineer who authored the AI code. Thank you for the hard work and dedication you put into the AI application this GUI is built around! + - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor. Thank you for helping bring this GUI to life! Your hard work and continued support is greatly appreciated! ## Installation -The application was made with Tkinter for cross-platform compatibility, so this should work with Windows, Mac, and Linux systems. This application has only been tested on Windows 10 & Linux Ubuntu. +The application was made with Tkinter for cross-platform compatibility, so it should work with Windows, Mac, and Linux systems. However, this application has only been tested on Windows 10 & Linux Ubuntu. ### Install Required Applications & Packages @@ -22,7 +22,7 @@ The application was made with Tkinter for cross-platform compatibility, so this - Ensure the *"Add Python 3.7 to PATH"* box is checked 2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.0.0** here (link pending) 3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. - - Your documents folder is recommended for ease of access. + - *Your documents folder or home directory is recommended for ease of access.* 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - ``` @@ -34,33 +34,33 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - - If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. + - **Note:** If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. ## Option Guide ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. - - **Please note:** The TTA option and the ability to set the N_FFT value is only available for the v4 engine. + - **Note:** The TTA option and the ability to set the N_FFT value is only available on the v4 engine. ### Model Selections: -The v2 & v4 AI engines use different sets of models. The available models for each engine will automatically populate within the model selection dropdowns based on which engine was selected. +The v2 & v4 AI engines use different sets of models. When selected, the available models for v2 or v4 will automatically populate within the model selection dropdowns. - **Choose Main Model** - Here is where you choose the main model to convert your tracks with. - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. - - The variety of models gives the user the chance to determine which one works best for whatever type of music they're converting. - - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes it easier for the user to compare and determine which model is best for the track(s) being processed. + - Each model differs in the way they processes given tracks. + - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option makes it easier for the user to compare and determine which model is best for the track(s) being processed. - **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. - The stacked models provided are only meant to process instrumental outputs created by a main model. - - Selecting the [*'Stack Passes'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option will enable you to select a stacked model to run with the main model. - - If you wish to only run a stacked model on a track, make sure the *'Stack Conversion Only'* option is checked. - - The varying main model/stacked model combination options allows the user more flexibility in finding what blend works best for the track(s) they are proessing. - - To reiterate, the [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) makes testing and comparing different model blends easier on the user. + - Selecting the [*'Stack Passes'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option will enable you to select a stacked model to run with a main model. + - If you wish to only run a stacked model on a track, make sure the [*'Stack Conversion Only'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option is checked. + - The wide range of main model/stacked model allows the user more flexibility in finding what blend works best for the track(s) they are proessing. + - To reiterate, the [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option streamlines the process of testing different main model/stacked model combinations on a given track. ### Parameter Values -All models released here will have the values they were trained with appended to the end of their filenames like so, **'MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth'**. The *'_sr44100_hl512_w512_nf2048'* portion automatically sets the *SR*, *HOP LENGNTH*, *WINDOW SIZE*, & *N_FFT* values within the application, so please do not change the model files names. If there are no values appended to the end of the models' filename, the value fields will be editable and auto-populate with default values. +All models released here will have the values they were trained with appended to the end of their filenames like so, **'MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth'**. The *'_sr44100_hl512_w512_nf2048'* portion automatically sets the *SR*, *HOP LENGNTH*, *WINDOW SIZE*, & *N_FFT* values within the application. If there are no values appended to the end of a selected model filename, the *SR*, *HOP LENGNTH*, *WINDOW SIZE*, & *N_FFT* fields will be editable and auto-populate with default values. - **Default Values:** - **SR** - 44100 @@ -70,30 +70,30 @@ All models released here will have the values they were trained with appended to ### Checkboxes - **GPU Conversion** - Selecting this option ensures the GPU is used for conversions. - - **NOTE:** This option will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). + - **Note:** This option will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). - **Post-process** - This option can potentially identify leftover instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. - - **NOTE:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. + - **Note:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. - **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. - - Having this selected will increase the time it takes to complete a conversion. - - This option is ***not*** compatible with the *v2 AI engine*. + - **Note:** Having this selected will increase the time it takes to complete a conversion. + - **Note:** This option is ***not*** compatible with the *v2 AI engine*. - **Output Image** - Selecting this option will include the images of the spectrograms for the instrumental & vocal audio outputs. - **Stack Passes** - This option allows the user to set the number of times a track is to run through a stacked model. - - The best range is 3-5 passes, any more than 5 can cause quality degradation of the track. + - **Note:** The best range is 3-5 passes, any more than 5 can cause quality degradation of the track. - **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. - **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to the *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. - - Each output filename will be appended with the number of passes it has had. + - **Note:** Each output filename will be appended with the number of passes it has had. - **Example:** if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. - This option can be very useful in determining the optimal number of passes needed to clean a track. - **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. - - When this option is selected the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. + - **Note:** When this option is selected the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. - The instrumental & vocal outputs filenames will have the selected model(s) name(s) appended to them and save to the auto-generated directory. ### Other Buttons: - **Add New Model** - This button will automatically take you to the models folder. - - If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! + - **Note:** If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! - **Example:** If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. - - The application will automatically detect any models added the correct directories without needing a restart. + - **Note:** The application will automatically detect any models added the correct directories without needing a restart. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. ## Models Included @@ -119,11 +119,11 @@ A special thank you to aufr33 for helping me expand the dataset used to train th ## Other GUI Notes - The application will automatically remember your *'save to'* path upon closing and reopening until you change it. - - It will also remember the last directory you accessed to select files to be processed. + - **Note:** It will also remember the last directory you accessed to select files to be processed. - Multiple conversions are supported. - The ability to drag & drop audio files to convert has also been added. - Conversion times will greatly depend on your hardware. - - This application will *not* be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. ***We are not responsible for any hardware damage.*** + - **Note:** This application will *not* be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. ***We are not responsible for any hardware damage.*** ## Troubleshooting @@ -142,7 +142,8 @@ The **Ultimate Vocal Remover GUI** code is [MIT-licensed](LICENSE). ## Contributing -For anyone interested in the ongoing development of **Ultimate Vocal Remover GUI** please send us a pull request and we will review it. This project is 100% open-source and free for anyone to use and/or modify as they wish. +- For anyone interested in the ongoing development of **Ultimate Vocal Remover GUI** please send us a pull request and we will review it. This project is 100% open-source and free for anyone to use and/or modify as they wish. +- Please note that we do not maintain or directly support any of tsurumesos AI application code. We only maintain the development and support for the **Ultimate Vocal Remover GUI**. ## References - [1] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf From 144efccfb4b2c1396b742f904547c0b6ed6dd72e Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 20:41:08 -0600 Subject: [PATCH 066/100] Update README.md --- README.md | 74 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index f5916a5..2da54c3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This application is a GUI version of the vocal remover AI created and posted by - **Special Thanks** - [tsurumeso](https://github.com/tsurumeso) - The engineer who authored the AI code. Thank you for the hard work and dedication you put into the AI application this GUI is built around! - - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor. Thank you for helping bring this GUI to life! Your hard work and continued support is greatly appreciated! + - [DilanBoskan](https://github.com/DilanBoskan) - The main GUI code contributor. Thank you for helping bring this GUI to life! Your hard work and continued support is greatly appreciated. ## Installation @@ -19,10 +19,10 @@ The application was made with Tkinter for cross-platform compatibility, so it sh ### Install Required Applications & Packages 1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe) (Windows link) - - Ensure the *"Add Python 3.7 to PATH"* box is checked + - **Note:** Ensure the *"Add Python 3.7 to PATH"* box is checked 2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.0.0** here (link pending) 3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. - - *Your documents folder or home directory is recommended for ease of access.* + - Your documents folder or home directory is recommended for easy access. 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs - ``` @@ -41,22 +41,46 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto ### Choose AI Engine: - This option allows you to toggle between tsurumeso's v2 & v4 AI engines. - - **Note:** The TTA option and the ability to set the N_FFT value is only available on the v4 engine. - + - **Note:** Each engine comes with it's own set of models. + - **Note:** The TTA option and the ability to set the N_FFT value is limited to the v4 engine only. + ### Model Selections: -The v2 & v4 AI engines use different sets of models. When selected, the available models for v2 or v4 will automatically populate within the model selection dropdowns. +The v2 & v4 AI engines use different sets of models. When selected, the models available for v2 or v4 will automatically populate within the model selection dropdowns. -- **Choose Main Model** - Here is where you choose the main model to convert your tracks with. +- **Choose Main Model** - Here is where you choose the main model to perform a deep vocal removal. - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. - Each model differs in the way they processes given tracks. - - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option makes it easier for the user to compare and determine which model is best for the track(s) being processed. + - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option makes it easier for the user to test different models on given tracks. - **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. - The stacked models provided are only meant to process instrumental outputs created by a main model. - Selecting the [*'Stack Passes'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option will enable you to select a stacked model to run with a main model. - If you wish to only run a stacked model on a track, make sure the [*'Stack Conversion Only'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option is checked. - - The wide range of main model/stacked model allows the user more flexibility in finding what blend works best for the track(s) they are proessing. - - To reiterate, the [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option streamlines the process of testing different main model/stacked model combinations on a given track. + - The wide range of main model/stacked model combinations gives the user more flexibility in discovering what model blend works best for the track(s) they are proessing. + - To reiterate, the [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option streamlines the process of testing different main model/stacked model combinations on a given track. More information on this option can be found in the next section. + +### Checkboxes +- **GPU Conversion** - Selecting this option ensures the GPU is used to process conversions. + - **Note:** This option will not work if you don't have a Cuda compatible GPU. + - Nividia GPU's are most compatible with Cuda. + - **Note:** CPU conversions are much slower compared to those processed through the GPU. +- **Post-process** - This option can potentially identify leftover instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. + - **Note:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. +- **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. + - **Note:** Having this selected will increase the time it takes to complete a conversion. + - **Note:** This option is ***not*** compatible with the *v2* AI engine. +- **Output Image** - Selecting this option will include the spectrograms in *.jpg* format for the instrumental & vocal audio outputs. +- **Stack Passes** - This option activates the stacked model conversion process and allows the user to set the number of times a track runs through a stacked model. + - **Note:** The best range is 3-7 passes. 8 or more passes can result in degraded sound quality for the track. +- **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. +- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory with the track name to your *'Save to'* path. The new directory will contain all of the outputs generated by each stack pass. The amount of audio outputs will depend on the number of stack passes chosen. + - **Note:** Each output filename will be appended with the number of passes it has had. + - **Example:** If 5 stack passes are chosen, the application will provide you with all 5 pairs of audio outputs generated after each pass, if this option is enabled. + - This option can be very useful in determining the optimal number of passes needed to clean a track. +- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. + - When this option is selected, the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. + - The output files will be saved to the auto-generated directory. + - The filenames for the instrumental & vocal outputs will have the selected model(s) name(s) appended to them. ### Parameter Values @@ -68,31 +92,11 @@ All models released here will have the values they were trained with appended to - **WINDOW SIZE** - 512 - **N_FFT** - 2048 -### Checkboxes -- **GPU Conversion** - Selecting this option ensures the GPU is used for conversions. - - **Note:** This option will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda). -- **Post-process** - This option can potentially identify leftover instrumental artifacts within the vocal outputs. This option may improve the separation on *some* songs. - - **Note:** Having this option selected can potentially have an adverse effect on the conversion process, depending on the track. Because of this, it's only recommended as a last resort. -- **TTA** - This option performs Test-Time-Augmentation to improve the separation quality. - - **Note:** Having this selected will increase the time it takes to complete a conversion. - - **Note:** This option is ***not*** compatible with the *v2 AI engine*. -- **Output Image** - Selecting this option will include the images of the spectrograms for the instrumental & vocal audio outputs. -- **Stack Passes** - This option allows the user to set the number of times a track is to run through a stacked model. - - **Note:** The best range is 3-5 passes, any more than 5 can cause quality degradation of the track. -- **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. -- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory to the *'Save to'* path with the track name. The new directory will contain all of the outputs generated by the whole conversion process. The amount of audio outputs will depend on the input number of stack passes. - - **Note:** Each output filename will be appended with the number of passes it has had. - - **Example:** if you choose 5 stack passes this option will provide you with 5 pairs of audio outputs generated after each pass. - - This option can be very useful in determining the optimal number of passes needed to clean a track. -- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. - - **Note:** When this option is selected the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. - - The instrumental & vocal outputs filenames will have the selected model(s) name(s) appended to them and save to the auto-generated directory. - ### Other Buttons: -- **Add New Model** - This button will automatically take you to the models folder. - - **Note:** If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! - - **Example:** If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'v4' directory. +- **Add New Model** - This button will automatically open the models folder. + - **Note:** If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on. + - **Example:** If you wish to add a model trained on the v4 engine, add it to the correct folder located in the 'models/v4/' directory. - **Note:** The application will automatically detect any models added the correct directories without needing a restart. - **Restart Button** - If the application hangs for any reason, you can hit the circular arrow button immediately to the right of the *'Start Conversion'* button. @@ -118,8 +122,8 @@ A special thank you to aufr33 for helping me expand the dataset used to train th ## Other GUI Notes -- The application will automatically remember your *'save to'* path upon closing and reopening until you change it. - - **Note:** It will also remember the last directory you accessed to select files to be processed. +- The application will automatically remember your *'save to'* path upon closing and reopening until it's changed. + - **Note:** The last directory accessed within the application will also be remembered. - Multiple conversions are supported. - The ability to drag & drop audio files to convert has also been added. - Conversion times will greatly depend on your hardware. From cdb46f90aeb823cf1c88a87ac885ea01e70a8594 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Tue, 10 Nov 2020 20:59:27 -0600 Subject: [PATCH 067/100] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 2da54c3..b10ded7 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,12 @@ pip install --no-cache-dir -r requirements.txt pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html ``` +### FFmpeg + +FFmpeg must be installed and configured in order for the application to be able to process any track that isn't a *.wav* file. Instructions for installing FFmpeg can be found on YouTube, WikiHow, Reddit, GitHub, and many other sources around the web. + +- **Note:** If you are experiencing any errors when attempting to process any media audio files that are not the *.wav* format, please ensure FFmpeg is install & configured correctly. + ### Running the Vocal Remover GUI & Models - Open the file labeled *'VocalRemover.py'*. @@ -131,6 +137,8 @@ A special thank you to aufr33 for helping me expand the dataset used to train th ## Troubleshooting +Please be as detailed as possible when posting a new issue. Make sure to provide any error outputs and/or screenshots/gif's to give us a clearer understanding of the issue you are experiencing. + If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - 1. Open the cmd prompt from the UVR-V4GUI directory From b7d097efc4f7d150092ff15eae66df46a8633251 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Wed, 11 Nov 2020 03:01:40 -0600 Subject: [PATCH 068/100] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b10ded7..d6bab88 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto FFmpeg must be installed and configured in order for the application to be able to process any track that isn't a *.wav* file. Instructions for installing FFmpeg can be found on YouTube, WikiHow, Reddit, GitHub, and many other sources around the web. -- **Note:** If you are experiencing any errors when attempting to process any media audio files that are not the *.wav* format, please ensure FFmpeg is install & configured correctly. +- **Note:** If you are experiencing any errors when attempting to process any media audio files that are not the *.wav* format, please ensure FFmpeg is installed & configured correctly. ### Running the Vocal Remover GUI & Models @@ -56,7 +56,7 @@ The v2 & v4 AI engines use different sets of models. When selected, the models a - **Choose Main Model** - Here is where you choose the main model to perform a deep vocal removal. - Each of the models provided were trained on different parameters, though they can convert tracks of all genres. - - Each model differs in the way they processes given tracks. + - Each model differs in the way they process given tracks. - The [*'Model Test Mode'*](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#checkboxes) option makes it easier for the user to test different models on given tracks. - **Choose Stacked Model** - These models are meant to clean up vocal artifacts from instrumental outputs. - The stacked models provided are only meant to process instrumental outputs created by a main model. @@ -83,9 +83,10 @@ The v2 & v4 AI engines use different sets of models. When selected, the models a - **Note:** Each output filename will be appended with the number of passes it has had. - **Example:** If 5 stack passes are chosen, the application will provide you with all 5 pairs of audio outputs generated after each pass, if this option is enabled. - This option can be very useful in determining the optimal number of passes needed to clean a track. -- **Model Test Mode** - This option is meant to make it easier for users to test the results of different models, and model combinations, without having to manually create new folders and/or change the filenames. - - When this option is selected, the application will auto-generate a new folder with the name of the selected model(s) in the *'Save to'* path you have chosen. - - The output files will be saved to the auto-generated directory. +- **Model Test Mode** - This option makes it easier for users to test the results of different models, and model combinations, by eliminating the hassel of having to manually create new folders and/or change the filenames when processing the same track through multiple models. This option structures the model testing process. + - When selected, the application will auto-generate a new folder in the *'Save to'* path you have chosen. + - The new auto-generated folder will be named after the model(s) selected. + - The output audio files will be saved to the auto-generated directory. - The filenames for the instrumental & vocal outputs will have the selected model(s) name(s) appended to them. ### Parameter Values From f1f52e05eda2eaf5ae150b13b2d91901c0ec2281 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Wed, 11 Nov 2020 03:33:17 -0600 Subject: [PATCH 069/100] Update README.md --- README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d6bab88..9f42aeb 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,14 @@ pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pyto FFmpeg must be installed and configured in order for the application to be able to process any track that isn't a *.wav* file. Instructions for installing FFmpeg can be found on YouTube, WikiHow, Reddit, GitHub, and many other sources around the web. -- **Note:** If you are experiencing any errors when attempting to process any media audio files that are not the *.wav* format, please ensure FFmpeg is installed & configured correctly. +- **Note:** If you are experiencing any errors when attempting to process any media files that are not in the *.wav* format, please ensure FFmpeg is installed & configured correctly. ### Running the Vocal Remover GUI & Models - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - **Note:** If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. + - All output audio files will be the *'.wav'* format. ## Option Guide @@ -77,14 +78,19 @@ The v2 & v4 AI engines use different sets of models. When selected, the models a - **Note:** This option is ***not*** compatible with the *v2* AI engine. - **Output Image** - Selecting this option will include the spectrograms in *.jpg* format for the instrumental & vocal audio outputs. - **Stack Passes** - This option activates the stacked model conversion process and allows the user to set the number of times a track runs through a stacked model. + - **Note:** Unless you have the *'Save All Stacked Outputs'* option selected, the following outputs will be saved - + - Instrumental generated after the last stack pass & + - The vocal track generated by the main model - **Note:** The best range is 3-7 passes. 8 or more passes can result in degraded sound quality for the track. - **Stack Conversion Only** - Selecting this option allows the user to bypass the main model and run a track through a stacked model only. -- **Save All Stacked Outputs** - Having this option selected will auto-generate a new directory with the track name to your *'Save to'* path. The new directory will contain all of the outputs generated by each stack pass. The amount of audio outputs will depend on the number of stack passes chosen. - - **Note:** Each output filename will be appended with the number of passes it has had. +- **Save All Stacked Outputs** - Having this option selected will auto-generate a new folder named after the track being processed to your *'Save to'* path. The new folder will contain all of the outputs that were generated after each stack pass. The amount of audio outputs will depend on the number of stack passes chosen. + - **Note:** Each output audio file will be appended with the number of passes it has had. - **Example:** If 5 stack passes are chosen, the application will provide you with all 5 pairs of audio outputs generated after each pass, if this option is enabled. - This option can be very useful in determining the optimal number of passes needed to clean a track. -- **Model Test Mode** - This option makes it easier for users to test the results of different models, and model combinations, by eliminating the hassel of having to manually create new folders and/or change the filenames when processing the same track through multiple models. This option structures the model testing process. - - When selected, the application will auto-generate a new folder in the *'Save to'* path you have chosen. + - The *'stacked vocal'* tracks will contain the audio of the vocal artifacts that were removed from the instrumental. + - These files can be used to verify artifact removal. +- **Model Test Mode** - This option makes it easier for users to test the results of different models, and model combinations, by eliminating the hassel of having to manually change the filenames and/or create new folders when processing the same track through multiple models. This option structures the model testing process. + - When *'Model Test Mode'* is selected, the application will auto-generate a new folder in the *'Save to'* path you have chosen. - The new auto-generated folder will be named after the model(s) selected. - The output audio files will be saved to the auto-generated directory. - The filenames for the instrumental & vocal outputs will have the selected model(s) name(s) appended to them. From f938ad2b25ca4344d453c8382ffb93479415db40 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Wed, 11 Nov 2020 03:34:14 -0600 Subject: [PATCH 070/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f42aeb..1a34a63 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ FFmpeg must be installed and configured in order for the application to be able - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - **Note:** If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. - - All output audio files will be the *'.wav'* format. + - All output audio files will be the *'.wav'* format. ## Option Guide From 19e330a30dfc1a39fb52ad3ae440800e5a52b4e0 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Wed, 11 Nov 2020 03:35:31 -0600 Subject: [PATCH 071/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a34a63..ea97ac7 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ FFmpeg must be installed and configured in order for the application to be able - Open the file labeled *'VocalRemover.py'*. - It's recommended that you create a shortcut for the file labeled *'VocalRemover.py'* to your desktop for easy access. - **Note:** If you are unable to open the *'VocalRemover.py'* file, please go to the [**troubleshooting**](https://github.com/Anjok07/ultimatevocalremovergui/tree/beta#troubleshooting) section below. - - All output audio files will be the *'.wav'* format. +- **Note:** All output audio files will be in the *'.wav'* format. ## Option Guide From 017115a2462e5972d05bc714bc25b16574f271d6 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Wed, 11 Nov 2020 03:52:29 -0600 Subject: [PATCH 072/100] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index ea97ac7..b372dbe 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,13 @@ A special thank you to aufr33 for helping me expand the dataset used to train th ## Troubleshooting +### Common Issues + +- This application is not compatible with 32-bit versions of Python. Please make sure your version of Python is 64-bit. +- If FFmpeg is not installed, the application will throw an error if the user attempts to convert a non-WAV file. + +### Issue Reporting + Please be as detailed as possible when posting a new issue. Make sure to provide any error outputs and/or screenshots/gif's to give us a clearer understanding of the issue you are experiencing. If the *'VocalRemover.py'* file won't open *under any circumstances* and all other resources have been exhausted, please do the following - From ec89500c098a3355b6ff8509425ed46688b3c036 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Thu, 12 Nov 2020 03:21:07 -0600 Subject: [PATCH 073/100] Update requirements.txt --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4c91ed1..7634a59 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ Pillow -tqdm==4.30.0 -librosa==0.6.3 +tqdm==4.45.0 +librosa==0.7.2 opencv-python numba==0.48.0 SoundFile -soundstretch \ No newline at end of file +soundstretch From 4ee1502a464618a25a2c12baf47f5c6d51302618 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Thu, 12 Nov 2020 05:03:42 -0600 Subject: [PATCH 074/100] Delete UVR-logo.png --- img/UVR-logo.png | Bin 102738 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png deleted file mode 100644 index 8cbf20913559e2da2668c2d85279ee3e92c01101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102738 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ʝ71?k8B z?PJCF3`_e?og9kqTNmo{_6>Dxi@(GLhVNr{{)VrDz{~<>!Gdc3c>QXR_G$l;bsBk< z7JVn9?~ZC+iPmF4MXD+V1__rnfIaV!-dB#GurdnSXbKO*7tZpSMOWh@N$3G zskWD1+8b-yV6@BwdL?>_+{kEXHFxiGwRA+bgrm#s8?@e?OM4E)UhYdKT0=a6_&cAJ za5qVjPXuBDY_}C+Gu1AmDJ<8`Q&@#ocIE>szGJYk1s0)Ti=Nuy^D9N)VAl{|a`H@D z^s10g??^27wbVv>w0$r48f|g#V+?r#=dGdP-+l1w(8P((ZkxyM5?z=jgBcU%hbP=>w13KcgGGTXI01o?NoOK(BuGiRoqrGJ%(t`$NBV|N92q=w+S1VY zXi2h6UUjnb@UKQr^>l{7E*toXnRU6@aPjzx)>de8!NW^u(Z%7G_Fum6`dNG5Aj{ok z-so<4dYF5o{=&eV%l z;(XBLiB8_UMD3_j&RmEfU{W^q``jd{w4OU&UUi;Y+(1zaF!Gr^PviKN%O`0`tnd8W$&DUeM2~-fsfXh>KM_B$s_oT%gNI_VPWsVd z*Gq#(CeCX54*{2pV_qB>zIy!liC^sL|5ew%Gi|~4Rphb!$FS(j+8bZE-1pwuct6i; z2TfdX!d(1DyY+alaYams(m(Q#sVviQy!({pz_2bHv^Ke8yA!*jEw!FT@Q|XT=nADJ z;M~#MapL6jufH+!_OC~;Tp7J|`PC2JKYjSfOF4MeV?VK=2I#f==%UfR{?kuwJM%(a zV#5P%zon4AVr7ezc$)~UuhmTP$rB^q_5-nY|9UB-=u!VcCQY6iJ$QPkUL&~o?Qz7? zcxQ2y-VJ&3f-5e;{O2x`{L#m>|(`q-qX#HkBj; zaE>e?mCp+8G*Vj12zBp&72yQ&dS8Fb&i)s-j-KlN^`()ER|YOzJ^I1NmoB_}!Ef
?~dVXK~iAZ{! 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%0DSj<?+U|b~X*T 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 a{r>@8xz;wA*^RdV0000 Date: Thu, 12 Nov 2020 05:04:06 -0600 Subject: [PATCH 075/100] Add files via upload --- img/UVR-logo.png | Bin 0 -> 353964 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..500bfae57d227de4e4610c0d0cb01bcbecf9b338 GIT binary patch literal 353964 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 fB>{&JUhnT2#|@pe{KxG` Date: Thu, 12 Nov 2020 05:08:39 -0600 Subject: [PATCH 076/100] Add files via upload --- img/UVRV4.jpg | Bin 0 -> 97937 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..235fd1fe3d7386268cd0897c795fe630cb2a86eb GIT binary patch literal 97937 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 Date: Thu, 12 Nov 2020 05:08:58 -0600 Subject: [PATCH 077/100] Delete UVRBETA.jpg --- img/UVRBETA.jpg | Bin 119592 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVRBETA.jpg diff --git a/img/UVRBETA.jpg b/img/UVRBETA.jpg deleted file mode 100644 index 67e3dcaaf9a60c089f9a330842878e19e9e6a134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119592 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�ian@R`#;p3jJP5wZ)n zIgZik;f6abxyZO@xjT+mu88Z+3Y+tCec2beT(d}GLnMN7EB@4GOH#O4DaMMT)u6{- zeJS%0zt@F$!)R><;Y829Ic4v&b|uL92f5r-R$S{>c_mA{>F z81UEmApDm6MpFYRM@9^0j$f%q4{ZaC9#SF;p?Th-MU3agpI4kqK0lYv zZfk9i)_c0AO!(s$+mFUZn_CcViMg~?g8k5NP2cQLYDFIGxdFX&D^pb$NB1?RpY_Z6 zlL7#H1EY8m7(ulM(ZpJSO?*~^Rg}=|fWm|WC)#&3i0M0r-sa_7rV#1Bci858(acMC z+shhPVF^$v{OCvQ%3J(Pz$EurmQFUkY$>L1S3s$6v}*O zzzOVQ`v|^N#Ef+_9=hI({{TWf{-KhecK^ThIkbk`I&6g|ny?=Id9x%5ym`D8y!jY< zwtWn|_cCo80|5^qbtHyc0Js8k$<;K_#R!wY7i%Ba5hkHrTc1ak^2S!r`sKf|WUH>PBU)@U1T)0BHH;NCJu2vsi4gi&e61agND?bBG zN_t@6#IByy*Kv}u#23*VoF}7T$ylm@K^~Sw<^g1%W7S!MD7F zRr<^E4lS1~uRx2;8WRaez2a{r)`=dD*QBP8 jJ>c`QW=RTi#o}lvEPLUwRXJm8Z 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�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

WykGKay@oj2Gz2%n6n6bDy)9a+ekFzqkERLH%_7 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 Date: Thu, 12 Nov 2020 05:09:22 -0600 Subject: [PATCH 078/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b372dbe..1fbcdfb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 8743da9acc470f6c65ea7b38fce520ea34341dce Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Thu, 12 Nov 2020 05:35:58 -0600 Subject: [PATCH 079/100] Delete UVR-logo.png --- img/UVR-logo.png | Bin 353964 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png deleted file mode 100644 index 500bfae57d227de4e4610c0d0cb01bcbecf9b338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353964 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 fB>{&JUhnT2#|@pe{KxG` Date: Thu, 12 Nov 2020 05:36:10 -0600 Subject: [PATCH 080/100] Add files via upload --- img/UVR-logo.png | Bin 0 -> 353964 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0730b3462ba774b8c9bc582229feefe53c79c5 GIT binary patch literal 353964 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 V_~yuFUm=gvPd$6!%>I|$|Nmf6OCA6K literal 0 HcmV?d00001 From cee63b9124ad1620b9641eaa48b104092efb20b2 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Thu, 12 Nov 2020 05:38:18 -0600 Subject: [PATCH 081/100] Delete UVRV4.jpg --- img/UVRV4.jpg | Bin 97937 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg deleted file mode 100644 index 235fd1fe3d7386268cd0897c795fe630cb2a86eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97937 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 Date: Thu, 12 Nov 2020 05:38:39 -0600 Subject: [PATCH 082/100] Add files via upload --- img/UVRV4.jpg | Bin 0 -> 97937 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..235fd1fe3d7386268cd0897c795fe630cb2a86eb GIT binary patch literal 97937 zcmeFY2UJtt_Ak0a@4ZM3(v>D4y#z#>hzLk85drB{I)R`FNEZ+kP@;mOA|OZ?iF6SK zDT08s0D=@rC?P-+?&h5P&N=UV-~WHlJMWG=-gx6|*vZVw-fPb}*IIM_=A0`>-;d@1 zwhKn4MgRl?0j`37z|lMqY#8Np9RSSDfztp0&;itx5P%w_AmDj{k^-Or-+92(%98Cb zZQ!i{V95?pfo~wm(q+l|BBllgBEg|S*M0mwfg=o) zJ@^@Z*~-Gm^r9ii3IH&fT=WSHqF@7nfWWX&E8}w__709Bv;*L?=>Zx*5dhrWZv>lL z8(lf>-qg@Qy zZIJel3=2MP$AUE1HNRt;;#h93P>?~8K5=qae0DqPF_%49sShpgel2sKoR8{4a)B4E}>WJje6J zJ1i_%Q$ZmzGE&~h(_Q{pp?^F6mlyo)%Kw`9hv&&3Kksk46FKjB-7VZdOypRp?m_-R z;h`cog5BIbMdbc@693yb{sUY8z=y1r=XK9e&p_}|w%{!D3G@PoJJ7=?%qJ*N#3%5- z8sUHQwtwK^nEdO!1_{nGGQb6w2iOL=0LqQe02L=AK6B|AOHvjA^`+&6G#TqfxAFHPz0cWGTJVLsA><;&3gQ5{3h{yj zLc$>kNFpR1k_#z#4h`zfmty<7sGUcxa?( z)M!j-9B6!LVrepH9??|Oe4rVkS)kdarKRPgm7&$4wV-vQ4Wmt_Eu?)-i>4i>U7{t> zG15Wll<17;9O(k-ZqXIcy`pQQ8>U;PJEUi$m!Q|Ax1jf+kEYM2FQadvAEaNRKV)EM zkYdnbxWeGeaFgKyLlr|e!w-gSMn*Q$Lz=)#+=3clDU(4hMB;^$s*5U%HqL-WGQB8U>Rol%}UQI z!K%;d${NF3!1|VTkaeAno=uX?fX$69o~@XznQfeHmz|Sck==qlfIWl#6?-513I{ER zB!?k~2ghxWQjSiJ1x`v%F-`+ccg{r4GR|(!B`z8+DK1kkU#@hnO0EGeEH?-DS#DeI zDDGnJ_uO+llsu9=rab;U**vv8V>}1ELcIFCp1i5NRlLKzdnW`==$-I9k#?f`#J3X% zd?I{?e13d6e2sk5{8ap>`7QY)`Ahh_`PT)w1hfR)1=0j+1ttY41WyZE3C0SR3Vs&c z6%rOQ777+B6zUXO7v>Sx6ZRFpC)_6d3(5)Ah5A76LDA4v5pEHE5r2^fB3&ZblY%Er zPKKX+a&qA0p{SIojp!}WYSC#i1~GN9>tgrBI>fNzP;ql{gm{Jcqy)W$x`emHeTiO) zJxM7^JINHuM#&Ya6H=y9F;W#$KctzZVbUSePo+ms(VS90<#+1QsjsIgPOF^uK3#lz zP=-QARmMl=k<5@RwXBA0pzKrGaXBVAeYps^3b}cC9{G#%x8xh;e=CS9I4a~Q^eT|g zsGRXXQ+8%bkwfu<;w{A%#Vw`NO72RoFnVHo9(vF9mi15R`|7{e|9$Sv zxzKa<=k^RV4dM(woTof*d_L{`fFXyWjbV}DjFG63mr;cg)>y?j*7$=7wTYQYj>)*G zkg2=rOH=FxwF_|487Q5PGNq*JkR{cC5cOcml`bq3sZ|ci|NZ! zmqRYUv!t=SY*}pi(@N0_VbyERX$`l2WsSdb?n?HRDH~~M7i|2^1J%GzK65I-QaJp zQeU;Z`symt&BE=e+wL{fYY(qs-3{FDyRUiZdEE2(<*DPD>$!Yg=X&n-6)zpHJg;Bg zFz*8IbsqztA|ITui7(1`&(FfI-0#TW&c8ZT zvskKF_t*}^NyJUWe4KvVlXyt{wfGLC81go9DZx15#Z88remB3|I&&-c)=r{bV#{rz z+X=T9l8lool39{NlgCrEQc!oO?)cmpNL5ZPOeLpzqdt9 z`m@ZotoNDvvzO2LpQk@3l?Rs3y|8-G^-}HS%U6Q0vMVSm!Yh8gc7FY}@_c1em0Z=6 zYM$!!H^7_lH>)*QYsPBLYCGPlzpbj1sC!t?S)bMbX^3vXHhMSCH90g5HD74%Xwhn^ ze<%O0y!B*j@q6y~*=-DMx7&`;G3eb7!5`M!z1kN#;2l$)_MM|$mR$qgX5AlqjCwkI z^?T7Dbw0NCY4$aLQvcN0uiD@6S><#67nLvd1F8cJgKC3KUp2nA3~3Lw4a0`pN6wG* zjGB)2f4lT;Xv}8p`?&M?+;@-fD--?`xXFmg!>NQH)IZXu*`^C-1ZSSko|>(mQ=NN1 ze}4Wm#u_uV;J&c7cw>>cbo(ds&w^#>^2-&amDXQIzrLv zZc}gbGu9rvgbT$TZDnlpZI|zy-Rao9ygP#rz#s0V5%>r%_SN@$59|(>4T1TUy(1KFpfqyU+vrULN{Bo6!@pkk-yIH{;l!)fV8 zD;mP3bTj7(o!GgWc5bU7thn;E&|CBjJiI6P_$4Hzq)(kbtD>r=uAymg-q6U{#Povo z6&qVS5NNr3cwYDN_VK+D79J596&;g!J1IHkPHI|i-o5;S`wt3>o|cw9dtUzH<*VAa zb@dI6P0cMGon75My&wBN4Udd|8yo*VF*%P}SX}zKyz*-mx3#^qi{B&c9~{dC0Vw|} z*54%iC%M=`xhTLfprSpN3qlcjEI2zA^+`n<4t+~nw-8QIrJHnI=W?FZw9|_zTVc7c zg$^uL!EXIqlKoAvzsofVFoA(E1v@1>00T&`35rgXH_(-w10#Y;@9ipg9SH;;f7b8I!4A>argr0G%}0ex)P zAX36QdgqbMP15@#z`KW31oINIwyz(3y%Xnt#r@f@mi(!Xg30sQT)Ad1E?gHC6M9r< z$LpV^mlJTogO~gA?Q#ja-#e04mg)BzjLm}PW^eD6Xf$D4HSIe45N1BU3gyFAV_&MD zG>S_XKB0{1u}?UW;c>HQ;s{9MoI@UPB4mz$Tg6DSC|VOam*j3w*gw=q=n<+z%AE;F z!!a6`SJL}X61!A&wId~KH~LQ&tkGD=i7_9T;uKs)wH4-=-K~b_ zvQ`f*>SG@~$zh~#VD1j4(>P5hxGPqDVfFKw3VPQo&Us7qGm{gl_3OV;PqJv)aA!+x zjDAch$gGh4;DyG2&=PF^JON6+Jn-R9qzROvL5(bZd;YEuWpN5J^!NTM`~@(B1^JP#*wfe*xSAv;pBFcN(m z_Yu%;jy?j|ZL7#qKB}&gbwfV`&dnTNKGC4;)2KN0xkokc>Z4Njpvl(}fzw+#85wp0 zuZaGm8?fs-3O$B(u|h@%GQ0(54}MHIMQ?WtG{Y60d@J%kCzeZQZ<}q7>`+(KjQ-(a z#{bL@cgh?x^8vPd7mto~j|<=_lMS0THmoTz3GY^vNp8H!?<4q9Nygs`+I-_KB{ljb zc_^NBC8Q3tdB{k9};7s7_{_xzVxsEt`etiai3- zf&w-IyT^m)#T%^(=tX=bislY{ht;oyeVJ=OI_L{;E7rXnsBP| z2*61HVXBrEFH|SZ$6DgoQmN-;t65MtPMtVniepUSLt20*mBAkvToP@+@ zQ8SxXDP~2n$-{yC!@n|L*YxC8C@IObB!#|C(W3ADWWiKcyiSAsX9fRpz+G&(AfNsf zwS2SG6RiGEfB!sx{-eLY*o{9fqyNm8KQ*u}HX$hN&@3x*1%dSb<{2M-+ zUzm#RUrw%?s9)7@pSyK>2?$01^PQG|(tY@q%e0`6{9ixTPXDEL@rHYrQOdx*3Z;Zg zs*1nqR;djmxyDR#8T(U6>%KPmXY|8qpC*3&N+b1u-acF=n&FI|VP}E}ru>%S^Tk>S z--co?)9Yzw0!_tyagXO0#Fwscb)IryO)ilhZ4);?0_a6Q$sv@ZgECK#Tq{&yzvC7u z<9@1%N&ISt49EU;#uHSt|ExhfWgKd*H*p7@I3wFqk3}U{{tnpj>$_GUCr_0tWiMDE zL;X=CL0>S@^@%g+J@!R~m5zWnLYw5g_W+avxp*f^jr<`3esC#&4vBTJm@w!(VO`cI#+uiIlKF8SV-nX-UK!+GtSNhv|1_ucF6WyHXM*4H z>>w2*sIhB$U+ZTlS?A)@D_2?q-X}jPpCzoBHMG2GN|P{kE0B7q9V%8KBL-Z#MMq^j zPSi=qI~)O}1tioFfSvyZCFU4SKAtsbAmtnZ*M(T|Faq;af`CD;*-&|f#S35S^Ep5K z)M|zHctevQ1|Jt6l`a`Fq~A8A9CqP3?|GHa{%Yb6y98wCceE$!KqCl*T}J?mFxXcg z*Pk_V+lc@CQC<-{Tm7Pxo2yiaLvw={ADGuM1AUuqKHji;;93=~CDUJ_pee4;=wuv- zqvvXoXr`kJ*SI|M_($Sg*0WM)pULO`TXH-%GaJ_Fi zI4IoGbIpU%SiHi77dgubk30f8Q_7HA;7a;Klf^DU;y`9^Rjuj>7&`)fZcIIyaETw} z^o8;U5N&R}@_B0-6xEpKWI7%5py7-_Sd&t2!M>#aiA#K`61C>OhFGUh1cg!p?9dE0 zA=yQ$UOxiX;=gEHk-q#0+`{c;DVKyKF2nx#+&^K3eZ+8)ypdQr(Af)r>#wVj=54iY ze#jM5yQZqjdvIaapTHAS_Tp6V z?>cDnjO7ktN5FjNFl=8m`%l_Zs>o=q*@MFd37^LD`Jj($tuBX3zYfspJ0#m4D3j8J z&sQIm=hzPSH}@=chl~LFZFld7G*>U#tM&KTN!1bJ=Bf$$XWy*_)yGwA6y?v9zU$w@ zM{l>jQ_Oqx4p%}LpuK>b{gdbZ8844!mkICCU9h=$hJLJW!qYZzdZpCF_rrEVXF*ZO zf;wVHKrRUC{@8d5vO~?i4eI`ni_rK_+Vr4$mT*un|LWr6`cL=&wdMJba{e2${2%4~ z|5!PjykoV_4;(dk)ROjY^)*57RbR|@%yN>cxLYC7-PRo*%0odv+1|3Ln?H~ImmC!k z2Qfq(JNiHI9Dmk$nf5D}-5}^b{@{K8#0vs3dv}NwZSpwt%&})-foC6`mHp~d;wl#V zxGQx@gY8t{_~3WpG|mtR`r_x{ubbEo5Ez)aVnDq(Ma4E@9# zUI+a^@^c!in@VSfS-ioG-Mj^+H^+J}V8)Y? z>vBFIL>*30LYU6WS+}<&)P1X)A}Rg4YjW~kW0d&m7@;ai`);{wl$z}bQ75Rv*(WAL z(`CW`)|Q!U*f03qp+$$`KhB<%D{bq&X8>=J3pW7n}#|CUOm4fsCW>Z-A+CoE>j z1jv zv74P1)W&XVsjZi`jXmx+o*SdM)>tsVXQIz|*n|=c4b~c;0z)^NTJpC`8J!ogd^W4d zdFk|QVrT+PUAnpyHuo5cHAAJLu;xzL481s|DgDMEKI3rtN2KCca`<_FHwU#1${^+E z%HyaD`)e0R7QfXC#M(#fH*(0D=G`n1VIBQS#bviLQwTn!G5#C>`~3G^nn5?2>`rIg zCX}4q`yhkL%X->INhrt8S`lD4F;{HWn>SUJ^HckEYwb+8OuA|`j3+xcnGy$MfDcdK zPvOBd=dEyrDfpU=IRC9x5j!?`p=Gqr1$KC0WtF#MKs+VNqD`N#@7H>qO#0{%;CTe_ z`9SNbP_)m7ClJxRcY2dD6a0^Wa)Io(x0$n&&*}QR3+_B-)p`2<5KjcV4M2c#-7SB@ zxc=98NrzvmjWc4kv4;xlhq!2gp6aCrdud2w#E!^bHH1SIkn=qv~|WCc-odsNJd0p{t)Yw za6C%1M}XjC)&YJQFd^$VJ7Lg`s)24$Rua$Rx?&KzlGp>szK8;~YpZ~~+|%Z4{{&$6 zU7>O>typ~!xdZ;jxQmq_jp|;Tr9!AT4p)VLftlsm<%csay}hF^m}AtXLB%tDI%F5r z4EIyCF$}{~Jz2^}{(|KtbF(9H+&JV$_@Q)EBVLNI{hFwOYjs5Eihpgbu9wUI-f}zo zj!?u$fObi&9*BO#WvNH)Ka0>FuN$OuBHUUq{8qW6)pwrFmt)eT;H`-PTg6EMhc_9) z^oP%DDt4{$VPKj+c@|uF-tjU~G)7r#UGTR-sbVQ`(8-*N;4i$%pRWLzPahiI-+r#h`TXh)!|mii}DHeqk> z6FGx0y+kf}&-f&)(}hOnV_4Mf$>$ZwVA-ANQ!K$Fmp&v7(0`zs}F%{jlwP~i>FZS3>y+Y~EU#6Fh0_^M#L*mAHe zy&0Y2q{!TxDdAU!s+MBs8n4Y4a#5%7x!rfYv36`pY15>Er{GytY(!ARY_j{@o%tRG z@3L!%qztoee{LZg%4*|zj&;tjIECa(GK`;#LX#ONaWFFdaa>A_?{AYNz+X>zA3U#r z;qq%dJG{I*rdIFC4`~MogTaj)aPoJ}azt5N!A3m6n>$&wjmS69ZUt`4(5pU7h-d<< zq7U8E2CKintIkrJ#X7?XVyIqLE`;?kLTQ$#4XESq$;PA$Dat-?sZ);@xo12ccFisO zUDNsRAN|Rimm!968(2Fsa|fx6tV0ySHfDth!P)~J6FSWrzwP{N!f^$E!kY7cOuGC0 z%7$CcWDU$0MG)cLpgt5L(u}u>MSbe+U?T)|RtUK2l%Rz^f6%(^Qjhmut`&XT&cDrrGa1wd4fEHsuRw`4t{Vq4dV2(9F%)A zT5b5KnXShI@ln5>p=^Oq{X-Qe#;)^=^}Je_kYA_fw|9=KlgvAlaX-$pS=m1<7nM!0(g@lakNQPV#TfnkCNvuB?1S@vW?NB2MMQ^rsJYa(t8DgH86$ zqhX!Z6uwX{1o8ZK<|KDOda)5*(xI!VB_A$aN5u{B54U*X^m zQ2yZCKMLhC1hcYsgQ&)FB8MGjnaFvgvrXumu7o2YVrIOXm(%h4BQ;yIF$Ina)wx%y z8E2N?1BhP32^dY_aj%cyCS$1QHw+qMPzCtt5HVWDAHH_iiP&<^3I>c)dYU1WlcgO-@u@a-j z?I1k1!elBCHz5`-;Ue(%l-NpCwa#OT_jY&?tAX%S?HGQhg76b-cMLx}kRbd7vpwt4 zL$IAT1^^Z~2*SM#6kdA`c>vcrhI<=eeoyK>E)RrzU?SRVx%%{DiWYbxa?2K>d<3}p zS&)SDzu1m&Q!qw<9XlRe}aj8#R`ZBv_KN;L45c4e6;CAr-SL@vFS2OU- zGC{HN;G(-9aH9!H|ABUiIsO&0{R?u7f|LhJ{Q$IekDct6T;f3o*4{l!jqt?Tb;4>} zXLzyMsja5W<(+0>CFTldB{(;Cp&CerZ@Vdg^`_k7Nc*jAe5i=HfQ?AG@yZvBH4q`s zd>Z`PFu%9;TW-q%n~Li63Zuhi$yG;e}&O z+8D?eob>;A@IX5FD)kNdP~D#~E&d#9W((cPrH{536V?am1QUMK+f3^aOvL zQ$k&nrl?GQ67p>NS$Ext(-+~0KF)idAA6~8d>vn1CUU^LCiC}*Y*YBz=Hkn3MVOg^ z*-tsYg-T#Mk+4%zV%X}wNzxTi*G9-s46s0pgDo(I8IA;fc^tfpcXCZ?DoB1)`}OVZ zpFXNyRcf3WbMZFj_AfuqW!=6UGx9XGJl~T0(f1@9%iOLV;4e3J<2g%Gu zgm3c`tx(K^R(<3`v1w&p@35Cs|LxB(rE}J?3bc3WFzA!vaq?>h-{fUC1FB><bFyUK#ygv5Yee@`x~}UNEbuGeps{iH=Y_f;yoA;@7gJ?|AatPZ%v(^4iBUcMWcu;AL-p4n6zq_R#x%8> z{oHT8ZGXq_qC3g5*n>d3nSn{rodY>6B#X`G^^@ADqRVeln ziXc_>_}#sJZ1?&n;Tgk%jAo)4bhrjR_Z@vxHC~id->Q#`h1;fg%u*25A~6E#$udio zQ$0g^<=Ts&tN5bbcHBY`gDZiv2izd`(s*%IQ|HH+9XJA^-j7N{2ueky+kdHWjFNJ8 z(37jZmUFS++4;V+O_pBL`nm@wlSrl-*JPOGsY<1nAv9-VDH!7em5&}*Z$ z=6(?4$5$_#vI!TiEl^4k*0yJR3iu0hFz?Ux+vPf_$Oxp$1zyZ8JYg!p<<^w%t88uJrXPX6I4N-)Ko;wH-B#ycESlB+gc&-8_8c8wV48WXp8 zr6F^L!LfGBLXq&dyggH!6V>=ktU?#F*1)0Ht=%;_PYw<3h6nmeCPT|Z-!9w@rMpHa zngF{9n?s?QH$jM5h{9fiP2Ip;uRLqpCR0D^NicZoT&8v1>En{3b8X;io5$E-RtLwW zV8wm;`W3CK5yKKqV9v@kzLG2YZ%w3U;A!`N~F3s=BME35fg$p z60Qkdq9Yp8azPH7v2dq0QWkn{f|V!gZD)XF4kkO3tVQm4HyThJ(2MsMk^C}ut6A80 zF2a4y*@7s*iF<1~f}DH$m8doaOHJJU1TJY~M#cdBP$80cX2qt4BmAi(f0L zP+Q_<{PZj~pf^ibkZ?gO^F}Y68sV#LbT&O|;QoN9gK%Xxi({<@b? z^on8pgQ(e#qDCT@0hzg(5HrJAm*kkQ!*cQV5%oF85VTb)@4gAfYqNKzP@Vp3tnq>IzDMft+RmE7bjd2V4dG!Y*= zzh<*asqCbzgO-V^hENTz1tvI`Ym|aT%?LtgUP#rCWZ*jXQ`ON?^Q31ZXTHqOHq9_Y z>IW|o;J2?$F$P=?9^rqw#(`J??f* z^5xpP&$wLHLqom6y(X#0yR$c8>}@>Y07` zb0@9{MC9}+vt>ztmp7GMpv|JSIpmN3Itw7@UK{~6=-$DJ^100p9qV~5c+~YEF8hhW zSCxyAjo8|IiZlbgpQLr}1a?vCL2uO`RAa5lHdX{M!t~?-w`>_rjV~ovmVYT*jpS)$ zuT$gMIvd&(Q~L5`%A7tlDZVED^9<9NHdvgZX(ZYV?+8g*jqPe>-w8fZDJ$ptGn%3= z@Y1NB{T$On7HS~=LP?!nDfIgu<|lHofM^7|A>X|tAafkGsu|al^TNU>l4`8cw)U*D zff83PuXVDm^~bCFRKogP5N0qx!1CAd?6(iRwz|_|a)C^zcqm7R#CUaofz7j^c%Fqw zK8lO`l+H^Q?yqHg{E;5ga-%)>v6gY`4Kk3Q)K;M1sTVo5jx;IC12 zli38BAR-&O1I1ICQ?HOd`<4myU08bZT{(Ja%G+V;U4S)LGbK=*6{WJTrUz|-HuMrX z6Bkm5T$E(`#zS^k`+K>132b@i zE#A&|p(ml(jNXVt(}rOLTJ0lrb7Pu3rZxT()jdmr2yVlU<5RNF!qalS4;*F!!`EcC z1H7G<2KMj!dfj}O@s$=t&{U5{u75+%l_9ArH$M23;gV5xoEezQ$Y=3$@iQ=rvnYaG zZ?>*D@no`DEKE3l0LhJMu=BECYQpY*H*D_F*uOA;gNWE$z@?Ds@=N8>;F7yWpu9dX z^qQ<(YxN;i!<{4pCUX4H1nI^!q?-aku6#phftBucg;d&R_#+Aor~KCvgud9rVErhM zuGAG{N8k_)(EScCt|03bh#b85ieUt&AmdzhqOj7iHgD-!t@GB7j&V8sS9&iGE2{5p z45QhPfUD?4FyUS&wNZmDZ&!O`e50ID+#M61xpOJF*0KImG^oNU5n|*ocuaiz9vpiY zTyhQ21`p-4J(%&XBHQO%HPg$==Fgw>X)hLt7ZGUjl7tb~^`%2Mq9Sg3^h=QYJdEqt zE>rGluI&|C@9PD|i&r8Ng7Vc|V=>-CwGSL&0V zH@wTQe41s#WBAcWt;b$k!5I=R&sYBLo&^Q&fYZ=h2h!OK--{+BO=6$4+#Gd_+kfcGU%5 zxv`hZy`Rg%9DiK%X{RMC5-9N?Qo0o%1-B-k8rJMd>Gc(rF&(DPUWYoBWd&@JUZGVI zdaRJo&K{R(Kh9!9%CqZcZ}JAeDXIm7*1@n&$qo2JG=D26PR6*c@mrgyH(9-|xmEZ)Z;5DKOXf2DKzH;9xkeqx!db`~3Tsro ze*yGC%b=y_JP(FeAJ^6t2&Z90PBgxRumCPoLjvj*5k`o`@gEwEA@n4M>jkVO-se^4 z&~b>rUQK&)bH5hotw$7tHUd=Ky=w9R5^s6df+U-TKG&uTDkD($bbJpK>x|;@ju*uh zG*=>chqcW}`7fe;eR?MXUQ0A4xnO>0^4$;-*`*yz(5@!4gyJ&q=_(Q!=XCt8G~#Hx zvjGAFBb48lZSW_wuG!AMOlR@Lb=lyqGavb?`!x^6$c#4+8K&dA(GBs>!pm2AT~A_p zyUKJ=W1lz6J`Z`}=q$8^80oL`Oz2yzIJpTI_zH2YIHU(R4s9Yp2vD3VN zW%OAQ8`&X+wkzDf=$u!}tDa+B!d7EQ=63b_fb<=l1h?g?Z8YK>gZL4baE5zn2z~K$ zlNw%EvSjQHlx5F!-Lz8gR2F*m*fUi_Jnv`SWeD6S%9_k_g7l`9eLhajaG0#SEK?}r>!x^=yO9}4!g!dtC zPgZy=eegV;oh|24Ubj>jQkypzRe>J++}NW1a{NuwV}#406%js0j9&QSR=>#;mF5=m z0$yLI`g6V`Y2c%!m@9C?hN5W_g#1?s#)p2yO9XDLLNAmVA%jUhi=rZ$7-o0Hc-PcF z@V)Tr3Z;0?*&3_~X{s{Xg$uaSU{~uip5uION-}BeyuX(p<=yB#Zf;QdzaN2|3dB#e z*t~C5Jp%aU-Lt+~ih_P`rQG{6MV9{|pgG?;4*`)E1RZeOOD z@)t3l$jOA$OR4IYfpu#4AwA(|SW5gbq3}>X3ffyDfR#!u)*ot<@^Lr9$u+&HZz7M> zb)_%y6iIpaNaj8Gr1oX}X0{wyL)~S~f;I$oRZqg^gF0ua2_s#Zl~G>vE{VTNc;5Ok z+QVuqCr%n=m~xqkC%k6M_&5-+KX9WM4mkn>HdCQ*gF0C6v{7J7nuSsGu(Zjj5ro;b zu^dx8;Z{qPxXjO!Ho1DLZ>(Dv`L`UUAwA~?zD&PG^}Kh-zaTZ~ipNisb}-^7owMx{ zKg7toLccyWGkLqn=p~1V*wDo8% z(>UyMyPZXBsrS#GF_qfFy}%$1QBK{+MwWGrU&F0cX@JZq+9P|)4CA#fgOgnA2Dfq& zFOs=%+)IhSZn#utR?f$IMJ;;cosC7A>P$j;VG7QiC^>K*&B3r>2(|Ipm{?GOB1(qA z$p+O0M}QA((yQkPs9)|TS@)vYReEr|=_)9Njr$vZ)HTJ|Zo_lAOnSH=9cgnbk15im z|8lY{EJSWFW3nfCkc@qp^l$HjXrn^=J6c@7YhF_oB6-i1*?-J@s&P5%yaU;k83AWP3QwdvmIM zzN~~9cRxe!b*o(X5dduoOug2?zN*J|Zs3zy3k782otp?p*-bbUtXRd&u16n+A*@Na z$YQ3L?4)?v_t=4F;r#8<{Gt|qFU|`DXL)ae&&c-3#AbsH3D4Ov&c(T)?t zH)Bx=bwNZBtG$NFmvV+G{x9E`)0O> z4iSwVw=-w$wjGP)IpbPi>l}Sb(?66$&oWCh(3WrA@3Zt{#uCx--$c9WS>O9x`+Jl5 zUH9!c{I6__N67a2CeYaDB>;SL3m5?!HrgdIW3f!JfX7!@8+ZL> zmG3yz@0&_Rb5OOE^vh*)nfp2T7Ys_DF9Cp8f{f;0_a;ClZ@5uPI5cYnD zPHZ=aFO(I*7`*2woa-;=?!+g^_T^{UIj@gWDG}UD;D+Oh_%FzY-mdBi0Rvpyqd6$M zYN{8G(?nDF9eaK9yn>vmc-4eWf|ld?0p$iep>|=bOWxp&Z9fJE)W1ou$#h`NT^l-& zOt<5Qr)Vp`*LS=^`1%r>Iq1>be?gN0+9DVkz(v0gs&E577LS3;P$+fVDPiL>L%!jNp)+WF73K7h!Oo zC@|#Rc{d-x+&kgryn&SWi29yU!e?@fgZSbVqw?@K3D2qsBi)mEe!`MCxrNzPyXSQC zYRa&gxSUr{mxr#f`u_BO%xVp0?tBp!38sgdgefrVPrNvZ>;!-Glg(9fayY)-Pia+- z(`YD97BsIL-led2;Y-Hvqpu&!{)u!KJ@+0}*SKznt(|Sx<;Fd$DxHthJjqh*Ugd+E z&6I;kdB}%|Tnc6{%sH3vs#Juyd3cHZ4ao-c&ratpQ6=PI0t~u^MO!WTnwn2q(cP4| zmZky`%?u5`1N2F~6yM+A0_@_j>G%R%%KFW zS`jN6J0CZlnYjSYJjW7xT){K!W{>72bm@;`9VdgWkHk5Vasl`9o8$J@4Xe>twqJyS6&yU2*N3Ftn9SEV(@?k5p7i!)fp3RlE z(`dM*G{Hb~;;v$Mln@tW1R+2`V-&#T8wQ;M=0Jo@>yTVg7M6*&!_~JHKL^OW1>^c^ z4Lt&0Lpont|KLY0WcR|jEWW_s=3wO|`Uv#_> zw39FdVj6qkQ(hQ2n3}m&0s({AK@N*o1mpQftpzjC+Nis6na+#@&GzdnD0WL^Sfwe*x+W+_4ivBlm z2l{t*I*npoQvxt>t_k}Yxbbr*7Zdj19xnZCyQ1$kVH3R_K{u8_*U~c_Nx3cExSwzY zv{m%p3&bA`U#5O^Z9ooY+uWEuANVBM_I#lcj}0v(WxUe1GMknla0NHLQ*hw&sC)5l zk4FfXXG1pfC8l1XjfPNdHX>gwU#D|!M&OE)mbNj(*c#;vEUr{7%%^msm1--CRx z-dJM$VYHquT0wJqT0kf>2A-tL8l~lg-FWnExr3=zS8~Ep;{)OLr1bqbqfYyXH9J< z0myyYtci=5W*4n)(`tmj%ccJIhH=Y}k@6X74lKNUbK#pK+&iCV-|i&|Uk@S}u1Bd` z*I{Wd?fw)N7z#jW9D11gxcfG|>Gh82N_?W2F&=)gt&IQY>N-MLAY1y{%dw~!E34ZQ zDqsAxoXiE{%-Es^*7_}!=SBmh1RA<1^41xk%W%y#Stq*|$sZ1R%ACLnwyk*Q*syAJ zS0s?pG3|$u8KhX9(Z-SA@#MLO#7VsWTx%kBZpvsogX9}xZ)YfZP=w9q!YKRZpL8wC zK5gzu3JeXivw2D6z`3SBb9S9xaZGw&|0+87U03icP1NI8GrRxPN)uNhVj~&Z15Ja?8mlr-aj=eT_9$gjrwwb<*0+sbTYG(cfZEmg`hl+yLoTq? z|8JcCo1>Y3iG>qY8Muv>*=)Bbvtmj^9g!8ru z^}7e>AYjRSWvOFo$~BW+Y^*cu(L|Yt1gC{r27;YQOQI|Gb<9%Na7xzo2QLkKr+bXY z64V`KhICI7jj=&@TID24(&tuoVwZFH0&jPxy;#*OsaLy2rt~Q}h3&3-60%@UX)tte0oQ|!zeYuw%Bo;H8# zQtGTF)A32aSA(V*t9{adGqFH!)Tb%{)-egsdHu}gLVv+bWOFKZc5VTok0tK;y>N7> z{jvm+_Rj!J7uIZBqp=qWobAJK)hAw2xKHVal~ZqiL}Dt4isMqlI}Wy|$}-ND-4#gu z@Ul&8ZJZyKa={Grv*GG;-G0J+?XAUYvq3rik3HI&r;BZ4W77>J3tKF0XEkId zO2D{i)1aYf)la>|N4zP=;l~Tvkay!MJzynfIhiO|N${+b)0Gk0Ejo;hHUjoBlZ5UMY{;UyKde~aQj=%W7+26 zU}&QJxnptnB_^(}!n88%XP)D1>4+K1r5|^RRR!O&@gt;=CT2X-DQZB1^ycSiBqG!2 zt#$vba@AJgo-lJ(9zjvB_-d16@85%1(~&rH&%|_2H7ggq3irHy21T3msdouN$rVmgz*dmEQGH zWw7_E>;7yp!o@ATq*--EPFBI^@y)u0uY6~&WR%=^d7UhFYZ?r9e-02LGA|lInVxy7 z$)HVs{O(ha*YMI_ncS*f3-|(KN0<}xkn?M6aaQIIb%%G-oTD3V^17|%a$RfQq(xlE zDI|oY)C`B4`fs=zC>k32D*_y9l;f0JRmI)963wmH-Nm2~F`4rpGN+?-^9KlOm)^er z3T92@7V=ximQr+RW3V+p1o|_RS(zNX9-Zq-Fa?(OIvYis%H-I!Xdh)b*Z@o!>&&%@9ht+ZZqT5IqV(#3}!DE-m#*Q^sLqe&QMKFX{7y2=t{ z@vI%3wv*AcP0DnB8>1s6=f3D`m_6|$fcfU;fZ{51_~4=P%4&vjmjW{fL?lrAD{YRY zBfnZwIF$W|neZdeaKzUw^7-o*Sqc}%Dp#S*yClgTr{YIYt6MYdEvCZL`Ilqz^iJHf zZOfjM^XuY)`_v5AGgicPBR)R9Ze{F05`M z;@0f{!#K&tYMopES`-jj31=18q)l6&vL6YQue_Gy>Syqv#B*nt@AZ_~OWDBEBGoBz zc_9`}won=Ct~T{iZ3hhdE7v~3`))RBr>Rd^-uzJcvL`RQZTfeEi{|^i_0;?W;U~0R z7RhRAW=u$y-BXf*Ih8Z^d%qrz=dE?<7<8!(x_io1zP+@;UDJP-&VJrv{!wL`J@S=b5%ic|A)IdXrP3KV2i{kgsTCMF4HPyx| zehtsdN7TWyXY5>O~QgDoK`h) zSpn~7zI^YyTHwJh@$|!k(LGK7h}U*~8B0b(IRvuGh+q#&tMb`?K#&)s>!DN7Va)gz zXGVj|;f}<&%Fm2JA~hx7JofLk+?5av8-$bJ`=EGC1zrbGcf1X=(ttg)#eqe0>+Yg> zlwX{ZDN8}I2*sH)CP<%9{K}e*6i#lsr#vWX;AyNavj84;VDG)7 zn(EelVeAD31px&iDj)&^N>y533nCyQNRt*7krE-&K>|xf=|w?6L5PBY)JTm|66pde zQX?RQP^Bl7uposy-S?dRo&9>x-Fuwx-207hjQ0;l))=fZ%QK((l;884H_9p!F>^=e zFrRjH?+$2O3k}!Q?DMm}Z2U9yWWkTKK^}a~`d+OsuZ3(Ms`fE$r!X3ojrh+@w?_ z#QXU2R>-(In&C{^tJ+FzIM3;Wo@NRvt&!8)3*I=KJQw}mMr^Bk_c|9p z>rA(%Ehf7uQ1N2L&Fw=QPrN_K<4%56a1wjQyik;yYChuBKM>JJt|S>atu4QMy{*z} zEs;0!*0o2sxnobpY{XR=bqZWY_eWy*l;f;zBw9|~bU553+HgiHyl|}h6>%_qcpzAO z%fUS!r}BiGV!TCt>pNY@isFNYE6*=%Tx!~s=^Q>RQ#K)BlINmisBJmeTF5Ny*B*{O zeQdU%GN}M-;10Qu)}g(Xt5{)`DGQraQZlCEoL4O555FKBe79+CdHSj!rfDtd5$k+k z=Ch(E-y_8*PllNADAkO-%T44+RFr@C@WK|`T5M%vdN4koZO9KkhrXI;o>z4+f7L$S zrMYj7(Czi}d%)>qKg&9EGLT_MyS@5x@`Kb7Q}#&inEkd7huqCdZQYluwUSyA;{7%5 zuLhVn1*vvvYNStD1?IOTR^)D<+xP0`$6I#;ytQOrT6NJTV{hjZFNI17OlbPDWL4_T z#_UezCLq)!Q9B3MeHX2L`$gD>t-kzA*?vh)_mU#rj%N~II0R}-hVbo?@7^YUYTCHpkGR%ZFSz!` zLuSzGozwS2ADiCJUpsdqbH`Wr@&e3dL4vKicC*u3=<&iNBNL(EnYFqm$(OB!;0>D< z=|9X;Fh>}-BScmG-(1lK9SAgATj%n1Xb(M}vOw@?y3djD z3#Crmss;yoIxt>s9yAI0suVRU_Oj<|9(|(8PL?*XT+mYh`Db5FGi#fBmeu+FNtL6( zC+D@X#^*;DUO>>w!iP2#Jug`;rc88O-Mx@_*CUc?Ik8%ou9w)y@EXGwN&BfEZvIG} znNM$Lr=W8KeF!gt*n`Pls#qyHp;2r*ZOU@es%$I`CsLB0zA@LxhEK~`)0K{H7}TWA zoS3$HJUfmXUk$qzCZlv;cNf=JMM!ideqlK|I=!h7Ab=bHM`vZ*4re9j4_ zOf`zI|Me4^%UYKeot~X2UvZFKV4#Ft8HGBg*1-XD_Jnhpy>VAow_8-_ z3CBY`TTkUKw_Q79nCtqUV(@czyi7)oQ2pLmN8rVo|D9|2|AiO&UvQTHcU}0;{`X(& z8cClt)Q#-TrmoCN2GAdNHgR^*C{c1trJY$NhE}y2_~McSb^DI*u>H7eq_90L7?Di+ z$9yBn5*qr7S>?svUFX6FDgk1SG-5^w-J8~RvYXaA zaZo!h7e$*^=xySJ;p!k3-#HFoN605RBG!&Tpk#uk#|v8!jX@B8`nLZ%*O>%}c59t$ z^)PcMs)ab}hhV9P2P9R8;t;e9j;I6k)H+u?Ka2q(&WliO^+E))=kp>bSO(nD3~~Tx zW~3n*=2JjW@lTpuWjoMhkCs@x_@r*9(9<8YrdJg8wC)QmB5NU7di(|R4?nx628fr# zhqb5U>r#y@Y>%`x3OghwF}U$dMNTVvXt_0)ql2dnFi^3BiJFIMj38iR7tg1w^TOUqGaw6o-iS)#>;MXOCz9HODv4$9MTP+M zmP9B^wzPen>kjlt`!Jk8xT%vPgHwQgn)k0la1`hK1guQNyH&pWuCw(@I{opg^ zQ~pOyUK{fYODXoFqF({=h@Svff#)?l;pjW>Y1GV8)uJY;;Y?;HKn zHLs;bl#6W zM6C*$!?dox<@|f~{qdh|%R`J#jcuhq9`m2HQJbv<$&X#XW^FUOgC*om=e`oxi}l9W zy|R46->s__KjDp2b=`e#KcP?CTt?8^ewOM7K+?a~1f{v$vYfvh?N%)=N^~J2++(hm!tzP2S(cFZQ=ath5031Z$JtA7>ie_$T?sW7A`oOEdwNzl8)VLaZkN|F0KO1HkVv z8Gpdnm};DQqCl7C78(dF+wJXA;T6!qczR||7FmB$K0A2(yX^&^Ij)gY5}Ur;(}GCp z5Ui2SxujNuV4Tuj=X%p=u~=klqZd;@{PQ~cX0HC5>PU-t52&f2dm#RTjJ&=~A1921 z_rk!c;ta{EZ%fQ@BL7q)I`5)mVA{#R&C-pXOy9__EG*cs>TPJf8*qyhUsj*GX#3Hl}OmWicjzS z!#?iaf4X^%z~SD(Jmt5@2#0lP<*3j>QH-Dqg_k4c6m+7hBb``Y^1iC1RLMVG=tJBo zY|Z$_O`q=H_y4+KZ8$=Da8LGj(t`%PrAHro>5)Zxkx9bDX;S$c+?x-0%*#>swN(`J za?nRe7z+(6^yL|L1|4V{z6iMlV0a8N(1ePwFZkd?{m=9Yyj21clh{I-=OGR93FU>g zyxeQ zcH#KQt^xZXxB?oj!|ny3(MQmlp$eoSuymk_nYE2mjbtM&8*vQ^sCL8vA#|N<)UpFP zBZ>yP&ZNN9PWat>9N?0cP*P7-CvUm(1oBAmWy(x*0t=C#eg&s0+is35E+kC=L_46Z z{reRcUdNKtQnAj3L&q{1PXFO@W3_<&-(QgN_p4Vsm&{^k^6;yS_v>7w+yCM6{$HP% z@BRPrKtW0*nqM0$)1nSy7?$GLG9>(D-rwgPKW@R{J!l@w*;z#GzHXL8B|h6Op1o$v z<_fw({x3mB3SxV?IXe&2F^s*T)~LrsVE;b4QFZ>N`lE2?U2S)d47|Io)n&FOdklqX@M_UG+_-AL#xyFjI%(U`Le9pm9KmHsThEbqDoS@wljr|UuQJzsz%on`m>U>T{D~i~NG}4;>%)E{j+!p(yb9A6YPYNcdzEYUI+sWW=kOT2kn}Tt5E^Rf1PsT%_C_JphBWab`nWNab6=A>YG-eL9oz+IY)$lJ(F(-4V8muqT2y2@os>7T{2fd z(yYNVjX!}U><^*wYZ5CsSg~}SYvdVJuSqH+v-twrSO=^iddt7R6zR*JXFW#_AIA4h zb0QihINYvCcmP4)L!Jd-LY?%KT z{@d5w7Evo@b7tYksG*6hKg1{QF|GfFW!Cmt@kg7;v6iZz0eK0>y6etJ`pO=wb+>M= z#`~B`ZJ&iIbiqzp2Qa`+m^B5&0TQjOiv%wtXmnDa2q&_s5yO)6R^Vva0r=6MmM~C9 ze_D*>0gCWN*sn=HtFX6$ zt4=lnilGbotxEx+zpd;-1;zuQ#FT^DQN`q1SBoYwP1>$B1dSN6XTa{uTkH2{=ic6z zIelC5`7W+|qeB~Y&ON4g#ywWMY;sQ`&)Ah1E@@mo*eub1?{I+AGU>-U*C$ZEL>+-j z)!0I@Q54u}3dOn?3;R)Kf%UF4GNQ&2tVmkt62l+BThS(F_R>2WwZ-0bFU3Bj2$tDO znGs?ZS{QA$!jBj$PcFV5Njxohq%i7@VsYH|Ll4j3Q&r`E@6~S;rOVQYXMoUHIxjtC zoojol!8%tIP^CPhzeXsS^=pKrevOba*IzIDcj5kP%>ELM|3vToB^rN;#{U7)0M=#$ zD%wsF)bH>2h7S4>>IW6O3ub%1$_{v%;*8%%Y`N_ne(S}Hhg*HGzZw#JyE~he)m^w8jQ1P6U>!5w!Xm>n%}q+p$~0Eguu*ae%(-N`HO!aW#fdlJcAMHA=CS z7dfw2j*{+bA?xlji?OvWUl^#4TSdGvwU~hFk+9r+Xb_iE8Xqk!e%NRe%Z|>+I&E|i z1rzFtQf0KGsl&%;=En;7KjC~{-~BXdwd$Ua-8eL65sQLlywh@+0e+KBtf`TXw~__pWobevm6g zUy1V1@UAp=_8osFKDo}NaD>&U@bJ-4;bj`s;aToFa}a~!Ez~~TZ$RZ0 zt{Kh?JA7X-$&eU+gTNGf#eZY3pqFI%>iu9-$PJ{vj*(_1sYv*!d>K8s4&tejqJ7=1 zd!f_&i>$TLe)*EOlUIHWS{>0N(>@z(Hr>wKLc*2UM?KBE0QJDfkeU1A4 zmCk|kCb6Z-*@A@wr0vAyYDvM_z_#`&**2C0Q5jBUp0X~)2RIL*M9@}xR|8)S9L0+z zX}n&T2rn$Ssb}e6lb=XEBYF3u8*+P4Bd8>6nmx(964Y~#x5m)X2DNJnQNnI$#onTe zmM7e7hd;gu>liB64S&S#z0<$2UEXu#7su-zmh4iz&iu% z+%0l+!t4#ECA|3Yo>7fRBx(ywl^&Ew)$(l&ZRo)ZlqTk0;yIqIoZ9EJU*?5no%AAN zoVx+^!I6Zny{U^{-g0B5 zfpJUt4wLE;#X%|Au$`6_qR(EpiWI1$f;{9Ggf>u4cB;Zjvqr{~!dR1~uaRo{z%dR% z(5wfn8L>2lS`mdUEGYtnz&dCj@>3o-*AR=&`srhJ^-|n`!M#M2i(hAjXQSoTiduJV z>@$zdZtHG(0S&1c&5hlgbqFj|%37rgr$`^G4$x>(a#rb3}OM49MS1DbXz2uk#OOCK%u*$X*YM&7bEdw>2(o{qbF(Zjs! zq9cwvl%#^$#a`K!_=<>uG6#3Pg+b;u(leWQpTX9I@-q}wErPK~I)A-ypKth48aZTkdDbexj~f2Xy1&`MZ}!k_OSz5>5r@SM496&VQ8^A?! zj$p5JS6yhIhW23Zdb!FPl@wRMJfPsM2VmEp%=fROZwA)yea7YZjd%!%n{F8f5IfA! znc6=|Jac99Ar_Q_nvg;WOE2KfG}oY0&poSV_qPoW5YNCDnfiyak2W2fcr3Lk-ISsj zrP3qYIv5wt=J$!$>nEQvEjxW#iK$6hRZwE~MLKIZJC=M{1KQk^X${qwOI$4$yUHeMj2%aX_kr zz&kTBGOJK;)ddPUGV`F?D!Oing=O-*uD`tNV1VqjrA-)ci*8NW{P)LObL8hhmFDy6*s}HbB$iJ!! zH%C_|_j7g_F;(+D^@M>pMQG;{2wUe$I*%V_kV@uZiELJS9>aB=tJpOinv}6dEA%zetwD$k!vish#jZKUKGK*ycQR;O6er5La6*r=f zfLf%xuX91W|HGw4`u*d7fAL?R_`g3;kRpf-kCftQX0bdae4i=1m(um-IY|(zQ{eZY z@hjdI;Xl_4+L`??08Yoa{#-D)RtFG2p3tX&kx+KPByMfr@~YNvX4+C7XZKZhCJ_CIG(3;s9`wwYCUIXwD(%862^czk!SH{DP?j zzlRz>taEj1E^_Wqfg8Z}g7{j4!Z_-l)hDx!kAHdb`v* z`sVfWxIyL=&TGx>W;0l_B{begSTvQF53Ah6vZrBCG{+F3nnXgHK-yPK+2nT4Eg!;O z7gh4z)?&l2lG5XeH?Q?aX_$iD(+Vj5?1t^EYa?=)#zD=lEZE*V|Qw|zDY`*mB07+>6c2de9Y0N6_o2ZBB{UtSnQUw94KFQK31ST&%De;`N9 zDQ;KSF+XUM>9L|%J_lu!St9TFM|$9mVZ%roQHPYDJZXtQ0u=h8ip(rw!tb1LF4K_afCqC~&n zwb!ZCN<(($9=R5?!3L`Ud%uB$ChDywB1Su|3yzrf2zF!Kp79etGnG%&CD_QDt9-h0 z+4{I2;vup~_i@n1pbnBCQ3gO>!{o7N=y9&vt}cTMes*8Gde71t7!H;RT>>7~0mREE zOWiG@f70A;ZNWC10o~v{pJYsL+ifsCd3vlcvtzkI&3Ya`XM_3!n+}4x(j`5frEi>C z^~MP64pq(zy(MrJU$4`W-X9{ z90PklFy(?8>;%|PtFF?K=Cr}r!`#!jNHLiY^q|6uXS8O~G7y*yl&g0?Y#DletiLuz#7B?y9>lO%w>6Kn$kMpz@1<@DPE%~|I%^(6VSBk&dZBwsCo4^Yyo*V4A|tkvqV zd5vmc-*MKmW?dbEb{+yQ8Lh1@1+fdB9!?5XAo5Ko7ZRv)CLPlTaT6DWlUUf^Ttj;a zUiAA!v$&()$Ahp3P1804sg`1?!v;gKA@_VAVKH=Moz+CGzlvu%oY*scDakZZ^wKA? z&kDCnRAO;`<5^RYyQcTgY?D|+{nKFwyMOob#iXPu?>nG8`v=pSV3slO8!!-D-x<&x zI9&<7OtHnku3>>)|KSO&EG(7D5-Kk0(R9zXV(qTznOm}4md!hzWTO5~)+_0O>$8jZ z`Sx58Z=$;uARgdo7fE2yHdMI}rJilGp?@WSfcoQ=dkNrOnzDI={e~H^e!zs>@kFLv z$N0_r6*`QZiG{i%6mFL~3BHHTWE9MY#$vbPqvH;L}`% zcIxpjaZKg_iS&X}J@aM0kDnn=Bh5eNzDy{4wvN^1kXPE!<+jpZ~J}XKF z!i}wW@%$x+cAnV#WI{7Jegrdvp~eCtXsKFUxK#tA+O-gi0O5)DS0%|3r617W1$P8} zD-hA(db@MRtLCdOk8J9167l;sQDP&Wn(6Q`uM(ciJ~rT5h+9=+ ze%Q;Dt3LiAv&jKlnhL^Kj~?3PSc-Ps>NDf+JN5mXnJsW)te%+R1NO3^-2c~US&6FGtaM&cf2a@MKgW0v%f7udDAEzM6T7V>fX#h@@FC4r z*SJUX0s2m-c%yg>x23Q0o#Lvfi6`4GNB*`S$NnZb;hl z(5j6U3oaXvJxl!JR_;TJ8`qPz_9mU99Q&8{{Mcn9O@O}yLMjij!Z<|+t4V{gSUj+x zhen~*^Qd~%8r%u2=tA`s-rt%7k8rpLm|iRqm=3n-YEXbk*~+?1GYa>f9BgqaW$w0; zE|fH_i27iyY7B?8qY#1si&dEOzfq&im*Eswo55KPqi$x7!`9!UAwV3^~ ziEs7m0l-S$8XMRXVYqcJ0CtvDCv)~D1F-Xcd>ue!i!*-0H$Y5bJDcc*6vax?HxEkC zzTh9`EBm`SbQazb(|GQNIqddASqDE20+e%Aa!7!ZTSWAj^Lu@$__wOGE~~e7Qr{6Scl5MGSp?M&of?tqn5nk zX%L(e1g1jcu}!sa@gM{dYRdufd^eIPM0?l`!406|gw*HAi6)QWIeV;r&B80*o$1wN zj;JpaAVS+KSm2>rZZnWa2DL4PfOZ78riO|k!Dn1Ztef{WWg=EUxdCNX2{6}A)5$S)e;7gsa!wG+CrJ@A@u3+1)~F)H$aqux9UcLpAf?=wkAysUZqlar?th} zS=_4O!w^rMe@&huzWamru`*Mb{^J+KY_tvX$+fA&Rh$RkAY+SVDBb5m>UB zD3Qc?*0B^D+9&mJ2^VZ6I=Zq)^iM|r=aJSe}VpaGcWq^^iY8P)Y*Ws+uPg{#%Z-=S0fEslKi$9W) z)$@vme|%?omX{G4e6}4w(s?~*-l*v0)UG?TqdUb;xeLeh?IBfeLn!QJIniT5a$qPG zDh{2g9Tb4AY4J@6T3MBd`v^kFMO%?pQ2u^x>@y)rm2x9y_>xVpuIs^z?~CIGT2mXo z$Dv~q{J!F}$#)HUyb{bHNs+AOZr8$;%kfdG$VSQ=8FjaT{)GHWttF)PPkcN60Ytlq z4@C-qJW^<#dU@H%Zsc%N6J-+`+T$fMt3JGe8oRsZw)~s&;tvlklgB+}uC<6krS*pu z_V=sq(1Pkoumoaeg*GvCv|!kvz;k%{7owWAg~l8f3X``s=^QJ4Uq;5;6G-KRN7q7i z!w`qIq=roE!f3>Z;g^@hU-?%&wShOJS*57^1|`{Yln&dESOK7bwGwCxpWC z62e%Sz}mzx0#@?`UQjT}Nfr^hMu^rlc75wo(H5zxcSC`Z`pDfD7S}5YL7%=opy*88>+p1io}m$DN&8Wh+_1u zWv^V;0=xDQlRR^;ozZ&vR6j0MFLCpoi`r-H9qxQcl1b@LN*T?NCSc_CvJ!KR$9$?V zZ*GpsTTbH@^2VdgiP&~@M&!7KUjL#@1p7D)qRyMMU=gMP2>)m;<0Ejpy%i8Jp~*b? zG9eG;r>jR#i}cTj#b-JQ-#ZpBC3o}%Fdf6W4SX@jk8?}M^w=oIlrVt4erSi4gbk@8 zu@QsX)%5a$p;@&*Xgtx*8GaXbi=63_R}r;06uSE3BF(vW)4r1#*8|fGB15lBJU{q} z+$t%rC#&tGYqvOVObBSv%)xsPvU<8&1ooBBO09F<_gHiu&HUmz+p>wq!A5@erH< zgbGeO0Ow?}ko2ZVqU03u5M8KY)`FUqn(JhdsOsa>L;LBRYc==T7a{oZ-)0aU4&s;7TN_GR4F=QMSw>kp=ZV#@T0Z%_WMs^C{;!KQ9-)EBCk%n|C5bG_ibiIJn1bcHD)yASCg zS}=aIp-}f#Eg1|>U2z%SRsj?U3axXE1p`UENlZvS~c7pb3a_3Hp9pls$y`wvfUd8eC%|1z~ydo#}Qs$Y- zWr<4{PpsmfqqldB_qWpZ@HO~PgQl}2+)y8@oo@6GuLiM2o|c|!FB0n*YMm=#nNcQ? ztt6Fz*!So0K>T9^QD|dbB_31k)qi|`3HrxT3@p$&`1!Q)KmF)F&l6+16WNWZUi-5! zn(5_)C%evNSYZa4lgfQ({qwO~>Av@|8dOoFZjVZIKz*Ma zDQwH4_7@SI>aLsb(D(NQPc$pn95z2}-I_|P6})P^lD!k{uOcutKpG;p%)gE*jmqwj zCIH`0E6Jw=2}EUhyAhbKC7Y@Mu(kq>I5M&DLw+j67E%xcLYfBL)(Cv3HK6Zo5If0! zufiJ|1di%Do#S_*sn)8jOE{tX$2+~ZXoirvv4NAM&QtrcFgpnk{UZtWwPrha?ZSV8 zr5M$48Qp;D8|)Q%j3WvN2B9cT@8Q^81_AP^{<%M`R0<>g-!?8px_i26byoD&?9ui* z;N0gLku$p2w$se~i|swnQS1YtpI0cpJJITw2UXBw@e;z*Igzh5*eP~;wQZcN;H?c*Y@8TAn&R#3>+6|o1BlQI zGX!6Flr)x4-bwT@6#25Hsc%<~*x|lgNY8G4Rc0TvVom#z^wF70sg-puyEI4Y%Adb& zvDi(|t4SpBXe;^=>dF;u3>;oft0j9^eyz#$qo$6SjB;`B$&lbu`tF6Fw<0|PSwhZb zXjqpWt&Za)w3-;#03O5*%wO*LGg?giFdmiy5S3X&1*0xv8&wu3J8RyomV^`Vi`Veo z6gA{1dRKN51Do3MgPbx7_y}@fuMEehk%nSO3$gRTfJ|N52AVP(wpvTOf12{=8v&?W z2*fCUTF~Y>+`zLKMyIF$E4R5IBiFfvl#Lz`H&oH3!lV*Kwc9hoj-Nb`^ayUc+ z>^Bk)I-4qY4c&^>0;$csY^*wMYtb;TAdDCmdX(Po_%6f=9N%)&!MeF;`)G_`p+x!J z{Ewf~F^VS?KPkS7w7_U!DMq$eAQX9d^qv|^Mqvl2!NOB1EJ2VAs0S;4XJjq3Bn$h3 zd3^`$eHHWm5y}IMw%C{9pIB$=X{@x{_-XGq-Lw5h;SYA6yNqbvd~(y4ikGIuLvZg< z+YTVU^}_hbs*_nx>aTT5x(b&s9xkbrSA2N-+Cy#Xr@qSp#^oGT3_?8g?CR=0AcDAd3a`ZixyyEO&# z*5#eG!CStwv68kA;w2s|1UHM7p-tdCYM@AyV9@?5`q5zYu%W(^N>;q;>wUiDi%N+x zeEq!_cn|HZ$>4~LS8Ow2an3`uw^d+|I!g+LXx6-dT1EHIgF@z}_cPjQxS2(I2Cxhs zEKeKy7#a+#)LBiE%@gU(&Mw0j)5QXmBU*&@GOn0eCr$_$QRinzhLB;9AVeZ^N7kU4&^J!lgvkyNHjgo{00?+DYJB|UUlltL{o7>e)jbi<}}IA?p2;^^e^?`zfOXAZyeD@AT3? zpPZ`3CI;AvRLD&VVS`-ByYDrb!}gha`7TLnC(bAO3ep?)74JWI(O}=Tj8EQ|+(bX* z;Wh*3HU9+cF`i@8X z3rj?+yqVt|wXtOP<0lCc4=*Tg7_O92ml}{-aG9p@6!=uE790TBh1zr)j=hs33T%rz zNR}bu&!4mf9O(;4u!w8bjUGcoaU4xfYsV5>ZB|T}`hOzLt!a)Rv$3qeF~ENk zppR!}Vb6mA15UTHs@)qMsLQ|UlM7UyIcTN%o+Dj>A)8?OrMVO=#D_ur&!n2cV z+HS*&HPL>Ti$H!>ozj?s4~s`z82j}sT0wjD@~pR%zwqAn@`uQyh1z`A@zjy)8!n&V z;<8ZCxun&Yxm&o~I-}SMn;|eM(7U-TGO~Amg|OOU)J>dW%=dY6cAlgMGiqo}429S# z!|W+xo8FoE#U-{_y!iP927~uTXzC(Thph9R1^EAG{Z6Kqa`Bse(mz zu#`Y0z<%rA$sj~U+R8b#KAx0ZTiDGXFx4AYR1gvawqoN9^Pf6|W2*G<+tS0B1mg|{ zOBv;%KNvjjMxG=jE&Hyd%~DCQG_J{LCss7&V>z_Pd(*4t-OKqNKd$xtm`c2YQl0)T zS9ahCy5Gr7&G*l)VS|sLh+#{Fu z=AO=3plBvIaC+)~?3R&9;-M)MxP*!eEnrDg`zOlFk@g+0^u!HxBU=~d#HEi%40}Im z5q;uv}>uy*KM%=-rRo?NjV$qL72xS9RTFX(IO7pG_=Kxd7D zPGjX^In2;*Ua(qj(byp=0U4J1YpOW++(}inmjhPUrcC}Im%r2ZusS7m{LJE=IWcQzS)H>36a$<-E*bE9!V z?&*=0i{4P??24zsd|ewtPKR92VMmjNFWj+h@>R~8+z68?6brHVMw_X<*Ap@ zDp)o{ZqC9D^)h1XjX-stAnxNA>zaGyP-53e{fd}4Z7v-{@~19;@Ij~ik%b(rJAC+^ zu;!_O;BS5net4E9X~>bq!UA+dt+f&G^imNtV9`IoEz;@sfFaoxxz3g79p(J?XBBC4 z9E*=NNKj2Mn4f^lDZ{<9rWO&vF>2*(h1!}LVp)=<>s*{`U|agF#TK`X6t!|A=qT79 z`q;J#!$m-&l>?Hhp!I;Wr06Scy0xl2@I2dZ;2Q5+t+R%{KUwW zZGe7%4T!@gv37w<d6!nYwh(p2UA3=tA^B#3ekQ$KrzVh6g0GOYS0xp&Z7XE&>8l96~tA6u3%va7MTC002~aWuxA z35?CX)vRBh1vo#5bxh{?Y8VsnO^`U{_auA{94i|b zP?xr+{T9tPR(V#Wk+`2u3ahfubVJamaMV;N#m5U^5E+EpaNuaWJFMo+9EkX zY3T?rELqm`AS-&44jg@4jE8PeE;K#Pn)AwR3s060Y|kVh$NaWYE^fo2ApuWuMoK`LzfFQLLG-{M4>SR zWg9ql$OIIrcjeWWEo=QPwc(GPeL+K8!erXRK5`w!A>M|@`H%%iH1>@f$%{-LpNoSI zr)*Yup4-B`@pVM}$4`rGeW7RISf+VU+uB4ZnHoqAZ7-7(Mx$*ltluRrz&g-ovUNs? zo?M4S^p4Fxgo1Pvs~jgQj>T4VlU^8%7XYjRzOqZQkZ8V&=3wTvPsTG$=_{c@faFsq zw2nK^auT^;zRHp3vFLKHLBaRdtR|QEI^vm~Uk+xbn)pPq@_nTbB?ob_pAnB>#p#8i zBi6Con}#c|-KL)-JSr#?F-xkW^pW*6HH7{7w(bmT|5AJ@R;AoOuZHOokszX@TRgVv z(a1Y*Y!N^~^B5)Dv{iGk9dXQ;xYht%n)Ye-eeI)uNZ?XDytA}h3gB%~Z(v1U9ve#E zRI>McD4y}7lytLeiG7AYFyERM_wg21n*GheB!G8cP$O=SHxz4kgwsKwUw)kd=QZ>p zBluR%cY6hh9<3?3d7od&rvJ;^@WXy0tua6RJ;ZYpW94=GyUbfMCK#!16pDO+zx=JV zMBkp3t{1X(PZ#B2qX2C6@E@)3!P_vyPJ40I*#+c9spA+`{4BFQdH%Kph9XeC- zI^f#OR?%Qqr*-U$3ql8rY3OE_6qAp2i^dyLhHf?DwQeg!ry;&cbz2%`8@Q{!W|w%s zb#d?apP^-bhMYco5XE=x%Luum`}48DGa&^zVr#|f2ep+&G$m0h^+)wIrGT_$A92oB z!_$BWjti1uKhc()98`VRC0`|3;LI?f+f6jwav>fr>yppt9Ba4hbx1s;k(l)Lu;@9} z9jhJ@!j(pVtHX$%T?2)ocFr%8cf_P!YJ{I#=K3T zXJT^=b7w?_$EdFz>aiNo`+C01WY>*B%kyO5j7_kXmKM8M40Z-Igro3lOR{|E33v{?m6)f=oe8VG7k^CX>!T)E4O#%WpJ< zf%Rrer-6&#$IIK0b1lDzKIJ=%Mt@@Unu|v7yz|6AQsxcL`-46+CgSS}eHpEc)&=({ zD`o=Q0gPp0;XFz0>nw+)vOl|oG=T)0&2?l%+IEc(3?-v+T09U#sf zkU7<-l8C!5XMg|p*qq#W*XD1f+iqG1AB>pF%=j@HNYHVeMUiCgDF<4%^U&cEEVeRJ$CJn&i+F&q;ix&f#82Wict=oK&6 z)ra@t`U5!OK_IsC*e3x*qXlSNaiH~<OY))64kwUJ>3I6I{cmY zoqVexUil>VmD|lfHc1Jv>0~b#HHHi!p=eN)=9 zd5G_>k{t&1&KyEOw_y?*kKlaOKH8&+8Rp&1vSOzv+0e_@xgw9tX(C_4F0vZaufFwF zSrFto*kXUh0c3CNlWi@b33Hl|9r_O1nqxRoC;A z1!8)axj}tbs)1Us%4N3IvkVc{C6?JYP1#((VuP}drGaxMXzpv6Li3)1aa9I=cgH2> znSNn~<4qfMB_b%W9B37j5l6q&ho~cMf=Nw%17#(4UjQBPh4 z=lF#U-Upfmn6b{Zh>;=Q+0*n$UD)@vpWvb`oWPWKNm|o=d;~VQk?xlp@Y8K%PydwF zj);qoM~h05Liz@`%O?u>lxbTP!GK9{H!Zk^xV@a6DRKpbqrg_{oIC-5$QERaTC1bk z?m2$8nr!6?J!0-5O-= z{Zf1(E^B^z{wKjF$nhgeh_lVFpAkTh^z&^R1xy^=pU_76K7litmLOH|Tr6dE>)5LY;WLg11?hoSS%s zD$j}!UDwUwWX*v@o5S8W&0ZMkFtu3Rusb+@Hwd;E-fa&$RLeFPB1LN>;0#;1Y2*`D zEvwH4wy&RLgp?Cv=C)_3U#*|MRo zrtAPqi&mafh`mB;cRju=A~JdVk&EwMblNRnJ{P-yW^U(3y@zjQ%5leT%;E?NGp#fu zs$;~G0TMP=oU#)E^YhvY=2@;fO(kvm86@#7Sw(5GXllV_FsK@%scn;S<$dH1>3)f# z9Xq2XjS}+!N<6i0?rqM%vV|L+f%?35?unKt;&v%I`l)?n4zVkK}4#^?ks z1%0Cw&Qo4F2`R#ZF>tJk62*{k2)j06MC9r&t-hg<7C4oKYSKGG4ksLHaeWO+}m}t zR9gao>iCHKPRV1Ovh>M3#A8-`{y7KyWZ&bSXOf35bk<-rn>gL!prC}!z z+*E4g`Znh1$Oa2k3VMD)`VARH)`5Qpfe2!qBwWXNu$Il)4$ze6GyXhqK`F+%C)h7m zLr3tv0renH71*{d``y|@i&|i6@9qc^hm;!M>sQH@T0!ebCr>C8MmHvq%>oEA=uv>2_#wYIU& ziZdOcZvfE@o1XihKIxt?PA_U{15Jn{u;*9$hOOvKA{f=Ot%tXTRh{GwQ-I2<6fgmv z0E62lURG%>EhyXW;PGv{!YCo3Lpr0>-%fh}g(>_(_x%50?>&Q>T-!BJP!t;=C?Ft2 zDWX&hMWw_Bh=^dJmncP=A<|nQ3Ifs<1O$YL2uO{T5UG(G1re!{AT3C52}lT}tn={g zJ!kf(-=4M4nSIWgJ!k*O%v$5in(cR*<%?9ONCdPJ2_?g| zdCUxJRD~QBdUOOH8%At5*=IiNO*KYbToqY%uS!>kF9S4jy}(^d-CX7Vm{X+kFEM) z%70cr-1K5_pc)ZuA@=9d@`O<2UNRz5Tbt;!yl0ju>Oicyk99$~c!>baa6xc{q=;B{D=4$LaxW}0bl3#cZuU_(F#M#~t;B!1u?G4SF<#dH z>(k=B54GhHWSuCOkuQJb^U#RtbtlV(xWoudoDFkU7S5}4vHP-e+%zQjKk^y|;1 z%+Dj}VF(()zOv^h2yEU;G}{yaAN%3#FQ{KyND!Ab4kUp_OA^P1EL-vp9n_1iM3VE_ z2TdW&1R&j2KrvuP@wFN;j~7EXBpRx~F9R{bedwk{gC=ThULQbgaLE5I?tgdgKOFyg z5}1|CM_1iW^JQg1?eQ^?{gp-{OqZI0y4_>L_AP4rM_o4^QYx%1Eet(G+Y9n@4t2C; zhn6SqZr=WhjeNKL7lFOU0F+B=!Gug_c3b*%Gh{Dd+TkLW*Wgx0{n|r?bH2D|0Bo#8 zANxKLTWWg$+(xzW$NZZu&#XqA znPPUJ@dNZlkM8Az3Wcp+p(gqw+a*vs99wGed|9j#=*$HB3~Jmg0JN_VJJVBg)G+UU z*jPi;Jba`K9{CCJh$6*?q+l;E zk0Q$>H9R4bA3kKhIyU*BN$|8Thm0E)%HFL{F>4)BWx$?RqV~-P=0!QOvhxiCT<))4 zN#$c@NVX<(E0(L-$A^iuO?Ht+DR1jsKnXq}8cHz%5c`44?^ylJQULC&0E1GcjQ@PF zAU|l$6r|3M5Eh=Y>eTHkL^4{K9f!mR#+OYXxan`8Plb4LX4FVGu)H}QMVh$hH#j`dZQSH0D8~-4ck~RI^=ls)9CBW7I3^((0os9rjO2zV zh2HCI3%`HrjZna3qwYtpF(hb%-eb^){&k$515Oo)H>oP9rbKE!YmfGEU;u&LW*XYJ zSKISGzX6r)W~(m;!R`IzJ2IC>)w>K)JM4!vd9w8YB(S@aFTAqTt8svR6ibg$E0BpO zA;UGUW-R0z#veT{?A2Orz^t}j;mao2P?fZxt*A1mrh17s!niP~nDWe!>PvI9b0>m= zvQoEPx9kCG{%#Q!UI&Jj2P-^I}r+&gB>X-XK?_>asnyNkx z;?|HjXDBwZ886^}nav;P){-R_&j7$j4vKe9%J`8i$z3H09+Y=xiI8q{*F(r}N$=32 ztx?GkQ;xntg_zUB$r{U%X106!GpdPINiRGcjGbeC;@k zVcGt?n+X-Mc2#i=%bxR7A1dN#;kcINueyw`G+X2w0|R)&XvNsx+aFEK=SAU(E~Ng55>1@;v3oubzPyvJ z@t2m{e%Pwz?G9-Q4-%vrfBWbKwP-_g>5TD1Avf_~P7qR4Kj*I-cCD3lbld1LPbiC` zzU7b;n1UcA`A2)rZzt&>@(jZi)eb|R`ilcLvga?3UiW0!fD`D1w7J~^6M;Hqlt2yf z4cP9GqeemRIuY(GgnOKnk?LJ3rp8x1((XrVbv|ymV?Fr@`We6IW3QG5j%YMx4g2Nv z&=0FQ+kMgIxt9_SlxF0H7V{km-F4&_X1nsq>5kTm~|A zD}l}R3UzzJhPzclk*@KUZhA;t7^&ZnT^?LnZPPwFkR8^X`i95fI%8(xNO`rnh4R~a zhJzWG1uHw7|7_YV<98(PCiH&xIVQ9LPX{>DgaKy1e{!7;^%x(-MM9c>KfUhTU?VTu zF~2b&=ZC&b?4=Qb`B0mZj{#y`$!_x)x*Iwi^6Pd3XptM&a{^MH;0=qYrh`+VqcOhB zKIn^LdX^XH-{4g)#7&@Tb*A$e;paTBQAx{7*u;(C;r<>cU^%&_yXy?c@!!?Q*clUw zynvyeWJrn6a0=+ooz0#hxb{hCLa z#}~jMoP5+<>8%wr+uJYAQS`T4PE60PylqmH$yjFsxbZ-Ztyx- zpxRHNoRk?dY!Prg46#A2e?t_3DFL&j$36}wRquR&gqDPKvH2-{E#lfMWbre1y0Hdg zDgBDF>Bi58^(1YY4_G;NJNziTyS?+ib8H+3H#qY<3<1t)$L_|{44B|Q^D@%eit`Lf zR?TZ_9G=NPI+4!2P($gQjsrAEfhvq_WQkK%&wy91jleU775x)exQ?ygwJr#LzO+K5 z5C7X}_j)thf!{=+%#!~ccFY0&ofs2{`9nfn?)A0?aBf4zP>nJw;4vvc7Wa}zIY;Ru z>mN~+IJ);db<}D$=3M~8{obP%dl#uTBxMNa@jmwOPoyEN6cF?y+b}zsyID0M$6VQG zsfY-q*xMie{0roIqUu$Z`2Z*QrOpAF#QP>nCgP!CiTv>=c{qZ>M(jUJ4`Rn_fWm&0 zk}}&6(`d*&K9yR^yqnbQHzL=K6w8enT+FZ{O4g-+?Ytc_ko=%z`qdIic>N*%OY;$> zt85Yq2sl;{fq-Kelx{hTX9nV*LZ5<6-FR)8vFitFW*{%~rPj?g*)|ki`Yo(ty_Jub zuF;CFM0_+FYk8s8^RYZ}j-OfyBBpeELzD_Cw!@0kEBk zA^oihH!lleKdls0s-Fe@L z$zH^dWsg>XGA}@{@?ll#i@Tvuu_%5WvZ1_jZ-|(M%l;p;f$=z{{PKaIcS=qbX$o0; zZ=d4v5<&&6m2c z$K5y4@|XT&-^5n$#6N#F?P;7q#G}Q~h@pIk;r0C~Rty6sbp#pq9PKqRe`&M3>C*() z^HtGJ07t+YQLFPH1RB>XKv6fXTaW)>;@{wnq2tL+;lDVvYk(~bOa;?A{>7z1Y9X+0 z*gFWNoxK;-`)&My6Vn0#aRSKP_F=~G8*4-qB?kzxvJN*c3~r!wLSCbq<>|`oU>{)j zK&KT{k9is&`WMGE(FUCKgj;}!^~;O9!fBEvxCt=If4;}R_?j;go#@nGW^>$s-sbl& zI{9yly~pnRCWB)Njy9FG#T@n+q05-uxp#->%ry?q?|azwU>lx;IY-^6=)gulnFKWz zvBERZCzkSz8enDhw%o%N0&oupQczo}%MK{uL#~Hx`H*wKhqTRXr|Z1I*JA$shd=-N z(SLT^KaBTH-{0fn_160W(@b;sj==b@J zu$}Y_@;VI>r71I}#i!F>43;N2FvXA=u0nI2(QD99(;JdJy`<}S_LKBoVhO4RaNz(8 zSg4Cxu?9LxF23fgJB|qh!O}6*_eh|g!M51^i{mejBjBm>pV{IDTR~U4h#+X*`AD1c zrhyOS+8`JJY)3`(hSNL&XLJ$>0J4o*z8{NmWW%p2JW02gX&NYT;rew_zs9SAy z?{vhW_0RX;WxVyV`P!ayPI_ND+s=85SHgiYVF82qbG?D*FOKi4K&uHUIBD{Gd*vg( zp$fK9(1a{2;ru8&wd)^3J--XBx4-+x4YzLkU;J!e9;K^KkjOaDCp+0+xj7iT zZW|xL9yz@7?`8kM8nHxj%|-zVRbTfI8MqZ2?@o=zj~{og3oAysSqIkfLYcDJOzj%Fe1ZS5W#FoHlw*trzZ=FaBuuU{}@ATS)xlxHnuM>Lc=djvpP-Ce20tF z#-Vr%|8s}$u*K+;6NsJ7Z}oEM&8_F}gg{)-23A_8{=$YX5ywvM@R&^F)QGnC4e0dx zz$iVzdfLQ(u8+^qFCB0zDDQFAcj=Txn8^pX8wQMihIq2u)5DNH^qZ8fmJ!WFBSEBY zS$~}Y-xGJ$;t?A+!=33BLjOo{DNg@ss8yj#AB{R2OYO z$_>F>&%Yv?sf}BCK6(DVe7yRQ6nDDzQKTK!ueGDdf@wj<2>55YNuL_}T;zJ&wsOyn ztCyut-OOsLG7+wvu1by1)FKLzR+CGVZL5eUZq=PrW|G#{UnJT-Z$N8d^5;|u3&Yuj z{7!~!OAU$^KD8{~xeq-;aTqQUNBzfHTnl_IS_eXU#_#@i$v79I3pb@ ztY)g-W51AcODfyTnw~Gp;B*8Y)m|lV+0{j|g>mtG2}a-uou-;GWq5?2`6Mj5CE#At z0)jMI?EAxLC3Sm*xO_(MnntGV&4`r&&?`~vBIN88)vkY_puPP4&yz>?>m3>JM(lYp z&BSdC7X^36+ST*ODf!<}UJMa+TmM{*?CP_k152w-pBNv7IA@(7(6kvVL0q6FmuA{y zEOuehyw-}b<<=JZ^2!+sSG%5=-RI}Tdh$+D5Ha|}nih;xAz#y>P2y&4A%LM4SLY(0 z*%bxHU|p6K>rUjw0m;G(@vTzH--@o?;VHuI1Tqedr66$LUw4yy+$YX}kaecd$1TX^ z!JB%Z;d1{&^lnZINehvVT|WdwE;euTqE~IGJc9K zBK;WpOkH};Ym@^$gD|2>6-u2_z}xq$c4Tw}&#zl`Ja7N$Fg78j+G?sY{#guVCBt%M z8Oq3mgq1jh4Er;E?e$|GgpK9mpJ<<<>(L(dd1J!0PgPK?)72soul+Gi_QrkVSrg__ zJH9@Dr`3}iw>1A0)Jt-%Ik@=~1D!no;y4Zcy(#gre+CUf_nUylSV9x9Xik4+Q|f4> z-F_EasrqikQdRhA&FaA&z1b-;UlI>XaWdN2)UVW@w{ku)^$h1;Tp=8}Vsp_iGTcLYMDwHa>Jpl2QbCg)?;Kku<7OX1x%m>2Eqy?8+0Q$& z!=?zqyMLRBl-N`4#|+MpE`C5hCB~I{1I08K{66Hl31#3{-DW~|_l}2-j5eDVIk~~H zuW`pnBKe8Cm87qpew^Rv^l)jUVgec_!ADPkmo$@=chlW$BU?zwz#C-}Ik}DAH6<_L zQUv%z>02`4mM&@b$akl!IfTxAp&w{ufJ-DWM17zv`4oKZCVM~B6}@o|97PCCWe&AzrpWPcIqLsP2>kzB@ZkSr z2>}>@2`R423#TY(8iQ4?ebnEKydL&|>GIk|dmr4gXMj8vgp!;@l-LPyhh9NdD}=eg z^N&2c$`x|gY{rQxmIP1@z#awIP#&v*=`oQI_1-^yUZ2R6BZ(JVioftPlL)dI>Z(rB zmok2Q@9vF-$yAQmXPm4Zs20^x5Qgu!0cjU^APA3T%vRDEXW1Qrk&EFBPdZ{;Da^y| z?XW+w75bg>;}g32eO%tr$?v;9#h?7LpFi`%p-z-8nkwSA0MfM!MqqG*5eS}F98qeJ z-FW9kKbkwM@E0oDc6V*OxK~rdQPHVXg|eiBu}Q)v&;5_7!;({vB-@=WdB3!$*v2Sg zj-A>^;QuX~a)zebLlXu}EdTVGd=sPQSO zpB=p(J|7zVxQTpTS=L^5W*BkF?BTscU`bGoJ2esGAeWW^(ow5~tZmfng*{Wm0+6k zr#5C+&kijxw1ZWU9Xf7OmNg6=9^v}W!%F%q1={7)KZzzCbr>(c78vCMjNc7tD-s(4 zWk!2HE&>aQ3e0bY>{i1D6%N7N0!uJosvLDQurhMU3aN##&bUWOZdZB&K&}%i!?eLs zM&jPVT(h`)9R@UalZ~E2>_0SAGjx)(!p>X_f-80S8dav6@)w@b{XV6Gd53_Gm7_Vl z5radG4f0reP{}-u-C6*_JXc}8iauVCUm=h^T#rJ1mD5EV#*ctXtF_CsU=~-y;Jj61NY_y zJ;P?#GTyqsIO^h*Op5zV80rhR^|jf9SfwcG()8yg+7_laEH8F^oejF5IY6Ts+$g=V znOE`?g;Qo8sAxi!tG6H?omYBJ742&KOm%DAl#TL%mIHa_4hO_2%fU9d(v9YK`6*5) zb?k&Lm!E9jciVGmBZijEs#h5$nXZrNzGv@k=w=#H{F>5@o+!KTticJLUn>Qz z1P<||3mr1WZ$-Gm^D@no<;oV1HoT&Pw3izsv`v0g6xdi$EP&Er^eYW&)=WEwGE>IZ ziNu`u&t`uerJbrkq}Fzk28R}AW^GK$<7b!$)xw`pS7+MW6woAiFQ9;9co$=+6* zmCHuUay|j6U-K(&3`@jWV8_^}!BdC&4>i^hn?L-dhfxw&b?7k#uA2&?zeMXvvo)qU zxzCgpO7~S2C?rMPEdy%95NA6s2^UB1H}r5|TaMAOlpF$X6BSjbGX~?MI~h<8qxdnJ zHU-DZ9CIyQJa52rERLi!`fybTL^N)<x##$?yIG$eQ*C^XEP|(Vf{0Z(6mff5N;eLMfqSjn0mcf*ppFS zN4m-=?`_8I7U7x&(qe1FTjk>X3}b9>Zu-~Yg+=M2d)|r9F21cO7z}l z+Y?km6N+bs&0W{6Qrjgo;_BCxZ8Im@TIZ*x=DR4E@k3vVaBRwpBl=`)mt^SxR1p~n zD9W(GoC&>X&^JghIuDE1gcKO&y870(#2loaGbJ@g+>R~c6}c)E2Fo3lz>ne6`NE;D zMzJYb+smno%S{L|Yr5-%Q60r7c8SSdOwdlq8~Tn*^`iykshufykK0$K5UyFpb07?s z0jusTgfOkkqxyx!>r@DQW0yOog{^|q^K>BGC5bcue69bV_I?5Ul6{&MjrP4I;J z*%hQ(V7){)mZ%pJT!~X$==ID!__~j+><2el*eKq_L*)Y5SWbPk$E-1}{kIClYa zFROxmG^BGxq^6q*DR53vQ^)D9-18f+KXWtr=kWq|)zpaow#AE2_8mO@jPt%M7VvQj znF!EW5eZ^W`sEoYGtwMg?gz>a_S7lV!bU?g!mDa!ytMRQ7Ag@^R@f$Rj=cTYcsyBu zY|pwf-Paur#(Tr}0=K4)XQB-*y?|W?1Ip&`Vt{vk4=`2sZ-N)*C;*4}Oz0qKzsv{D zCnfS5YJ;~P#um>2?)010C18gQm;d6B1()%5_JY4u%tnpntplKb)>+#^;^x2jYasiF zX#-T0Lt9D!Pqe|C`N?Mv+$zhVKLh>yxDht7lkpn>^wYV?J;uj`5@?@5h84bLq#lE=o0hF7`_JFDMG4yfgbg0;uiaahg=>Jy z;GehS2mzR5GZXb7Ve>5PDU5y)&D4QV01!PS#f}#y3$u5~0z49iAEoXxT0nq^2MsQ| z4Uj^9J?5nY3~)NX$%3m6f>YOG{4bYg)*d29)mo3MyIJ673Ht3^`>;U;2=}S)1yh|; zslKGw$2(4)<>1WXz|0k~kM3s0fn$4s3SNXgegGVm-|*T>_hTSjOn+)sOl~91M*S*r zxwz!$NY~_L@s_7C)lv50V7k2Q;iLS})2;T|c`Ocx(;YhyJ|?Kq8oM8~lQHb40Q2 z6(U7<=i(K4p(f6K=IfstMYspBO4xa^V~_9GVZ%%DeUWKqU;pCplg+Asw;l5Lw;oKj ztO&aq|J9(#q4tI2QI|VcC;F5;UEa^r)J2ml^n#q%pRasVXm@}WPOES}2M^$%r6WL> z#6Ppv9}K#g1}3+B8ydEy{`paY}#KIqD+w0AExwMaz^B}7G;+1pTr_OzvjJ)7Hinws}Z%^0T z9&O3l&9>S?^ZbmxE|B@DRM*zNu!t@@UQh08-P$s}5$QNINeE_dUuiUrNin+a{`L6m z!zT^KPTVUhoY$gB z;HP>JLQc`^3UM_W~$BsbW9I+FfBxw6iWy$4w8o%8HZ zP)_JwM4at;3c6X*$cU;Qh7>HE7d83PAm6tnFft|P|^4)%SZ zvBj}P;bIWjyA;RZ%4Ec1&KMu>dtxt%up#h*FjP~9U)^xWU^>}vZnJ$qO& zzA9k>IyU+U@Sl-BJmx=d~7QY7QjUbs`VzvXFbVF~lk8}TR! z)L1-30Mo$3{syS(d|v>dp2PsODb9ks-{!}9Wi(w^J5$CL5;dW+ACkk{!( zK9t_J)X_mUcVC@8G+JWbu%}`4oy)qw?nBL7o;H_79>0AaWg7gk>}bMe)%rQtlXMK- zmUq-MmE6#sE7sUSj~O9O(~Qv+BiNI4?luhRls8PkMJ;gPRn4)2z^YWga*LtQ zDngze!f6VgSK1%<>ucM^I!W(Y+XC>o>NLoZFvx*A0}smR_~8*r%Ga{D-z_ch@v;dQ zLPfGOCr|jXiUlmhTn`85QZ9464&_etmm=psLEW!+HR4BVQMsQobudPbKDk<$r**PC z;V*GDp;sL}q(xs~rsVMLY7?4CZG6J7kskeZ8WfEdTaJj)8*oSqDK0PH=Sj=q`20$wX2Qq7 z`~}#Ak(ez~mSQ+iKW^i8y$Ajiu4iSwBrqv^T3@pCHRnS+>j$KI&%6dlS=l_TdinBi z+GpoR#OdN>Wsb{;e6<8JT(|djP1=N)&*7>L$=AC34xU)GI#M9Joy%{+Ih86sK(YdI zA7-GPru0q-R~9I7&fXXe5B(3dbiQXO*RBnNXaYpHt9qDwpyCQhW0YAo;Be-+iA4Z(w|i-HY$Fccyi^nZh)Zyt(Z>m z8bch^A)|%eMtDCYk*8^z`Ayn~a08&@sgu`m8_x}~y<&Xj!x{7Mrc$IoJhQTXA3J>Y z-SgM}!89U!cLIfIOjUZ#K4GXw77m+AXHOVX^rExN`_5D7|;qR@1wB^ohOu~MvIrgreUoj$;IL4mu*h=Hi zj*3O3N?ZFw`4KkdMhZ`FwkN+V(ORA?UqWlzVhkGY^e_FYsn5&^4qDat)!q7bfYv`O zFP)iLd3_D>eS$D@gr3Wg2hF;|(WNRw7=gJ>aco-1!hrhbAcT4nN;57 z05>v2+-_hHlOh(Nc>l4u>Ge~l`)WVg?rQw`5XghY0#IW;{4zMkeTaZK3eIzTeGG_couog{tU?~Lr`!RTG^L8zbXx$7(S8pO9Z z^-|Y}Ops9$huL~r*8bckCJkjPI?XT}D{G}U4zM3jL$~dc^&Njd!I6-GRm45U8o&;H zmMN)A8St_;QpgLi%Q`snHsD#7jNZAQclkU|*@o+gEwkY43zgr;L&W_-jI7(YV7ns! z6Ry@-f+VE#$*eR#F((F{Xj`b}k|3mm(Zc)dh-=PE-Yo4YE!~k*G#g#g>;ZeH}d zOQuddPo|F$k_gwy^`g<5K;vl&WI!;#4GBNgSllfw)2joYODB>{D;tF2r;%lE3g4eQ z8naL0`;k{(t=9CMv5aLwH`8)bb2WTndhf9{n47a*ZQ%7RLy!4BfKAEKn6f?%v!T z+u-+LILo6pA4#=+tOFrVpuRydO@x=&jj1Op zG2D=o6F)%D^kYqk-+0&l)I?z`lb*%J=UI*~B1}Eaj+{8lwQq4-%_i7CTl|y&adXw^ z*B)@XwYSdkG^$-@3!Sh>L;?cjWXKM)WeihTgMCwZ0tJ}GQ0B5cMefm_|C^JBwmKnj zPGCx8n-N382hUQ@sw;f7hxHP)%NzrgkfW%B_=U`lzc}*cMVU^R0{qwu7{z2%1l1@N za@s$EAi+(UjzH=c`6ua~KV0S(>Whosu6escu2~w6_dd?4_(=VsJ{JedwV%mP|1yMW zwXs?Zy5$mrs?|8inle8{WK0UC@`78nKHczgw@6`K%kTmPDQ_JIJO zc@cM&p=F#HBjE1K;;Qn1EW7fvjr;PsPBwn(63jhuyi@;|TP{FN8lH5j3q5DJQ733- zba}=_`Z6t$n%@LEMtJGr3Jo+w8E$2W7-Ic6MI(&11^(G+o3yI}2Hn@S-1bd>Ws2$tp`-6@TkFc%rqS5;Uz(t~j?&P|*!AL#w8H1FB1;_+fn&$ZnF{-h8-iWyT-Y9hb6D{_VI zq(`k(t3ffZx4v3@JzG9^UUJT=;YYg9{7^=TmaNibPmlSFR4^0Of-M7Hgl9-+YJ6m= zOL~56!*Cuwsc{qa2rIAe9dlsEK-}GSn(@IE->4%FrUv2Le9md#*Z*?oRGHa_bH(9Bu zu_83+s28th&_bWslko&ZE z=RT2&?xzon&KbZZQ-j|X*!*H2-hc<4t70EZRaclW)K#{sVsFN4*L>9^4(kpd(9WWt z05NhX-H-}?-%zptdK3FNRlTJvMwBirhd6*T@{Z5Fe@V`YMxbVKD)x?F@H-4)m z_N#Q*T5y9uA0V$(~=MszuK0z!x>ob=IbM8iczBTlaOVs&+b z-up<4`rZ=Am#T8~ovS;T15~v=&C&~xIMl{C%?Tkcn4iA&DX)HXAi_t~UN3tUm@r9rf?&!}#jaCOQ4al@KI4ma zs}?=^k{b2*hYZTW_%XE8i~R${EH?%B(ywYYfKT0MhZ;+_JQztc;-(0&fYaWK+ZDeglU5)+7dW8L0Bb_ zx`zY*s&Cs6ib115*Um~bh6H3os&IdCyv1CAwDJ5qJRrehKthPN{H(NJZkWXcj`@(| z15;UuW1GD#vw1o@>WX&G)TLCQy@Vf|SG&LDG}~u21RY;$*bDe=dVqJL1S0oI8>GCB zkbD~22h}``6b8+*39S&i4FJsBYyRc6N_P%_VHB|?=Ev}x(jfpDZ<^y{n{)%r*oOjR z2>?ek?!)~Thur+Qcv7E zSD4ePW>>{VPi2PsUH73{k&j=`Jnnh#{EyCYzFzeA?d-iM3XXPz^#XZd40Zr{j!LV= z_?zAM(0i=DSGC9>$l&RyNuSTIc7n9RcqA=MO5nT3PL649P|V?%LkfUpUZ#R9W{*4{ zTMyGpI=-C-X1o3!QMVpLQwFh^G1Lh`Ql@Fpji`IAsOYu~8#h7-PdD>2iYFeEr{~7g zI{ZRiK;hbE(EC`;*n?+IaqKJ8L>v4ok}n4`>0c};=Z~eptWYgts0s*+4<-Sn_yG8S zr7GbM3i3DZ&rqsBexvfHG*l2uc>^}{XCU+sg7q4Xc@f7r1xgNU)Co{Qwlw;SL*Ds+ zm-oNB2VRCh&z>!j;f!j02dTg<%reB8fYbQKziYy906S*16Exetk6@VfN@LT>J?(B! z2TTmL4z<~;?h}0R?8YGpz17JJkUS{m7L2Yq+MFs;jg8@#93jDIee){>6k=`K>uY_n;eE%V8**<_vlhwu1xm zd)fqeRiI>?G(!Ij;mQio4RG(N_;55;xFu0G;>F@qU^(Zlp;m7t_K+K6TzSB7rz;!kR; zBIWwDxtI=A#N)Mq;w4qY&Uv$R@r5e)E`$QDqE0~NL3^=rxj=5R{-ICY(Hv9GC7p=z z)F{m}j`ltU{z2Bgi`Yv$Uf|ROT2dVz>7{&mt$mSuvg@Y#x^I%XjXoDue;=hf{_4+L zC1Tq{cWH+59a0J4P7^<9(&^Srij0_w(9&&NX)<_vYf7d%{Eds9$BXBeIg{^wy4U!6 zkGCn|Nr;4h7?~?|_v@L!wkleogyZ}2#Gg(1+3-h;+}uePW~lwtrh^r`)+~p z8vL^t_WgTD{q`!>E6_9BB^vS>CGrc@HTit5-T(@~M#{p%@q(2oUy)8348XP(yj3+~7vGF=!@5Bse;G1=t6;AqsRID^r{;RcbC= zONo6RVSG_UMC4GRH|M%K^GXf_f$9z%z*F>dQ7eiNszAbGJz!kSgZQBFSTd-pV=0T7 zuSjt}Olg$Q9v&J`C*oBVR!*JW!|^lG|6_@fFjIrd-8`F}VEYXl$7>L-C@?2<%Sz?7 zkDR!!UQfcw6>U)Jd-?(eU*1%<1i+sPhOJYIBIB9D3|a$yfn6MvJt+1r?x6fE#ACC@x5bvnb?a6@rzvBVUjZ;5`CIRfdeFX+*J0%vbsEZXG^DD zk1Es-9>89Z&U&=3|NK7?|1H%2|LTX`1073&t;E6xJJ_F55vX6ia9gS^AIJd8|3O0h z3Iim>Gg~A?*Y&@&gNJ;X=)a*!w z>=n)gvCqe?+c+~olyCU2*p4T`LyaV0TERkI&^I-2swH@k`RFFLGU}bVm!;M0E(5k> z*=~_ng|SLgN2=7}*B2pe!T%s;{x_>=Zw)Qjc@_ZTmsvUZ1@YHl9M>iM&iNludkFmm zC_T_+O9)T%0O2D8!_`S{#TlB6y|1is!{S!2Up~`%)Hu)OthJNhxsM;Y*F|7p3mv!}|?N>zY|yQ+&;<@!uY!(6JfOj9h>j@+^Ny5L(FF7lDX!$ia)?}U62 z#L=G;gBSEyZ?lX`!HgMtFz@9x7tY{T-)?GSoMUWCFc;0dZ zpP-bLHP86<-PD&|$ed0{AX+)dkJ{i+^l%=ZwUWvJd5b_;Km_eg(2q?~+t< zn@sI}Q>^oZ$#JfykWz@RJcjj_dG3uHjN@L09u`|iO+k;_@J^dBYzjMN8qy|{hh493 z9J*@!sX4Rw+;+(Ztv4@{$z(=8>IPg(6_=MvG*qhINX^QsVtO;ys!~Fh$MJk_Fn+uv zP;?664qaiG_AvE4yoxPderCMzGjGKwA$i~?rIeH!D{4JEIB2b&wA-~829h>lF*_U)C6%b~ z8gYCxd}pw_4uxGZafo@;PdnMY%ES6ti6?GZtXeZKPvesH%_rAuSOOPW>YsckCz5%U^B(x(v+pij#bx z$^uK+?Lf!UQ2XeHoY{uueE+(31l?t4!Wd*IztvO-_~RbUj1t@C%YOF`tC?N7mO{Tj z{_tU;(Ip-4QBEfJR*NaOOO_ZtDo@4BZRA`p>{<`jyjfpqz_B)?J>>e0aO1Ka))N@Z zjT_PFw&dtQ62RJSF@`Lcb87`}k9fKn3~$<~t}CxD1!Kp>g$<1M`=jnubXUTaR-EhX z?@77PZjy?heJp-o#Km#SMB4qF-T5S27~_&lh%lH@Z3Af)bx+P7nuGGEclI9vE+m6? z)>0#TmoeA9X_D2UuS;G-)0V^3gqBQuLQ0@bX|C5^lJk49ATfVMJ8bBn2u|%g*~I3{ zj|zJ)34PVW4RdD1VVGAED#&&6gbaXRTG$M$C4S+Vu>xGt zn-a+|w>zt%y6Vu={}u5y!y>DXS=$G+W&LXi7b)xvpCUKW7g;9Qk{b6!(?;1D4z855 zdpM;Z?ao&Fb%C5%3snI9AivAX0TkdjO*eaKRuo$X)pRj;wrW!_D_ac<8l7*?ZuW<- zWfBIZPFugLj<_HBCGKEK?1zw74zU}Che<=5>`KR=Gpn+{3yu8?g|=U$=yTxA7S*(C&LA!vZ2a%(8X6>xckyV;-QkM4;F8aCa1b)OOJ7Q zp7ye^*$9!FU$(?3>Mg9{)^aMC-fPe!|D~NbEL@KC7Gd5jCAkdrSP(n{D9C2FOu&q?dHbn>0jH-W@tG7*B--(RqhJtnP1D_*V_W~vUe2w3U|n~ z#0ZE~!fzaEw0~SZ@?8$2S+Sqv=QH_OdNpN$G1k?JI6#NqN$;7sP01?p$+78h{qjv; zwXSP#rDL*rwu7|5>*ukLd+_G-t46e6Ai|%b1N_B)q#9I3cF$ao(j_DTHODLATMcag zOF#Y}Nt5;m5oR91;Qj~Dk6FN=hxvlAF&52-8hamdlwNjkqDz3@)r_J%9-8$NI_-SG zN)}B^skPvGFL3*x*Sk7XUuF8`$z^W3qMnUy#E)+$2fJ6D#>pQvx>9@ zzBBn)g=}fMuukIUya5FjqiVRb$)L)tI$g}|^WC_&a)o)9-tCqv+%3z&dt4vqz@61? z8%8yvdG~7zEaK|>>!3kJC4IhTqB@x^aqleKsm0NvvT+6l`*zY}@|M({1jCD%hpDK@ zB~dW|g3%M(9IAo_4B}2Z58l0wcoAXjtE6l7`qSrJA66i2rH|J=dPb!yTtaRDyQ@Tj zsY>2kTTmjzK6|e>FHv7{Xz9yArRz==2`@GWY@ffjna?_c?O7c6ZK(TTWlomb=Wu_I zutfFQqMPp4^{BVUdaS$bG6m->yA~42!FwlUh@nbKDjo$^Eo)uT&N=L3-{dR%?AEAS`#7|5|31nJRT2KdAt^3-PAka5gH@t0cJ3p4qi1;e479QInf3vSSG zFgo-n8-NS2)D2AClr!cwRTg}UG9Nvia53Q~gm6i}rakN^-zLK&jS!tW zl7Gy+qwS<;f0rw|VmYpIbibRWD;)-_&uCt)6z+1%H&S@`{FB|Khs7W6-Z=eMA|eJe zKgo86V&<2e#B?6G;Q2H!7SmnlEi1mQ#gs^NNRruNCqUWiaOTPm(uYrTK?B5i_74BZ zkGjWF`sVhlCAk%Mde|RMy6m*$~`lSz9CJnVuLqA>Qe|apwNY%pAU z0`0sbH~IE8hcD^y={d1b%@#j|YEdu>OXKAWv)6!_YDopnfBC&flbUKK`$#3BuBT*j zpY&FG)b1cL%qAaR+i6>9bFuMksXHn{;uto4=^Rp{RPPwtLp-+!`=oH7SD#%fD;8pg z8owPHv|Y~%Wi_<=?L2IAdBgQyw+)uKFh2oCk$U>42Xo(wyb*bu{n&xnIAVp&;vv!77X=b zeu>^H^OpkimTT6?& zZkcAF-T0}@@nXk=xR(>J+dQhhXt>`buKEnToEJRT7E$l@T7nOZcM&u&i;I`Ug@`S- zkbae2s`?d^v#G+Sn1i>^aV#4DJn>+E_Gis)dRc!cszH7ig)_*B8O%fH7(yEp3f*!H z1M_|8=qn*W9l4T~0(DvDoo_fwoo;@4Kgn?5j-EYPK8Wg|^JM-&ho)nR-pk2Lvgr=8 zp3ueHp1GZ!CMc_>724#oXo!F!b7)|INGT3U=NPn$?z8-imeEaQr#zr=EG z4_p$VWBy*RtUw#iu%e{*g7!sxp^eHxyBF1|Yfi#Iziy}-e|vFxKhhqMu!W<>0gD;2 z+ux7;^F1BzgW<2r=gmMAzdU-cU_&_Zbjx`DDV1z%u}85NUwGI=HsVQ;aV#O4EeU2l z5$hB|%CLQ2;^c?=1k+w1$(!RU<~Fd#T-OAK#b)G-K|uT=Od7@7J6b zM64Ov^zLsR^i8O#G%6w*Pg)nMlSpgbs(!=s^|kU4H-GsF;pS1EkPcD9_yoV#bAdeg z@U>uQizR$HX0h_B>RwvP#ltHuP>1xTx!D&VDTX3L65n!jcJ=>6z0Yrf?qPSKcQzdL zpD>}?&uAa-J629%KTU@hi>4H96EU45d$`E7aJNeynpoZYXfOX~avh)s{GBq~yRX;W zbJtvn8&%92tebOfShR<6kSx%G8ZAfEu4&^~7)_(GLu_8AJ7PCIrx`bZ->+%(+P~;} zS(x$T(qyO5DT5czCWFau(!QVfyzLnl8@rmNQQfN<#NcJh^!^%#jzgdNDDqwEzt@mq zPJLnNTk^Vgqxrt3V&N0TBU`-`PV>AUP4E~Sy-aH=4_U{{?R+SK0LQG{#mZ^jmOe!HsmaH+A z-Gs<)%-K~TvJ^!TvL)+e-%a)kowexu;XoB&?SZe>3gezg+nWwb3T@}E*JDsvuy^m+V-Ej@h z{zy?L!SRjh+p3DNFSqty&a*o7aoboU z%#hi$=zFbVfV8G$OLJYoiMLv69`#j;DrRanubx{(o`YMNVmmAZk-MeoiV~qpXNlT` z+IB%T@3f+{Ex~4!h}4K?(F+5u1E-E*ElXa&PqZU9Q~?FO%<2p-V{)B!LUD+vTS+X1 zIO%hjd8$Z1b;>@!Euvp7tYhwW8JF}slhl`71|BMwPB(BN;C!G7P)PjYpvffzVv2{; z^ej$+=_z$k$vg%|p@MR-sKE`S&S&RMm~+Qco(-K;vGTMWf+WC7<9zd@lgfU2OY)y& z&7sb9c`a?j2Wno#fHG0;{7p~+e!RS%{?kUwuNnRHGF`d%-pbs%1~%OPfOPx2KmV)q zg`fzq^CH^Aha(Jc*Nn@Vy*q;D;CSmjX53x;`u!X0C;T6ke2qrLxVJEA<8WcsBeu3-@3!QIT52jv`tnV8T&S>nl zkYFTLaFE|)M3v0RrJ8b#g!O} zVfg*wa|XSq%w`op+QuM{a0~R0#+tcx&EL>Jq$yDF3iUdVzpo3wogS_xVT<>}%%d4A zgdALnjKW0rTK`;C{L|cJ@z@P*nob>G{K>Ag(#|YLtDb^Mw{vlNr0WXVwpLYFFFHOq zi8}xGN(Sk$%`J~N0%Xhl#j~^ zde^6;bnk4%$@)Dhzuj1gFnAPp{`Bx@%%Xs#YmT*S8?roh(bbX3%g*$qdqc7Y(a)D{ zfdbe=yQfx$*h&cQvx*HChbV+6GqN)7Jhw@Jl z!V1#hjYy)NSEknU=z62|?7CF}r$qNMqI;`Nn}E!-lEEUwqd6WzSuK1>xULQpK0gL3 zsYXK^k)KklQ0qpUFj0_{Y^?MOB%=Z`s9_z}?1a$o6i3428FxYc*{r)cA;j=lsiy3m zZMn0rjvH|`3!iDa1T%N1Tx*iYc1q<9@*5*|+>>g7?AnDV1V}Zw-F7}Y zLD6-Dm}_a7<~LiS2%Ja6>N=W*_clEq->Z}CG<94jq(i?Y+j-gwztRIzJqA`?_~jM+ znz$biM?Gr0S1ft_F;;X+_=uy*v}#^~B5_}CyjJO4Hm5Ex%dXoC-@c|Hj^u?LuW`E ziLBC0TZ_~gaL`JvnkeX8Gwa^i_7N-fg(>RATBkobbmU=oA6=@r!@1UMKsv_lLsQ0g zoxzc0$H6jH)K;X#qw75TK+h~TU- zzmw>I(t>-O7N=J-qFBC5iqu_s^r(DmDULW#4t&fMnJ5#qD~>8Y+YLybNwN{eAM6i2 ze-Wg|`fRVh#^rI&hbhZ8r{zap7-FiX!qM2>h?Zjv=Cpn5+M99`)sdM~t;T(Wi`!@^ z7g#IDAE#i9`zFl#;&othuRTX)b8n%;J5WPA{rLx$&nmmE6YB7Cy;Sn{FB z&n^$n!!JX1M@U=n6P`ah#-Uj}t;aWE`0RsZCfbJqgt6)T*{YU*LpfWwWa z1g`961XKW!&f0iUY7s8mE`TUy=DYC(+y2^C46gpC!b!SMVI;Da)lrqCUozD#i9 zEDWS`$9{zNEUy*H$kk%ysc(G5zQt%Yvh@^jUAw*}*3n_i9{c>kl6&3tiBWQiLGFSDt+6#oV9@AOe`Il;wA66oPKRdcCvK zMR%3w-tP-MWmXK;HT*+skWtSM=4`<|UJj>;c-F_sjf4 zmC}wGzZx@VhK{_CX7$UExWp#yTKK_yST66(6=c25nV*q# zvTeSj=v+_dQzy=8@d$IL@uN~XVbqtslWIj-ad?#p91f8Fkn&cm@%>10LpESICnD>* zGR-DT+k<2Zo!Mx4joQT;VDv)^m#T9k8kRaXydsOz9z$u&4JyCB1}90{zP5L48S zlslHt0KilL65_)pb5nwTS?5wVc75*ih5@tvRjm?dt7B-eIiC?H@sqny-H_RuOX-1h zq!WrJVfz?BF*`pY!Q9M6$npuHkz~T7B^|CQ$f_8yEH{zx>rE9Kc7&O^Ku#wag*(qa z9W+sseIaz^d799`3utyy@)Ul-2;18o^OF1Uu?XTZJ?wLPBtz1Nbn#n^)T#&wuO3-2 z_f6s{27<`I+IkW$;k)~%1S)*yvVRm4r=k}ng6R6mllq?yu6{`BXS|aAYJE&RhVPZy;h=+C z-U!*fzno0GqK!PNkh*B-TD*`Z6KQ)PRYFqLnU9-c6^V+uwxQX7f7C~6K6^iNSFHO8 z^6NaA@RV*#);bp+G{j3O_Q$9vdMT<_dQ^f$N73?u?BQ^OF!c41g=*O)E&Hzx{g}@3 zmu8K4hj5x0s*a;iaRggR4mG<;K|UF!*x*_GF_vi)d;~tl_`N+gzr73YU2T1M`qc+b zzP6$WuZs;$R%{R4)8|mJ$@$A=;UnUa6K|3d>TukIg5VctX8}1}I`f35d8eb@>qU7` z`S`67Ko550M; zyAikTvy&6-7h2zEg)|B7cxj@^zvZ{@xDNf(i)sxkc*mBItS%LqUi@&1ur$@E7W#pc zY-8i67{Cn=URg0 zJJVC01Fswp8C#zGB%&o9Yp|vCo2Q3UR%_k22=omZG54x6w`u27vG#Xo(L+t2b^Bz) z=kpwx*(Q}e^Nydob=6c={~hkc!hXZdf^OW21+qrk;Yb&J@3p8?-5jP{OiHwwMz zT%;)y4;Qx?P6=yJ{*=2S_1bc&?C7?S_~E!A71|=zb{K;_Mq5s#Db}3*Ts}5nj}`7H zn9ek7Q|RA5S0y)~6_nEQd{0Kfu@YA+k1+VRF6N%tO_=0aK)yNi-V6MCjUdlRF`|M~ z{_kx&aaaISZlI(Ms$%FE7{v!9Hh;`8A=ATY3ZqP2KFTz+N}huu6;U-z-C1cnV!m_3 zpj%d?uxqK`TQbB|4@u&L$)vDO&S1$@zLz5UD^L6!rM!-;dECYG6$nE*yIhwB^{C5!({` zj2(&5A57;JhYq;akSugHi2LigfPPMp8lXY~02nFRB~EXe6x$A*e;32F(gO zyf@8t$Yz34o~#PVR?pP7o?N@2G0JuGR_WS{2WHbUBFtTx6nJ$RsU}Xprb-C414Ny> zyX)B#6HSaw2Wd&-g&Wcx4tb1Mg~U&s_r{ObwR}4nX#%k#hl3z?EDvpdBt9J;S|u@U zil|=gQGZOA&oH;ooAj|d`|R1x{wOW(vM6bd3qiK7i3U3xRH+3aqs=R_k$y&aTiI;l zbqh?Mqj_D9t(c-bHO;L|k-OBgO!E{8@)lk4Tr0i+3|crwo$&Vw=^}GU3X<#ne zx$fyak6)lx5!JE2Zb+iA$UiyE{7T!Q;9X62wGHu(4XnkjDO-oyfFvX`GE~lC+aXSs zZIke=?yO?K!KY6V1VF~pdOMXC%%;+TV2heO;w@s&DHeKF?Lfh!af<^U5NJ>zemb;; zc9?o@1oZ@@lY}vP-38!wq6OXzu~C@G-tU^>NvaA^&3mi>&5E$rfm|cik`1DZ>ve(W2_m5CO9I8 zpFrCjZ_{QSdaFbuwHR-m9SfE3>+ntP6;K+L5rAJ5~d50XdvXp67Jz(JqdAve<7QAGGMNGxjc()?^Ja0%}`*6SBuWf#)OW zT=|V~t_lfv_(SHQNnQafYM!V-#AIZfFPgg}Tt(#ITj@OU?;*DHu(Shpo%rDZB+Dt> z7WyH|CTs;)$NB`zHnlj-tEe~iAvW9Zdu71#NcXGr+bL@+l;Z}*O($g8y>S>uKHdt? zjvXN78wFMIdKImjbyXnAslUn2oeD|{SUAB}XT&;IklXYK!S(2c(*7^QPwFl#ov|-& zcf%ESdX{a%c!=nYjArw}5$n5`Y;X8RYiF-#!+pgd6`L}VMOGA$#cH}+FGhbuie^!3 zQPf%Zo^G4!g&5_2`p#5~k>+ZA6Nz&Cy!<^KH&&(a$&^TvmA(&140UO7xHf zDv%5Qu*|uxkY=VB9BVF>8N0CEhI$I0?}(N!k>YnQ++8F@=28u-3>-z$_e+d~H>6{Q z+gzOe-VR~TQEg&JHFB1WXJwq^2QSp{JlxrR@MD9^Sdyd&diKVa7ci+;5KV+svqJmL z9aB~uDnc<|4K*T*wLjpUBQQBjm+P;xM&NBXEZUFn4lOC&#}8}u-Ptld{wO_T)%zPM z*)1;GAmWArpH>6IJ`I2k#ElZw#+@gqw_>T6PmL(*cqK3 z%nr)@B}S6lJgg08O3Nb?45(V?HA(}t4!kwsy=D?PFMG2%s`QD~?6UJdAPqGZtesUS z1}8nr_yTe&B;L_gQGwAXn@5e0Q1#o&Tl}sF?Qgb;)-j>PI}>@D0Oan&!bt%DoWzM3 z`J6wxOLmxAT*pAvdf++tlSA?TGO`7vnWuhtd1Q|8OIu9dab=(IZ)lGT_CGCBN+Hqr zqcv%^qv1SLfJxysRexkCXcXE9-#=|3_+@UXw@Y?@@Oh4?dTCzF)WEgt-cNVbp_}*Y zyS4W?bLLQnXGH}`hI?*Zd{l3s+(MR6Sy<=$*(t#$I^ugqPqg8Sbh;Vw$_9$e%lN>Q z^zsG3k=fD(&Ii06j@A=bXW5XoI=dat1|-WgQ3@1`6)1?l)!gHadmSZ1EkCLsJ5R1k zXXGHA$^i|1TUs?TfMn~;sX3|;dnLRcpcUVCc{gbYSwA?Z{eG(5+4FF`t@WP0zE~Tv zWVNla)N;jO6edOaQK&4!XR-+3kLQ1(woo7yCcrsvs&`DtB^ z8Zmg-f5ltv;_%!dWouz~RW*#(bELe0t|4B>@7k<5=miHO$@_wz2 z9A54I!HBL|FK0S8a?~ieN(i%+hTPDg+17p9=4EEl8UExHw3n9QXja3N=qQvNEsQ@U zb~|7;`g53utSPs3^&wZ-MsSrf4TO!`+hXgHdsSF4TomUO;YSpfk-1#^EU$>6xfS0~ zl(CkCTz}t@10jwF38y3Mg>NXaJtbDv@ z28nL;l41VFeb)L5O^3-2a!fDO=xTrgG8DuaS4MGT@purVoPmQNh04dQ0?vma6^4)U zSv`SV5CO+t0+FafMSM3CB>Q97`J~DrZtQ^_A|^pHw-(N zu;5GLN6vVI1p88z&qBsB>d!dy=XYQOpz2a2#Q+h2r(AI+CNv74rp2-ZB zgpFg^p5x4BRI%q{mE&d;Aocdbj3!mDN#0d3Ul@y+<7E$p*^rn|cHb-Fw62f;D>-KFr*cyY?L*OU!2>TkU^Ol>KHcs+|Acu!v{TPrHry#0JFfyYuTI9jN2DUq!uL=tzMzSqy@pqVCHrU%|S@|86 z=H*%8p>xPIh)3*3u$jHV{MMTaEVVBTBUW+PT-{ArvB8_pHO*qbbqgYYhKm^_ z7u{B`il^@ob1a)rUnR@{72ENtj1h;oL2`QuAh*ySnRZv0q@qo2(uG#T=bbAgv$Wpl zpQtMDz=@Q~c=CHN#tM5rJR5Gx`It*Z5d&A2x*&Tq(r*H_G}#Sxs$w;1kG;yi$`XO8 z0psc3vfFU$h;vZBbX49mD=yv`_d5m|jRgT~Rl)DCU4P@CHqFOd@#f46Oo4t>EIOy9 zZa8hXepIKPPMcPA?EF|*d8WAo_QP}n#qD!t7A@XW^d5atB(3BeL&vyTD?E2?_Dp8D3{O|{Off0TG#z^SuBP=K85-=6& zwLVel;)VBZ8IRtf)}me2_9DbLGVO2LoIYZn_%QT!gQi3;9&nuen5_B1al!&(ZbJ3a zb(WzYtR%nB$mIWECE50al>}tXUxVcK{O=qm6L9(?6bqQW^!lBXq-gbb?vy1CrYe~A zvi&j8@PpvwEwsRffdhs`pfG?prJwXWZ^{?s+RpGF31=)K=)|aJzF3hy>K2f_; zUjEwDKBZ3}Lwr&w*5TOu&#-M<|1q1o6(BNkOj$D7N`7~2XMZ@hi@>pc!<9?XK2eaf zII8bRw7>Kcf*qqpEqatRIi=UzP-_%3G&H~~?U8g`H%jykyQb)ZwgbSEtgBK2v%+_N zlvDh7v~R-rP`6_Zo2VsIU)!AxRXSZ?R)z?b#(Ln3jS5%umd;FOL4ok`c8U9F(|di(vHXDOsJ#&4;9$!zolmIC9CjN)#GVy$_f-JC-rw%!dH`X80Af zK>428=QscNzgp#=zxiN~F9OUDJZFS=pc+}|N?N1s3|>SKoOT^#4XAF=&nuzcvw&RR z1$yBh-Ujkl8-uf6#V;Up*QID6IXybYsH0G>QvJd0Ptb zFelclKKbk9_wu|o+b{b zSDeXMLHUASj&(VZHU)b*#tCsk)1#pD&{;CQW{bN{ZTul~WM_ZGDFi1S$XsR8)E=&> zhE14J40&jH=UzpTT>Su8NZ79Jt~5g;-vt9!BqA$jMUC$Nu zPM?2l-8zOq5Sl%IluR()|CJ?^jdmtm5!g--3@ENYd@w-QFQBE4B+M>Th+nnS$}F_+ zQuy~)H(1^-5z4H!74&Mj=65#}ks7p8DAiWOo!m+cj_h@LsChV+Qq%Guh`hVYITJE=>JF9!meQsB5-KKcdlq(G?J(Cb&E|5jp+FusP0DkMVE~uzgFE0J19!2>`tpnJhCr(H!)VhRG0_|M+ z52g9}${&{PA8NGFt_JDDsceliz`(3YdQj0z*^DwSLb&Bvj1Y>_@J6&k-cl+_@3xBCXzjpiAZvWEl|EcZ2bo-Yj z|NogKcV7dkUltG`RG(Aff~t`@SYA_%45fW#EA6@S_imwi@lx+rn|+T?o*?f0KH?HL zFuqMtw`HMKM_x(HC(J=ELNE0|S~H76?2VM3Zu3e)HqJWZTFPivL{XgYb7BICw(OzVA?%%?`tRlZfd2$7){R`%|^qDxEC9MG5$--G- zaxZaVBs=?^v2508jFtEENH>jPo--e}6DsYAkI&{L?C2@?j#@pDm0PrHAnPPMhcbr` z9nDBl*@^9h7lhAZ4PUb{ieQ5t5R1Wp`{a)%zZ6Pndmxh~wW0LA*W+gK zQ|Uv~SEJ0uMWfqZddOs!Ut19UR>tWXaosh)a>?wR>lM?S`Ijj#=Voo@fh{QjJzuuS$%sn^;n!KIC4M`HEm?*IT^<`sO_CN9Yvn{Y@aP&@chdr z%t!LMSZLm^V^dkXs<&220pP}LY+VAy5E&k?M2&u|82Q20{KNUVs9Q$w8MB z#1mk}2|A^LIuFrLJuHtjg*11vP3m#U*FB;>wlsU#-`a=Byw|9o+;WOUEwB5ux&0?oeNfnT= zbQv?duQ_Pf@g+U&MpxC-sP@V={fK^zMTHH~d7BvIjib0a(i7-|b3N$^o@*qWJpO=g zG@9+J#dv{m`xJLUi+|b7o34H^va&Gq=H+ajHo8?qOL<)D`#eb-Rxvjep9&k@gT_hG z8772Ruz=1fpZPitKvU5*Vie-&xRe=$D+s-$y6XeJ>hhMiCwN~A+q--?G}z{-CwuH> zSpm_)r$?8t(V526=X+`XT}jt!saeOV*ag4_2?RVNbZtStyldq`Fx`)lfgFAVRN9eR z{1LmQyTDuC`GF6zX8(wgz?@D%8Lm!ChQs6}yl7B1F72keaw)K)Gm#9Bywi) z>gRhQEynjo50oyXrO6pBgco=gU+&(o2}qgDcYg<+jM?7$#j$QZ(Z2V~3-cdodobL} z5@w3>wDL5S3T1M4e!shSnEe}pW#c3r3ud;XX*y_fJM9AY5C*xST?dL7Uzu{?Fq!9W zS5YikIXpyDZx}mQs>i{zHbQwcEL%!JGxs<$vH{9R8#Sq)%n>HfhOSc)rH)s(>0Iuu z5;A?F^j2C)%_q0fWnWFo^;*H5muei@jcM&O$s1B$(>3tzpwFwGR!zxlj9IOQ_D&1S zI`h(0oOfGH<(W*$wYj-X_Yd+Pitr{ATSX$9-9xIdI>-51LP|$lm&(j$;&PU!>FJqi zGW&;!2I0qE7LNJJJDU2P#Yh&GU0d;y#1cDDPoZ7N+qht1IcoHbRto(Z&3BZ|vbqe| z4Dr&gLM_&(C3MBNH!r1K{m}h&=RV00={rN7r!O47y-=XF%17VlSuK2mW(!W;O%z06 z#r-5&WG(S~xMzl$Y+Q~>o2|F~U3u0=TVH*@J{50b{`x?F@xeP_uFURCrNG4MV5YJg zI>X3pYSvTUui3-_hhAUo%b6air1!=o+}2g&dG-IW5d24;=f~f%2Y~MzMFQUk|Ka-* znEpGk<3=OlbYYN~IXwRx@Ne^AU}oaF(U*IKje$)VaNCR%*Bgp!7f~_FjZ8LPFwD+I z#WTXVpvhD6ASYdYxd0WKzzXJeHt+|2kd}Hu!{eb9f~gZ0A^>g5O%!zQB*&gBpNu&w zQ!LjXXqGDDdgxVB_zS1zgX(kv8Blr>1gOLZLA2Cqhn`CKDp41KQD$U=i3yxP^H4>J zifANApC?Rey36hNPI55x$ZZrWv249JV5YroX5=6YOKGkn%|8PvOatUn{fQ15)_Kte z8w-}ZxO2Wj!WLlH)7=;;N+-zZPj>T;^8F+Miz&x@pA$QBmNqC~G}1)ew7EE&)^x6I ztne_>lx|SvZcvMB5kV_N$FzFf<5h(fVk^=0l!x%4ywZ?n>x_OWtE6keBcsg=W5H^} zw>T1mh*G1ZzH!~Bqv~{C7El)|;9IOv9ER@znF#h}){-hag#630QhdDF?ONpm{kpKT z$yx;q>?)XUI>2S;GP*NSb_yA%-tt_2lMRQ{LDO zFootZf?&{T{1R9?n$(0``07;-h7Yuk%?(8cTi}!a#7~XNLQ-rM>48Hmd9_t^RZQH9++{F*v@NA@;UL_w9Vm)sooMmp43a?AO=a@C`tY?rImpwmbyZ{VyDAQXZJ zfT&dl>`oZ437mG=4${&VnllJR`tY<__}8yG>l~@8AVW2Fcvg&#qin+D)>V@5Z{W12 z7gxeSK9K`pAn~?s!W!*>Nh?6w&9B4gia-kQlIR}cGj}BzES(!5-Ma8>C4y;0gI+V> zx~R__bhX3{b?6Jr2%gCbLg&!}sLm8#;K_ht!2%8!IWy0xuPE$iKAQCF0Tk>SzM7B} z9ofnZe~%kyVIKJcpqnPPQ9x>HM?OR)BFQow#B z4uS_3(A-p&2BHU53;55@4O0%BJLGDWIZ@EWo_nfDFa{B-AItGIOelt?2` z2Xx#nb~MwqlH|lpo8ckM$ZV*24Gq{aWf?g6<_g5|6GMmq%#O4Pfx!Xwhj=2ZXq7%E z{a#Jzz@4f9Mm%Ke%)$gQ!0sjdcAB7iAi%&V*l9y0RZ#g-Tb}35q(aAAV-gbCWWX2fRzh0lM267np4AQjkt@gY~=Q5 zYfly0T1Mi2t3I!KVCsJSiSO_a34j`;8owdzro%uy3|RmX;)vbtsf_r~u}@v}uFPd? z_T6tl*vm$hq+2XFn$9n&Zg@Z-l(qU1%9?>tc5V6xbnYK>cHTEIYq`rT^fS>bFF=hG z1dP!;qd^3G3aWh#+3T!}gRt$MJw%U0@tGLt;CwJT-(XY}%aav@yi?tmz#f@{-u7cSxWi*K(RO3(V?x^!5A3-gNW-l(P}6Gt;N+dJGtFq0*QuAIG$>g`MSS~Ar{c|D z7%AG=?VTH)nU;9fZ!MT?4STpd`;666Q4xMDEu#!Sp1dmuZI;PQNL+)!am1RDiktx9 z_gFPZJuGO$Dc`|_J2ME+yeR+zKvBYUKr!`Eqs3lYby`2k!GgWJ0*0Msj4kGWXhWdz0);la;ykcHGwS>=D1BbjeH$VA2ag~+9$TemB@XFw1`kK+- zy3I_$4*Z;cjcSu%nMvC@szV8gyqzweRV7>=HmYx*oY4B@CM)@a_3YQo16D*)Sm0MJ zpYewn6X((Po%RA_F-=82Juei$?B01$^nFgLaLMf$zu8X0+7QVvVL(SA-4j28W)M)= zz>$Q%A#?eLpo1nfg^_}DGjVrjReYSi)Kn;1sLk%)4S99e?HgcZHP+Ubdp>U|8rZ7% zhV;}zlophNv8Cihjxc{Pbk`b z#4Iqgmq?p1SvJHbECL+b0#7nK6PC1r@C|nYr4`3}N&QB{jUqY0-}cd26DJhU%EWj* zTo|2QnBwIcf*;w1>D73s!`m!)fW5zF`Rm|OQM&oh9~1u5ccE9*$*ZB5`@`Wp#)J0x zUTOtqPy5lVj>2YIub0j3zlpS+Xw5rj_KM&;TzhgRC@x<9bCZfV{SKkx1VqlhR--LI zswHudHJ8!8vHVU5dHLhJ2XDQ!QG4WY5@veFQ>bZ=6z=+9Uu)3>S2RpMkbiSl9pTPA(8RP2YaXqv+9)gk;Wj24h*>A zk7ew+=;F`0-R>J&X0M8mS`QwK*vYTAtLfW5-!Fw8Q!M26pOoTfk5M>ujOvk_NY|&t zg~-{v+QlF8eI*{6eRCjL-Dy!OCCR)TdzI(JoALR*_x-894OM3VX%_^6HaLw_#IrLS?^l`l*Ayi?pET`z zd@1~UoH62c$=GG7FMz~Kj>)O>#DWi`W9TAG34p_V6#bIf`5||)fFaQwq8Z!l$swv4 zmrLs!v?d8!m>ksm?wnPq1j%{Jj(iJ}D^g+qzTM>}zJ6YSHeM}! zEVr!7hVs;|n6Idpm#9<}EjLxx)ubL{`P#~$_(aZXb%1r>{&Py`xG*A48L88LzJCt? zY5nTol#%6eP)ln>a?|9aF3Sdv!k%daxXO{wb);)TxH)EqD0EBb9e{>}Ed9tMP) z{?4IOOGSc=?;oY;FG8AOFtiB{2EShSr%>62QlYj&AcgJf48P0@_!I`yP{@dR?51yci~ zNuCwdB5>|E>%5B)F*Cn^7tK2vuQB8`n5=f$ODrhPz)AWty7PTCwB6ZNhhRF9;hhaq5Azokf77$k2iCA#lmxRbzbAjNMg=WB_Y(3%F`HBn2oA8U40@FaEegqD0m^(pmY0`_bSatyP{iK zjvfry<2u3Fe7`b-*UUIdP1B7#pK=Np-UUiT>aIy>Gr${ zea*Hm&U?zT4!0$ip2zfQTD?Y{Jb1ijcBvAn^GLI6xUewboUfU2@6kJ<9w~Ood)|7$ zV6gP}$=0{$<{6L)j4WTZdM~zu90}4H!E5@s-=caD4Sd)i1!Ha-7Q*e z>oM@zOx7C)6Qkg&HM-A?xW`s3BgoHw!C?xl9@LN)!p6>(??DvkVfs z@FZ6$3UP8D|A!jw;Wu+l2bP161{Z?0TlH~j^z;QlMwFd(@dj7QUl%<%*(l0DKceA= zNt|dnh_Z9+6o@ipFD!_%sSbP#eF;arFz>vARb|)s&g|;n<~CG`u1b1%HzIee>L}y2 zI2B$m)y`c{-QP&O8a;GHIrMcGww?RLjQFmUh_<=I!I#f}&TTCZl2AU8J&Jo^sB)Gn zUEG$1_Hm3#%6*rg+UNJ$(S14mu~~qZ>8-8wwB`uqPYXrEFrhJS8R=-%N@r|Z6fJqh zDz*;d#wqFZ)#fsx~2!7BuP%A`YuuUo9a8Hp%QnkC290=5uT5$7Q+O<(|nc z_-Cm6YpXqFperOqSia};uH63~aP2!RM{!)AFvN!9cYO|00_d~m(S1<_lrc@M#Mb{E z4AFvlEi!0)w0?jCNfn@TUJ2k7_t-qgY(t@Dqq%F@`RoZ{#1SH9 zL|9S1iC7npPD}EC3)LQk|0{bXM@D=+$`nQO>D~0gHSnHQN$0B0n20KVF35K6xWWtP zlM*pItVjF{p3Q$N(iB}?(*2-(&9XjWF9<%QX#OM6K7i~`_EThXdXzfP^s~-O==4-f z)Ol4rwO@SfH3%0$b9v|J*TeHgheT+p-sD$RN4z#PBQ~1VbMwzS_mKmXA6Iinm{iuC z&}icCJrnIBI{r@iN-%Gz3hBM_jfCayVT{WL(v(K3TjgsbbL^We!={gI!tUDh+7M=Z z2vJ*cZ#pk5rnO|GHAP83kc;sQQQ{|aaAMpk*mSn4uy{erjG}A%z12>?GL!E?Nt{{2 z*V-Q3E`I%6vxqIfGSG)DQ-2qD@;`bVgjk-!|1lX?kpT#&_Ja!k5Dny`EI$VUm<-DG zEq^Qj27|8uN8kAW<==lj-LJiyhSpKa-Zy?p=D!G8`=8O%UwZdT?|$i>+V50x{~0~{ zSKs?f@BT%-Gx`Jymut8_95Yy*X|@h3)*`x~tty5Q1KJx?pfP*~v>*@j14t$KpDx4y z^v3Hf-Q2%E@7MbMl9zu|n_v3z%O3o-J;ibmGMIlF()xj5^i_wc<2y`ZgrAjQMpvI_ zneF?5g+z@6SV+zQ3u*j!ETnSex7DhX(AP!K7chxg9y5UHszG{iiX&gZ(yS$O*Cge$ zS({4Blv+ivfzlW05SEqfjs}g%X8OdoHRmLJ36iGjhFsrfkD~2{(}1zxB^wAjjvb{y z#zzDoEWnuXqqsQ^=00-{<^!S;b1MLhfNEG10kVYP6~Jtz0q`dtAOl;ZHbB?zW4?=^ zBUj-in9q0)U@hR3hZE4!&Q3h#2Q&l6$U-m^G}n&o_yU{>TPidRuqM>$hsxlLEd@CG zb^u$kjfVMkN59tSmmK}lwf|RpGYyw^Tf>;4is9(tk7`$2;OykV;I8cSLg2veJY|!+E z2_SSx?Sc8N{yT>7f8$SLpU=_J~ja_04ZsuUAn;LJE{ zN?52rzvF)$ZI6Ma&4Q&_fNG{`q)`MvR5QeE1^%G?W@T?xBXBCXxD}m(0i_`@KU*Zr zC|{W)mNwiwYXrQ^K5*pd`5k9!6IT9y+d@uN3?mL2&LtJ3&Ag@rYEj^|?Ln(m{FM0M zF8TNb_Lpg`x%{c#Dd)z1i+idmlJGiA?zaapxH(jJ63k(lAs5;=VRKVRGC#DQov>!R z30rlCVb(yuCp)$exnx#|qH}?k$53_pr866#d$Pl+2LgQbptDNekLAyI1LjDq0kzl< z46RMrVE2~A@t@xXr|uh{jRaUqKk7`s5gsD3l=9|2?J3O@g)= Date: Thu, 12 Nov 2020 05:39:19 -0600 Subject: [PATCH 083/100] Delete UVRV4.jpg --- img/UVRV4.jpg | Bin 97937 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg deleted file mode 100644 index 235fd1fe3d7386268cd0897c795fe630cb2a86eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97937 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 Date: Thu, 12 Nov 2020 05:39:38 -0600 Subject: [PATCH 084/100] Add files via upload --- img/UVRV4.jpg | Bin 0 -> 93405 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7167ad11fff1a99513a21987adcf4f1afe7f897 GIT binary patch literal 93405 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 Date: Thu, 12 Nov 2020 05:39:57 -0600 Subject: [PATCH 085/100] Delete UVRV4.jpg --- img/UVRV4.jpg | Bin 93405 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVRV4.jpg diff --git a/img/UVRV4.jpg b/img/UVRV4.jpg deleted file mode 100644 index e7167ad11fff1a99513a21987adcf4f1afe7f897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93405 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 Date: Thu, 12 Nov 2020 05:40:21 -0600 Subject: [PATCH 086/100] Add files via upload --- img/UVRV400.jpg | Bin 0 -> 93405 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVRV400.jpg diff --git a/img/UVRV400.jpg b/img/UVRV400.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7167ad11fff1a99513a21987adcf4f1afe7f897 GIT binary patch literal 93405 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 Date: Thu, 12 Nov 2020 05:40:56 -0600 Subject: [PATCH 087/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1fbcdfb..a02676e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 0755baf2621c092b0904cf99ecb196160827bf69 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Thu, 12 Nov 2020 12:56:59 +0100 Subject: [PATCH 088/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a02676e..7bde912 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ultimate Vocal Remover GUI v4.0.0 +# Ultimate Vocal Remover GUI v4 [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) From 6ab698d66b6de24fc68776f90a6c1e193781fa47 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Thu, 12 Nov 2020 12:57:55 +0100 Subject: [PATCH 089/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7bde912..a02676e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ultimate Vocal Remover GUI v4 +# Ultimate Vocal Remover GUI v4.0.0 [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) From 7fc3862a545b639a459c6aa6001cdf5ed555aee8 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:35:52 -0600 Subject: [PATCH 090/100] Delete UVR-logo.png --- img/UVR-logo.png | Bin 353964 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png deleted file mode 100644 index 8a0730b3462ba774b8c9bc582229feefe53c79c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353964 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 V_~yuFUm=gvPd$6!%>I|$|Nmf6OCA6K From caac7465268942df251539225ff929c1dbc81e65 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:36:04 -0600 Subject: [PATCH 091/100] Delete UVRV400.jpg --- img/UVRV400.jpg | Bin 93405 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVRV400.jpg diff --git a/img/UVRV400.jpg b/img/UVRV400.jpg deleted file mode 100644 index e7167ad11fff1a99513a21987adcf4f1afe7f897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93405 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 Date: Fri, 13 Nov 2020 02:36:25 -0600 Subject: [PATCH 092/100] Add files via upload --- img/UVRVP4.png | Bin 0 -> 57529 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVRVP4.png diff --git a/img/UVRVP4.png b/img/UVRVP4.png new file mode 100644 index 0000000000000000000000000000000000000000..261dbbb2302deb5339c6992c28937b2ef61aa2dd GIT binary patch literal 57529 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 IyN;gw7lSa)=>Px# literal 0 HcmV?d00001 From 3e62130bfab71917f4e5e2c22568e6e08e2c9ca4 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:38:50 -0600 Subject: [PATCH 093/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a02676e..3eaf7a2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 - + [![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) From 5c4ecde8d24ac2bc15f280d4ce87d8913d218bae Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:40:05 -0600 Subject: [PATCH 094/100] Add files via upload --- img/UVR-logo.png | Bin 0 -> 20696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4819e915c722e28252d89446ed53084b4b0cf6d6 GIT binary patch literal 20696 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 literal 0 HcmV?d00001 From 02daa89d9eff5fdf460faa662e151aa852f73dc4 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:42:38 -0600 Subject: [PATCH 095/100] Delete UVR-logo.png --- img/UVR-logo.png | Bin 20696 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 img/UVR-logo.png diff --git a/img/UVR-logo.png b/img/UVR-logo.png deleted file mode 100644 index 4819e915c722e28252d89446ed53084b4b0cf6d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20696 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 From 8adb7d8598b971871e21ab16025ba219f39aba2f Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:45:30 -0600 Subject: [PATCH 096/100] Update VocalRemover.py --- VocalRemover.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index c3f5115..be2bbd5 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -37,7 +37,7 @@ os.chdir(base_path) # Change the current working directory to the base path instrumentalModels_dir = os.path.join(base_path, 'models') stackedModels_dir = os.path.join(base_path, 'models') -logo_path = os.path.join(base_path, 'img', 'UVR-logo.png') +logo_path = os.path.join(base_path, 'img', 'UVR-banner.png') refresh_path = os.path.join(base_path, 'img', 'refresh.png') DEFAULT_DATA = { 'export_path': '', @@ -958,4 +958,4 @@ class MainWindow(TkinterDnD.Tk): if __name__ == "__main__": root = MainWindow() - root.mainloop() \ No newline at end of file + root.mainloop() From f5253ed5b0319c71ff613ddfda7cca9659f5328a Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:45:46 -0600 Subject: [PATCH 097/100] Add files via upload --- img/UVR-banner.png | Bin 0 -> 20696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/UVR-banner.png diff --git a/img/UVR-banner.png b/img/UVR-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4819e915c722e28252d89446ed53084b4b0cf6d6 GIT binary patch literal 20696 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 literal 0 HcmV?d00001 From 3b8ac8b746a644d7f6842be0093ca47d7ae95fb1 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 05:32:14 -0600 Subject: [PATCH 098/100] Update README.md --- README.md | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3eaf7a2..4c1e069 100644 --- a/README.md +++ b/README.md @@ -115,21 +115,31 @@ All models released here will have the values they were trained with appended to ## Models Included +All of the models included in the release were trained on large datasets containing diverse sets of music genres. + **PLEASE NOTE:** Do not change the name of the models provided! The required parameters are specified and appended to the end of the filenames. Here's a list of the models included within the package - -- **v2 AI Engine** - - **Main Models** - - *(list pending)* - - **Stacked Models** - - *(list pending)* - - **v4 AI Engine** - **Main Models** - - *(list pending)* + - **MGM_MAIN_v4_sr44100_hl512_w512_nf2048.pth** - This is the main model that does an excellent job removing vocals from most tracks. + - **MGM_LOWEND_A_v4_sr32000_hl512_w512_nf2048.pth** - This model focuses a bit more on removing vocals from lower frequencies. + - **MGM_LOWEND_B_v4_sr33075_hl384_w512_nf2048.pth** - This is also a model that focuses on lower end frequencies, but trained with different parameters. + - **MGM_HIGHEND_v4_sr44100_hl1024_nf2048.pth** - This model slightly focuses a bit more on higher end frequencies. + - **MODEL_BVKARAOKE_by_aufr33_v4_sr33075_hl384_w512_nf1536.pth** - This is a beta model that removes main vocals while leaving background vocals intact. - **Stacked Models** - - *(list pending)* + - **StackedMGM_MM_v4_sr44100_hl512_w512_nf2048.pth** - This is a strong vocal artifact removal model. This model was made to run with *'MGM_MAIN_v4_sr44100_hl512_w512_nf2048.pth'*. However, any combination may yield the desired results. + - **StackedMGM_MLA_v4_sr32000_hl512_w512_nf2048.pth** - This is a strong vocal artifact removal model. This model was made to run with *'MGM_MAIN_v4_sr44100_hl512_w512_nf2048.pth'*. However, any combination may yield a desired results. + - **StackedMGM_LL_v4_sr32000_hl512_w512_nf2048.pth** - This is a strong vocal artifact removal model. This model was made to run with *'MGM_LOWEND_A_v4_sr32000_hl512_w512_nf2048.pth'*. However, any combination may yield a desired results. + +- **v2 AI Engine** + - **Main Models** + - **Multi_Genre_Model_v2_sr44100_hl1024_w512.pth** - This model yields excellent results for most tracks processed through it. + - **Stacked Models** + - **StackedRegA_v2_sr44100_hl1024_w512.pth** - This is a standard vocal artifact removal model. + - **StackedRegB_v2_sr44100_hl1024_w512.pth** - This is a standard vocal artifact removal model. + - **StackedArg_v2_sr44100_hl1024_w512.pth** - This model removes vocal artifacts a bit more aggressively, but may greatly degrade the audio quality of the output audio. A special thank you to aufr33 for helping me expand the dataset used to train these models and for the helpful training tips. From 03447fa5f3bbbac6914777d76bed41db46e991d6 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 05:35:01 -0600 Subject: [PATCH 099/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c1e069..4efd590 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ Here's a list of the models included within the package - - **StackedRegB_v2_sr44100_hl1024_w512.pth** - This is a standard vocal artifact removal model. - **StackedArg_v2_sr44100_hl1024_w512.pth** - This model removes vocal artifacts a bit more aggressively, but may greatly degrade the audio quality of the output audio. -A special thank you to aufr33 for helping me expand the dataset used to train these models and for the helpful training tips. +A special thank you to aufr33 for helping me expand the dataset used to train some of these models and for the helpful training tips. ## Other GUI Notes From 2e846edf40077594f69fb567c63386664282854c Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Fri, 13 Nov 2020 05:52:27 -0600 Subject: [PATCH 100/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4efd590..b965734 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The application was made with Tkinter for cross-platform compatibility, so it sh 1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe) (Windows link) - **Note:** Ensure the *"Add Python 3.7 to PATH"* box is checked -2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.0.0** here (link pending) +2. Once Python has installed, download **Ultimate Vocal Remover GUI Version 4.0.0** [here](https://github.com/Anjok07/ultimatevocalremovergui/releases/download/v4.0.0/UVR-V4GUI.zip) 3. Place the UVR-V4GUI folder contained within the *.zip* file where ever you wish. - Your documents folder or home directory is recommended for easy access. 4. From the UVR-V4GUI directory, open the Windows Command Prompt and run the following installs -

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 Ra&`a!002ovPDHLkV1ng&&pH4A literal 0 HcmV?d00001 diff --git a/lib_v2/dataset.py b/lib_v2/dataset.py new file mode 100644 index 0000000..a4a8836 --- /dev/null +++ b/lib_v2/dataset.py @@ -0,0 +1,119 @@ +import os + +import numpy as np +import torch +from tqdm import tqdm + +from lib_v2 import spec_utils + + +class VocalRemoverValidationSet(torch.utils.data.Dataset): + + def __init__(self, filelist): + self.filelist = filelist + + def __len__(self): + return len(self.filelist) + + def __getitem__(self, idx): + path = self.filelist[idx] + data = np.load(path) + + return data['X'], data['y'] + + +def mixup_generator(X, y, rate, alpha): + perm = np.random.permutation(len(X))[:int(len(X) * rate)] + for i in range(len(perm) - 1): + lam = np.random.beta(alpha, alpha) + X[perm[i]] = lam * X[perm[i]] + (1 - lam) * X[perm[i + 1]] + y[perm[i]] = lam * y[perm[i]] + (1 - lam) * y[perm[i + 1]] + + return X, y + + +def get_oracle_data(X, y, instance_loss, oracle_rate, oracle_drop_rate): + k = int(len(X) * oracle_rate * (1 / (1 - oracle_drop_rate))) + n = int(len(X) * oracle_rate) + idx = np.argsort(instance_loss)[::-1][:k] + idx = np.random.choice(idx, n, replace=False) + oracle_X = X[idx].copy() + oracle_y = y[idx].copy() + + return oracle_X, oracle_y, idx + + +def make_padding(width, cropsize, offset): + left = offset + roi_size = cropsize - left * 2 + if roi_size == 0: + roi_size = cropsize + right = roi_size - (width % roi_size) + left + + return left, right, roi_size + + +def make_training_set(filelist, cropsize, patches, sr, hop_length, offset): + len_dataset = patches * len(filelist) + X_dataset = np.zeros( + (len_dataset, 2, hop_length, cropsize), dtype=np.float32) + y_dataset = np.zeros( + (len_dataset, 2, hop_length, cropsize), dtype=np.float32) + for i, (X_path, y_path) in enumerate(tqdm(filelist)): + p = np.random.uniform() + if p < 0.1: + X_path.replace(os.path.splitext(X_path)[1], '_pitch-1.wav') + y_path.replace(os.path.splitext(y_path)[1], '_pitch-1.wav') + elif p < 0.2: + X_path.replace(os.path.splitext(X_path)[1], '_pitch1.wav') + y_path.replace(os.path.splitext(y_path)[1], '_pitch1.wav') + + X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length) + coeff = np.max([X.max(), y.max()]) + X, y = X / coeff, y / coeff + + l, r, roi_size = make_padding(X.shape[2], cropsize, offset) + X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') + y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') + + starts = np.random.randint(0, X_pad.shape[2] - cropsize, patches) + ends = starts + cropsize + for j in range(patches): + idx = i * patches + j + X_dataset[idx] = X_pad[:, :, starts[j]:ends[j]] + y_dataset[idx] = y_pad[:, :, starts[j]:ends[j]] + if np.random.uniform() < 0.5: + # swap channel + X_dataset[idx] = X_dataset[idx, ::-1] + y_dataset[idx] = y_dataset[idx, ::-1] + + return X_dataset, y_dataset + + +def make_validation_set(filelist, cropsize, sr, hop_length, offset): + patch_list = [] + outdir = 'cs{}_sr{}_hl{}_of{}'.format(cropsize, sr, hop_length, offset) + os.makedirs(outdir, exist_ok=True) + for i, (X_path, y_path) in enumerate(tqdm(filelist)): + basename = os.path.splitext(os.path.basename(X_path))[0] + + X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length) + coeff = np.max([X.max(), y.max()]) + X, y = X / coeff, y / coeff + + l, r, roi_size = make_padding(X.shape[2], cropsize, offset) + X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') + y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') + + len_dataset = int(np.ceil(X.shape[2] / roi_size)) + for j in range(len_dataset): + outpath = os.path.join(outdir, '{}_p{}.npz'.format(basename, j)) + start = j * roi_size + if not os.path.exists(outpath): + np.savez( + outpath, + X=X_pad[:, :, start:start + cropsize], + y=y_pad[:, :, start:start + cropsize]) + patch_list.append(outpath) + + return VocalRemoverValidationSet(patch_list) diff --git a/lib_v2/layers.py b/lib_v2/layers.py new file mode 100644 index 0000000..dee340b --- /dev/null +++ b/lib_v2/layers.py @@ -0,0 +1,117 @@ +import torch +from torch import nn +import torch.nn.functional as F + +from lib_v2 import spec_utils + + +class Conv2DBNActiv(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): + super(Conv2DBNActiv, self).__init__() + self.conv = nn.Sequential( + nn.Conv2d( + nin, nout, + kernel_size=ksize, + stride=stride, + padding=pad, + dilation=dilation, + bias=False), + nn.BatchNorm2d(nout), + activ() + ) + + def __call__(self, x): + return self.conv(x) + + +class SeperableConv2DBNActiv(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): + super(SeperableConv2DBNActiv, self).__init__() + self.conv = nn.Sequential( + nn.Conv2d( + nin, nin, + kernel_size=ksize, + stride=stride, + padding=pad, + dilation=dilation, + groups=nin, + bias=False), + nn.Conv2d( + nin, nout, + kernel_size=1, + bias=False), + nn.BatchNorm2d(nout), + activ() + ) + + def __call__(self, x): + return self.conv(x) + + +class Encoder(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): + super(Encoder, self).__init__() + self.conv1 = Conv2DBNActiv( + nin, nout, ksize, 1, pad, activ=activ) + self.conv2 = Conv2DBNActiv( + nout, nout, ksize, stride, pad, activ=activ) + + def __call__(self, x): + skip = self.conv1(x) + h = self.conv2(skip) + + return h, skip + + +class Decoder(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dropout=False): + super(Decoder, self).__init__() + self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad) + self.dropout = nn.Dropout2d(0.1) if dropout else None + + def __call__(self, x, skip=None): + x = F.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) + if skip is not None: + x = spec_utils.crop_center(x, skip) + h = self.conv(x) + + if self.dropout is not None: + h = self.dropout(h) + + return h + + +class ASPPModule(nn.Module): + + def __init__(self, nin, nout, dilations=(4, 8, 16)): + super(ASPPModule, self).__init__() + self.conv1 = nn.Sequential( + nn.AdaptiveAvgPool2d((1, None)), + Conv2DBNActiv(nin, nin, 1, 1, 0) + ) + self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0) + self.conv3 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[0], dilations[0]) + self.conv4 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[1], dilations[1]) + self.conv5 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[2], dilations[2]) + self.bottleneck = nn.Sequential( + Conv2DBNActiv(nin * 5, nout, 1, 1, 0), + nn.Dropout2d(0.1) + ) + + def forward(self, x): + _, _, h, w = x.size() + feat1 = F.interpolate(self.conv1(x), size=(h, w), mode='bilinear', align_corners=True) + feat2 = self.conv2(x) + feat3 = self.conv3(x) + feat4 = self.conv4(x) + feat5 = self.conv5(x) + out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) + bottle = self.bottleneck(out) + return bottle diff --git a/lib_v2/nets.py b/lib_v2/nets.py new file mode 100644 index 0000000..0a3ff66 --- /dev/null +++ b/lib_v2/nets.py @@ -0,0 +1,86 @@ +import torch +from torch import nn + +from lib_v2 import layers + + +class BaseASPPNet(nn.Module): + + def __init__(self, nin, ch, dilations=(4, 8, 16)): + super(BaseASPPNet, self).__init__() + self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) + self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) + self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) + self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) + + self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) + + self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) + self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) + self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) + self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) + + def __call__(self, x): + h, e1 = self.enc1(x) + h, e2 = self.enc2(h) + h, e3 = self.enc3(h) + h, e4 = self.enc4(h) + + h = self.aspp(h) + + h = self.dec4(h, e4) + h = self.dec3(h, e3) + h = self.dec2(h, e2) + h = self.dec1(h, e1) + + return h + + +class CascadedASPPNet(nn.Module): + + def __init__(self): + super(CascadedASPPNet, self).__init__() + self.low_band_net = BaseASPPNet(2, 32, ((2, 4), (4, 8), (8, 16))) + self.high_band_net = BaseASPPNet(2, 32, ((2, 4), (4, 8), (8, 16))) + + self.bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) + self.full_band_net = BaseASPPNet(16, 32) + + self.out = nn.Sequential( + layers.Conv2DBNActiv(32, 16, 3, 1, 1), + nn.Conv2d(16, 2, 1, bias=False)) + self.aux_out = nn.Conv2d(32, 2, 1, bias=False) + + self.offset = 128 + + def __call__(self, x): + bandw = x.size()[2] // 2 + aux = torch.cat([ + self.low_band_net(x[:, :, :bandw]), + self.high_band_net(x[:, :, bandw:]) + ], dim=2) + + h = torch.cat([x, aux], dim=1) + h = self.full_band_net(self.bridge(h)) + + h = torch.sigmoid(self.out(h)) + aux = torch.sigmoid(self.aux_out(aux)) + + return h, aux + + def predict(self, x): + bandw = x.size()[2] // 2 + aux = torch.cat([ + self.low_band_net(x[:, :, :bandw]), + self.high_band_net(x[:, :, bandw:]) + ], dim=2) + + h = torch.cat([x, aux], dim=1) + h = self.full_band_net(self.bridge(h)) + + h = torch.sigmoid(self.out(h)) + if self.offset > 0: + h = h[:, :, :, self.offset:-self.offset] + assert h.size()[3] > 0 + + return h diff --git a/lib_v2/spec_utils.py b/lib_v2/spec_utils.py new file mode 100644 index 0000000..be61986 --- /dev/null +++ b/lib_v2/spec_utils.py @@ -0,0 +1,136 @@ +import os + +import librosa +import numpy as np +import soundfile as sf +import torch + + +def crop_center(h1, h2, concat=True): + # s_freq = (h2.shape[2] - h1.shape[2]) // 2 + # e_freq = s_freq + h1.shape[2] + h1_shape = h1.size() + h2_shape = h2.size() + if h2_shape[3] < h1_shape[3]: + raise ValueError('h2_shape[3] must be greater than h1_shape[3]') + s_time = (h2_shape[3] - h1_shape[3]) // 2 + e_time = s_time + h1_shape[3] + h2 = h2[:, :, :, s_time:e_time] + if concat: + return torch.cat([h1, h2], dim=1) + else: + return h2 + + +def calc_spec(X, hop_length): + n_fft = (hop_length - 1) * 2 + audio_left = np.asfortranarray(X[0]) + audio_right = np.asfortranarray(X[1]) + spec_left = librosa.stft(audio_left, n_fft, hop_length=hop_length) + spec_right = librosa.stft(audio_right, n_fft, hop_length=hop_length) + spec = np.asfortranarray([spec_left, spec_right]) + + return spec + + +def mask_uninformative(mask, ref, thres=0.3, min_range=64, fade_area=32): + if min_range < fade_area * 2: + raise ValueError('min_range must be >= fade_area * 2') + idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] + starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) + ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) + uninformative = np.where(ends - starts > min_range)[0] + if len(uninformative) > 0: + starts = starts[uninformative] + ends = ends[uninformative] + old_e = None + for s, e in zip(starts, ends): + if old_e is not None and s - old_e < fade_area: + s = old_e - fade_area * 2 + elif s != 0: + start_mask = mask[:, :, s:s + fade_area] + np.clip( + start_mask + np.linspace(0, 1, fade_area), 0, 1, + out=start_mask) + if e != mask.shape[2]: + end_mask = mask[:, :, e - fade_area:e] + np.clip( + end_mask + np.linspace(1, 0, fade_area), 0, 1, + out=end_mask) + mask[:, :, s + fade_area:e - fade_area] = 1 + old_e = e + + return mask + + +def align_wave_head_and_tail(a, b, sr): + a_mono = a[:, :sr * 4].sum(axis=0) + b_mono = b[:, :sr * 4].sum(axis=0) + a_mono -= a_mono.mean() + b_mono -= b_mono.mean() + offset = len(a_mono) - 1 + delay = np.argmax(np.correlate(a_mono, b_mono, 'full')) - offset + + if delay > 0: + a = a[:, delay:] + else: + b = b[:, np.abs(delay):] + if a.shape[1] < b.shape[1]: + b = b[:, :a.shape[1]] + else: + a = a[:, :b.shape[1]] + + return a, b + + +def cache_or_load(mix_path, inst_path, sr, hop_length): + _, mix_ext = os.path.splitext(mix_path) + _, inst_ext = os.path.splitext(inst_path) + spec_mix_path = mix_path.replace(mix_ext, '.npy') + spec_inst_path = inst_path.replace(inst_ext, '.npy') + + if os.path.exists(spec_mix_path) and os.path.exists(spec_inst_path): + X = np.load(spec_mix_path) + y = np.load(spec_inst_path) + else: + X, _ = librosa.load( + mix_path, sr, False, dtype=np.float32, res_type='kaiser_fast') + y, _ = librosa.load( + inst_path, sr, False, dtype=np.float32, res_type='kaiser_fast') + X, _ = librosa.effects.trim(X) + y, _ = librosa.effects.trim(y) + X, y = align_wave_head_and_tail(X, y, sr) + + X = np.abs(calc_spec(X, hop_length)) + y = np.abs(calc_spec(y, hop_length)) + + _, ext = os.path.splitext(mix_path) + np.save(spec_mix_path, X) + np.save(spec_inst_path, y) + + return X, y + + +def spec_to_wav(mag, phase, hop_length): + spec = mag * phase + spec_left = np.asfortranarray(spec[0]) + spec_right = np.asfortranarray(spec[1]) + wav_left = librosa.istft(spec_left, hop_length=hop_length) + wav_right = librosa.istft(spec_right, hop_length=hop_length) + wav = np.asfortranarray([wav_left, wav_right]) + + return wav + + +if __name__ == "__main__": + import sys + X, _ = librosa.load( + sys.argv[1], 44100, False, dtype=np.float32, res_type='kaiser_fast') + y, _ = librosa.load( + sys.argv[2], 44100, False, dtype=np.float32, res_type='kaiser_fast') + X, _ = librosa.effects.trim(X) + y, _ = librosa.effects.trim(y) + X, y = align_wave_head_and_tail(X, y, 44100) + sf.write('test_i.wav', y.T, 44100) + sf.write('test_m.wav', X.T, 44100) + sf.write('test_v.wav', (X - y).T, 44100) diff --git a/lib_v4/dataset.py b/lib_v4/dataset.py new file mode 100644 index 0000000..6e515b2 --- /dev/null +++ b/lib_v4/dataset.py @@ -0,0 +1,170 @@ +import os +import random + +import numpy as np +import torch +import torch.utils.data +from tqdm import tqdm + +from lib_v4 import spec_utils + + +class VocalRemoverValidationSet(torch.utils.data.Dataset): + + def __init__(self, patch_list): + self.patch_list = patch_list + + def __len__(self): + return len(self.patch_list) + + def __getitem__(self, idx): + path = self.patch_list[idx] + data = np.load(path) + + X, y = data['X'], data['y'] + + X_mag = np.abs(X) + y_mag = np.abs(y) + + return X_mag, y_mag + + +def make_pair(mix_dir, inst_dir): + input_exts = ['.wav', '.m4a', '.mp3', '.mp4', '.flac'] + + X_list = sorted([ + os.path.join(mix_dir, fname) + for fname in os.listdir(mix_dir) + if os.path.splitext(fname)[1] in input_exts]) + y_list = sorted([ + os.path.join(inst_dir, fname) + for fname in os.listdir(inst_dir) + if os.path.splitext(fname)[1] in input_exts]) + + filelist = list(zip(X_list, y_list)) + + return filelist + + +def train_val_split(dataset_dir, split_mode, val_rate, val_filelist): + if split_mode == 'random': + filelist = make_pair( + os.path.join(dataset_dir, 'mixtures'), + os.path.join(dataset_dir, 'instruments')) + + random.shuffle(filelist) + + if len(val_filelist) == 0: + val_size = int(len(filelist) * val_rate) + train_filelist = filelist[:-val_size] + val_filelist = filelist[-val_size:] + else: + train_filelist = [ + pair for pair in filelist + if list(pair) not in val_filelist] + elif split_mode == 'subdirs': + if len(val_filelist) != 0: + raise ValueError('The `val_filelist` option is not available in `subdirs` mode') + + train_filelist = make_pair( + os.path.join(dataset_dir, 'training/mixtures'), + os.path.join(dataset_dir, 'training/instruments')) + + val_filelist = make_pair( + os.path.join(dataset_dir, 'validation/mixtures'), + os.path.join(dataset_dir, 'validation/instruments')) + + return train_filelist, val_filelist + + +def augment(X, y, reduction_rate, reduction_mask, mixup_rate, mixup_alpha): + perm = np.random.permutation(len(X)) + for i, idx in enumerate(tqdm(perm)): + if np.random.uniform() < reduction_rate: + y[idx] = spec_utils.reduce_vocal_aggressively(X[idx], y[idx], reduction_mask) + + if np.random.uniform() < 0.5: + # swap channel + X[idx] = X[idx, ::-1] + y[idx] = y[idx, ::-1] + if np.random.uniform() < 0.02: + # mono + X[idx] = X[idx].mean(axis=0, keepdims=True) + y[idx] = y[idx].mean(axis=0, keepdims=True) + if np.random.uniform() < 0.02: + # inst + X[idx] = y[idx] + + if np.random.uniform() < mixup_rate and i < len(perm) - 1: + lam = np.random.beta(mixup_alpha, mixup_alpha) + X[idx] = lam * X[idx] + (1 - lam) * X[perm[i + 1]] + y[idx] = lam * y[idx] + (1 - lam) * y[perm[i + 1]] + + return X, y + + +def make_padding(width, cropsize, offset): + left = offset + roi_size = cropsize - left * 2 + if roi_size == 0: + roi_size = cropsize + right = roi_size - (width % roi_size) + left + + return left, right, roi_size + + +def make_training_set(filelist, cropsize, patches, sr, hop_length, n_fft, offset): + len_dataset = patches * len(filelist) + + X_dataset = np.zeros( + (len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) + y_dataset = np.zeros( + (len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) + + for i, (X_path, y_path) in enumerate(tqdm(filelist)): + X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) + coef = np.max([np.abs(X).max(), np.abs(y).max()]) + X, y = X / coef, y / coef + + l, r, roi_size = make_padding(X.shape[2], cropsize, offset) + X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') + y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') + + starts = np.random.randint(0, X_pad.shape[2] - cropsize, patches) + ends = starts + cropsize + for j in range(patches): + idx = i * patches + j + X_dataset[idx] = X_pad[:, :, starts[j]:ends[j]] + y_dataset[idx] = y_pad[:, :, starts[j]:ends[j]] + + return X_dataset, y_dataset + + +def make_validation_set(filelist, cropsize, sr, hop_length, n_fft, offset): + patch_list = [] + patch_dir = 'cs{}_sr{}_hl{}_nf{}_of{}'.format(cropsize, sr, hop_length, n_fft, offset) + os.makedirs(patch_dir, exist_ok=True) + + for i, (X_path, y_path) in enumerate(tqdm(filelist)): + basename = os.path.splitext(os.path.basename(X_path))[0] + + X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) + coef = np.max([np.abs(X).max(), np.abs(y).max()]) + X, y = X / coef, y / coef + + l, r, roi_size = make_padding(X.shape[2], cropsize, offset) + X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') + y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode='constant') + + len_dataset = int(np.ceil(X.shape[2] / roi_size)) + for j in range(len_dataset): + outpath = os.path.join(patch_dir, '{}_p{}.npz'.format(basename, j)) + start = j * roi_size + if not os.path.exists(outpath): + np.savez( + outpath, + X=X_pad[:, :, start:start + cropsize], + y=y_pad[:, :, start:start + cropsize]) + patch_list.append(outpath) + + return VocalRemoverValidationSet(patch_list) diff --git a/lib_v4/layers.py b/lib_v4/layers.py new file mode 100644 index 0000000..48bc975 --- /dev/null +++ b/lib_v4/layers.py @@ -0,0 +1,116 @@ +import torch +from torch import nn +import torch.nn.functional as F + +from lib_v4 import spec_utils + + +class Conv2DBNActiv(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): + super(Conv2DBNActiv, self).__init__() + self.conv = nn.Sequential( + nn.Conv2d( + nin, nout, + kernel_size=ksize, + stride=stride, + padding=pad, + dilation=dilation, + bias=False), + nn.BatchNorm2d(nout), + activ() + ) + + def __call__(self, x): + return self.conv(x) + + +class SeperableConv2DBNActiv(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): + super(SeperableConv2DBNActiv, self).__init__() + self.conv = nn.Sequential( + nn.Conv2d( + nin, nin, + kernel_size=ksize, + stride=stride, + padding=pad, + dilation=dilation, + groups=nin, + bias=False), + nn.Conv2d( + nin, nout, + kernel_size=1, + bias=False), + nn.BatchNorm2d(nout), + activ() + ) + + def __call__(self, x): + return self.conv(x) + + +class Encoder(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): + super(Encoder, self).__init__() + self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) + self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) + + def __call__(self, x): + skip = self.conv1(x) + h = self.conv2(skip) + + return h, skip + + +class Decoder(nn.Module): + + def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False): + super(Decoder, self).__init__() + self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) + self.dropout = nn.Dropout2d(0.1) if dropout else None + + def __call__(self, x, skip=None): + x = F.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) + if skip is not None: + skip = spec_utils.crop_center(skip, x) + x = torch.cat([x, skip], dim=1) + h = self.conv(x) + + if self.dropout is not None: + h = self.dropout(h) + + return h + + +class ASPPModule(nn.Module): + + def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): + super(ASPPModule, self).__init__() + self.conv1 = nn.Sequential( + nn.AdaptiveAvgPool2d((1, None)), + Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) + ) + self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) + self.conv3 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[0], dilations[0], activ=activ) + self.conv4 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[1], dilations[1], activ=activ) + self.conv5 = SeperableConv2DBNActiv( + nin, nin, 3, 1, dilations[2], dilations[2], activ=activ) + self.bottleneck = nn.Sequential( + Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), + nn.Dropout2d(0.1) + ) + + def forward(self, x): + _, _, h, w = x.size() + feat1 = F.interpolate(self.conv1(x), size=(h, w), mode='bilinear', align_corners=True) + feat2 = self.conv2(x) + feat3 = self.conv3(x) + feat4 = self.conv4(x) + feat5 = self.conv5(x) + out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) + bottle = self.bottleneck(out) + return bottle diff --git a/lib_v4/nets.py b/lib_v4/nets.py new file mode 100644 index 0000000..266e63a --- /dev/null +++ b/lib_v4/nets.py @@ -0,0 +1,108 @@ +import torch +from torch import nn +import torch.nn.functional as F + +from lib_v4 import layers + + +class BaseASPPNet(nn.Module): + + def __init__(self, nin, ch, dilations=(4, 8, 16)): + super(BaseASPPNet, self).__init__() + self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) + self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) + self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) + self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) + + self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) + + self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) + self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) + self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) + self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) + + def __call__(self, x): + h, e1 = self.enc1(x) + h, e2 = self.enc2(h) + h, e3 = self.enc3(h) + h, e4 = self.enc4(h) + + h = self.aspp(h) + + h = self.dec4(h, e4) + h = self.dec3(h, e3) + h = self.dec2(h, e2) + h = self.dec1(h, e1) + + return h + + +class CascadedASPPNet(nn.Module): + + def __init__(self, n_fft): + super(CascadedASPPNet, self).__init__() + self.stg1_low_band_net = BaseASPPNet(2, 16) + self.stg1_high_band_net = BaseASPPNet(2, 16) + + self.stg2_bridge = layers.Conv2DBNActiv(18, 8, 1, 1, 0) + self.stg2_full_band_net = BaseASPPNet(8, 16) + + self.stg3_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) + self.stg3_full_band_net = BaseASPPNet(16, 32) + + self.out = nn.Conv2d(32, 2, 1, bias=False) + self.aux1_out = nn.Conv2d(16, 2, 1, bias=False) + self.aux2_out = nn.Conv2d(16, 2, 1, bias=False) + + self.max_bin = n_fft // 2 + self.output_bin = n_fft // 2 + 1 + + self.offset = 128 + + def forward(self, x): + mix = x.detach() + x = x.clone() + + x = x[:, :, :self.max_bin] + + bandw = x.size()[2] // 2 + aux1 = torch.cat([ + self.stg1_low_band_net(x[:, :, :bandw]), + self.stg1_high_band_net(x[:, :, bandw:]) + ], dim=2) + + h = torch.cat([x, aux1], dim=1) + aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) + + h = torch.cat([x, aux1, aux2], dim=1) + h = self.stg3_full_band_net(self.stg3_bridge(h)) + + mask = torch.sigmoid(self.out(h)) + mask = F.pad( + input=mask, + pad=(0, 0, 0, self.output_bin - mask.size()[2]), + mode='replicate') + + if self.training: + aux1 = torch.sigmoid(self.aux1_out(aux1)) + aux1 = F.pad( + input=aux1, + pad=(0, 0, 0, self.output_bin - aux1.size()[2]), + mode='replicate') + aux2 = torch.sigmoid(self.aux2_out(aux2)) + aux2 = F.pad( + input=aux2, + pad=(0, 0, 0, self.output_bin - aux2.size()[2]), + mode='replicate') + return mask * mix, aux1 * mix, aux2 * mix + else: + return mask * mix + + def predict(self, x_mag): + h = self.forward(x_mag) + + if self.offset > 0: + h = h[:, :, :, self.offset:-self.offset] + assert h.size()[3] > 0 + + return h diff --git a/lib_v4/spec_utils.py b/lib_v4/spec_utils.py new file mode 100644 index 0000000..8cf19f8 --- /dev/null +++ b/lib_v4/spec_utils.py @@ -0,0 +1,216 @@ +import os + +import librosa +import numpy as np +import soundfile as sf + + +def crop_center(h1, h2): + h1_shape = h1.size() + h2_shape = h2.size() + + if h1_shape[3] == h2_shape[3]: + return h1 + elif h1_shape[3] < h2_shape[3]: + raise ValueError('h1_shape[3] must be greater than h2_shape[3]') + + # s_freq = (h2_shape[2] - h1_shape[2]) // 2 + # e_freq = s_freq + h1_shape[2] + s_time = (h1_shape[3] - h2_shape[3]) // 2 + e_time = s_time + h2_shape[3] + h1 = h1[:, :, :, s_time:e_time] + + return h1 + + +def wave_to_spectrogram(wave, hop_length, n_fft): + wave_left = np.asfortranarray(wave[0]) + wave_right = np.asfortranarray(wave[1]) + + spec_left = librosa.stft(wave_left, n_fft, hop_length=hop_length) + spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) + spec = np.asfortranarray([spec_left, spec_right]) + + return spec + + +def spectrogram_to_image(spec, mode='magnitude'): + if mode == 'magnitude': + if np.iscomplexobj(spec): + y = np.abs(spec) + else: + y = spec + y = np.log10(y ** 2 + 1e-8) + elif mode == 'phase': + if np.iscomplexobj(spec): + y = np.angle(spec) + else: + y = spec + + y -= y.min() + y *= 255 / y.max() + img = np.uint8(y) + + if y.ndim == 3: + img = img.transpose(1, 2, 0) + img = np.concatenate([ + np.max(img, axis=2, keepdims=True), img + ], axis=2) + + return img + + +def reduce_vocal_aggressively(X, y, softmask): + v = X - y + y_mag_tmp = np.abs(y) + v_mag_tmp = np.abs(v) + + v_mask = v_mag_tmp > y_mag_tmp + y_mag = np.clip(y_mag_tmp - v_mag_tmp * v_mask * softmask, 0, np.inf) + + return y_mag * np.exp(1.j * np.angle(y)) + + +def mask_silence(mag, ref, thres=0.2, min_range=64, fade_size=32): + if min_range < fade_size * 2: + raise ValueError('min_range must be >= fade_area * 2') + + mag = mag.copy() + + idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] + starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) + ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) + uninformative = np.where(ends - starts > min_range)[0] + if len(uninformative) > 0: + starts = starts[uninformative] + ends = ends[uninformative] + old_e = None + for s, e in zip(starts, ends): + if old_e is not None and s - old_e < fade_size: + s = old_e - fade_size * 2 + + if s != 0: + weight = np.linspace(0, 1, fade_size) + mag[:, :, s:s + fade_size] += weight * ref[:, :, s:s + fade_size] + else: + s -= fade_size + + if e != mag.shape[2]: + weight = np.linspace(1, 0, fade_size) + mag[:, :, e - fade_size:e] += weight * ref[:, :, e - fade_size:e] + else: + e += fade_size + + mag[:, :, s + fade_size:e - fade_size] += ref[:, :, s + fade_size:e - fade_size] + old_e = e + + return mag + + +def align_wave_head_and_tail(a, b, sr): + a, _ = librosa.effects.trim(a) + b, _ = librosa.effects.trim(b) + + a_mono = a[:, :sr * 4].sum(axis=0) + b_mono = b[:, :sr * 4].sum(axis=0) + + a_mono -= a_mono.mean() + b_mono -= b_mono.mean() + + offset = len(a_mono) - 1 + delay = np.argmax(np.correlate(a_mono, b_mono, 'full')) - offset + + if delay > 0: + a = a[:, delay:] + else: + b = b[:, np.abs(delay):] + + if a.shape[1] < b.shape[1]: + b = b[:, :a.shape[1]] + else: + a = a[:, :b.shape[1]] + + return a, b + + +def cache_or_load(mix_path, inst_path, sr, hop_length, n_fft): + mix_basename = os.path.splitext(os.path.basename(mix_path))[0] + inst_basename = os.path.splitext(os.path.basename(inst_path))[0] + + cache_dir = 'sr{}_hl{}_nf{}'.format(sr, hop_length, n_fft) + mix_cache_dir = os.path.join(os.path.dirname(mix_path), cache_dir) + inst_cache_dir = os.path.join(os.path.dirname(inst_path), cache_dir) + os.makedirs(mix_cache_dir, exist_ok=True) + os.makedirs(inst_cache_dir, exist_ok=True) + + mix_cache_path = os.path.join(mix_cache_dir, mix_basename + '.npy') + inst_cache_path = os.path.join(inst_cache_dir, inst_basename + '.npy') + + if os.path.exists(mix_cache_path) and os.path.exists(inst_cache_path): + X = np.load(mix_cache_path) + y = np.load(inst_cache_path) + else: + X, _ = librosa.load( + mix_path, sr, False, dtype=np.float32, res_type='kaiser_fast') + y, _ = librosa.load( + inst_path, sr, False, dtype=np.float32, res_type='kaiser_fast') + + X, y = align_wave_head_and_tail(X, y, sr) + + X = wave_to_spectrogram(X, hop_length, n_fft) + y = wave_to_spectrogram(y, hop_length, n_fft) + + _, ext = os.path.splitext(mix_path) + np.save(mix_cache_path, X) + np.save(inst_cache_path, y) + + return X, y + + +def spectrogram_to_wave(spec, hop_length=1024): + spec_left = np.asfortranarray(spec[0]) + spec_right = np.asfortranarray(spec[1]) + + wave_left = librosa.istft(spec_left, hop_length=hop_length) + wave_right = librosa.istft(spec_right, hop_length=hop_length) + wave = np.asfortranarray([wave_left, wave_right]) + + return wave + + +if __name__ == "__main__": + import cv2 + import sys + + X, _ = librosa.load( + sys.argv[1], 44100, False, dtype=np.float32, res_type='kaiser_fast') + y, _ = librosa.load( + sys.argv[2], 44100, False, dtype=np.float32, res_type='kaiser_fast') + + X, y = align_wave_head_and_tail(X, y, 44100) + + X_spec = wave_to_spectrogram(X, 1024, 2048) + y_spec = wave_to_spectrogram(y, 1024, 2048) + + y_spec = reduce_vocal_aggressively(X_spec, y_spec, 0.2) + v_spec = X_spec - y_spec + + # v_mask = np.abs(v_spec) > np.abs(y_spec) + # y_spec = X_spec - v_spec * v_mask + # v_spec = X_spec - y_spec + + X_mag = np.abs(X_spec) + y_mag = np.abs(y_spec) + v_mag = np.abs(v_spec) + + X_image = spectrogram_to_image(X_mag) + y_image = spectrogram_to_image(y_mag) + v_image = spectrogram_to_image(v_mag) + + cv2.imwrite('test_X.jpg', X_image) + cv2.imwrite('test_y.jpg', y_image) + cv2.imwrite('test_v.jpg', v_image) + + sf.write('test_X.wav', spectrogram_to_wave(X_spec).T, 44100) + sf.write('test_y.wav', spectrogram_to_wave(y_spec).T, 44100) + sf.write('test_v.wav', spectrogram_to_wave(v_spec).T, 44100) From 40ab2d98beabb360b4a813a112993dca01a29a26 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:32:28 -0600 Subject: [PATCH 016/100] Add files via upload --- models/v2/Instrumental Models/Models Go Here.txt | 1 + models/v2/Stacked Models/Models Go Here.txt | 1 + models/v4/Instrumental Models/Models Go Here.txt | 1 + models/v4/Stacked Models/Models Go Here.txt | 1 + 4 files changed, 4 insertions(+) create mode 100644 models/v2/Instrumental Models/Models Go Here.txt create mode 100644 models/v2/Stacked Models/Models Go Here.txt create mode 100644 models/v4/Instrumental Models/Models Go Here.txt create mode 100644 models/v4/Stacked Models/Models Go Here.txt diff --git a/models/v2/Instrumental Models/Models Go Here.txt b/models/v2/Instrumental Models/Models Go Here.txt new file mode 100644 index 0000000..6671662 --- /dev/null +++ b/models/v2/Instrumental Models/Models Go Here.txt @@ -0,0 +1 @@ +Models Go Here \ No newline at end of file diff --git a/models/v2/Stacked Models/Models Go Here.txt b/models/v2/Stacked Models/Models Go Here.txt new file mode 100644 index 0000000..6671662 --- /dev/null +++ b/models/v2/Stacked Models/Models Go Here.txt @@ -0,0 +1 @@ +Models Go Here \ No newline at end of file diff --git a/models/v4/Instrumental Models/Models Go Here.txt b/models/v4/Instrumental Models/Models Go Here.txt new file mode 100644 index 0000000..6671662 --- /dev/null +++ b/models/v4/Instrumental Models/Models Go Here.txt @@ -0,0 +1 @@ +Models Go Here \ No newline at end of file diff --git a/models/v4/Stacked Models/Models Go Here.txt b/models/v4/Stacked Models/Models Go Here.txt new file mode 100644 index 0000000..6671662 --- /dev/null +++ b/models/v4/Stacked Models/Models Go Here.txt @@ -0,0 +1 @@ +Models Go Here \ No newline at end of file From 3cf54b53f6b175d7e579d8a21062ff59aa133589 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:32:56 -0600 Subject: [PATCH 017/100] Add files via upload --- VocalRemover.py | 898 ++++++++++++++++++++++++++++++++++++++++++++++++ inference_v2.py | 489 ++++++++++++++++++++++++++ inference_v4.py | 525 ++++++++++++++++++++++++++++ 3 files changed, 1912 insertions(+) create mode 100644 VocalRemover.py create mode 100644 inference_v2.py create mode 100644 inference_v4.py diff --git a/VocalRemover.py b/VocalRemover.py new file mode 100644 index 0000000..37f67f2 --- /dev/null +++ b/VocalRemover.py @@ -0,0 +1,898 @@ +# GUI modules +import tkinter as tk +import tkinter.ttk as ttk +import tkinter.messagebox +import tkinter.filedialog +import tkinter.font +from datetime import datetime +# Images +from PIL import Image +from PIL import ImageTk +import pickle # Save Data +# Other Modules +import subprocess # Run python file +# Pathfinding +import pathlib +import sys +import os +from collections import defaultdict +# Used for live text displaying +import queue +import threading # Run the algorithm inside a thread + +import inference_v2 +import inference_v4 + +# Change the current working directory to the directory +# this file sits in +if getattr(sys, 'frozen', False): + # If the application is run as a bundle, the PyInstaller bootloader + # extends the sys module by a flag frozen=True and sets the app + # path into variable _MEIPASS'. + base_path = sys._MEIPASS +else: + base_path = os.path.dirname(os.path.abspath(__file__)) +os.chdir(base_path) # Change the current working directory to the base path + +instrumentalModels_dir = os.path.join(base_path, 'models') +stackedModels_dir = os.path.join(base_path, 'models') +logo_path = os.path.join(base_path, 'img', 'UVR-logo.png') +refresh_path = os.path.join(base_path, 'img', 'refresh.png') +DEFAULT_DATA = { + 'export_path': '', + 'gpu': False, + 'postprocess': False, + 'tta': False, + 'output_image': False, + 'sr': 44100, + 'hop_length': 1024, + 'window_size': 512, + 'n_fft': 2048, + 'stack': False, + 'stackPasses': 1, + 'stackOnly': False, + 'saveAllStacked': False, + 'modelFolder': False, + 'aiModel': 'v4', + + 'useModel': 'instrumental', + 'lastDir': None, +} + + +def open_image(path: str, size: tuple = None, keep_aspect: bool = True, rotate: int = 0) -> ImageTk.PhotoImage: + """ + Open the image on the path and apply given settings\n + Paramaters: + path(str): + Absolute path of the image + size(tuple): + first value - width + second value - height + keep_aspect(bool): + keep aspect ratio of image and resize + to maximum possible width and height + (maxima are given by size) + rotate(int): + clockwise rotation of image + Returns(ImageTk.PhotoImage): + Image of path + """ + img = Image.open(path).convert(mode='RGBA') + ratio = img.height/img.width + img = img.rotate(angle=-rotate) + if size is not None: + size = (int(size[0]), int(size[1])) + if keep_aspect: + img = img.resize((size[0], int(size[0] * ratio)), Image.ANTIALIAS) + else: + img = img.resize(size, Image.ANTIALIAS) + return ImageTk.PhotoImage(img) + + +def save_data(data): + """ + Saves given data as a .pkl (pickle) file + + Paramters: + data(dict): + Dictionary containing all the necessary data to save + """ + # Open data file, create it if it does not exist + with open('data.pkl', 'wb') as data_file: + pickle.dump(data, data_file) + + +def load_data() -> dict: + """ + Loads saved pkl file and returns the stored data + + Returns(dict): + Dictionary containing all the saved data + """ + try: + with open('data.pkl', 'rb') as data_file: # Open data file + data = pickle.load(data_file) + + return data + except (ValueError, FileNotFoundError): + # Data File is corrupted or not found so recreate it + save_data(data=DEFAULT_DATA) + + return load_data() + + +def get_model_values(model_name): + text = model_name.replace('.pth', '') + text_parts = text.split('_')[1:] + model_values = {} + + for text_part in text_parts: + if 'sr' in text_part: + text_part = text_part.replace('sr', '') + if text_part.isdecimal(): + try: + model_values['sr'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'hl' in text_part: + text_part = text_part.replace('hl', '') + if text_part.isdecimal(): + try: + model_values['hop_length'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'w' in text_part: + text_part = text_part.replace('w', '') + if text_part.isdecimal(): + try: + model_values['window_size'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'nf' in text_part: + text_part = text_part.replace('nf', '') + if text_part.isdecimal(): + try: + model_values['n_fft'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + + return model_values + + +class ThreadSafeConsole(tk.Text): + """ + Text Widget which is thread safe for tkinter + """ + + def __init__(self, master, **options): + tk.Text.__init__(self, master, **options) + self.queue = queue.Queue() + self.update_me() + + def write(self, line): + self.queue.put(line) + + def clear(self): + self.queue.put(None) + + def update_me(self): + self.configure(state=tk.NORMAL) + try: + while 1: + line = self.queue.get_nowait() + if line is None: + self.delete(1.0, tk.END) + else: + self.insert(tk.END, str(line)) + self.see(tk.END) + self.update_idletasks() + except queue.Empty: + pass + self.configure(state=tk.DISABLED) + self.after(100, self.update_me) + + +class MainWindow(tk.Tk): + # --Constants-- + # Layout + IMAGE_HEIGHT = 140 + FILEPATHS_HEIGHT = 90 + OPTIONS_HEIGHT = 240 + CONVERSIONBUTTON_HEIGHT = 35 + COMMAND_HEIGHT = 200 + PROGRESS_HEIGHT = 26 + PADDING = 10 + + COL1_ROWS = 8 + COL2_ROWS = 7 + COL3_ROWS = 5 + + def __init__(self): + # Run the __init__ method on the tk.Tk class + super().__init__() + # Calculate window height + height = self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT + height += self.CONVERSIONBUTTON_HEIGHT + self.COMMAND_HEIGHT + self.PROGRESS_HEIGHT + height += self.PADDING * 5 # Padding + + # --Window Settings-- + self.title('Vocal Remover') + # Set Geometry and Center Window + self.geometry('{width}x{height}+{xpad}+{ypad}'.format( + width=590, + height=height, + xpad=int(self.winfo_screenwidth()/2 - 550/2), + ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) + self.configure(bg='#000000') # Set background color to black + self.resizable(False, False) + self.update() + + # --Variables-- + self.logo_img = open_image(path=logo_path, + size=(self.winfo_width(), 9999)) + self.refresh_img = open_image(path=refresh_path, + size=(20, 20)) + self.instrumentalLabel_to_path = defaultdict(lambda: '') + self.stackedLabel_to_path = defaultdict(lambda: '') + self.lastInstrumentalModels = [] + self.lastStackedModels = [] + # -Tkinter Value Holders- + data = load_data() + # Paths + self.exportPath_var = tk.StringVar(value=data['export_path']) + self.inputPaths = [] + # Processing Options + self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) + self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) + self.tta_var = tk.BooleanVar(value=data['tta']) + self.outputImage_var = tk.BooleanVar(value=data['output_image']) + # Models + self.instrumentalModel_var = tk.StringVar(value='') + self.stackedModel_var = tk.StringVar(value='') + # Stacked Options + self.stack_var = tk.BooleanVar(value=data['stack']) + self.stackLoops_var = tk.StringVar(value=data['stackPasses']) + self.stackOnly_var = tk.BooleanVar(value=data['stackOnly']) + self.saveAllStacked_var = tk.BooleanVar(value=data['saveAllStacked']) + self.modelFolder_var = tk.BooleanVar(value=data['modelFolder']) + # Constants + self.srValue_var = tk.StringVar(value=data['sr']) + self.hopValue_var = tk.StringVar(value=data['hop_length']) + self.winSize_var = tk.StringVar(value=data['window_size']) + self.nfft_var = tk.StringVar(value=data['n_fft']) + # AI model + self.aiModel_var = tk.StringVar(value=data['aiModel']) + self.last_aiModel = self.aiModel_var.get() + # Other + self.lastDir = data['lastDir'] # nopep8 + self.progress_var = tk.IntVar(value=0) + # Font + self.font = tk.font.Font(family='Helvetica', size=9, weight='bold') + # --Widgets-- + self.create_widgets() + self.configure_widgets() + self.place_widgets() + + self.update_available_models() + self.update_states() + self.update_loop() + + # -Widget Methods- + def create_widgets(self): + """Create window widgets""" + self.title_Label = tk.Label(master=self, bg='black', + image=self.logo_img, compound=tk.TOP) + self.filePaths_Frame = tk.Frame(master=self, bg='black') + self.fill_filePaths_Frame() + + self.options_Frame = tk.Frame(master=self, bg='black') + self.fill_options_Frame() + + self.conversion_Button = ttk.Button(master=self, + text='Start Conversion', + command=self.start_conversion) + self.refresh_Button = ttk.Button(master=self, + image=self.refresh_img, + command=self.restart) + + self.progressbar = ttk.Progressbar(master=self, + variable=self.progress_var) + + self.command_Text = ThreadSafeConsole(master=self, + background='#a0a0a0', + borderwidth=0,) + self.command_Text.write(f'COMMAND LINE [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]') # nopep8 + + def configure_widgets(self): + """Change widget styling and appearance""" + + ttk.Style().configure('TCheckbutton', background='black', + font=self.font, foreground='white') + ttk.Style().configure('TRadiobutton', background='black', + font=self.font, foreground='white') + ttk.Style().configure('T', font=self.font, foreground='white') + + def place_widgets(self): + """Place main widgets""" + self.title_Label.place(x=-2, y=-2) + self.filePaths_Frame.place(x=10, y=self.IMAGE_HEIGHT, width=-20, height=self.FILEPATHS_HEIGHT, + relx=0, rely=0, relwidth=1, relheight=0) + self.options_Frame.place(x=25, y=self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.PADDING, width=-50, height=self.OPTIONS_HEIGHT, + relx=0, rely=0, relwidth=1, relheight=0) + self.conversion_Button.place(x=10, y=self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT + self.PADDING*2, width=-20 - 40, height=self.CONVERSIONBUTTON_HEIGHT, + relx=0, rely=0, relwidth=1, relheight=0) + self.refresh_Button.place(x=-10 - 35, y=self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT + self.PADDING*2, width=35, height=self.CONVERSIONBUTTON_HEIGHT, + relx=1, rely=0, relwidth=0, relheight=0) + self.command_Text.place(x=15, y=self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT + self.CONVERSIONBUTTON_HEIGHT + self.PADDING*3, width=-30, height=self.COMMAND_HEIGHT, + relx=0, rely=0, relwidth=1, relheight=0) + self.progressbar.place(x=25, y=self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT + self.CONVERSIONBUTTON_HEIGHT + self.COMMAND_HEIGHT + self.PADDING*4, width=-50, height=self.PROGRESS_HEIGHT, + relx=0, rely=0, relwidth=1, relheight=0) + + def fill_filePaths_Frame(self): + """Fill Frame with neccessary widgets""" + # -Create Widgets- + # Save To Option + self.filePaths_saveTo_Button = ttk.Button(master=self.filePaths_Frame, + text='Save to', + command=self.open_export_filedialog) + self.filePaths_saveTo_Entry = ttk.Entry(master=self.filePaths_Frame, + + textvariable=self.exportPath_var, + state=tk.DISABLED + ) + # Select Music Files Option + self.filePaths_musicFile_Button = ttk.Button(master=self.filePaths_Frame, + text='Select Your Audio File(s)', + command=self.open_file_filedialog) + self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, + text=self.inputPaths, + state=tk.DISABLED + ) + # -Place Widgets- + # Save To Option + self.filePaths_saveTo_Button.place(x=0, y=5, width=0, height=-10, + relx=0, rely=0, relwidth=0.3, relheight=0.5) + self.filePaths_saveTo_Entry.place(x=10, y=7, width=-20, height=-14, + relx=0.3, rely=0, relwidth=0.7, relheight=0.5) + # Select Music Files Option + self.filePaths_musicFile_Button.place(x=0, y=5, width=0, height=-10, + relx=0, rely=0.5, relwidth=0.4, relheight=0.5) + self.filePaths_musicFile_Entry.place(x=10, y=7, width=-20, height=-14, + relx=0.4, rely=0.5, relwidth=0.6, relheight=0.5) + + def fill_options_Frame(self): + """Fill Frame with neccessary widgets""" + # -Create Widgets- + # -Column 1- + # GPU Selection + self.options_gpu_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='GPU Conversion', + variable=self.gpuConversion_var, + ) + # Postprocessing + self.options_post_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Post-Process', + variable=self.postprocessing_var, + ) + # TTA + self.options_tta_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='TTA', + variable=self.tta_var, + ) + # Save Image + self.options_image_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Output Image', + variable=self.outputImage_var, + ) + # Stack Loops + self.options_stack_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Stack Passes', + variable=self.stack_var, + ) + self.options_stack_Entry = ttk.Entry(master=self.options_Frame, + textvariable=self.stackLoops_var,) + # Stack Only + self.options_stackOnly_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Stack Conversion Only', + variable=self.stackOnly_var, + ) + # Save All Stacked Outputs + self.options_saveStack_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Save All Stacked Outputs', + variable=self.saveAllStacked_var, + ) + self.options_modelFolder_Checkbutton = ttk.Checkbutton(master=self.options_Frame, + text='Model Test Mode', + variable=self.modelFolder_var, + ) + # -Column 2- + # SR + self.options_sr_Entry = ttk.Entry(master=self.options_Frame, + textvariable=self.srValue_var,) + self.options_sr_Label = tk.Label(master=self.options_Frame, + text='SR', anchor=tk.W, + background='#63605f', font=self.font, foreground='white', relief="sunken") + # HOP LENGTH + self.options_hop_Entry = ttk.Entry(master=self.options_Frame, + textvariable=self.hopValue_var,) + self.options_hop_Label = tk.Label(master=self.options_Frame, + text='HOP LENGTH', anchor=tk.W, + background='#63605f', font=self.font, foreground='white', relief="sunken") + # WINDOW SIZE + self.options_winSize_Entry = ttk.Entry(master=self.options_Frame, + textvariable=self.winSize_var,) + self.options_winSize_Label = tk.Label(master=self.options_Frame, + text='WINDOW SIZE', anchor=tk.W, + background='#63605f', font=self.font, foreground='white', relief="sunken") + # N_FFT + self.options_nfft_Entry = ttk.Entry(master=self.options_Frame, + textvariable=self.nfft_var,) + self.options_nfft_Label = tk.Label(master=self.options_Frame, + text='N_FFT', anchor=tk.W, + background='#63605f', font=self.font, foreground='white', relief="sunken") + # AI model + self.options_aiModel_Label = tk.Label(master=self.options_Frame, + text='Choose AI Engine', anchor=tk.CENTER, + background='#63605f', font=self.font, foreground='white', relief="sunken") + self.options_aiModel_Optionmenu = ttk.OptionMenu(self.options_Frame, + self.aiModel_var, + None, 'v2', 'v4',) + # "Save to", "Select Your Audio File(s)"", and "Start Conversion" Button Style + s = ttk.Style() + s.configure('TButton', background='blue', foreground='black', font=('Verdana', '9', 'bold'), relief="sunken") + + # -Column 3- + # Choose Instrumental Model + self.options_instrumentalModel_Label = tk.Label(master=self.options_Frame, + text='Choose Instrumental Model', + background='#a7a7a7', font=self.font, relief="ridge") + self.options_instrumentalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, + self.instrumentalModel_var) + # Choose Stacked Model + self.options_stackedModel_Label = tk.Label(master=self.options_Frame, + text='Choose Stacked Model', + background='#a7a7a7', font=self.font, relief="ridge") + self.options_stackedModel_Optionmenu = ttk.OptionMenu(self.options_Frame, + self.stackedModel_var,) + self.options_model_Button = ttk.Button(master=self.options_Frame, + text='Add New Model(s)', + style="Bold.TButton", + command=self.open_newModel_filedialog) + # -Place Widgets- + # -Column 1- + self.options_gpu_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=0, relwidth=1/3, relheight=1/self.COL1_ROWS) + self.options_post_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=1/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + self.options_tta_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=2/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + self.options_image_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=3/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + # Stacks + self.options_stack_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=4/self.COL1_ROWS, relwidth=1/3/4*3, relheight=1/self.COL1_ROWS) + self.options_stack_Entry.place(x=0, y=3, width=0, height=-6, + relx=1/3/4*2.4, rely=4/self.COL1_ROWS, relwidth=1/3/4*0.9, relheight=1/self.COL1_ROWS) + self.options_stackOnly_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=5/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + self.options_saveStack_Checkbutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=6/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + # Model Folder + 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) + # -Column 2- + # SR + self.options_sr_Label.place(x=5, y=4, width=5, height=-8, + relx=1/3, rely=0, relwidth=1/3/2, relheight=1/self.COL2_ROWS) + self.options_sr_Entry.place(x=15, y=4, width=5, height=-8, + relx=1/3 + 1/3/2, rely=0, relwidth=1/3/4, relheight=1/self.COL2_ROWS) + # HOP LENGTH + self.options_hop_Label.place(x=5, y=4, width=5, height=-8, + relx=1/3, rely=1/self.COL2_ROWS, relwidth=1/3/2, relheight=1/self.COL2_ROWS) + self.options_hop_Entry.place(x=15, y=4, width=5, height=-8, + relx=1/3 + 1/3/2, rely=1/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) + # WINDOW SIZE + self.options_winSize_Label.place(x=5, y=4, width=5, height=-8, + relx=1/3, rely=2/self.COL2_ROWS, relwidth=1/3/2, relheight=1/self.COL2_ROWS) + self.options_winSize_Entry.place(x=15, y=4, width=5, height=-8, + relx=1/3 + 1/3/2, rely=2/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) + # N_FFT + self.options_nfft_Label.place(x=5, y=4, width=5, height=-8, + relx=1/3, rely=3/self.COL2_ROWS, relwidth=1/3/2, relheight=1/self.COL2_ROWS) + self.options_nfft_Entry.place(x=15, y=4, width=5, height=-8, + relx=1/3 + 1/3/2, rely=3/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) + # AI model + self.options_aiModel_Label.place(x=5, y=-5, width=-30, height=-8, + relx=1/3, rely=5/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) + self.options_aiModel_Optionmenu.place(x=5, y=-5, width=-30, height=-8, + relx=1/3, rely=6/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) + + # -Column 3- + # Choose Model + self.options_instrumentalModel_Label.place(x=0, y=0, width=0, height=-10, + relx=2/3, rely=0, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_instrumentalModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, + relx=2/3, rely=1/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Label.place(x=0, y=0, width=0, height=-10, + relx=2/3, rely=2/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, + relx=2/3, rely=3/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_model_Button.place(x=15, y=3, width=-30, height=-8, + relx=2/3, rely=4/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + + # -Update Binds- + self.options_stackOnly_Checkbutton.configure(command=self.update_states) # nopep8 + self.options_stack_Checkbutton.configure(command=self.update_states) # nopep8 + self.options_stack_Entry.bind('', + lambda e: self.update_states()) + # Model name decoding + self.instrumentalModel_var.trace_add('write', + lambda *args: self.decode_modelNames()) + self.stackedModel_var.trace_add('write', + lambda *args: self.decode_modelNames()) + # Model deselect + self.aiModel_var.trace_add('write', + lambda *args: self.deselect_models()) + + # Opening filedialogs + def open_file_filedialog(self): + """Make user select music files""" + if self.lastDir is not None: + if not os.path.isdir(self.lastDir): + self.lastDir = None + + paths = tk.filedialog.askopenfilenames( + parent=self, + title=f'Select Music Files', + initialfile='', + initialdir=self.lastDir, + ) + if paths: # Path selected + self.inputPaths = paths + # Change the entry text + self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) + self.filePaths_musicFile_Entry.delete(0, tk.END) + self.filePaths_musicFile_Entry.insert(0, self.inputPaths) + self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) + + self.lastDir = os.path.dirname(paths[0]) + + def open_export_filedialog(self): + """Make user select a folder to export the converted files in""" + path = tk.filedialog.askdirectory( + parent=self, + title=f'Select Folder',) + if path: # Path selected + self.exportPath_var.set(path) + + def open_newModel_filedialog(self): + """Let user paste a ".pth" model to use for the vocal seperation""" + os.startfile('models') + + def start_conversion(self): + """ + Start the conversion for all the given mp3 and wav files + """ + # -Get all variables- + export_path = self.exportPath_var.get() + instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 + stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 + # Get constants + instrumental = get_model_values(self.instrumentalModel_var.get()) + stacked = get_model_values(self.stackedModel_var.get()) + try: + if [bool(instrumental), bool(stacked)].count(True) == 2: + sr = DEFAULT_DATA['sr'] + hop_length = DEFAULT_DATA['hop_length'] + window_size = DEFAULT_DATA['window_size'] + n_fft = DEFAULT_DATA['n_fft'] + else: + sr = int(self.srValue_var.get()) + hop_length = int(self.hopValue_var.get()) + window_size = int(self.winSize_var.get()) + n_fft = int(self.nfft_var.get()) + stackPasses = int(self.stackLoops_var.get()) + except ValueError: # Non integer was put in entry box + tk.messagebox.showwarning(master=self, + title='Invalid Input', + message='Please make sure you only input integer numbers!') + return + except SyntaxError: # Non integer was put in entry box + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') + return + + # -Check for invalid inputs- + if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) + for path in self.inputPaths]): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') + return + if not os.path.isdir(export_path): + tk.messagebox.showwarning(master=self, + title='Invalid Export Directory', + message='You have selected an invalid export directory!\nPlease make sure that your directory still exists!') + return + if not self.stackOnly_var.get(): + if not os.path.isfile(instrumentalModel_path): + tk.messagebox.showwarning(master=self, + title='Invalid Instrumental Model File', + message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') + return + if (self.stackOnly_var.get() or + stackPasses > 0): + if not os.path.isfile(stackedModel_path): + tk.messagebox.showwarning(master=self, + title='Invalid Stacked Model File', + message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') + return + + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': stackPasses, + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': 'instrumental', # Always instrumental + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + + if self.aiModel_var.get() == 'v2': + inference = inference_v2 + elif self.aiModel_var.get() == 'v4': + inference = inference_v4 + else: + raise TypeError('This error should not occur.') + + # -Run the algorithm- + threading.Thread(target=inference.main, + kwargs={ + # Paths + 'input_paths': self.inputPaths, + 'export_path': export_path, + # Processing Options + 'gpu': 0 if self.gpuConversion_var.get() else -1, + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), # not needed for v2 + 'output_image': self.outputImage_var.get(), + # Models + 'instrumentalModel': instrumentalModel_path, + 'vocalModel': '', # Always not needed + 'stackModel': stackedModel_path, + 'useModel': 'instrumental', # Always instrumental + # Stack Options + 'stackPasses': stackPasses, + 'stackOnly': self.stackOnly_var.get(), + 'saveAllStacked': self.saveAllStacked_var.get(), + # Model Folder + 'modelFolder': self.modelFolder_var.get(), + # Constants + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, # not needed for v2 + # Other Variables (Tkinter) + 'window': self, + 'text_widget': self.command_Text, + 'button_widget': self.conversion_Button, + 'progress_var': self.progress_var, + }, + daemon=True + ).start() + + # Models + def decode_modelNames(self): + """ + Enable/Disable the 4 constants based on the selected model names + """ + # Check state of model selectors + instrumental_selectable = bool(str(self.options_instrumentalModel_Optionmenu.cget('state')) == 'normal') + stacked_selectable = bool(str(self.options_stackedModel_Optionmenu.cget('state')) == 'normal') + + # Extract data from models name + instrumental = get_model_values(self.instrumentalModel_var.get()) + stacked = get_model_values(self.stackedModel_var.get()) + + # Assign widgets to constants + widgetsVars = { + 'sr': [self.options_sr_Entry, self.srValue_var], + 'hop_length': [self.options_hop_Entry, self.hopValue_var], + 'window_size': [self.options_winSize_Entry, self.winSize_var], + 'n_fft': [self.options_nfft_Entry, self.nfft_var], + } + + # Loop through each constant (key) and its widgets + for key, (widget, var) in widgetsVars.items(): + if stacked_selectable: + # Stacked model can be selected + if key in stacked.keys(): + if (key in stacked.keys() and + not instrumental_selectable): + # Only stacked selectable + widget.configure(state=tk.DISABLED) + var.set(stacked[key]) + continue + elif (key in instrumental.keys() and + instrumental_selectable): + # Both models have set constants + widget.configure(state=tk.DISABLED) + var.set('%d/%d' % (instrumental[key], stacked[key])) + continue + else: + # Stacked model can not be selected + if (key in instrumental.keys() and + instrumental_selectable): + widget.configure(state=tk.DISABLED) + var.set(instrumental[key]) + continue + + # If widget is already enabled, no need to reset the value + if str(widget.cget('state')) != 'normal': + widget.configure(state=tk.NORMAL) + var.set(DEFAULT_DATA[key]) + + def update_loop(self): + """Update the dropdown menu""" + self.update_available_models() + + self.after(3000, self.update_loop) + + def update_available_models(self): + """ + Loop through every model (.pth) in the models directory + and add to the select your model list + """ + temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, self.aiModel_var.get(), 'Instrumental Models') # nopep8 + temp_stackedModels_dir = os.path.join(stackedModels_dir, self.aiModel_var.get(), 'Stacked Models') + # Instrumental models + new_InstrumentalModels = os.listdir(temp_instrumentalModels_dir) + if new_InstrumentalModels != self.lastInstrumentalModels: + self.instrumentalLabel_to_path.clear() + self.options_instrumentalModel_Optionmenu['menu'].delete(0, 'end') + for file_name in new_InstrumentalModels: + if file_name.endswith('.pth'): + # Add Radiobutton to the Options Menu + self.options_instrumentalModel_Optionmenu['menu'].add_radiobutton(label=file_name, + command=tk._setit(self.instrumentalModel_var, file_name)) + # Link the files name to its absolute path + self.instrumentalLabel_to_path[file_name] = os.path.join(temp_instrumentalModels_dir, file_name) # nopep8 + self.lastInstrumentalModels = new_InstrumentalModels + # Stacked models + new_stackedModels = os.listdir(temp_stackedModels_dir) + if new_stackedModels != self.lastStackedModels: + self.stackedLabel_to_path.clear() + self.options_stackedModel_Optionmenu['menu'].delete(0, 'end') + for file_name in new_stackedModels: + if file_name.endswith('.pth'): + # Add Radiobutton to the Options Menu + self.options_stackedModel_Optionmenu['menu'].add_radiobutton(label=file_name, + command=tk._setit(self.stackedModel_var, file_name)) + # Link the files name to its absolute path + self.stackedLabel_to_path[file_name] = os.path.join(temp_stackedModels_dir, file_name) # nopep8 + self.lastStackedModels = new_stackedModels + + def update_states(self): + """ + Vary the states for all widgets based + on certain selections + """ + try: + stackLoops = int(self.stackLoops_var.get()) + except ValueError: + stackLoops = 0 + + # Stack Passes + if self.stack_var.get(): + self.options_stack_Entry.configure(state=tk.NORMAL) + if stackLoops <= 0: + self.stackLoops_var.set(1) + stackLoops = 1 + else: + self.options_stack_Entry.configure(state=tk.DISABLED) + self.stackLoops_var.set(0) + stackLoops = 0 + + # Stack Only and Save All Outputs + if stackLoops > 0: + self.options_stackOnly_Checkbutton.configure(state=tk.NORMAL) + self.options_saveStack_Checkbutton.configure(state=tk.NORMAL) + else: + self.options_stackOnly_Checkbutton.configure(state=tk.DISABLED) + self.options_saveStack_Checkbutton.configure(state=tk.DISABLED) + self.saveAllStacked_var.set(False) + self.stackOnly_var.set(False) + + # Models + if self.stackOnly_var.get(): + # Instrumental Model + self.options_instrumentalModel_Label.configure(foreground='#777') + self.options_instrumentalModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.instrumentalModel_var.set('') + # Stack Model + self.options_stackedModel_Label.configure(foreground='#000') + self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + else: + # Instrumental Model + self.options_instrumentalModel_Label.configure(foreground='#000') + self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + self.instrumentalModel_var.set('') + + # Stack Model + if stackLoops > 0: + self.options_stackedModel_Label.configure(foreground='#000') + self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + else: + self.options_stackedModel_Label.configure(foreground='#777') + self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.stackedModel_var.set('') + + if self.aiModel_var.get() == 'v2': + self.options_tta_Checkbutton.configure(state=tk.DISABLED) + self.options_nfft_Label.place_forget() + self.options_nfft_Entry.place_forget() + else: + self.options_tta_Checkbutton.configure(state=tk.NORMAL) + self.options_nfft_Label.place(x=5, y=4, width=5, height=-8, + relx=1/3, rely=3/self.COL2_ROWS, relwidth=1/3/2, relheight=1/self.COL2_ROWS) + self.options_nfft_Entry.place(x=15, y=4, width=5, height=-8, + relx=1/3 + 1/3/2, rely=3/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) + + self.decode_modelNames() + + def deselect_models(self): + """ + Run this method on version change + """ + if self.aiModel_var.get() == self.last_aiModel: + return + else: + self.last_aiModel = self.aiModel_var.get() + + self.instrumentalModel_var.set('') + self.stackedModel_var.set('') + + self.srValue_var.set(DEFAULT_DATA['sr']) + self.hopValue_var.set(DEFAULT_DATA['hop_length']) + self.winSize_var.set(DEFAULT_DATA['window_size']) + self.nfft_var.set(DEFAULT_DATA['n_fft']) + + self.update_available_models() + self.update_states() + + def restart(self): + """ + Restart the application after asking for confirmation + """ + proceed = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart and lose unsaved data. Do you wish to proceed?') + if proceed: + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() + + +if __name__ == "__main__": + root = MainWindow() + + root.mainloop() diff --git a/inference_v2.py b/inference_v2.py new file mode 100644 index 0000000..b530adf --- /dev/null +++ b/inference_v2.py @@ -0,0 +1,489 @@ +import argparse +import os + +import cv2 +import librosa +import numpy as np +import soundfile as sf +from tqdm import tqdm + +from lib_v2 import dataset +from lib_v2 import nets +from lib_v2 import spec_utils + +import torch +# Variable manipulation and command line text parsing +from collections import defaultdict +import tkinter as tk +import time # Timer +import traceback # Error Message Recent Calls + + +class Namespace: + """ + Replaces ArgumentParser + """ + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + +data = { + # Paths + 'input_paths': None, + 'export_path': None, + # Processing Options + 'gpu': -1, + 'postprocess': True, + 'tta': True, + 'output_image': True, + # Models + 'instrumentalModel': None, + 'vocalModel': None, + 'stackModel': None, + 'useModel': None, + # Stack Options + 'stackPasses': 0, + 'stackOnly': False, + 'saveAllStacked': False, + # Model Folder + 'modelFolder': False, + # Constants + 'sr': 44_100, + 'hop_length': 1_024, + 'window_size': 512, + 'n_fft': 2_048, +} +default_sr = data['sr'] +default_hop_length = data['hop_length'] +default_window_size = data['window_size'] +default_n_fft = data['n_fft'] + + +def update_progress(progress_var, total_files, total_loops, file_num, loop_num, step: float = 1): + """Calculate the progress for the progress widget in the GUI""" + base = (100 / total_files) + progress = base * (file_num - 1) + progress += (base / total_loops) * (loop_num + step) + + progress_var.set(progress) + + +def get_baseText(total_files, total_loops, file_num, loop_num): + """Create the base text for the command widget""" + text = 'File {file_num}/{total_files}:{loop} '.format(file_num=file_num, + total_files=total_files, + loop='' if total_loops <= 1 else f' ({loop_num+1}/{total_loops})') + return text + + +def update_constants(model_name): + """ + Decode the conversion settings from the model's name + """ + global data + text = model_name.replace('.pth', '') + text_parts = text.split('_')[1:] + + # First set everything to default -> + # If file name is not decodeable (invalid or no text_parts), constants stay at default + data['sr'] = default_sr + data['hop_length'] = default_hop_length + data['window_size'] = default_window_size + data['n_fft'] = default_n_fft + + for text_part in text_parts: + if 'sr' in text_part: + text_part = text_part.replace('sr', '') + if text_part.isdecimal(): + try: + data['sr'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'hl' in text_part: + text_part = text_part.replace('hl', '') + if text_part.isdecimal(): + try: + data['hop_length'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'w' in text_part: + text_part = text_part.replace('w', '') + if text_part.isdecimal(): + try: + data['window_size'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'nf' in text_part: + text_part = text_part.replace('nf', '') + if text_part.isdecimal(): + try: + data['n_fft'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + + +def determineModelFolderName(): + """ + Determine the name that is used for the folder and appended + to the back of the music files + """ + modelFolderName = '' + if not data['modelFolder']: + # Model Test Mode not selected + return modelFolderName + + # -Instrumental- + if os.path.isfile(data['instrumentalModel']): + modelFolderName += os.path.splitext(os.path.basename(data['instrumentalModel']))[0] + '-' + # -Vocal- + elif os.path.isfile(data['vocalModel']): + modelFolderName += os.path.splitext(os.path.basename(data['vocalModel']))[0] + '-' + # -Stack- + if os.path.isfile(data['stackModel']): + modelFolderName += os.path.splitext(os.path.basename(data['stackModel']))[0] + else: + modelFolderName = modelFolderName[:-1] + + if modelFolderName: + modelFolderName = '/' + modelFolderName + + return modelFolderName + + +def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress_var: tk.Variable, + **kwargs: dict): + def load_models(): + text_widget.write('Loading models...\n') # nopep8 Write Command Text + models = defaultdict(lambda: None) + devices = defaultdict(lambda: None) + + # -Instrumental- + if os.path.isfile(data['instrumentalModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet() + model.load_state_dict(torch.load(data['instrumentalModel'], + map_location=device)) + if torch.cuda.is_available() and data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(data['gpu'])) + model.to(device) + + models['instrumental'] = model + devices['instrumental'] = device + # -Vocal- + elif os.path.isfile(data['vocalModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet() + model.load_state_dict(torch.load(data['vocalModel'], + map_location=device)) + if torch.cuda.is_available() and data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(data['gpu'])) + model.to(device) + + models['vocal'] = model + devices['vocal'] = device + # -Stack- + if os.path.isfile(data['stackModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet() + model.load_state_dict(torch.load(data['stackModel'], + map_location=device)) + if torch.cuda.is_available() and data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(data['gpu'])) + model.to(device) + + models['stack'] = model + devices['stack'] = device + + text_widget.write('Done!\n') + return models, devices + + def load_wave_source(): + X, sr = librosa.load(music_file, + data['sr'], + False, + dtype=np.float32, + res_type='kaiser_fast') + + return X, sr + + def stft_wave_source(X, model, device): + X = spec_utils.calc_spec(X, data['hop_length']) + X, phase = np.abs(X), np.exp(1.j * np.angle(X)) + coeff = X.max() + X /= coeff + + offset = model.offset + l, r, roi_size = dataset.make_padding( + X.shape[2], data['window_size'], offset) + X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode='constant') + X_roll = np.roll(X_pad, roi_size // 2, axis=2) + + model.eval() + with torch.no_grad(): + masks = [] + masks_roll = [] + length = int(np.ceil(X.shape[2] / roi_size)) + for i in tqdm(range(length)): + update_progress(**progress_kwargs, + step=0.1 + 0.5*(i/(length - 1))) + start = i * roi_size + X_window = torch.from_numpy(np.asarray([ + X_pad[:, :, start:start + data['window_size']], + X_roll[:, :, start:start + data['window_size']] + ])).to(device) + pred = model.predict(X_window) + pred = pred.detach().cpu().numpy() + masks.append(pred[0]) + masks_roll.append(pred[1]) + + mask = np.concatenate(masks, axis=2)[:, :, :X.shape[2]] + mask_roll = np.concatenate(masks_roll, axis=2)[ + :, :, :X.shape[2]] + mask = (mask + np.roll(mask_roll, -roi_size // 2, axis=2)) / 2 + + if data['postprocess']: + vocal = X * (1 - mask) * coeff + mask = spec_utils.mask_uninformative(mask, vocal) + + inst = X * mask * coeff + vocal = X * (1 - mask) * coeff + + return inst, vocal, phase, mask + + def invert_instrum_vocal(inst, vocal, phase): + wav_instrument = spec_utils.spec_to_wav(inst, phase, data['hop_length']) # nopep8 + wav_vocals = spec_utils.spec_to_wav(vocal, phase, data['hop_length']) # nopep8 + + return wav_instrument, wav_vocals + + def save_files(wav_instrument, wav_vocals): + """Save output music files""" + vocal_name = None + instrumental_name = None + folder = '' + + # Get the Suffix Name + if (not loop_num or + loop_num == (total_loops - 1)): # First or Last Loop + if data['stackOnly']: + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + vocal_name = '(Vocals)' + instrumental_name = '(Instrumental)' + else: + vocal_name = '(Vocal_Final_Stacked_Output)' + instrumental_name = '(Instrumental_Final_Stacked_Output)' + elif data['useModel'] == 'instrumental': + if not loop_num: # First Loop + vocal_name = '(Vocals)' + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + instrumental_name = '(Instrumental)' + else: + instrumental_name = '(Instrumental_Final_Stacked_Output)' + elif data['useModel'] == 'vocal': + if not loop_num: # First Loop + instrumental_name = '(Instrumental)' + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + vocal_name = '(Vocals)' + else: + vocal_name = '(Vocals_Final_Stacked_Output)' + if data['useModel'] == 'vocal': + # Reverse names + vocal_name, instrumental_name = instrumental_name, vocal_name + elif data['saveAllStacked']: + folder = os.path.splitext(os.path.basename(base_name))[0] + ' Stacked Outputs' # nopep8 + folder = os.path.basename(folder) + '/' + folder_path = os.path.dirname(base_name) + folder_path = os.path.join(folder_path, folder) + + if not os.path.isdir(folder_path): + os.mkdir(folder_path) + + if data['stackOnly']: + vocal_name = f'(Vocal_{loop_num}_Stacked_Output)' + instrumental_name = f'(Instrumental_{loop_num}_Stacked_Output)' + elif (data['useModel'] == 'vocal' or + data['useModel'] == 'instrumental'): + vocal_name = f'(Vocals_{loop_num}_Stacked_Output)' + instrumental_name = f'(Instrumental_{loop_num}_Stacked_Output)' + + if data['useModel'] == 'vocal': + # Reverse names + vocal_name, instrumental_name = instrumental_name, vocal_name + + # Save Temp File + # For instrumental the instrumental is the temp file + # and for vocal the instrumental is the temp file due + # to reversement + sf.write(f'temp.wav', + wav_instrument.T, sr) + + appendModelFolderName = modelFolderName.replace('/', '_') + # -Save files- + # Instrumental + if instrumental_name is not None: + instrumental_path = '{base_path}/{folder}{file_name}.wav'.format( + base_path=os.path.dirname(base_name), + folder=folder, + file_name=f'{os.path.basename(base_name)}_{instrumental_name}{appendModelFolderName}', + ) + sf.write(instrumental_path, + wav_instrument.T, sr) + # Vocal + if vocal_name is not None: + vocal_path = '{base_path}/{folder}{file_name}.wav'.format( + base_path=os.path.dirname(base_name), + folder=folder, + file_name=f'{os.path.basename(base_name)}_{vocal_name}{appendModelFolderName}', + ) + sf.write(vocal_path, + wav_vocals.T, sr) + + def output_image(): + norm_mask = np.uint8((1 - mask) * 255).transpose(1, 2, 0) + norm_mask = np.concatenate([ + np.max(norm_mask, axis=2, keepdims=True), + norm_mask], axis=2)[::-1] + _, bin_mask = cv2.imencode('.png', norm_mask) + text_widget.write(base_text + 'Saving Mask...\n') # nopep8 Write Command Text + with open(f'{base_name}_(Mask).png', mode='wb') as f: + bin_mask.tofile(f) + + data.update(kwargs) + + # Update default settings + global default_sr + global default_hop_length + global default_window_size + global default_n_fft + default_sr = data['sr'] + default_hop_length = data['hop_length'] + default_window_size = data['window_size'] + default_n_fft = data['n_fft'] + + stime = time.perf_counter() + progress_var.set(0) + text_widget.clear() + button_widget.configure(state=tk.DISABLED) # Disable Button + + models, devices = load_models() + modelFolderName = determineModelFolderName() + if modelFolderName: + folder_path = f'{data["export_path"]}{modelFolderName}' + if not os.path.isdir(folder_path): + os.mkdir(folder_path) + + # Determine Loops + total_loops = data['stackPasses'] + if not data['stackOnly']: + total_loops += 1 + + for file_num, music_file in enumerate(data['input_paths'], start=1): + try: + # Determine File Name + base_name = f'{data["export_path"]}{modelFolderName}/{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}' + + for loop_num in range(total_loops): + # -Determine which model will be used- + if not loop_num: + # First Iteration + if data['stackOnly']: + if os.path.isfile(data['stackModel']): + model_name = os.path.basename(data['stackModel']) + model = models['stack'] + device = devices['stack'] + else: + raise ValueError(f'Selected stack only model, however, stack model path file cannot be found\nPath: "{data["stackModel"]}"') # nopep8 + else: + model_name = os.path.basename(data[f'{data["useModel"]}Model']) + model = models[data['useModel']] + device = devices[data['useModel']] + else: + model_name = os.path.basename(data['stackModel']) + # Every other iteration + model = models['stack'] + device = devices['stack'] + # Reference new music file + music_file = 'temp.wav' + + # -Get text and update progress- + base_text = get_baseText(total_files=len(data['input_paths']), + total_loops=total_loops, + file_num=file_num, + loop_num=loop_num) + progress_kwargs = {'progress_var': progress_var, + 'total_files': len(data['input_paths']), + 'total_loops': total_loops, + 'file_num': file_num, + 'loop_num': loop_num} + update_progress(**progress_kwargs, + step=0) + update_constants(model_name) + + # -Go through the different steps of seperation- + # Wave source + text_widget.write(base_text + 'Loading wave source...\n') # nopep8 Write Command Text + X, sr = load_wave_source() + text_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text + + update_progress(**progress_kwargs, + step=0.1) + # Stft of wave source + text_widget.write(base_text + 'Stft of wave source...\n') # nopep8 Write Command Text + inst, vocal, phase, mask = stft_wave_source(X, model, device) + text_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text + + update_progress(**progress_kwargs, + step=0.6) + # Inverse stft + text_widget.write(base_text + 'Inverse stft of instruments and vocals...\n') # nopep8 Write Command Text + wav_instrument, wav_vocals = invert_instrum_vocal(inst, vocal, phase) # nopep8 + text_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text + + update_progress(**progress_kwargs, + step=0.7) + # Save Files + text_widget.write(base_text + 'Saving Files...\n') # nopep8 Write Command Text + save_files(wav_instrument, wav_vocals) + text_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text + + update_progress(**progress_kwargs, + step=0.8) + + else: + # Save Output Image (Mask) + if data['output_image']: + text_widget.write(base_text + 'Creating Mask...\n') # nopep8 Write Command Text + output_image() + text_widget.write(base_text + 'Done!\n') # nopep8 Write Command Text + + text_widget.write(base_text + 'Completed Seperation!\n\n') # nopep8 Write Command Text + except Exception as e: + traceback_text = ''.join(traceback.format_tb(e.__traceback__)) + message = f'Traceback Error: "{traceback_text}"\n{type(e).__name__}: "{e}"\nFile: {music_file}\nLoop: {loop_num}\nPlease contact the creator and attach a screenshot of this error with the file and settings that caused it!' + tk.messagebox.showerror(master=window, + title='Untracked Error', + message=message) + print(traceback_text) + print(type(e).__name__, e) + print(message) + progress_var.set(0) + button_widget.configure(state=tk.NORMAL) # Enable Button + return + + os.remove('temp.wav') + progress_var.set(0) # Update Progress + text_widget.write(f'Conversion(s) Completed and Saving all Files!\n') # nopep8 Write Command Text + text_widget.write(f'Time Elapsed: {time.strftime("%H:%M:%S", time.gmtime(int(time.perf_counter() - stime)))}') # nopep8 + button_widget.configure(state=tk.NORMAL) # Enable Button diff --git a/inference_v4.py b/inference_v4.py new file mode 100644 index 0000000..5d8fd8b --- /dev/null +++ b/inference_v4.py @@ -0,0 +1,525 @@ +import pprint +import argparse +import os + +import cv2 +import librosa +import numpy as np +import soundfile as sf +from tqdm import tqdm + +from lib_v4 import dataset +from lib_v4 import nets +from lib_v4 import spec_utils +import torch + +# Command line text parsing and widget manipulation +from collections import defaultdict +import tkinter as tk +import traceback # Error Message Recent Calls +import time # Timer + + +class VocalRemover(object): + + def __init__(self, data, text_widget: tk.Text): + self.data = data + self.text_widget = text_widget + self.models = defaultdict(lambda: None) + self.devices = defaultdict(lambda: None) + self._load_models() + # self.offset = model.offset + + def _load_models(self): + self.text_widget.write('Loading models...\n') # nopep8 Write Command Text + + # -Instrumental- + if os.path.isfile(data['instrumentalModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet(self.data['n_fft']) + model.load_state_dict(torch.load(self.data['instrumentalModel'], + map_location=device)) + if torch.cuda.is_available() and self.data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(self.data['gpu'])) + model.to(device) + + self.models['instrumental'] = model + self.devices['instrumental'] = device + # -Vocal- + elif os.path.isfile(data['vocalModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet(self.data['n_fft']) + model.load_state_dict(torch.load(self.data['vocalModel'], + map_location=device)) + if torch.cuda.is_available() and self.data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(self.data['gpu'])) + model.to(device) + + self.models['vocal'] = model + self.devices['vocal'] = device + # -Stack- + if os.path.isfile(self.data['stackModel']): + device = torch.device('cpu') + model = nets.CascadedASPPNet(self.data['n_fft']) + model.load_state_dict(torch.load(self.data['stackModel'], + map_location=device)) + if torch.cuda.is_available() and self.data['gpu'] >= 0: + device = torch.device('cuda:{}'.format(self.data['gpu'])) + model.to(device) + + self.models['stack'] = model + self.devices['stack'] = device + + self.text_widget.write('Done!\n') + + def _execute(self, X_mag_pad, roi_size, n_window, device, model): + model.eval() + with torch.no_grad(): + preds = [] + for i in tqdm(range(n_window)): + start = i * roi_size + X_mag_window = X_mag_pad[None, :, :, + start:start + self.data['window_size']] + X_mag_window = torch.from_numpy(X_mag_window).to(device) + + pred = model.predict(X_mag_window) + + pred = pred.detach().cpu().numpy() + preds.append(pred[0]) + + pred = np.concatenate(preds, axis=2) + + return pred + + def preprocess(self, X_spec): + X_mag = np.abs(X_spec) + X_phase = np.angle(X_spec) + + return X_mag, X_phase + + def inference(self, X_spec, device, model): + X_mag, X_phase = self.preprocess(X_spec) + + coef = X_mag.max() + X_mag_pre = X_mag / coef + + n_frame = X_mag_pre.shape[2] + pad_l, pad_r, roi_size = dataset.make_padding(n_frame, + self.data['window_size'], model.offset) + n_window = int(np.ceil(n_frame / roi_size)) + + X_mag_pad = np.pad( + X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode='constant') + + pred = self._execute(X_mag_pad, roi_size, n_window, + device, model) + pred = pred[:, :, :n_frame] + + return pred * coef, X_mag, np.exp(1.j * X_phase) + + def inference_tta(self, X_spec, device, model): + X_mag, X_phase = self.preprocess(X_spec) + + coef = X_mag.max() + X_mag_pre = X_mag / coef + + n_frame = X_mag_pre.shape[2] + pad_l, pad_r, roi_size = dataset.make_padding(n_frame, + self.data['window_size'], model.offset) + n_window = int(np.ceil(n_frame / roi_size)) + + X_mag_pad = np.pad( + X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode='constant') + + pred = self._execute(X_mag_pad, roi_size, n_window, + device, model) + pred = pred[:, :, :n_frame] + + pad_l += roi_size // 2 + pad_r += roi_size // 2 + n_window += 1 + + X_mag_pad = np.pad( + X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode='constant') + + pred_tta = self._execute(X_mag_pad, roi_size, n_window, + device, model) + pred_tta = pred_tta[:, :, roi_size // 2:] + pred_tta = pred_tta[:, :, :n_frame] + + return (pred + pred_tta) * 0.5 * coef, X_mag, np.exp(1.j * X_phase) + + +data = { + # Paths + 'input_paths': None, + 'export_path': None, + # Processing Options + 'gpu': -1, + 'postprocess': True, + 'tta': True, + 'output_image': True, + # Models + 'instrumentalModel': None, + 'vocalModel': None, + 'stackModel': None, + 'useModel': None, + # Stack Options + 'stackPasses': 0, + 'stackOnly': False, + 'saveAllStacked': False, + # Constants + 'sr': 44_100, + 'hop_length': 1_024, + 'window_size': 512, + 'n_fft': 2_048, +} +default_sr = data['sr'] +default_hop_length = data['hop_length'] +default_window_size = data['window_size'] +default_n_fft = data['n_fft'] + + +def update_progress(progress_var, total_files, total_loops, file_num, loop_num, step: float = 1): + """Calculate the progress for the progress widget in the GUI""" + base = (100 / total_files) + progress = base * (file_num - 1) + progress += (base / total_loops) * (loop_num + step) + + progress_var.set(progress) + + +def get_baseText(total_files, total_loops, file_num, loop_num): + """Create the base text for the command widget""" + text = 'File {file_num}/{total_files}:{loop} '.format(file_num=file_num, + total_files=total_files, + loop='' if total_loops <= 1 else f' ({loop_num+1}/{total_loops})') + return text + + +def update_constants(model_name): + """ + Decode the conversion settings from the model's name + """ + global data + text = model_name.replace('.pth', '') + text_parts = text.split('_')[1:] + + data['sr'] = default_sr + data['hop_length'] = default_hop_length + data['window_size'] = default_window_size + data['n_fft'] = default_n_fft + + for text_part in text_parts: + if 'sr' in text_part: + text_part = text_part.replace('sr', '') + if text_part.isdecimal(): + try: + data['sr'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'hl' in text_part: + text_part = text_part.replace('hl', '') + if text_part.isdecimal(): + try: + data['hop_length'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'w' in text_part: + text_part = text_part.replace('w', '') + if text_part.isdecimal(): + try: + data['window_size'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + if 'nf' in text_part: + text_part = text_part.replace('nf', '') + if text_part.isdecimal(): + try: + data['n_fft'] = int(text_part) + continue + except ValueError: + # Cannot convert string to int + pass + + +def determineModelFolderName(): + """ + Determine the name that is used for the folder and appended + to the back of the music files + """ + modelFolderName = '' + if not data['modelFolder']: + # Model Test Mode not selected + return modelFolderName + + # -Instrumental- + if os.path.isfile(data['instrumentalModel']): + modelFolderName += os.path.splitext(os.path.basename(data['instrumentalModel']))[0] + '-' + # -Vocal- + elif os.path.isfile(data['vocalModel']): + modelFolderName += os.path.splitext(os.path.basename(data['vocalModel']))[0] + '-' + # -Stack- + if os.path.isfile(data['stackModel']): + modelFolderName += os.path.splitext(os.path.basename(data['stackModel']))[0] + else: + modelFolderName = modelFolderName[:-1] + + if modelFolderName: + modelFolderName = '/' + modelFolderName + + return modelFolderName + + +def main(window: tk.Wm, text_widget: tk.Text, button_widget: tk.Button, progress_var: tk.Variable, + **kwargs: dict): + def save_files(wav_instrument, wav_vocals): + """Save output music files""" + vocal_name = None + instrumental_name = None + folder = '' + + # Get the Suffix Name + if (not loop_num or + loop_num == (total_loops - 1)): # First or Last Loop + if data['stackOnly']: + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + vocal_name = '(Vocals)' + instrumental_name = '(Instrumental)' + else: + vocal_name = '(Vocal_Final_Stacked_Output)' + instrumental_name = '(Instrumental_Final_Stacked_Output)' + elif data['useModel'] == 'instrumental': + if not loop_num: # First Loop + vocal_name = '(Vocals)' + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + instrumental_name = '(Instrumental)' + else: + instrumental_name = '(Instrumental_Final_Stacked_Output)' + elif data['useModel'] == 'vocal': + if not loop_num: # First Loop + instrumental_name = '(Instrumental)' + if loop_num == (total_loops - 1): # Last Loop + if not (total_loops - 1): # Only 1 Loop + vocal_name = '(Vocals)' + else: + vocal_name = '(Vocals_Final_Stacked_Output)' + if data['useModel'] == 'vocal': + # Reverse names + vocal_name, instrumental_name = instrumental_name, vocal_name + elif data['saveAllStacked']: + folder = os.path.splitext(os.path.basename(base_name))[0] + ' Stacked Outputs' # nopep8 + folder = os.path.basename(folder) + '/' + folder_path = os.path.dirname(base_name) + folder_path = os.path.join(folder_path, folder) + + if not os.path.isdir(folder_path): + os.mkdir(folder_path) + + if data['stackOnly']: + vocal_name = f'(Vocal_{loop_num}_Stacked_Output)' + instrumental_name = f'(Instrumental_{loop_num}_Stacked_Output)' + elif (data['useModel'] == 'vocal' or + data['useModel'] == 'instrumental'): + vocal_name = f'(Vocals_{loop_num}_Stacked_Output)' + instrumental_name = f'(Instrumental_{loop_num}_Stacked_Output)' + + if data['useModel'] == 'vocal': + # Reverse names + vocal_name, instrumental_name = instrumental_name, vocal_name + + # Save Temp File + # For instrumental the instrumental is the temp file + # and for vocal the instrumental is the temp file due + # to reversement + sf.write(f'temp.wav', + wav_instrument.T, sr) + + appendModelFolderName = modelFolderName.replace('/', '_') + # -Save files- + # Instrumental + if instrumental_name is not None: + instrumental_path = '{base_path}/{folder}{file_name}.wav'.format( + base_path=os.path.dirname(base_name), + folder=folder, + file_name=f'{os.path.basename(base_name)}_{instrumental_name}{appendModelFolderName}', + ) + + sf.write(instrumental_path, + wav_instrument.T, sr) + # Vocal + if vocal_name is not None: + vocal_path = '{base_path}/{folder}{file_name}.wav'.format( + base_path=os.path.dirname(base_name), + folder=folder, + file_name=f'{os.path.basename(base_name)}_{vocal_name}{appendModelFolderName}', + ) + sf.write(vocal_path, + wav_vocals.T, sr) + + data.update(kwargs) + + # Update default settings + global default_sr + global default_hop_length + global default_window_size + global default_n_fft + default_sr = data['sr'] + default_hop_length = data['hop_length'] + default_window_size = data['window_size'] + default_n_fft = data['n_fft'] + + stime = time.perf_counter() + progress_var.set(0) + text_widget.clear() + button_widget.configure(state=tk.DISABLED) # Disable Button + + vocal_remover = VocalRemover(data, text_widget) + modelFolderName = determineModelFolderName() + if modelFolderName: + folder_path = f'{data["export_path"]}{modelFolderName}' + if not os.path.isdir(folder_path): + os.mkdir(folder_path) + + # Determine Loops + total_loops = data['stackPasses'] + if not data['stackOnly']: + total_loops += 1 + for file_num, music_file in enumerate(data['input_paths'], start=1): + try: + # Determine File Name + base_name = f'{data["export_path"]}{modelFolderName}/{file_num}_{os.path.splitext(os.path.basename(music_file))[0]}' + + # --Seperate Music Files-- + for loop_num in range(total_loops): + # -Determine which model will be used- + if not loop_num: + # First Iteration + if data['stackOnly']: + if os.path.isfile(data['stackModel']): + model_name = os.path.basename(data['stackModel']) + model = vocal_remover.models['stack'] + device = vocal_remover.devices['stack'] + else: + raise ValueError(f'Selected stack only model, however, stack model path file cannot be found\nPath: "{data["stackModel"]}"') # nopep8 + else: + model_name = os.path.basename(data[f'{data["useModel"]}Model']) + model = vocal_remover.models[data['useModel']] + device = vocal_remover.devices[data['useModel']] + else: + model_name = os.path.basename(data['stackModel']) + # Every other iteration + model = vocal_remover.models['stack'] + device = vocal_remover.devices['stack'] + # Reference new music file + music_file = 'temp.wav' + + # -Get text and update progress- + base_text = get_baseText(total_files=len(data['input_paths']), + total_loops=total_loops, + file_num=file_num, + loop_num=loop_num) + progress_kwargs = {'progress_var': progress_var, + 'total_files': len(data['input_paths']), + 'total_loops': total_loops, + 'file_num': file_num, + 'loop_num': loop_num} + update_progress(**progress_kwargs, + step=0) + update_constants(model_name) + + # -Go through the different steps of seperation- + # Wave source + text_widget.write(base_text + 'Loading wave source...\n') + X, sr = librosa.load(music_file, data['sr'], False, + dtype=np.float32, res_type='kaiser_fast') + if X.ndim == 1: + X = np.asarray([X, X]) + text_widget.write(base_text + 'Done!\n') + + update_progress(**progress_kwargs, + step=0.1) + # Stft of wave source + text_widget.write(base_text + 'Stft of wave source...\n') + X = spec_utils.wave_to_spectrogram(X, + data['hop_length'], data['n_fft']) + if data['tta']: + pred, X_mag, X_phase = vocal_remover.inference_tta(X, + device=device, + model=model) + else: + pred, X_mag, X_phase = vocal_remover.inference(X, + device=device, + model=model) + text_widget.write(base_text + 'Done!\n') + + update_progress(**progress_kwargs, + step=0.6) + # Postprocess + if data['postprocess']: + text_widget.write(base_text + 'Post processing...\n') + pred_inv = np.clip(X_mag - pred, 0, np.inf) + pred = spec_utils.mask_silence(pred, pred_inv) + text_widget.write(base_text + 'Done!\n') + + update_progress(**progress_kwargs, + step=0.65) + + # Inverse stft + text_widget.write(base_text + 'Inverse stft of instruments and vocals...\n') # nopep8 + y_spec = pred * X_phase + wav_instrument = spec_utils.spectrogram_to_wave(y_spec, + hop_length=data['hop_length']) + v_spec = np.clip(X_mag - pred, 0, np.inf) * X_phase + wav_vocals = spec_utils.spectrogram_to_wave(v_spec, + hop_length=data['hop_length']) + text_widget.write(base_text + 'Done!\n') + + update_progress(**progress_kwargs, + step=0.7) + # Save output music files + text_widget.write(base_text + 'Saving Files...\n') + save_files(wav_instrument, wav_vocals) + text_widget.write(base_text + 'Done!\n') + + update_progress(**progress_kwargs, + step=0.8) + else: + # Save output image + if data['output_image']: + with open('{}_Instruments.jpg'.format(base_name), mode='wb') as f: + image = spec_utils.spectrogram_to_image(y_spec) + _, bin_image = cv2.imencode('.jpg', image) + bin_image.tofile(f) + with open('{}_Vocals.jpg'.format(base_name), mode='wb') as f: + image = spec_utils.spectrogram_to_image(v_spec) + _, bin_image = cv2.imencode('.jpg', image) + bin_image.tofile(f) + + text_widget.write(base_text + 'Completed Seperation!\n\n') + except Exception as e: + traceback_text = ''.join(traceback.format_tb(e.__traceback__)) + message = f'Traceback Error: "{traceback_text}"\n{type(e).__name__}: "{e}"\nFile: {music_file}\nLoop: {loop_num}\nPlease contact the creator and attach a screenshot of this error with the file and settings that caused it!' + tk.messagebox.showerror(master=window, + title='Untracked Error', + message=message) + print(traceback_text) + print(type(e).__name__, e) + print(message) + progress_var.set(0) + button_widget.configure(state=tk.NORMAL) # Enable Button + return + + os.remove('temp.wav') + progress_var.set(0) + text_widget.write(f'Conversion(s) Completed and Saving all Files!\n') + text_widget.write(f'Time Elapsed: {time.strftime("%H:%M:%S", time.gmtime(int(time.perf_counter() - stime)))}') # nopep8 + button_widget.configure(state=tk.NORMAL) # Enable Button From 6f16d59a270bd27a630c056690740717a3411884 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:40:12 -0600 Subject: [PATCH 018/100] Add files via upload --- README.md | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..3dd2f84 --- /dev/null +++ b/README.md @@ -0,0 +1,101 @@ +# Ultimate Vocal Remover GUI + +![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) + +This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) + +A very special thanks to the main code contributor DilanBoskan! DilanBoskan, thank you for your code contributions and support in helping bring this project to life! + +## Installation + +The application was made with Tkinter for cross platform compatibility, so this should work with Windows, Mac, and Linux systems. I've only personally tested this on Windows 10 & Linux Ubuntu. + +### Install Required Applications & Packages + +1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) (Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows) +2. Once Python has installed, open the Windows Command Prompt and run the following installs - + +``` +pip install Pillow +pip install tqdm==4.30.0 +pip install librosa==0.6.3 +pip install opencv-python +pip install numba==0.48.0 +pip install SoundFile +pip install soundstretch +pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html +``` + +### Getting & Running the Vocal Remover GUI & Models + +1. Download Ultimate Vocal Remover GUI Version 4.1.0 here +2. Place the UVR-V4GUI folder where ever you wish (I put mine in my documents folder) and open the file labeled "VocalRemover.py" (I recommend you create a shortcut for the file labeled "VocalRemover.py" to your desktop) +3. Open the application and proceed to the next section for more information + +## Option Guide + +### Choose AI Engine: + +- This option allows you to toggle between tsurumeso's v2 & v4 AI engines. +- Please note - The TTA option and the ability to set the N_FFT value is not possible in the v2 AI engine as those are v4 options. + +### Model Selections: + +- Choose Main Model - Here is where you choose the main model to convert your tracks with. +- Choose Stacked Model - These models are only meant to process converted tracks. Selecting the "Stack Passes" option will enable you to select a stacked model to run with the main model. If you wish to only run a stacked model on a track, make sure the "Stack Conversion Only" option is checked. +- Keep in mind the dropdown options change between upon choosing a new AI engine! + +### Parameter Values: + +All models released by me will have the values it was trained on appended to the end of the filename like so "MGM-HIGHEND_sr44100_hl512_w512_nf2048.pth". The "sr44100_hl512_w512_nf2048" portion automatically sets those values in the application, so please do not change the model files names. If there are no value appended to the end of the model, the defaults are set and the value field will be editable. The default values are - + +- SR - 44100 +- HOP LENGTH - 1024 +- WINDOW SIZE - 512 +- N_FFT - 2048 + +### Checkboxes: + - GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda    compatible GPU (Nividia GPU's are most compatible with Cuda) + - Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well + - TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note,    this option is NOT compatible with the v2 AI engine. + - Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. + - Stack Passes - This option allows you to set the number of times you would like a track to run through a stacked model + - Stack Conversion Only - Selecting this will allow you to run a pair through the stacked model only. + - Model Test Mode - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will automatically generate a new folder with the name of the selected model in the "Save to" path you have chosen. The completed files will have the selected model name appended to it and be saved to the auto-generated folder. + +### Other Buttons: + +- Add New Model - This button will automatically take you to the models folder. If you are adding a new model, make sure to add it accordingly based on the AI engine it was trained on! All new models added will automatically be detected without having to restart the application. +- Restart Button - If the application hangs for any reason you can hit the circular arrow button immediately to the right of the "Start Conversion" button. + +## Models Included: + +Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS LISTED AS THE PARAMETERS ARE SPECIFIED IN THE FILENAMES!): + +--- + +## Troubleshooting: + +- If the VocalRemover.py file won't open under any circumstances and you have exhausted all other resources, please do the following - + +1. Open the cmd prompt from the UVR-V4GUI directory +2. Run the following command - +``` +python VocalRemover_v4.py +``` +3. Copy and paste the error in the cmd prompt to the issues center here on my GitHub. + +## Other GUI Notes: + +- The application will automatically remember your "save to" path upon closing and reopening until you change it +- You can select as many files as you like. Multiple conversions are supported! +- The Stacked Model is meant to clean up vocal residue left over in the form of vocal pinches and static. They are only meant for instrumentals created via converted tracks previously run through one of the main models! +- The "Stack Passes" option should only be used with the Stacked Model. This option allows you to set the amount of times you want a track to run through a model. The amount of times you need to run it through will vary greatly by track. Most tracks won't require any more than 2-5 passes. If you do 5 or more passes on a track you risk quality degradation. +- Conversion times will greatly depend on your hardware. This application will NOT be friendly to older or budget hardware. Please proceed with caution! Pay attention to your PC and make sure it doesn't overheat. + +``` + +## References +- [1] Jansson et al., "Singing Voice Separation with Deep U-Net Convolutional Networks", https://ismir2017.smcnus.org/wp-content/uploads/2017/10/171_Paper.pdf +- [2] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf +- [3] Liutkus et al., "The 2016 Signal Separation Evaluation Campaign", Latent Variable Analysis and Signal Separation - 12th International Conference \ No newline at end of file From 119570c709346e267022996ea34c0b8e3849c490 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:41:02 -0600 Subject: [PATCH 019/100] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3dd2f84..8ad9ce9 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,13 @@ All models released by me will have the values it was trained on appended to the - N_FFT - 2048 ### Checkboxes: - - GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda    compatible GPU (Nividia GPU's are most compatible with Cuda) - - Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well - - TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note,    this option is NOT compatible with the v2 AI engine. - - Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. - - Stack Passes - This option allows you to set the number of times you would like a track to run through a stacked model - - Stack Conversion Only - Selecting this will allow you to run a pair through the stacked model only. - - Model Test Mode - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will automatically generate a new folder with the name of the selected model in the "Save to" path you have chosen. The completed files will have the selected model name appended to it and be saved to the auto-generated folder. +- GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda    compatible GPU (Nividia GPU's are most compatible with Cuda) +- Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well +- TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note,    this option is NOT compatible with the v2 AI engine. +- Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. +- Stack Passes - This option allows you to set the number of times you would like a track to run through a stacked model +- Stack Conversion Only - Selecting this will allow you to run a pair through the stacked model only. +- Model Test Mode - This option is meant to make it easier for users to test the results of different models without having to manually create new folders and/or change the filenames. When it's selected, the application will automatically generate a new folder with the name of the selected model in the "Save to" path you have chosen. The completed files will have the selected model name appended to it and be saved to the auto-generated folder. ### Other Buttons: @@ -98,4 +98,4 @@ python VocalRemover_v4.py ## References - [1] Jansson et al., "Singing Voice Separation with Deep U-Net Convolutional Networks", https://ismir2017.smcnus.org/wp-content/uploads/2017/10/171_Paper.pdf - [2] Takahashi et al., "Multi-scale Multi-band DenseNets for Audio Source Separation", https://arxiv.org/pdf/1706.09588.pdf -- [3] Liutkus et al., "The 2016 Signal Separation Evaluation Campaign", Latent Variable Analysis and Signal Separation - 12th International Conference \ No newline at end of file +- [3] Liutkus et al., "The 2016 Signal Separation Evaluation Campaign", Latent Variable Analysis and Signal Separation - 12th International Conference From 7650d04f1217ee6bfb807e13216f02bfc9237034 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:41:36 -0600 Subject: [PATCH 020/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ad9ce9..648e842 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Ultimate Vocal Remover GUI +# Ultimate Vocal Remover GUI v4.0.0 ![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) From af1d0e5fa4dab0a47b15b8eea1eb0696325deaf0 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:42:47 -0600 Subject: [PATCH 021/100] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 648e842..385e68e 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ All models released by me will have the values it was trained on appended to the Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS LISTED AS THE PARAMETERS ARE SPECIFIED IN THE FILENAMES!): +- (Pending) + --- ## Troubleshooting: From 94ca3f763f0b62c37a8c2dde028b98b0fec48b1b Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:43:08 -0600 Subject: [PATCH 022/100] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 385e68e..b9e07f2 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,6 @@ Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS - (Pending) ---- - ## Troubleshooting: - If the VocalRemover.py file won't open under any circumstances and you have exhausted all other resources, please do the following - From b6b30592b61854c5f261ce53850c94e601da45b2 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:53:22 -0600 Subject: [PATCH 023/100] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b9e07f2..c27742e 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ All models released by me will have the values it was trained on appended to the - N_FFT - 2048 ### Checkboxes: -- GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda    compatible GPU (Nividia GPU's are most compatible with Cuda) +- GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda) - Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well - TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note,    this option is NOT compatible with the v2 AI engine. - Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. @@ -81,7 +81,7 @@ Here's a list of the models (PLEASE DO NOT CHANGE THE NAME OF THE FIRST 2 MODELS 1. Open the cmd prompt from the UVR-V4GUI directory 2. Run the following command - ``` -python VocalRemover_v4.py +python VocalRemover.py ``` 3. Copy and paste the error in the cmd prompt to the issues center here on my GitHub. From 6d7fd9bcb91acef2e6b845b9408b823279e3b070 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:56:23 -0600 Subject: [PATCH 024/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c27742e..0ba9508 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) -A very special thanks to the main code contributor DilanBoskan! DilanBoskan, thank you for your code contributions and support in helping bring this project to life! +A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for your code contributions and support in helping bring this project to life! ## Installation From d7c5da810c3debd58f5ddc8ba9578a2de29c7911 Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:57:12 -0600 Subject: [PATCH 025/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ba9508..30225ad 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) -A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for your code contributions and support in helping bring this project to life! +A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support in bringing this project to life! ## Installation From d6248a86b8af197661a7cc9ed56ce776ffecf61e Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 04:57:50 -0600 Subject: [PATCH 026/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30225ad..ef34cf9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This application is a GUI version of the vocal remover AI created and posted by tsurumeso. This would not have been possible without tsurumeso's hard work and dedication! You can find tsurumeso's original command line version [here](https://github.com/tsurumeso/vocal-remover) -A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support in bringing this project to life! +A very special thanks to the main code contributor [DilanBoskan](https://github.com/DilanBoskan)! DilanBoskan, thank you for all of your support in helping bring this project to life! ## Installation From 531a9c9802fcacd4e54ca517344ae6b293a0d073 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 12:01:36 +0100 Subject: [PATCH 027/100] Added Drag & Drop & Bug Fixes - Added Drag & Drop for the save to directory and the music file selection (#2) - Fixed Model Names not decoding correctly --- VocalRemover.py | 346 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 252 insertions(+), 94 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index 37f67f2..25b4a35 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -4,6 +4,7 @@ import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import tkinter.font +from tkinterdnd2 import TkinterDnD, DND_FILES # Enable Drag & Drop from datetime import datetime # Images from PIL import Image @@ -35,6 +36,7 @@ else: os.chdir(base_path) # Change the current working directory to the base path instrumentalModels_dir = os.path.join(base_path, 'models') +vocalModels_dir = os.path.join(base_path, 'models') stackedModels_dir = os.path.join(base_path, 'models') logo_path = os.path.join(base_path, 'img', 'UVR-logo.png') refresh_path = os.path.join(base_path, 'img', 'refresh.png') @@ -168,6 +170,30 @@ def get_model_values(model_name): return model_values +def drop(var, event, accept_mode: str = 'files'): + """ + Drag & Drop verification process + """ + path = event.data + + if accept_mode == 'folder': + path = path.replace('{', '').replace('}', '') + if not os.path.isdir(path): + tk.messagebox.showerror(title='Invalid Folder', + message='Your given export path is not a valid folder!') + return + elif accept_mode == 'files': + # Clean path text and set path to the list of paths + path = path[:-1] + path = path.replace('{', '') + path = path.split('} ') + else: + # Invalid accept mode + return + + var.set(path) + + class ThreadSafeConsole(tk.Text): """ Text Widget which is thread safe for tkinter @@ -201,23 +227,23 @@ class ThreadSafeConsole(tk.Text): self.after(100, self.update_me) -class MainWindow(tk.Tk): +class MainWindow(TkinterDnD.Tk): # --Constants-- # Layout IMAGE_HEIGHT = 140 FILEPATHS_HEIGHT = 90 - OPTIONS_HEIGHT = 240 + OPTIONS_HEIGHT = 280 CONVERSIONBUTTON_HEIGHT = 35 COMMAND_HEIGHT = 200 PROGRESS_HEIGHT = 26 PADDING = 10 - COL1_ROWS = 8 - COL2_ROWS = 7 - COL3_ROWS = 5 + COL1_ROWS = 10 + COL2_ROWS = 8 + COL3_ROWS = 7 def __init__(self): - # Run the __init__ method on the tk.Tk class + # Run the __init__ method on the TkinterDnD.Tk class super().__init__() # Calculate window height height = self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT @@ -233,6 +259,7 @@ class MainWindow(tk.Tk): xpad=int(self.winfo_screenwidth()/2 - 550/2), ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) self.configure(bg='#000000') # Set background color to black + self.protocol("WM_DELETE_WINDOW", self.save_values) self.resizable(False, False) self.update() @@ -242,21 +269,25 @@ class MainWindow(tk.Tk): self.refresh_img = open_image(path=refresh_path, size=(20, 20)) self.instrumentalLabel_to_path = defaultdict(lambda: '') + self.vocalLabel_to_path = defaultdict(lambda: '') self.stackedLabel_to_path = defaultdict(lambda: '') self.lastInstrumentalModels = [] + self.lastVocalModels = [] self.lastStackedModels = [] # -Tkinter Value Holders- data = load_data() # Paths self.exportPath_var = tk.StringVar(value=data['export_path']) - self.inputPaths = [] + self.inputPaths_var = tk.StringVar(value='') # Processing Options self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) self.tta_var = tk.BooleanVar(value=data['tta']) self.outputImage_var = tk.BooleanVar(value=data['output_image']) # Models + self.useModel_var = tk.StringVar(value=data['useModel']) self.instrumentalModel_var = tk.StringVar(value='') + self.vocalModel_var = tk.StringVar(value='') self.stackedModel_var = tk.StringVar(value='') # Stacked Options self.stack_var = tk.BooleanVar(value=data['stack']) @@ -280,6 +311,7 @@ class MainWindow(tk.Tk): # --Widgets-- self.create_widgets() self.configure_widgets() + self.bind_widgets() self.place_widgets() self.update_available_models() @@ -321,6 +353,21 @@ class MainWindow(tk.Tk): font=self.font, foreground='white') ttk.Style().configure('T', font=self.font, foreground='white') + def bind_widgets(self): + """Bind widgets to the drag & drop mechanic""" + self.filePaths_saveTo_Button.drop_target_register(DND_FILES) + self.filePaths_saveTo_Entry.drop_target_register(DND_FILES) + self.filePaths_musicFile_Button.drop_target_register(DND_FILES) + self.filePaths_musicFile_Entry.drop_target_register(DND_FILES) + self.filePaths_saveTo_Button.dnd_bind('<>', + lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) + self.filePaths_saveTo_Entry.dnd_bind('<>', + lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) + self.filePaths_musicFile_Button.dnd_bind('<>', + lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) + self.filePaths_musicFile_Entry.dnd_bind('<>', + lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) + def place_widgets(self): """Place main widgets""" self.title_Label.place(x=-2, y=-2) @@ -354,7 +401,7 @@ class MainWindow(tk.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - text=self.inputPaths, + textvariable=self.inputPaths_var, state=tk.DISABLED ) # -Place Widgets- @@ -393,6 +440,18 @@ class MainWindow(tk.Tk): text='Output Image', variable=self.outputImage_var, ) + # Use Instrumental Model + self.options_instrumental_Radiobutton = ttk.Radiobutton(master=self.options_Frame, + text='Use Instrumental Model', + variable=self.useModel_var, + value='instrumental', + ) + # Use Vocal Model + self.options_vocal_Radiobutton = ttk.Radiobutton(master=self.options_Frame, + text='Use Vocal Model', + variable=self.useModel_var, + value='vocal', + ) # Stack Loops self.options_stack_Checkbutton = ttk.Checkbutton(master=self.options_Frame, text='Stack Passes', @@ -457,6 +516,12 @@ class MainWindow(tk.Tk): background='#a7a7a7', font=self.font, relief="ridge") self.options_instrumentalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, self.instrumentalModel_var) + # Choose Vocal Model + self.options_vocalModel_Label = tk.Label(master=self.options_Frame, + text='Choose Vocal Model', + background='#a7a7a7', font=self.font, relief="ridge") + self.options_vocalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, + self.vocalModel_var) # Choose Stacked Model self.options_stackedModel_Label = tk.Label(master=self.options_Frame, text='Choose Stacked Model', @@ -477,18 +542,23 @@ class MainWindow(tk.Tk): relx=0, rely=2/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) self.options_image_Checkbutton.place(x=0, y=0, width=0, height=0, relx=0, rely=3/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + # Model + self.options_instrumental_Radiobutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=4/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + self.options_vocal_Radiobutton.place(x=0, y=0, width=0, height=0, + relx=0, rely=5/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) # Stacks self.options_stack_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=4/self.COL1_ROWS, relwidth=1/3/4*3, relheight=1/self.COL1_ROWS) + relx=0, rely=6/self.COL1_ROWS, relwidth=1/3/4*3, relheight=1/self.COL1_ROWS) self.options_stack_Entry.place(x=0, y=3, width=0, height=-6, - relx=1/3/4*2.4, rely=4/self.COL1_ROWS, relwidth=1/3/4*0.9, relheight=1/self.COL1_ROWS) + relx=1/3/4*2.4, rely=6/self.COL1_ROWS, relwidth=1/3/4*0.9, relheight=1/self.COL1_ROWS) self.options_stackOnly_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=5/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) self.options_saveStack_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=6/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) + relx=0, rely=8/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) # Model Folder 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=9/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) # -Column 2- # SR self.options_sr_Label.place(x=5, y=4, width=5, height=-8, @@ -511,32 +581,40 @@ class MainWindow(tk.Tk): self.options_nfft_Entry.place(x=15, y=4, width=5, height=-8, relx=1/3 + 1/3/2, rely=3/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) # AI model - self.options_aiModel_Label.place(x=5, y=-5, width=-30, height=-8, + self.options_aiModel_Label.place(x=5, y=4, width=-30, height=-8, relx=1/3, rely=5/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) - self.options_aiModel_Optionmenu.place(x=5, y=-5, width=-30, height=-8, + self.options_aiModel_Optionmenu.place(x=5, y=4, width=-30, height=-8, relx=1/3, rely=6/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) # -Column 3- # Choose Model - self.options_instrumentalModel_Label.place(x=0, y=0, width=0, height=-10, + self.options_instrumentalModel_Label.place(x=0, y=-5, width=0, height=-10, relx=2/3, rely=0, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_instrumentalModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, + self.options_instrumentalModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, relx=2/3, rely=1/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_stackedModel_Label.place(x=0, y=0, width=0, height=-10, - relx=2/3, rely=2/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_stackedModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, - relx=2/3, rely=3/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_model_Button.place(x=15, y=3, width=-30, height=-8, - relx=2/3, rely=4/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_vocalModel_Label.place(x=0, y=-5, width=0, height=-10, + relx=2/3, rely=2/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_vocalModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, + relx=2/3, rely=3/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Label.place(x=0, y=-5, width=0, height=-10, + relx=2/3, rely=4/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, + relx=2/3, rely=5/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_model_Button.place(x=15, y=0, width=-30, height=1, + relx=2/3, rely=6/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) # -Update Binds- self.options_stackOnly_Checkbutton.configure(command=self.update_states) # nopep8 self.options_stack_Checkbutton.configure(command=self.update_states) # nopep8 self.options_stack_Entry.bind('', lambda e: self.update_states()) + self.options_instrumental_Radiobutton.configure(command=self.update_states) # nopep8 + self.options_vocal_Radiobutton.configure(command=self.update_states) # Model name decoding self.instrumentalModel_var.trace_add('write', lambda *args: self.decode_modelNames()) + self.vocalModel_var.trace_add('write', + lambda *args: self.decode_modelNames()) self.stackedModel_var.trace_add('write', lambda *args: self.decode_modelNames()) # Model deselect @@ -557,13 +635,8 @@ class MainWindow(tk.Tk): initialdir=self.lastDir, ) if paths: # Path selected - self.inputPaths = paths - # Change the entry text - self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) - self.filePaths_musicFile_Entry.delete(0, tk.END) - self.filePaths_musicFile_Entry.insert(0, self.inputPaths) - self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) + self.inputPaths_var.set(paths) self.lastDir = os.path.dirname(paths[0]) def open_export_filedialog(self): @@ -584,13 +657,16 @@ class MainWindow(tk.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() + input_paths = self.inputPaths_var.get() instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 + vocalModel_path = self.vocalLabel_to_path[self.vocalModel_var.get()] stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants instrumental = get_model_values(self.instrumentalModel_var.get()) + vocal = get_model_values(self.vocalModel_var.get()) stacked = get_model_values(self.stackedModel_var.get()) try: - if [bool(instrumental), bool(stacked)].count(True) == 2: + if [bool(instrumental), bool(vocal), bool(stacked)].count(True) == 2: sr = DEFAULT_DATA['sr'] hop_length = DEFAULT_DATA['hop_length'] window_size = DEFAULT_DATA['window_size'] @@ -613,23 +689,34 @@ class MainWindow(tk.Tk): return # -Check for invalid inputs- - if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) - for path in self.inputPaths]): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') - return + for path in input_paths: + if not os.path.isfile(path): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file! Please make sure that the file still exists!', + detail=f'File path: {path}') + return if not os.path.isdir(export_path): tk.messagebox.showwarning(master=self, title='Invalid Export Directory', message='You have selected an invalid export directory!\nPlease make sure that your directory still exists!') return if not self.stackOnly_var.get(): - if not os.path.isfile(instrumentalModel_path): - tk.messagebox.showwarning(master=self, - title='Invalid Instrumental Model File', - message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') - return + if self.useModel_var.get() == 'instrumental': + if not os.path.isfile(instrumentalModel_path): + tk.messagebox.showwarning(master=self, + title='Invalid Instrumental Model File', + message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') + return + elif self.useModel_var.get() == 'vocal': + if not os.path.isfile(vocalModel_path): + tk.messagebox.showwarning(master=self, + title='Invalid Vocal Model File', + message='You have selected an invalid vocal model file!\nPlease make sure that your model file still exists!') + return + else: + print('THIS SHOULD NOT HAPPEN') + exit() if (self.stackOnly_var.get() or stackPasses > 0): if not os.path.isfile(stackedModel_path): @@ -638,27 +725,6 @@ class MainWindow(tk.Tk): message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') return - # -Save Data- - save_data(data={ - 'export_path': export_path, - 'gpu': self.gpuConversion_var.get(), - 'postprocess': self.postprocessing_var.get(), - 'tta': self.tta_var.get(), - 'output_image': self.outputImage_var.get(), - 'stack': self.stack_var.get(), - 'stackOnly': self.stackOnly_var.get(), - 'stackPasses': stackPasses, - 'saveAllStacked': self.saveAllStacked_var.get(), - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'n_fft': n_fft, - 'useModel': 'instrumental', # Always instrumental - 'lastDir': self.lastDir, - 'modelFolder': self.modelFolder_var.get(), - 'aiModel': self.aiModel_var.get(), - }) - if self.aiModel_var.get() == 'v2': inference = inference_v2 elif self.aiModel_var.get() == 'v4': @@ -670,7 +736,7 @@ class MainWindow(tk.Tk): threading.Thread(target=inference.main, kwargs={ # Paths - 'input_paths': self.inputPaths, + 'input_paths': input_paths, 'export_path': export_path, # Processing Options 'gpu': 0 if self.gpuConversion_var.get() else -1, @@ -679,9 +745,9 @@ class MainWindow(tk.Tk): 'output_image': self.outputImage_var.get(), # Models 'instrumentalModel': instrumentalModel_path, - 'vocalModel': '', # Always not needed + 'vocalModel': vocalModel_path, 'stackModel': stackedModel_path, - 'useModel': 'instrumental', # Always instrumental + 'useModel': self.useModel_var.get(), # Stack Options 'stackPasses': stackPasses, 'stackOnly': self.stackOnly_var.get(), @@ -709,10 +775,12 @@ class MainWindow(tk.Tk): """ # Check state of model selectors instrumental_selectable = bool(str(self.options_instrumentalModel_Optionmenu.cget('state')) == 'normal') + vocal_selectable = bool(str(self.options_vocalModel_Optionmenu.cget('state')) == 'normal') stacked_selectable = bool(str(self.options_stackedModel_Optionmenu.cget('state')) == 'normal') # Extract data from models name instrumental = get_model_values(self.instrumentalModel_var.get()) + vocal = get_model_values(self.vocalModel_var.get()) stacked = get_model_values(self.stackedModel_var.get()) # Assign widgets to constants @@ -722,32 +790,33 @@ class MainWindow(tk.Tk): 'window_size': [self.options_winSize_Entry, self.winSize_var], 'n_fft': [self.options_nfft_Entry, self.nfft_var], } + # Obtain data from instrumental or vocal (based on what is selected) + modelData = instrumental if bool(instrumental) else vocal + modelData_selectable = (instrumental_selectable or vocal_selectable) # Loop through each constant (key) and its widgets for key, (widget, var) in widgetsVars.items(): if stacked_selectable: - # Stacked model can be selected - if key in stacked.keys(): - if (key in stacked.keys() and - not instrumental_selectable): + if modelData_selectable: + if (key in modelData.keys() and + key in stacked.keys()): + # Both models have set constants + widget.configure(state=tk.DISABLED) + var.set('%d/%d' % (modelData[key], stacked[key])) + continue + else: + if key in stacked.keys(): # Only stacked selectable widget.configure(state=tk.DISABLED) var.set(stacked[key]) continue - elif (key in instrumental.keys() and - instrumental_selectable): - # Both models have set constants - widget.configure(state=tk.DISABLED) - var.set('%d/%d' % (instrumental[key], stacked[key])) - continue else: # Stacked model can not be selected - if (key in instrumental.keys() and - instrumental_selectable): + if (key in modelData.keys() and + modelData_selectable): widget.configure(state=tk.DISABLED) - var.set(instrumental[key]) + var.set(modelData[key]) continue - # If widget is already enabled, no need to reset the value if str(widget.cget('state')) != 'normal': widget.configure(state=tk.NORMAL) @@ -765,6 +834,7 @@ class MainWindow(tk.Tk): and add to the select your model list """ temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, self.aiModel_var.get(), 'Instrumental Models') # nopep8 + temp_vocalModels_dir = os.path.join(vocalModels_dir, self.aiModel_var.get(), 'Vocal Models') temp_stackedModels_dir = os.path.join(stackedModels_dir, self.aiModel_var.get(), 'Stacked Models') # Instrumental models new_InstrumentalModels = os.listdir(temp_instrumentalModels_dir) @@ -779,6 +849,19 @@ class MainWindow(tk.Tk): # Link the files name to its absolute path self.instrumentalLabel_to_path[file_name] = os.path.join(temp_instrumentalModels_dir, file_name) # nopep8 self.lastInstrumentalModels = new_InstrumentalModels + # Vocal models + new_VocalModels = os.listdir(temp_vocalModels_dir) + if new_VocalModels != self.lastVocalModels: + self.vocalLabel_to_path.clear() + self.options_vocalModel_Optionmenu['menu'].delete(0, 'end') + for file_name in new_VocalModels: + if file_name.endswith('.pth'): + # Add Radiobutton to the Options Menu + self.options_vocalModel_Optionmenu['menu'].add_radiobutton(label=file_name, + command=tk._setit(self.vocalModel_var, file_name)) + # Link the files name to its absolute path + self.vocalLabel_to_path[file_name] = os.path.join(temp_vocalModels_dir, file_name) # nopep8 + self.lastVocalModels = new_VocalModels # Stacked models new_stackedModels = os.listdir(temp_stackedModels_dir) if new_stackedModels != self.lastStackedModels: @@ -814,6 +897,14 @@ class MainWindow(tk.Tk): self.stackLoops_var.set(0) stackLoops = 0 + # Radiobuttons + if self.stackOnly_var.get(): + self.options_instrumental_Radiobutton.configure(text='Stack Instrumental') + self.options_vocal_Radiobutton.configure(text='Stack Vocal') + else: + self.options_instrumental_Radiobutton.configure(text='Use Instrumental Model') + self.options_vocal_Radiobutton.configure(text='Use Vocal Model') + # Stack Only and Save All Outputs if stackLoops > 0: self.options_stackOnly_Checkbutton.configure(state=tk.NORMAL) @@ -830,23 +921,45 @@ class MainWindow(tk.Tk): self.options_instrumentalModel_Label.configure(foreground='#777') self.options_instrumentalModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 self.instrumentalModel_var.set('') + # Vocal Model + self.options_vocalModel_Label.configure(foreground='#777') + self.options_vocalModel_Optionmenu.configure(state=tk.DISABLED) + self.vocalModel_var.set('') # Stack Model self.options_stackedModel_Label.configure(foreground='#000') self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - else: + elif self.useModel_var.get() == 'instrumental': # Instrumental Model self.options_instrumentalModel_Label.configure(foreground='#000') self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - self.instrumentalModel_var.set('') - - # Stack Model - if stackLoops > 0: - self.options_stackedModel_Label.configure(foreground='#000') - self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + # Vocal Model + self.options_vocalModel_Label.configure(foreground='#777') + self.options_vocalModel_Optionmenu.configure(state=tk.DISABLED) + self.vocalModel_var.set('') + # Stack Model + if stackLoops > 0: + self.options_stackedModel_Label.configure(foreground='#000') + self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + else: + self.options_stackedModel_Label.configure(foreground='#777') + self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.stackedModel_var.set('') else: - self.options_stackedModel_Label.configure(foreground='#777') - self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 - self.stackedModel_var.set('') + # Instrumental Model + self.options_instrumentalModel_Label.configure(foreground='#777') + self.options_instrumentalModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.instrumentalModel_var.set('') + # Vocal Model + self.options_vocalModel_Label.configure(foreground='#000') + self.options_vocalModel_Optionmenu.configure(state=tk.NORMAL) + # Stack Model + if stackLoops > 0: + self.options_stackedModel_Label.configure(foreground='#000') + self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + else: + self.options_stackedModel_Label.configure(foreground='#777') + self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.stackedModel_var.set('') if self.aiModel_var.get() == 'v2': self.options_tta_Checkbutton.configure(state=tk.DISABLED) @@ -871,6 +984,7 @@ class MainWindow(tk.Tk): self.last_aiModel = self.aiModel_var.get() self.instrumentalModel_var.set('') + self.vocalModel_var.set('') self.stackedModel_var.set('') self.srValue_var.set(DEFAULT_DATA['sr']) @@ -885,11 +999,55 @@ class MainWindow(tk.Tk): """ Restart the application after asking for confirmation """ - proceed = tk.messagebox.askyesno(title='Confirmation', - message='The application will restart and lose unsaved data. Do you wish to proceed?') - if proceed: - subprocess.Popen(f'python "{__file__}"', shell=True) - exit() + save = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart. Do you want to save the data?') + if save: + self.save_values() + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() + + def save_values(self): + """ + Save the data of the application + """ + export_path = self.exportPath_var.get() + # Get constants + instrumental = get_model_values(self.instrumentalModel_var.get()) + vocal = get_model_values(self.vocalModel_var.get()) + stacked = get_model_values(self.stackedModel_var.get()) + if [bool(instrumental), bool(vocal), bool(stacked)].count(True) == 2: + sr = DEFAULT_DATA['sr'] + hop_length = DEFAULT_DATA['hop_length'] + window_size = DEFAULT_DATA['window_size'] + n_fft = DEFAULT_DATA['n_fft'] + else: + sr = self.srValue_var.get() + hop_length = self.hopValue_var.get() + window_size = self.winSize_var.get() + n_fft = self.nfft_var.get() + + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': self.stackLoops_var.get(), + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': self.useModel_var.get(), + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + + self.destroy() if __name__ == "__main__": From 3a16689c8e747ee8cbcfb1f4091ef42c1cee8ed1 Mon Sep 17 00:00:00 2001 From: DilanBoskan Date: Mon, 9 Nov 2020 12:06:59 +0100 Subject: [PATCH 028/100] Revert "Added Drag & Drop & Bug Fixes" This reverts commit 67dad1cf48abb1a2be62e6942c1e7cdd643a170d. --- VocalRemover.py | 346 +++++++++++++----------------------------------- 1 file changed, 94 insertions(+), 252 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index 25b4a35..37f67f2 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -4,7 +4,6 @@ import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import tkinter.font -from tkinterdnd2 import TkinterDnD, DND_FILES # Enable Drag & Drop from datetime import datetime # Images from PIL import Image @@ -36,7 +35,6 @@ else: os.chdir(base_path) # Change the current working directory to the base path instrumentalModels_dir = os.path.join(base_path, 'models') -vocalModels_dir = os.path.join(base_path, 'models') stackedModels_dir = os.path.join(base_path, 'models') logo_path = os.path.join(base_path, 'img', 'UVR-logo.png') refresh_path = os.path.join(base_path, 'img', 'refresh.png') @@ -170,30 +168,6 @@ def get_model_values(model_name): return model_values -def drop(var, event, accept_mode: str = 'files'): - """ - Drag & Drop verification process - """ - path = event.data - - if accept_mode == 'folder': - path = path.replace('{', '').replace('}', '') - if not os.path.isdir(path): - tk.messagebox.showerror(title='Invalid Folder', - message='Your given export path is not a valid folder!') - return - elif accept_mode == 'files': - # Clean path text and set path to the list of paths - path = path[:-1] - path = path.replace('{', '') - path = path.split('} ') - else: - # Invalid accept mode - return - - var.set(path) - - class ThreadSafeConsole(tk.Text): """ Text Widget which is thread safe for tkinter @@ -227,23 +201,23 @@ class ThreadSafeConsole(tk.Text): self.after(100, self.update_me) -class MainWindow(TkinterDnD.Tk): +class MainWindow(tk.Tk): # --Constants-- # Layout IMAGE_HEIGHT = 140 FILEPATHS_HEIGHT = 90 - OPTIONS_HEIGHT = 280 + OPTIONS_HEIGHT = 240 CONVERSIONBUTTON_HEIGHT = 35 COMMAND_HEIGHT = 200 PROGRESS_HEIGHT = 26 PADDING = 10 - COL1_ROWS = 10 - COL2_ROWS = 8 - COL3_ROWS = 7 + COL1_ROWS = 8 + COL2_ROWS = 7 + COL3_ROWS = 5 def __init__(self): - # Run the __init__ method on the TkinterDnD.Tk class + # Run the __init__ method on the tk.Tk class super().__init__() # Calculate window height height = self.IMAGE_HEIGHT + self.FILEPATHS_HEIGHT + self.OPTIONS_HEIGHT @@ -259,7 +233,6 @@ class MainWindow(TkinterDnD.Tk): xpad=int(self.winfo_screenwidth()/2 - 550/2), ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) self.configure(bg='#000000') # Set background color to black - self.protocol("WM_DELETE_WINDOW", self.save_values) self.resizable(False, False) self.update() @@ -269,25 +242,21 @@ class MainWindow(TkinterDnD.Tk): self.refresh_img = open_image(path=refresh_path, size=(20, 20)) self.instrumentalLabel_to_path = defaultdict(lambda: '') - self.vocalLabel_to_path = defaultdict(lambda: '') self.stackedLabel_to_path = defaultdict(lambda: '') self.lastInstrumentalModels = [] - self.lastVocalModels = [] self.lastStackedModels = [] # -Tkinter Value Holders- data = load_data() # Paths self.exportPath_var = tk.StringVar(value=data['export_path']) - self.inputPaths_var = tk.StringVar(value='') + self.inputPaths = [] # Processing Options self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) self.tta_var = tk.BooleanVar(value=data['tta']) self.outputImage_var = tk.BooleanVar(value=data['output_image']) # Models - self.useModel_var = tk.StringVar(value=data['useModel']) self.instrumentalModel_var = tk.StringVar(value='') - self.vocalModel_var = tk.StringVar(value='') self.stackedModel_var = tk.StringVar(value='') # Stacked Options self.stack_var = tk.BooleanVar(value=data['stack']) @@ -311,7 +280,6 @@ class MainWindow(TkinterDnD.Tk): # --Widgets-- self.create_widgets() self.configure_widgets() - self.bind_widgets() self.place_widgets() self.update_available_models() @@ -353,21 +321,6 @@ class MainWindow(TkinterDnD.Tk): font=self.font, foreground='white') ttk.Style().configure('T', font=self.font, foreground='white') - def bind_widgets(self): - """Bind widgets to the drag & drop mechanic""" - self.filePaths_saveTo_Button.drop_target_register(DND_FILES) - self.filePaths_saveTo_Entry.drop_target_register(DND_FILES) - self.filePaths_musicFile_Button.drop_target_register(DND_FILES) - self.filePaths_musicFile_Entry.drop_target_register(DND_FILES) - self.filePaths_saveTo_Button.dnd_bind('<>', - lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) - self.filePaths_saveTo_Entry.dnd_bind('<>', - lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) - self.filePaths_musicFile_Button.dnd_bind('<>', - lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) - self.filePaths_musicFile_Entry.dnd_bind('<>', - lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) - def place_widgets(self): """Place main widgets""" self.title_Label.place(x=-2, y=-2) @@ -401,7 +354,7 @@ class MainWindow(TkinterDnD.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - textvariable=self.inputPaths_var, + text=self.inputPaths, state=tk.DISABLED ) # -Place Widgets- @@ -440,18 +393,6 @@ class MainWindow(TkinterDnD.Tk): text='Output Image', variable=self.outputImage_var, ) - # Use Instrumental Model - self.options_instrumental_Radiobutton = ttk.Radiobutton(master=self.options_Frame, - text='Use Instrumental Model', - variable=self.useModel_var, - value='instrumental', - ) - # Use Vocal Model - self.options_vocal_Radiobutton = ttk.Radiobutton(master=self.options_Frame, - text='Use Vocal Model', - variable=self.useModel_var, - value='vocal', - ) # Stack Loops self.options_stack_Checkbutton = ttk.Checkbutton(master=self.options_Frame, text='Stack Passes', @@ -516,12 +457,6 @@ class MainWindow(TkinterDnD.Tk): background='#a7a7a7', font=self.font, relief="ridge") self.options_instrumentalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, self.instrumentalModel_var) - # Choose Vocal Model - self.options_vocalModel_Label = tk.Label(master=self.options_Frame, - text='Choose Vocal Model', - background='#a7a7a7', font=self.font, relief="ridge") - self.options_vocalModel_Optionmenu = ttk.OptionMenu(self.options_Frame, - self.vocalModel_var) # Choose Stacked Model self.options_stackedModel_Label = tk.Label(master=self.options_Frame, text='Choose Stacked Model', @@ -542,23 +477,18 @@ class MainWindow(TkinterDnD.Tk): relx=0, rely=2/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) self.options_image_Checkbutton.place(x=0, y=0, width=0, height=0, relx=0, rely=3/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) - # Model - self.options_instrumental_Radiobutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=4/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) - self.options_vocal_Radiobutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=5/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) # Stacks self.options_stack_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=6/self.COL1_ROWS, relwidth=1/3/4*3, relheight=1/self.COL1_ROWS) + relx=0, rely=4/self.COL1_ROWS, relwidth=1/3/4*3, relheight=1/self.COL1_ROWS) self.options_stack_Entry.place(x=0, y=3, width=0, height=-6, - relx=1/3/4*2.4, rely=6/self.COL1_ROWS, relwidth=1/3/4*0.9, relheight=1/self.COL1_ROWS) + relx=1/3/4*2.4, rely=4/self.COL1_ROWS, relwidth=1/3/4*0.9, relheight=1/self.COL1_ROWS) self.options_stackOnly_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=5/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) self.options_saveStack_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) + relx=0, rely=6/self.COL1_ROWS, relwidth=1/3, relheight=1/self.COL1_ROWS) # Model Folder self.options_modelFolder_Checkbutton.place(x=0, y=0, width=0, height=0, - relx=0, rely=9/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) # -Column 2- # SR self.options_sr_Label.place(x=5, y=4, width=5, height=-8, @@ -581,40 +511,32 @@ class MainWindow(TkinterDnD.Tk): self.options_nfft_Entry.place(x=15, y=4, width=5, height=-8, relx=1/3 + 1/3/2, rely=3/self.COL2_ROWS, relwidth=1/3/4, relheight=1/self.COL2_ROWS) # AI model - self.options_aiModel_Label.place(x=5, y=4, width=-30, height=-8, + self.options_aiModel_Label.place(x=5, y=-5, width=-30, height=-8, relx=1/3, rely=5/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) - self.options_aiModel_Optionmenu.place(x=5, y=4, width=-30, height=-8, + self.options_aiModel_Optionmenu.place(x=5, y=-5, width=-30, height=-8, relx=1/3, rely=6/self.COL2_ROWS, relwidth=1/3, relheight=1/self.COL2_ROWS) # -Column 3- # Choose Model - self.options_instrumentalModel_Label.place(x=0, y=-5, width=0, height=-10, + self.options_instrumentalModel_Label.place(x=0, y=0, width=0, height=-10, relx=2/3, rely=0, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_instrumentalModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, + self.options_instrumentalModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, relx=2/3, rely=1/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_vocalModel_Label.place(x=0, y=-5, width=0, height=-10, - relx=2/3, rely=2/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_vocalModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, - relx=2/3, rely=3/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_stackedModel_Label.place(x=0, y=-5, width=0, height=-10, - relx=2/3, rely=4/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_stackedModel_Optionmenu.place(x=15, y=-10, width=-30, height=-2, - relx=2/3, rely=5/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) - self.options_model_Button.place(x=15, y=0, width=-30, height=1, - relx=2/3, rely=6/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Label.place(x=0, y=0, width=0, height=-10, + relx=2/3, rely=2/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_stackedModel_Optionmenu.place(x=15, y=-4, width=-30, height=-13, + relx=2/3, rely=3/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) + self.options_model_Button.place(x=15, y=3, width=-30, height=-8, + relx=2/3, rely=4/self.COL3_ROWS, relwidth=1/3, relheight=1/self.COL3_ROWS) # -Update Binds- self.options_stackOnly_Checkbutton.configure(command=self.update_states) # nopep8 self.options_stack_Checkbutton.configure(command=self.update_states) # nopep8 self.options_stack_Entry.bind('', lambda e: self.update_states()) - self.options_instrumental_Radiobutton.configure(command=self.update_states) # nopep8 - self.options_vocal_Radiobutton.configure(command=self.update_states) # Model name decoding self.instrumentalModel_var.trace_add('write', lambda *args: self.decode_modelNames()) - self.vocalModel_var.trace_add('write', - lambda *args: self.decode_modelNames()) self.stackedModel_var.trace_add('write', lambda *args: self.decode_modelNames()) # Model deselect @@ -635,8 +557,13 @@ class MainWindow(TkinterDnD.Tk): initialdir=self.lastDir, ) if paths: # Path selected + self.inputPaths = paths + # Change the entry text + self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) + self.filePaths_musicFile_Entry.delete(0, tk.END) + self.filePaths_musicFile_Entry.insert(0, self.inputPaths) + self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) - self.inputPaths_var.set(paths) self.lastDir = os.path.dirname(paths[0]) def open_export_filedialog(self): @@ -657,16 +584,13 @@ class MainWindow(TkinterDnD.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() - input_paths = self.inputPaths_var.get() instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 - vocalModel_path = self.vocalLabel_to_path[self.vocalModel_var.get()] stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants instrumental = get_model_values(self.instrumentalModel_var.get()) - vocal = get_model_values(self.vocalModel_var.get()) stacked = get_model_values(self.stackedModel_var.get()) try: - if [bool(instrumental), bool(vocal), bool(stacked)].count(True) == 2: + if [bool(instrumental), bool(stacked)].count(True) == 2: sr = DEFAULT_DATA['sr'] hop_length = DEFAULT_DATA['hop_length'] window_size = DEFAULT_DATA['window_size'] @@ -689,34 +613,23 @@ class MainWindow(TkinterDnD.Tk): return # -Check for invalid inputs- - for path in input_paths: - if not os.path.isfile(path): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file! Please make sure that the file still exists!', - detail=f'File path: {path}') - return + if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) + for path in self.inputPaths]): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') + return if not os.path.isdir(export_path): tk.messagebox.showwarning(master=self, title='Invalid Export Directory', message='You have selected an invalid export directory!\nPlease make sure that your directory still exists!') return if not self.stackOnly_var.get(): - if self.useModel_var.get() == 'instrumental': - if not os.path.isfile(instrumentalModel_path): - tk.messagebox.showwarning(master=self, - title='Invalid Instrumental Model File', - message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') - return - elif self.useModel_var.get() == 'vocal': - if not os.path.isfile(vocalModel_path): - tk.messagebox.showwarning(master=self, - title='Invalid Vocal Model File', - message='You have selected an invalid vocal model file!\nPlease make sure that your model file still exists!') - return - else: - print('THIS SHOULD NOT HAPPEN') - exit() + if not os.path.isfile(instrumentalModel_path): + tk.messagebox.showwarning(master=self, + title='Invalid Instrumental Model File', + message='You have selected an invalid instrumental model file!\nPlease make sure that your model file still exists!') + return if (self.stackOnly_var.get() or stackPasses > 0): if not os.path.isfile(stackedModel_path): @@ -725,6 +638,27 @@ class MainWindow(TkinterDnD.Tk): message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') return + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': stackPasses, + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': 'instrumental', # Always instrumental + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + if self.aiModel_var.get() == 'v2': inference = inference_v2 elif self.aiModel_var.get() == 'v4': @@ -736,7 +670,7 @@ class MainWindow(TkinterDnD.Tk): threading.Thread(target=inference.main, kwargs={ # Paths - 'input_paths': input_paths, + 'input_paths': self.inputPaths, 'export_path': export_path, # Processing Options 'gpu': 0 if self.gpuConversion_var.get() else -1, @@ -745,9 +679,9 @@ class MainWindow(TkinterDnD.Tk): 'output_image': self.outputImage_var.get(), # Models 'instrumentalModel': instrumentalModel_path, - 'vocalModel': vocalModel_path, + 'vocalModel': '', # Always not needed 'stackModel': stackedModel_path, - 'useModel': self.useModel_var.get(), + 'useModel': 'instrumental', # Always instrumental # Stack Options 'stackPasses': stackPasses, 'stackOnly': self.stackOnly_var.get(), @@ -775,12 +709,10 @@ class MainWindow(TkinterDnD.Tk): """ # Check state of model selectors instrumental_selectable = bool(str(self.options_instrumentalModel_Optionmenu.cget('state')) == 'normal') - vocal_selectable = bool(str(self.options_vocalModel_Optionmenu.cget('state')) == 'normal') stacked_selectable = bool(str(self.options_stackedModel_Optionmenu.cget('state')) == 'normal') # Extract data from models name instrumental = get_model_values(self.instrumentalModel_var.get()) - vocal = get_model_values(self.vocalModel_var.get()) stacked = get_model_values(self.stackedModel_var.get()) # Assign widgets to constants @@ -790,33 +722,32 @@ class MainWindow(TkinterDnD.Tk): 'window_size': [self.options_winSize_Entry, self.winSize_var], 'n_fft': [self.options_nfft_Entry, self.nfft_var], } - # Obtain data from instrumental or vocal (based on what is selected) - modelData = instrumental if bool(instrumental) else vocal - modelData_selectable = (instrumental_selectable or vocal_selectable) # Loop through each constant (key) and its widgets for key, (widget, var) in widgetsVars.items(): if stacked_selectable: - if modelData_selectable: - if (key in modelData.keys() and - key in stacked.keys()): - # Both models have set constants - widget.configure(state=tk.DISABLED) - var.set('%d/%d' % (modelData[key], stacked[key])) - continue - else: - if key in stacked.keys(): + # Stacked model can be selected + if key in stacked.keys(): + if (key in stacked.keys() and + not instrumental_selectable): # Only stacked selectable widget.configure(state=tk.DISABLED) var.set(stacked[key]) continue + elif (key in instrumental.keys() and + instrumental_selectable): + # Both models have set constants + widget.configure(state=tk.DISABLED) + var.set('%d/%d' % (instrumental[key], stacked[key])) + continue else: # Stacked model can not be selected - if (key in modelData.keys() and - modelData_selectable): + if (key in instrumental.keys() and + instrumental_selectable): widget.configure(state=tk.DISABLED) - var.set(modelData[key]) + var.set(instrumental[key]) continue + # If widget is already enabled, no need to reset the value if str(widget.cget('state')) != 'normal': widget.configure(state=tk.NORMAL) @@ -834,7 +765,6 @@ class MainWindow(TkinterDnD.Tk): and add to the select your model list """ temp_instrumentalModels_dir = os.path.join(instrumentalModels_dir, self.aiModel_var.get(), 'Instrumental Models') # nopep8 - temp_vocalModels_dir = os.path.join(vocalModels_dir, self.aiModel_var.get(), 'Vocal Models') temp_stackedModels_dir = os.path.join(stackedModels_dir, self.aiModel_var.get(), 'Stacked Models') # Instrumental models new_InstrumentalModels = os.listdir(temp_instrumentalModels_dir) @@ -849,19 +779,6 @@ class MainWindow(TkinterDnD.Tk): # Link the files name to its absolute path self.instrumentalLabel_to_path[file_name] = os.path.join(temp_instrumentalModels_dir, file_name) # nopep8 self.lastInstrumentalModels = new_InstrumentalModels - # Vocal models - new_VocalModels = os.listdir(temp_vocalModels_dir) - if new_VocalModels != self.lastVocalModels: - self.vocalLabel_to_path.clear() - self.options_vocalModel_Optionmenu['menu'].delete(0, 'end') - for file_name in new_VocalModels: - if file_name.endswith('.pth'): - # Add Radiobutton to the Options Menu - self.options_vocalModel_Optionmenu['menu'].add_radiobutton(label=file_name, - command=tk._setit(self.vocalModel_var, file_name)) - # Link the files name to its absolute path - self.vocalLabel_to_path[file_name] = os.path.join(temp_vocalModels_dir, file_name) # nopep8 - self.lastVocalModels = new_VocalModels # Stacked models new_stackedModels = os.listdir(temp_stackedModels_dir) if new_stackedModels != self.lastStackedModels: @@ -897,14 +814,6 @@ class MainWindow(TkinterDnD.Tk): self.stackLoops_var.set(0) stackLoops = 0 - # Radiobuttons - if self.stackOnly_var.get(): - self.options_instrumental_Radiobutton.configure(text='Stack Instrumental') - self.options_vocal_Radiobutton.configure(text='Stack Vocal') - else: - self.options_instrumental_Radiobutton.configure(text='Use Instrumental Model') - self.options_vocal_Radiobutton.configure(text='Use Vocal Model') - # Stack Only and Save All Outputs if stackLoops > 0: self.options_stackOnly_Checkbutton.configure(state=tk.NORMAL) @@ -921,45 +830,23 @@ class MainWindow(TkinterDnD.Tk): self.options_instrumentalModel_Label.configure(foreground='#777') self.options_instrumentalModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 self.instrumentalModel_var.set('') - # Vocal Model - self.options_vocalModel_Label.configure(foreground='#777') - self.options_vocalModel_Optionmenu.configure(state=tk.DISABLED) - self.vocalModel_var.set('') # Stack Model self.options_stackedModel_Label.configure(foreground='#000') self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - elif self.useModel_var.get() == 'instrumental': + else: # Instrumental Model self.options_instrumentalModel_Label.configure(foreground='#000') self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - # Vocal Model - self.options_vocalModel_Label.configure(foreground='#777') - self.options_vocalModel_Optionmenu.configure(state=tk.DISABLED) - self.vocalModel_var.set('') - # Stack Model - if stackLoops > 0: - self.options_stackedModel_Label.configure(foreground='#000') - self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - else: - self.options_stackedModel_Label.configure(foreground='#777') - self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 - self.stackedModel_var.set('') - else: - # Instrumental Model - self.options_instrumentalModel_Label.configure(foreground='#777') - self.options_instrumentalModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 self.instrumentalModel_var.set('') - # Vocal Model - self.options_vocalModel_Label.configure(foreground='#000') - self.options_vocalModel_Optionmenu.configure(state=tk.NORMAL) - # Stack Model - if stackLoops > 0: - self.options_stackedModel_Label.configure(foreground='#000') - self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - else: - self.options_stackedModel_Label.configure(foreground='#777') - self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 - self.stackedModel_var.set('') + + # Stack Model + if stackLoops > 0: + self.options_stackedModel_Label.configure(foreground='#000') + self.options_stackedModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 + else: + self.options_stackedModel_Label.configure(foreground='#777') + self.options_stackedModel_Optionmenu.configure(state=tk.DISABLED) # nopep8 + self.stackedModel_var.set('') if self.aiModel_var.get() == 'v2': self.options_tta_Checkbutton.configure(state=tk.DISABLED) @@ -984,7 +871,6 @@ class MainWindow(TkinterDnD.Tk): self.last_aiModel = self.aiModel_var.get() self.instrumentalModel_var.set('') - self.vocalModel_var.set('') self.stackedModel_var.set('') self.srValue_var.set(DEFAULT_DATA['sr']) @@ -999,55 +885,11 @@ class MainWindow(TkinterDnD.Tk): """ Restart the application after asking for confirmation """ - save = tk.messagebox.askyesno(title='Confirmation', - message='The application will restart. Do you want to save the data?') - if save: - self.save_values() - subprocess.Popen(f'python "{__file__}"', shell=True) - exit() - - def save_values(self): - """ - Save the data of the application - """ - export_path = self.exportPath_var.get() - # Get constants - instrumental = get_model_values(self.instrumentalModel_var.get()) - vocal = get_model_values(self.vocalModel_var.get()) - stacked = get_model_values(self.stackedModel_var.get()) - if [bool(instrumental), bool(vocal), bool(stacked)].count(True) == 2: - sr = DEFAULT_DATA['sr'] - hop_length = DEFAULT_DATA['hop_length'] - window_size = DEFAULT_DATA['window_size'] - n_fft = DEFAULT_DATA['n_fft'] - else: - sr = self.srValue_var.get() - hop_length = self.hopValue_var.get() - window_size = self.winSize_var.get() - n_fft = self.nfft_var.get() - - # -Save Data- - save_data(data={ - 'export_path': export_path, - 'gpu': self.gpuConversion_var.get(), - 'postprocess': self.postprocessing_var.get(), - 'tta': self.tta_var.get(), - 'output_image': self.outputImage_var.get(), - 'stack': self.stack_var.get(), - 'stackOnly': self.stackOnly_var.get(), - 'stackPasses': self.stackLoops_var.get(), - 'saveAllStacked': self.saveAllStacked_var.get(), - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'n_fft': n_fft, - 'useModel': self.useModel_var.get(), - 'lastDir': self.lastDir, - 'modelFolder': self.modelFolder_var.get(), - 'aiModel': self.aiModel_var.get(), - }) - - self.destroy() + proceed = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart and lose unsaved data. Do you wish to proceed?') + if proceed: + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() if __name__ == "__main__": From db5c323003464c8c5a93bf487a4e4e1dbd58e7e7 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 12:10:35 +0100 Subject: [PATCH 029/100] Added Drag & Drop & Bug fixes - Added Drag & Drop for the save to directory and the music file selection (#2) - Fixed Model Names not decoding correctly --- VocalRemover.py | 166 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 112 insertions(+), 54 deletions(-) diff --git a/VocalRemover.py b/VocalRemover.py index 37f67f2..d6d0a0b 100644 --- a/VocalRemover.py +++ b/VocalRemover.py @@ -4,6 +4,7 @@ import tkinter.ttk as ttk import tkinter.messagebox import tkinter.filedialog import tkinter.font +from tkinterdnd2 import TkinterDnD, DND_FILES # Enable Drag & Drop from datetime import datetime # Images from PIL import Image @@ -168,6 +169,30 @@ def get_model_values(model_name): return model_values +def drop(var, event, accept_mode: str = 'files'): + """ + Drag & Drop verification process + """ + path = event.data + + if accept_mode == 'folder': + path = path.replace('{', '').replace('}', '') + if not os.path.isdir(path): + tk.messagebox.showerror(title='Invalid Folder', + message='Your given export path is not a valid folder!') + return + elif accept_mode == 'files': + # Clean path text and set path to the list of paths + path = path[:-1] + path = path.replace('{', '') + path = path.split('} ') + else: + # Invalid accept mode + return + + var.set(path) + + class ThreadSafeConsole(tk.Text): """ Text Widget which is thread safe for tkinter @@ -201,7 +226,7 @@ class ThreadSafeConsole(tk.Text): self.after(100, self.update_me) -class MainWindow(tk.Tk): +class MainWindow(TkinterDnD.Tk): # --Constants-- # Layout IMAGE_HEIGHT = 140 @@ -233,6 +258,7 @@ class MainWindow(tk.Tk): xpad=int(self.winfo_screenwidth()/2 - 550/2), ypad=int(self.winfo_screenheight()/2 - height/2 - 30))) self.configure(bg='#000000') # Set background color to black + self.protocol("WM_DELETE_WINDOW", self.save_values) self.resizable(False, False) self.update() @@ -249,7 +275,7 @@ class MainWindow(tk.Tk): data = load_data() # Paths self.exportPath_var = tk.StringVar(value=data['export_path']) - self.inputPaths = [] + self.inputPaths_var = tk.StringVar(value='') # Processing Options self.gpuConversion_var = tk.BooleanVar(value=data['gpu']) self.postprocessing_var = tk.BooleanVar(value=data['postprocess']) @@ -280,6 +306,7 @@ class MainWindow(tk.Tk): # --Widgets-- self.create_widgets() self.configure_widgets() + self.bind_widgets() self.place_widgets() self.update_available_models() @@ -321,6 +348,21 @@ class MainWindow(tk.Tk): font=self.font, foreground='white') ttk.Style().configure('T', font=self.font, foreground='white') + def bind_widgets(self): + """Bind widgets to the drag & drop mechanic""" + self.filePaths_saveTo_Button.drop_target_register(DND_FILES) + self.filePaths_saveTo_Entry.drop_target_register(DND_FILES) + self.filePaths_musicFile_Button.drop_target_register(DND_FILES) + self.filePaths_musicFile_Entry.drop_target_register(DND_FILES) + self.filePaths_saveTo_Button.dnd_bind('<>', + lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) + self.filePaths_saveTo_Entry.dnd_bind('<>', + lambda e, var=self.exportPath_var: drop(var, e, accept_mode='folder')) + self.filePaths_musicFile_Button.dnd_bind('<>', + lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) + self.filePaths_musicFile_Entry.dnd_bind('<>', + lambda e, var=self.inputPaths_var: drop(var, e, accept_mode='files')) + def place_widgets(self): """Place main widgets""" self.title_Label.place(x=-2, y=-2) @@ -354,7 +396,7 @@ class MainWindow(tk.Tk): text='Select Your Audio File(s)', command=self.open_file_filedialog) self.filePaths_musicFile_Entry = ttk.Entry(master=self.filePaths_Frame, - text=self.inputPaths, + textvariable=self.inputPaths_var, state=tk.DISABLED ) # -Place Widgets- @@ -557,13 +599,7 @@ class MainWindow(tk.Tk): initialdir=self.lastDir, ) if paths: # Path selected - self.inputPaths = paths - # Change the entry text - self.filePaths_musicFile_Entry.configure(state=tk.NORMAL) - self.filePaths_musicFile_Entry.delete(0, tk.END) - self.filePaths_musicFile_Entry.insert(0, self.inputPaths) - self.filePaths_musicFile_Entry.configure(state=tk.DISABLED) - + self.inputPaths_var.set(paths) self.lastDir = os.path.dirname(paths[0]) def open_export_filedialog(self): @@ -584,6 +620,7 @@ class MainWindow(tk.Tk): """ # -Get all variables- export_path = self.exportPath_var.get() + input_paths = self.inputPaths_var.get() instrumentalModel_path = self.instrumentalLabel_to_path[self.instrumentalModel_var.get()] # nopep8 stackedModel_path = self.stackedLabel_to_path[self.stackedModel_var.get()] # nopep8 # Get constants @@ -613,12 +650,13 @@ class MainWindow(tk.Tk): return # -Check for invalid inputs- - if not any([(os.path.isfile(path) and path.endswith(('.mp3', '.mp4', '.m4a', '.flac', '.wav'))) - for path in self.inputPaths]): - tk.messagebox.showwarning(master=self, - title='Invalid Music File', - message='You have selected an invalid music file!\nPlease make sure that your files still exist and ends with either ".mp3", ".mp4", ".m4a", ".flac", ".wav"') - return + for path in input_paths: + if not os.path.isfile(path): + tk.messagebox.showwarning(master=self, + title='Invalid Music File', + message='You have selected an invalid music file! Please make sure that the file still exists!', + detail=f'File path: {path}') + return if not os.path.isdir(export_path): tk.messagebox.showwarning(master=self, title='Invalid Export Directory', @@ -638,27 +676,6 @@ class MainWindow(tk.Tk): message='You have selected an invalid stacked model file!\nPlease make sure that your model file still exists!') return - # -Save Data- - save_data(data={ - 'export_path': export_path, - 'gpu': self.gpuConversion_var.get(), - 'postprocess': self.postprocessing_var.get(), - 'tta': self.tta_var.get(), - 'output_image': self.outputImage_var.get(), - 'stack': self.stack_var.get(), - 'stackOnly': self.stackOnly_var.get(), - 'stackPasses': stackPasses, - 'saveAllStacked': self.saveAllStacked_var.get(), - 'sr': sr, - 'hop_length': hop_length, - 'window_size': window_size, - 'n_fft': n_fft, - 'useModel': 'instrumental', # Always instrumental - 'lastDir': self.lastDir, - 'modelFolder': self.modelFolder_var.get(), - 'aiModel': self.aiModel_var.get(), - }) - if self.aiModel_var.get() == 'v2': inference = inference_v2 elif self.aiModel_var.get() == 'v4': @@ -670,7 +687,7 @@ class MainWindow(tk.Tk): threading.Thread(target=inference.main, kwargs={ # Paths - 'input_paths': self.inputPaths, + 'input_paths': input_paths, 'export_path': export_path, # Processing Options 'gpu': 0 if self.gpuConversion_var.get() else -1, @@ -726,20 +743,19 @@ class MainWindow(tk.Tk): # Loop through each constant (key) and its widgets for key, (widget, var) in widgetsVars.items(): if stacked_selectable: - # Stacked model can be selected - if key in stacked.keys(): - if (key in stacked.keys() and - not instrumental_selectable): - # Only stacked selectable - widget.configure(state=tk.DISABLED) - var.set(stacked[key]) - continue - elif (key in instrumental.keys() and - instrumental_selectable): + if instrumental_selectable: + if (key in instrumental.keys() and + key in stacked.keys()): # Both models have set constants widget.configure(state=tk.DISABLED) var.set('%d/%d' % (instrumental[key], stacked[key])) continue + else: + if key in stacked.keys(): + # Only stacked selectable + widget.configure(state=tk.DISABLED) + var.set(stacked[key]) + continue else: # Stacked model can not be selected if (key in instrumental.keys() and @@ -837,7 +853,6 @@ class MainWindow(tk.Tk): # Instrumental Model self.options_instrumentalModel_Label.configure(foreground='#000') self.options_instrumentalModel_Optionmenu.configure(state=tk.NORMAL) # nopep8 - self.instrumentalModel_var.set('') # Stack Model if stackLoops > 0: @@ -885,11 +900,54 @@ class MainWindow(tk.Tk): """ Restart the application after asking for confirmation """ - proceed = tk.messagebox.askyesno(title='Confirmation', - message='The application will restart and lose unsaved data. Do you wish to proceed?') - if proceed: - subprocess.Popen(f'python "{__file__}"', shell=True) - exit() + save = tk.messagebox.askyesno(title='Confirmation', + message='The application will restart. Do you want to save the data?') + if save: + self.save_values() + subprocess.Popen(f'python "{__file__}"', shell=True) + exit() + + def save_values(self): + """ + Save the data of the application + """ + export_path = self.exportPath_var.get() + # Get constants + instrumental = get_model_values(self.instrumentalModel_var.get()) + stacked = get_model_values(self.stackedModel_var.get()) + if [bool(instrumental), bool(stacked)].count(True) == 2: + sr = DEFAULT_DATA['sr'] + hop_length = DEFAULT_DATA['hop_length'] + window_size = DEFAULT_DATA['window_size'] + n_fft = DEFAULT_DATA['n_fft'] + else: + sr = self.srValue_var.get() + hop_length = self.hopValue_var.get() + window_size = self.winSize_var.get() + n_fft = self.nfft_var.get() + + # -Save Data- + save_data(data={ + 'export_path': export_path, + 'gpu': self.gpuConversion_var.get(), + 'postprocess': self.postprocessing_var.get(), + 'tta': self.tta_var.get(), + 'output_image': self.outputImage_var.get(), + 'stack': self.stack_var.get(), + 'stackOnly': self.stackOnly_var.get(), + 'stackPasses': self.stackLoops_var.get(), + 'saveAllStacked': self.saveAllStacked_var.get(), + 'sr': sr, + 'hop_length': hop_length, + 'window_size': window_size, + 'n_fft': n_fft, + 'useModel': 'instrumental', + 'lastDir': self.lastDir, + 'modelFolder': self.modelFolder_var.get(), + 'aiModel': self.aiModel_var.get(), + }) + + self.destroy() if __name__ == "__main__": From a1e03d149dad10caea90276db3b495651625b66b Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 13:11:00 +0100 Subject: [PATCH 030/100] Added requirements.txt --- requirements.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4c91ed1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +Pillow +tqdm==4.30.0 +librosa==0.6.3 +opencv-python +numba==0.48.0 +SoundFile +soundstretch \ No newline at end of file From 000f1ba6d0bdfb01c86733f55cc3f3e5d4b1e0e9 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 13:12:14 +0100 Subject: [PATCH 031/100] Update README.md --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ef34cf9..314b4ab 100644 --- a/README.md +++ b/README.md @@ -13,16 +13,10 @@ The application was made with Tkinter for cross platform compatibility, so this ### Install Required Applications & Packages 1. Download & install Python 3.7 [here](https://www.python.org/ftp/python/3.6.8/python-3.6.8-amd64.exe) (Make sure to check the box that says "Add Python 3.7 to PATH" if you're on Windows) -2. Once Python has installed, open the Windows Command Prompt and run the following installs - +2. Once Python has installed, open the Windows Command Prompt and run the following installs- ``` -pip install Pillow -pip install tqdm==4.30.0 -pip install librosa==0.6.3 -pip install opencv-python -pip install numba==0.48.0 -pip install SoundFile -pip install soundstretch +pip install --no-cache-dir -r requirements.txt pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html ``` From fc763a9c448cc0d8d1bea1c83b752ae69a756f52 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 19:46:00 +0100 Subject: [PATCH 032/100] Update README.md Added a download counter --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 314b4ab..d52c686 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 +https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg ![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) From c5ee2e5e32938f754597ee4b39ae93081de6df63 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 19:47:19 +0100 Subject: [PATCH 033/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d52c686..0f482f2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 -https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg +[![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)] ![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) From 7424fbe506653d281a216c4924cd1ae5fcbb5b17 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 19:48:10 +0100 Subject: [PATCH 034/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f482f2..9115771 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 -[![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)] +[![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) ![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) From 9c4905232ea357437bf61e307f418168de529290 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 19:49:25 +0100 Subject: [PATCH 035/100] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9115771..cc54411 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Ultimate Vocal Remover GUI v4.0.0 +[![Release](https://img.shields.io/github/release/anjok07/ultimatevocalremovergui.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases/latest) [![Downloads](https://img.shields.io/github/downloads/anjok07/ultimatevocalremovergui/total.svg)](https://github.com/anjok07/ultimatevocalremovergui/releases) ![alt text](https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/beta/img/UVRBETA.jpg) From 3ffce41a030169b39b77284ee571259a432ade8f Mon Sep 17 00:00:00 2001 From: Anjok07 <68268275+Anjok07@users.noreply.github.com> Date: Mon, 9 Nov 2020 13:58:50 -0600 Subject: [PATCH 036/100] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc54411..38edd6a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ All models released by me will have the values it was trained on appended to the ### Checkboxes: - GPU Conversion - This option ensures the GPU is used for conversions. It will not work if you don't have a Cuda compatible GPU (Nividia GPU's are most compatible with Cuda) - Post-process - This option may improve the separation on some songs. I recommend only using it if conversions don't come  out well -- TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note,    this option is NOT compatible with the v2 AI engine. +- TTA - This option may improve the separation on some songs. Having this selected will run a track twice. Please note, this option is NOT compatible with the v2 AI engine. - Output Image - This option will include a spectrogram of the resulting instrumental & vocal tracks. - Stack Passes - This option allows you to set the number of times you would like a track to run through a stacked model - Stack Conversion Only - Selecting this will allow you to run a pair through the stacked model only. From 08e21bdbf026da79a35bd45bb8b9f2ff112e0964 Mon Sep 17 00:00:00 2001 From: Dilan Boskan Date: Mon, 9 Nov 2020 21:58:55 +0100 Subject: [PATCH 037/100] Attempt at fixing issue #19 --- tkinterdnd2/TkinterDnD.py | 292 +++++++ tkinterdnd2/__init__.py | 25 + .../__pycache__/TkinterDnD.cpython-37.pyc | Bin 0 -> 12011 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 686 bytes tkinterdnd2/tkdnd/linux64/libtkdnd2.9.2.so | Bin 0 -> 55135 bytes tkinterdnd2/tkdnd/linux64/pkgIndex.tcl | 10 + tkinterdnd2/tkdnd/linux64/tkdnd.tcl | 469 ++++++++++ tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl | 160 ++++ tkinterdnd2/tkdnd/linux64/tkdnd_generic.tcl | 520 +++++++++++ tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl | 144 ++++ tkinterdnd2/tkdnd/linux64/tkdnd_unix.tcl | 810 ++++++++++++++++++ tkinterdnd2/tkdnd/linux64/tkdnd_utils.tcl | 252 ++++++ tkinterdnd2/tkdnd/linux64/tkdnd_windows.tcl | 167 ++++ tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib | Bin 0 -> 40176 bytes tkinterdnd2/tkdnd/osx64/pkgIndex.tcl | 10 + tkinterdnd2/tkdnd/osx64/tkdnd.tcl | 469 ++++++++++ tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl | 160 ++++ tkinterdnd2/tkdnd/osx64/tkdnd_generic.tcl | 520 +++++++++++ tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl | 144 ++++ tkinterdnd2/tkdnd/osx64/tkdnd_unix.tcl | 810 ++++++++++++++++++ tkinterdnd2/tkdnd/osx64/tkdnd_utils.tcl | 252 ++++++ tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl | 167 ++++ tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll | Bin 0 -> 153600 bytes tkinterdnd2/tkdnd/win64/pkgIndex.tcl | 7 + tkinterdnd2/tkdnd/win64/tkdnd.tcl | 469 ++++++++++ tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib | Bin 0 -> 2064 bytes tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl | 160 ++++ tkinterdnd2/tkdnd/win64/tkdnd_generic.tcl | 520 +++++++++++ tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl | 144 ++++ tkinterdnd2/tkdnd/win64/tkdnd_unix.tcl | 810 ++++++++++++++++++ tkinterdnd2/tkdnd/win64/tkdnd_utils.tcl | 252 ++++++ tkinterdnd2/tkdnd/win64/tkdnd_windows.tcl | 167 ++++ 32 files changed, 7910 insertions(+) create mode 100644 tkinterdnd2/TkinterDnD.py create mode 100644 tkinterdnd2/__init__.py create mode 100644 tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc create mode 100644 tkinterdnd2/__pycache__/__init__.cpython-37.pyc create mode 100644 tkinterdnd2/tkdnd/linux64/libtkdnd2.9.2.so create mode 100644 tkinterdnd2/tkdnd/linux64/pkgIndex.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_generic.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_unix.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_utils.tcl create mode 100644 tkinterdnd2/tkdnd/linux64/tkdnd_windows.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib create mode 100644 tkinterdnd2/tkdnd/osx64/pkgIndex.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_generic.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_unix.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_utils.tcl create mode 100644 tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl create mode 100644 tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll create mode 100644 tkinterdnd2/tkdnd/win64/pkgIndex.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_generic.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_unix.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_utils.tcl create mode 100644 tkinterdnd2/tkdnd/win64/tkdnd_windows.tcl diff --git a/tkinterdnd2/TkinterDnD.py b/tkinterdnd2/TkinterDnD.py new file mode 100644 index 0000000..f7e2c1e --- /dev/null +++ b/tkinterdnd2/TkinterDnD.py @@ -0,0 +1,292 @@ +'''Python wrapper for the tkdnd tk extension. + +The tkdnd extension provides an interface to native, platform specific +drag and drop mechanisms. Under Unix the drag & drop protocol in use is +the XDND protocol version 5 (also used by the Qt toolkit, and the KDE and +GNOME desktops). Under Windows, the OLE2 drag & drop interfaces are used. +Under Macintosh, the Cocoa drag and drop interfaces are used. + +Once the TkinterDnD2 package is installed, it is safe to do: + +from TkinterDnD2 import * + +This will add the classes TkinterDnD.Tk and TkinterDnD.TixTk to the global +namespace, plus the following constants: +PRIVATE, NONE, ASK, COPY, MOVE, LINK, REFUSE_DROP, +DND_TEXT, DND_FILES, DND_ALL, CF_UNICODETEXT, CF_TEXT, CF_HDROP, +FileGroupDescriptor, FileGroupDescriptorW + +Drag and drop for the application can then be enabled by using one of the +classes TkinterDnD.Tk() or (in case the tix extension shall be used) +TkinterDnD.TixTk() as application main window instead of a regular +tkinter.Tk() window. This will add the drag-and-drop specific methods to the +Tk window and all its descendants. +''' + +try: + import Tkinter as tkinter + import Tix as tix +except ImportError: + import tkinter + from tkinter import tix + +TkdndVersion = None + +def _require(tkroot): + '''Internal function.''' + global TkdndVersion + try: + import os.path + import platform + + if platform.system()=="Darwin": + tkdnd_platform_rep = "osx64" + elif platform.system()=="Linux": + tkdnd_platform_rep = "linux64" + elif platform.system()=="Windows": + tkdnd_platform_rep = "win64" + else: + raise RuntimeError('Plaform not supported.') + + module_path = os.path.join(os.path.dirname(__file__), 'tkdnd', tkdnd_platform_rep) + tkroot.tk.call('lappend', 'auto_path', module_path) + TkdndVersion = tkroot.tk.call('package', 'require', 'tkdnd') + except tkinter.TclError: + raise RuntimeError('Unable to load tkdnd library.') + return TkdndVersion + +class DnDEvent: + """Internal class. + Container for the properties of a drag-and-drop event, similar to a + normal tkinter.Event. + An instance of the DnDEvent class has the following attributes: + action (string) + actions (tuple) + button (int) + code (string) + codes (tuple) + commonsourcetypes (tuple) + commontargettypes (tuple) + data (string) + name (string) + types (tuple) + modifiers (tuple) + supportedsourcetypes (tuple) + sourcetypes (tuple) + type (string) + supportedtargettypes (tuple) + widget (widget instance) + x_root (int) + y_root (int) + Depending on the type of DnD event however, not all attributes may be set. + """ + pass + +class DnDWrapper: + '''Internal class.''' + # some of the percent substitutions need to be enclosed in braces + # so we can use splitlist() to convert them into tuples + _subst_format_dnd = ('%A', '%a', '%b', '%C', '%c', '{%CST}', + '{%CTT}', '%D', '%e', '{%L}', '{%m}', '{%ST}', + '%T', '{%t}', '{%TT}', '%W', '%X', '%Y') + _subst_format_str_dnd = " ".join(_subst_format_dnd) + tkinter.BaseWidget._subst_format_dnd = _subst_format_dnd + tkinter.BaseWidget._subst_format_str_dnd = _subst_format_str_dnd + + def _substitute_dnd(self, *args): + """Internal function.""" + if len(args) != len(self._subst_format_dnd): + return args + def getint_event(s): + try: + return int(s) + except ValueError: + return s + def splitlist_event(s): + try: + return self.tk.splitlist(s) + except ValueError: + return s + # valid percent substitutions for DnD event types + # (tested with tkdnd-2.8 on debian jessie): + # <> : %W, %X, %Y %e, %t + # <> : %A, %W, %e + # <> : all except : %D (always empty) + # <> : all except %D (always empty) + # <> :all except %D (always empty) + # <> : all + A, a, b, C, c, CST, CTT, D, e, L, m, ST, T, t, TT, W, X, Y = args + ev = DnDEvent() + ev.action = A + ev.actions = splitlist_event(a) + ev.button = getint_event(b) + ev.code = C + ev.codes = splitlist_event(c) + ev.commonsourcetypes = splitlist_event(CST) + ev.commontargettypes = splitlist_event(CTT) + ev.data = D + ev.name = e + ev.types = splitlist_event(L) + ev.modifiers = splitlist_event(m) + ev.supportedsourcetypes = splitlist_event(ST) + ev.sourcetypes = splitlist_event(t) + ev.type = T + ev.supportedtargettypes = splitlist_event(TT) + try: + ev.widget = self.nametowidget(W) + except KeyError: + ev.widget = W + ev.x_root = getint_event(X) + ev.y_root = getint_event(Y) + return (ev,) + tkinter.BaseWidget._substitute_dnd = _substitute_dnd + + def _dnd_bind(self, what, sequence, func, add, needcleanup=True): + """Internal function.""" + if isinstance(func, str): + self.tk.call(what + (sequence, func)) + elif func: + funcid = self._register(func, self._substitute_dnd, needcleanup) + # FIXME: why doesn't the "return 'break'" mechanism work here?? + #cmd = ('%sif {"[%s %s]" == "break"} break\n' % (add and '+' or '', + # funcid, self._subst_format_str_dnd)) + cmd = '%s%s %s' %(add and '+' or '', funcid, + self._subst_format_str_dnd) + self.tk.call(what + (sequence, cmd)) + return funcid + elif sequence: + return self.tk.call(what + (sequence,)) + else: + return self.tk.splitlist(self.tk.call(what)) + tkinter.BaseWidget._dnd_bind = _dnd_bind + + def dnd_bind(self, sequence=None, func=None, add=None): + '''Bind to this widget at drag and drop event SEQUENCE a call + to function FUNC. + SEQUENCE may be one of the following: + <>, <>, <>, <>, + <>, <>, <> . + The callbacks for the > events, with the exception of + <>, should always return an action (i.e. one of COPY, + MOVE, LINK, ASK or PRIVATE). + The callback for the <> event must return a tuple + containing three elements: the drop action(s) supported by the + drag source, the format type(s) that the data can be dropped as and + finally the data that shall be dropped. Each of these three elements + may be a tuple of strings or a single string.''' + return self._dnd_bind(('bind', self._w), sequence, func, add) + tkinter.BaseWidget.dnd_bind = dnd_bind + + def drag_source_register(self, button=None, *dndtypes): + '''This command will register SELF as a drag source. + A drag source is a widget than can start a drag action. This command + can be executed multiple times on a widget. + When SELF is registered as a drag source, optional DNDTYPES can be + provided. These DNDTYPES will be provided during a drag action, and + it can contain platform independent or platform specific types. + Platform independent are DND_Text for dropping text portions and + DND_Files for dropping a list of files (which can contain one or + multiple files) on SELF. However, these types are + indicative/informative. SELF can initiate a drag action with even a + different type list. Finally, button is the mouse button that will be + used for starting the drag action. It can have any of the values 1 + (left mouse button), 2 (middle mouse button - wheel) and 3 + (right mouse button). If button is not specified, it defaults to 1.''' + # hack to fix a design bug from the first version + if button is None: + button = 1 + else: + try: + button = int(button) + except ValueError: + # no button defined, button is actually + # something like DND_TEXT + dndtypes = (button,) + dndtypes + button = 1 + self.tk.call( + 'tkdnd::drag_source', 'register', self._w, dndtypes, button) + tkinter.BaseWidget.drag_source_register = drag_source_register + + def drag_source_unregister(self): + '''This command will stop SELF from being a drag source. Thus, window + will stop receiving events related to drag operations. It is an error + to use this command for a window that has not been registered as a + drag source with drag_source_register().''' + self.tk.call('tkdnd::drag_source', 'unregister', self._w) + tkinter.BaseWidget.drag_source_unregister = drag_source_unregister + + def drop_target_register(self, *dndtypes): + '''This command will register SELF as a drop target. A drop target is + a widget than can accept a drop action. This command can be executed + multiple times on a widget. When SELF is registered as a drop target, + optional DNDTYPES can be provided. These types list can contain one or + more types that SELF will accept during a drop action, and it can + contain platform independent or platform specific types. Platform + independent are DND_Text for dropping text portions and DND_Files for + dropping a list of files (which can contain one or multiple files) on + SELF.''' + self.tk.call('tkdnd::drop_target', 'register', self._w, dndtypes) + tkinter.BaseWidget.drop_target_register = drop_target_register + + def drop_target_unregister(self): + '''This command will stop SELF from being a drop target. Thus, SELF + will stop receiving events related to drop operations. It is an error + to use this command for a window that has not been registered as a + drop target with drop_target_register().''' + self.tk.call('tkdnd::drop_target', 'unregister', self._w) + tkinter.BaseWidget.drop_target_unregister = drop_target_unregister + + def platform_independent_types(self, *dndtypes): + '''This command will accept a list of types that can contain platform + independnent or platform specific types. A new list will be returned, + where each platform specific type in DNDTYPES will be substituted by + one or more platform independent types. Thus, the returned list may + have more elements than DNDTYPES.''' + return self.tk.split(self.tk.call( + 'tkdnd::platform_independent_types', dndtypes)) + tkinter.BaseWidget.platform_independent_types = platform_independent_types + + def platform_specific_types(self, *dndtypes): + '''This command will accept a list of types that can contain platform + independnent or platform specific types. A new list will be returned, + where each platform independent type in DNDTYPES will be substituted + by one or more platform specific types. Thus, the returned list may + have more elements than DNDTYPES.''' + return self.tk.split(self.tk.call( + 'tkdnd::platform_specific_types', dndtypes)) + tkinter.BaseWidget.platform_specific_types = platform_specific_types + + def get_dropfile_tempdir(self): + '''This command will return the temporary directory used by TkDND for + storing temporary files. When the package is loaded, this temporary + directory will be initialised to a proper directory according to the + operating system. This default initial value can be changed to be the + value of the following environmental variables: + TKDND_TEMP_DIR, TEMP, TMP.''' + return self.tk.call('tkdnd::GetDropFileTempDirectory') + tkinter.BaseWidget.get_dropfile_tempdir = get_dropfile_tempdir + + def set_dropfile_tempdir(self, tempdir): + '''This command will change the temporary directory used by TkDND for + storing temporary files to TEMPDIR.''' + self.tk.call('tkdnd::SetDropFileTempDirectory', tempdir) + tkinter.BaseWidget.set_dropfile_tempdir = set_dropfile_tempdir + +####################################################################### +#### The main window classes that enable Drag & Drop for #### +#### themselves and all their descendant widgets: #### +####################################################################### + +class Tk(tkinter.Tk, DnDWrapper): + '''Creates a new instance of a tkinter.Tk() window; all methods of the + DnDWrapper class apply to this window and all its descendants.''' + def __init__(self, *args, **kw): + tkinter.Tk.__init__(self, *args, **kw) + self.TkdndVersion = _require(self) + +class TixTk(tix.Tk, DnDWrapper): + '''Creates a new instance of a tix.Tk() window; all methods of the + DnDWrapper class apply to this window and all its descendants.''' + def __init__(self, *args, **kw): + tix.Tk.__init__(self, *args, **kw) + self.TkdndVersion = _require(self) diff --git a/tkinterdnd2/__init__.py b/tkinterdnd2/__init__.py new file mode 100644 index 0000000..17f037d --- /dev/null +++ b/tkinterdnd2/__init__.py @@ -0,0 +1,25 @@ +# dnd actions +PRIVATE = 'private' +NONE = 'none' +ASK = 'ask' +COPY = 'copy' +MOVE = 'move' +LINK = 'link' +REFUSE_DROP = 'refuse_drop' + +# dnd types +DND_TEXT = 'DND_Text' +DND_FILES = 'DND_Files' +DND_ALL = '*' +CF_UNICODETEXT = 'CF_UNICODETEXT' +CF_TEXT = 'CF_TEXT' +CF_HDROP = 'CF_HDROP' + +FileGroupDescriptor = 'FileGroupDescriptor - FileContents'# ?? +FileGroupDescriptorW = 'FileGroupDescriptorW - FileContents'# ?? + +from . import TkinterDnD +from .TkinterDnD import Tk +from .TkinterDnD import TixTk + + diff --git a/tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc b/tkinterdnd2/__pycache__/TkinterDnD.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..517bb22d7c058ad5f76dcbb062659d9bf13d1fe7 GIT binary patch literal 12011 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 L`xn~UV)1_fHnM9O literal 0 HcmV?d00001 diff --git a/tkinterdnd2/__pycache__/__init__.cpython-37.pyc b/tkinterdnd2/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c0bd96de34309211514eb4b6e8c7d7e4fd77b45 GIT binary patch literal 686 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 literal 0 HcmV?d00001 diff --git a/tkinterdnd2/tkdnd/linux64/pkgIndex.tcl b/tkinterdnd2/tkdnd/linux64/pkgIndex.tcl new file mode 100644 index 0000000..9edcc8f --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/pkgIndex.tcl @@ -0,0 +1,10 @@ +# +# Tcl package index file +# +package ifneeded tkdnd 2.9.2 \ + "source \{$dir/tkdnd.tcl\} ; \ + tkdnd::initialise \{$dir\} libtkdnd2.9.2.so tkdnd" + +package ifneeded tkdnd::utils 2.9.2 \ + "source \{$dir/tkdnd_utils.tcl\} ; \ + package provide tkdnd::utils 2.9.2" diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd.tcl new file mode 100644 index 0000000..12d1dd2 --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd.tcl @@ -0,0 +1,469 @@ +# +# tkdnd.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +package require Tk + +namespace eval ::tkdnd { + variable _topw ".drag" + variable _tabops + variable _state + variable _x0 + variable _y0 + variable _platform_namespace + variable _drop_file_temp_dir + variable _auto_update 1 + variable _dx 3 ;# The difference in pixels before a drag is initiated. + variable _dy 3 ;# The difference in pixels before a drag is initiated. + + variable _windowingsystem + + bind TkDND_Drag1 {tkdnd::_begin_drag press 1 %W %s %X %Y %x %y} + bind TkDND_Drag1 {tkdnd::_begin_drag motion 1 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag press 2 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag motion 2 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag press 3 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag motion 3 %W %s %X %Y %x %y} + + # ---------------------------------------------------------------------------- + # Command tkdnd::initialise: Initialise the TkDND package. + # ---------------------------------------------------------------------------- + proc initialise { dir PKG_LIB_FILE PACKAGE_NAME} { + variable _platform_namespace + variable _drop_file_temp_dir + variable _windowingsystem + global env + + switch [tk windowingsystem] { + x11 { + set _windowingsystem x11 + } + win32 - + windows { + set _windowingsystem windows + } + aqua { + set _windowingsystem aqua + } + default { + error "unknown Tk windowing system" + } + } + + ## Get User's home directory: We try to locate the proper path from a set of + ## environmental variables... + foreach var {HOME HOMEPATH USERPROFILE ALLUSERSPROFILE APPDATA} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)]} { + set UserHomeDir $env($var) + break + } + } + } + + ## Should use [tk windowingsystem] instead of tcl platform array: + ## OS X returns "unix," but that's not useful because it has its own + ## windowing system, aqua + ## Under windows we have to also combine HOMEDRIVE & HOMEPATH... + if {![info exists UserHomeDir] && + [string equal $_windowingsystem windows] && + [info exists env(HOMEDRIVE)] && [info exists env(HOMEPATH)]} { + if {[file isdirectory $env(HOMEDRIVE)$env(HOMEPATH)]} { + set UserHomeDir $env(HOMEDRIVE)$env(HOMEPATH) + } + } + ## Have we located the needed path? + if {![info exists UserHomeDir]} { + set UserHomeDir [pwd] + } + set UserHomeDir [file normalize $UserHomeDir] + + ## Try to locate a temporary directory... + foreach var {TKDND_TEMP_DIR TEMP TMP} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)] && [file writable $env($var)]} { + set _drop_file_temp_dir $env($var) + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + foreach _dir [list "$UserHomeDir/Local Settings/Temp" \ + "$UserHomeDir/AppData/Local/Temp" \ + /tmp \ + C:/WINDOWS/Temp C:/Temp C:/tmp \ + D:/WINDOWS/Temp D:/Temp D:/tmp] { + if {[file isdirectory $_dir] && [file writable $_dir]} { + set _drop_file_temp_dir $_dir + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + set _drop_file_temp_dir $UserHomeDir + } + set _drop_file_temp_dir [file native $_drop_file_temp_dir] + + source $dir/tkdnd_generic.tcl + switch $_windowingsystem { + x11 { + source $dir/tkdnd_unix.tcl + set _platform_namespace xdnd + } + win32 - + windows { + source $dir/tkdnd_windows.tcl + set _platform_namespace olednd + } + aqua { + source $dir/tkdnd_macosx.tcl + set _platform_namespace macdnd + } + default { + error "unknown Tk windowing system" + } + } + load $dir/$PKG_LIB_FILE $PACKAGE_NAME + source $dir/tkdnd_compat.tcl + ${_platform_namespace}::initialise + };# initialise + + proc GetDropFileTempDirectory { } { + variable _drop_file_temp_dir + return $_drop_file_temp_dir + } + proc SetDropFileTempDirectory { dir } { + variable _drop_file_temp_dir + set _drop_file_temp_dir $dir + } + +};# namespace ::tkdnd + +# ---------------------------------------------------------------------------- +# Command tkdnd::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::drag_source { mode path { types {} } { event 1 } + { tagprefix TkDND_Drag } } { + set tags [bindtags $path] + set idx [lsearch $tags ${tagprefix}$event] + switch -- $mode { + register { + if { $idx != -1 } { + ## No need to do anything! + # bindtags $path [lreplace $tags $idx $idx ${tagprefix}$event] + } else { + bindtags $path [linsert $tags 1 ${tagprefix}$event] + } + _drag_source_update_types $path $types + } + unregister { + if { $idx != -1 } { + bindtags $path [lreplace $tags $idx $idx] + } + } + } +};# tkdnd::drag_source + +proc ::tkdnd::_drag_source_update_types { path types } { + set types [platform_specific_types $types] + set old_types [bind $path <>] + foreach type $types { + if {[lsearch $old_types $type] < 0} {lappend old_types $type} + } + bind $path <> $old_types +};# ::tkdnd::_drag_source_update_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::drop_target { mode path { types {} } } { + variable _windowingsystem + set types [platform_specific_types $types] + switch -- $mode { + register { + switch $_windowingsystem { + x11 { + _register_types $path [winfo toplevel $path] $types + } + win32 - + windows { + _RegisterDragDrop $path + bind $path {+ tkdnd::_RevokeDragDrop %W} + } + aqua { + macdnd::registerdragwidget [winfo toplevel $path] $types + } + default { + error "unknown Tk windowing system" + } + } + set old_types [bind $path <>] + set new_types {} + foreach type $types { + if {[lsearch -exact $old_types $type] < 0} {lappend new_types $type} + } + if {[llength $new_types]} { + bind $path <> [concat $old_types $new_types] + } + } + unregister { + switch $_windowingsystem { + x11 { + } + win32 - + windows { + _RevokeDragDrop $path + } + aqua { + error todo + } + default { + error "unknown Tk windowing system" + } + } + bind $path <> {} + } + } +};# tkdnd::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_begin_drag { event button source state X Y x y } { + variable _x0 + variable _y0 + variable _state + + switch -- $event { + press { + set _x0 $X + set _y0 $Y + set _state "press" + } + motion { + if { ![info exists _state] } { + # This is just extra protection. There seem to be + # rare cases where the motion comes before the press. + return + } + if { [string equal $_state "press"] } { + variable _dx + variable _dy + if { abs($_x0-$X) > ${_dx} || abs($_y0-$Y) > ${_dy} } { + set _state "done" + _init_drag $button $source $state $X $Y $x $y + } + } + } + } +};# tkdnd::_begin_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_init_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_init_drag { button source state rootX rootY X Y } { + # Call the <> binding. + set cmd [bind $source <>] + # puts "CMD: $cmd" + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y \ + %S $state %e <> %A \{\} %% % \ + %t [bind $source <>]] $cmd] + set code [catch {uplevel \#0 $cmd} info options] + # puts "CODE: $code ---- $info" + switch -exact -- $code { + 0 {} + 3 - 4 { + # FRINK: nocheck + return + } + default { + return -options $options $info + } + } + + set len [llength $info] + if {$len == 3} { + foreach { actions types _data } $info { break } + set types [platform_specific_types $types] + set data [list] + foreach type $types { + lappend data $_data + } + unset _data + } elseif {$len == 2} { + foreach { actions _data } $info { break } + set data [list]; set types [list] + foreach {t d} $_data { + foreach t [platform_specific_types $t] { + lappend types $t; lappend data $d + } + } + unset _data t d + } else { + if {$len == 1 && [string equal [lindex $actions 0] "refuse_drop"]} { + return + } + error "not enough items in the result of the <>\ + event binding. Either 2 or 3 items are expected. The command + executed was: \"$cmd\"\nResult was: \"$info\"" + } + set action refuse_drop + variable _windowingsystem + # puts "Source: \"$source\"" + # puts "Types: \"[join $types {", "}]\"" + # puts "Actions: \"[join $actions {", "}]\"" + # puts "Button: \"$button\"" + # puts "Data: \"[string range $data 0 100]\"" + switch $_windowingsystem { + x11 { + set action [xdnd::_dodragdrop $source $actions $types $data $button] + } + win32 - + windows { + set action [_DoDragDrop $source $actions $types $data $button] + } + aqua { + set action [macdnd::dodragdrop $source $actions $types $data $button] + } + default { + error "unknown Tk windowing system" + } + } + ## Call _end_drag to notify the widget of the result of the drag + ## operation... + _end_drag $button $source {} $action {} $data {} $state $rootX $rootY $X $Y + } +};# tkdnd::_init_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_end_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_end_drag { button source target action type data result + state rootX rootY X Y } { + set rootX 0 + set rootY 0 + # Call the <> binding. + set cmd [bind $source <>] + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y %% % \ + %S $state %e <> %A \{$action\}] $cmd] + set info [uplevel \#0 $cmd] + # if { $info != "" } { + # variable _windowingsystem + # foreach { actions types data } $info { break } + # set types [platform_specific_types $types] + # switch $_windowingsystem { + # x11 { + # error "dragging from Tk widgets not yet supported" + # } + # win32 - + # windows { + # set action [_DoDragDrop $source $actions $types $data $button] + # } + # aqua { + # macdnd::dodragdrop $source $actions $types $data + # } + # default { + # error "unknown Tk windowing system" + # } + # } + # ## Call _end_drag to notify the widget of the result of the drag + # ## operation... + # _end_drag $button $source {} $action {} $data {} $state $rootX $rootY + # } + } +};# tkdnd::_end_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_types $types +}; # tkdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_type $type +}; # tkdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_type $type +}; # tkdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::bytes_to_string +# ---------------------------------------------------------------------------- +proc ::tkdnd::bytes_to_string { bytes } { + set string {} + foreach byte $bytes { + append string [binary format c $byte] + } + return $string +};# tkdnd::bytes_to_string + +# ---------------------------------------------------------------------------- +# Command tkdnd::urn_unquote +# ---------------------------------------------------------------------------- +proc ::tkdnd::urn_unquote {url} { + set result "" + set start 0 + while {[regexp -start $start -indices {%[0-9a-fA-F]{2}} $url match]} { + foreach {first last} $match break + append result [string range $url $start [expr {$first - 1}]] + append result [format %c 0x[string range $url [incr first] $last]] + set start [incr last] + } + append result [string range $url $start end] + return [encoding convertfrom utf-8 $result] +};# tkdnd::urn_unquote diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl new file mode 100644 index 0000000..efc96f7 --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl @@ -0,0 +1,160 @@ +# +# tkdnd_compat.tcl -- +# +# This file implements some utility procedures, to support older versions +# of the TkDND package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval compat { + +};# namespace compat + +# ---------------------------------------------------------------------------- +# Command ::dnd +# ---------------------------------------------------------------------------- +proc ::dnd {method window args} { + switch $method { + bindtarget { + switch [llength $args] { + 0 {return [tkdnd::compat::bindtarget0 $window]} + 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2] [lindex $args 3]]} + } + } + cleartarget { + return [tkdnd::compat::cleartarget $window] + } + bindsource { + switch [llength $args] { + 0 {return [tkdnd::compat::bindsource0 $window]} + 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + } + } + clearsource { + return [tkdnd::compat::clearsource $window] + } + drag { + return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] + } + } + error "invalid number of arguments!" +};# ::dnd + +# ---------------------------------------------------------------------------- +# Command compat::bindtarget +# ---------------------------------------------------------------------------- +proc compat::bindtarget0 {window} { + return [bind $window <>] +};# compat::bindtarget0 + +proc compat::bindtarget1 {window type} { + return [bindtarget2 $window $type ] +};# compat::bindtarget1 + +proc compat::bindtarget2 {window type event} { + switch $event { + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + } +};# compat::bindtarget2 + +proc compat::bindtarget3 {window type event script} { + set type [normalise_type $type] + ::tkdnd::drop_target register $window [list $type] + switch $event { + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + } +};# compat::bindtarget3 + +proc compat::bindtarget4 {window type event script priority} { + return [bindtarget3 $window $type $event $script] +};# compat::bindtarget4 + +proc compat::normalise_type { type } { + switch $type { + text/plain - + {text/plain;charset=UTF-8} - + Text {return DND_Text} + text/uri-list - + Files {return DND_Files} + default {return $type} + } +};# compat::normalise_type + +# ---------------------------------------------------------------------------- +# Command compat::bindsource +# ---------------------------------------------------------------------------- +proc compat::bindsource0 {window} { + return [bind $window <>] +};# compat::bindsource0 + +proc compat::bindsource1 {window type} { + return [bindsource2 $window $type ] +};# compat::bindsource1 + +proc compat::bindsource2 {window type script} { + set type [normalise_type $type] + ::tkdnd::drag_source register $window $type + bind $window <> "list {copy} {%t} \[$script\]" +};# compat::bindsource2 + +proc compat::bindsource3 {window type script priority} { + return [bindsource2 $window $type $script] +};# compat::bindsource3 + +# ---------------------------------------------------------------------------- +# Command compat::cleartarget +# ---------------------------------------------------------------------------- +proc compat::cleartarget {window} { +};# compat::cleartarget + +# ---------------------------------------------------------------------------- +# Command compat::clearsource +# ---------------------------------------------------------------------------- +proc compat::clearsource {window} { +};# compat::clearsource diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_generic.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_generic.tcl new file mode 100644 index 0000000..698b464 --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_generic.tcl @@ -0,0 +1,520 @@ +# +# tkdnd_generic.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval generic { + variable _types {} + variable _typelist {} + variable _codelist {} + variable _actionlist {} + variable _pressedkeys {} + variable _action {} + variable _common_drag_source_types {} + variable _common_drop_target_types {} + variable _drag_source {} + variable _drop_target {} + + variable _last_mouse_root_x 0 + variable _last_mouse_root_y 0 + + variable _tkdnd2platform + variable _platform2tkdnd + + proc debug {msg} { + puts $msg + };# debug + + proc initialise { } { + };# initialise + + proc initialise_platform_to_tkdnd_types { types } { + variable _platform2tkdnd + variable _tkdnd2platform + set _platform2tkdnd [dict create {*}$types] + set _tkdnd2platform [dict create] + foreach type [dict keys $_platform2tkdnd] { + dict lappend _tkdnd2platform [dict get $_platform2tkdnd $type] $type + } + };# initialise_platform_to_tkdnd_types + + proc initialise_tkdnd_to_platform_types { types } { + variable _tkdnd2platform + set _tkdnd2platform [dict create {*}$types] + };# initialise_tkdnd_to_platform_types + +};# namespace generic + +# ---------------------------------------------------------------------------- +# Command generic::HandleEnter +# ---------------------------------------------------------------------------- +proc generic::HandleEnter { drop_target drag_source typelist codelist + actionlist pressedkeys } { + variable _typelist; set _typelist $typelist + variable _pressedkeys; set _pressedkeys $pressedkeys + variable _action; set _action refuse_drop + variable _common_drag_source_types; set _common_drag_source_types {} + variable _common_drop_target_types; set _common_drop_target_types {} + variable _actionlist + variable _drag_source; set _drag_source $drag_source + variable _drop_target; set _drop_target {} + variable _actionlist; set _actionlist $actionlist + variable _codelist set _codelist $codelist + + variable _last_mouse_root_x; set _last_mouse_root_x 0 + variable _last_mouse_root_y; set _last_mouse_root_y 0 + # debug "\n===============================================================" + # debug "generic::HandleEnter: drop_target=$drop_target,\ + # drag_source=$drag_source,\ + # typelist=$typelist" + # debug "generic::HandleEnter: ACTION: default" + return default +};# generic::HandleEnter + +# ---------------------------------------------------------------------------- +# Command generic::HandlePosition +# ---------------------------------------------------------------------------- +proc generic::HandlePosition { drop_target drag_source pressedkeys + rootX rootY { time 0 } } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + # debug "generic::HandlePosition: drop_target=$drop_target,\ + # _drop_target=$_drop_target, rootX=$rootX, rootY=$rootY" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + # debug "generic::HandlePosition: no or empty _drag_source:\ + # return refuse_drop" + return refuse_drop + } + + if {$drag_source ne "" && $drag_source ne $_drag_source} { + debug "generic position event from unexpected source: $_drag_source\ + != $drag_source" + return refuse_drop + } + + set _pressedkeys $pressedkeys + + ## Does the new drop target support any of our new types? + # foreach {common_drag_source_types common_drop_target_types} \ + # [GetWindowCommonTypes $drop_target $_typelist] {break} + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [FindWindowWithCommonTypes $drop_target $_typelist] {break} + set data [GetDroppedData $time] + + # debug "\t($_drop_target) -> ($drop_target)" + if {$drop_target != $_drop_target} { + if {[string length $_drop_target]} { + ## Call the <> event. + # debug "\t<> on $_drop_target" + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + uplevel \#0 $cmd + } + } + set _drop_target $drop_target + set _action refuse_drop + + if {[llength $common_drag_source_types]} { + set _action [lindex $_actionlist 0] + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + ## Drop target supports at least one type. Send a <>. + # puts "<> -> $drop_target" + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + focus $drop_target + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + } + } + } + + set _drop_target {} + if {[llength $common_drag_source_types]} { + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + set _drop_target $drop_target + ## Drop target supports at least one type. Send a <>. + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + # Return values: copy, move, link, ask, private, refuse_drop, default + # debug "generic::HandlePosition: ACTION: $_action" + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandlePosition + +# ---------------------------------------------------------------------------- +# Command generic::HandleLeave +# ---------------------------------------------------------------------------- +proc generic::HandleLeave { } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + if {![info exists _drop_target]} {set _drop_target {}} + # debug "generic::HandleLeave: _drop_target=$_drop_target" + if {[info exists _drop_target] && [string length $_drop_target]} { + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target \ + %X $_last_mouse_root_x %Y $_last_mouse_root_y \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + foreach var {_types _typelist _actionlist _pressedkeys _action + _common_drag_source_types _common_drop_target_types + _drag_source _drop_target} { + set $var {} + } +};# generic::HandleLeave + +# ---------------------------------------------------------------------------- +# Command generic::HandleDrop +# ---------------------------------------------------------------------------- +proc generic::HandleDrop {drop_target drag_source pressedkeys rootX rootY time } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + set _pressedkeys $pressedkeys + + # puts "generic::HandleDrop: $time" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + return refuse_drop + } + if {![info exists _drop_target] && ![string length $_drop_target]} { + return refuse_drop + } + if {![llength $_common_drag_source_types]} {return refuse_drop} + ## Get the dropped data. + set data [GetDroppedData $time] + ## Try to select the most specific <> event. + foreach type [concat $_common_drag_source_types $_common_drop_target_types] { + set type [platform_independent_type $type] + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action + } + } + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandleDrop + +# ---------------------------------------------------------------------------- +# Command generic::GetWindowCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetWindowCommonTypes { win typelist } { + set types [bind $win <>] + # debug ">> Accepted types: $win $_types" + set common_drag_source_types {} + set common_drop_target_types {} + if {[llength $types]} { + ## Examine the drop target types, to find at least one match with the drag + ## source types... + set supported_types [supported_types $typelist] + foreach type $types { + foreach matched [lsearch -glob -all -inline $supported_types $type] { + ## Drop target supports this type. + lappend common_drag_source_types $matched + lappend common_drop_target_types $type + } + } + } + list $common_drag_source_types $common_drop_target_types +};# generic::GetWindowCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::FindWindowWithCommonTypes +# ---------------------------------------------------------------------------- +proc generic::FindWindowWithCommonTypes { win typelist } { + set toplevel [winfo toplevel $win] + while {![string equal $win $toplevel]} { + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + set win [winfo parent $win] + } + ## We have reached the toplevel, which may be also a target (SF Bug #30) + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + return { {} {} {} } +};# generic::FindWindowWithCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDroppedData +# ---------------------------------------------------------------------------- +proc generic::GetDroppedData { time } { + variable _dropped_data + return $_dropped_data +};# generic::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::SetDroppedData +# ---------------------------------------------------------------------------- +proc generic::SetDroppedData { data } { + variable _dropped_data + set _dropped_data $data +};# generic::SetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSource +# ---------------------------------------------------------------------------- +proc generic::GetDragSource { } { + variable _drag_source + return $_drag_source +};# generic::GetDragSource + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTarget +# ---------------------------------------------------------------------------- +proc generic::GetDropTarget { } { + variable _drop_target + return $_drop_target +};# generic::GetDropTarget + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDragSourceCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTargetCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDropTargetCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDropTargetCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_types +# ---------------------------------------------------------------------------- +proc generic::platform_specific_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_specific_type $type]] + } + return $new_types +}; # generic::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_type +# ---------------------------------------------------------------------------- +proc generic::platform_specific_type { type } { + variable _tkdnd2platform + if {[dict exists $_tkdnd2platform $type]} { + return [dict get $_tkdnd2platform $type] + } + list $type +}; # generic::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_independent_type $type]] + } + return $new_types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_independent_type +# ---------------------------------------------------------------------------- +proc generic::platform_independent_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return [dict get $_platform2tkdnd $type] + } + return $type +}; # generic::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command generic::supported_types +# ---------------------------------------------------------------------------- +proc generic::supported_types { types } { + set new_types {} + foreach type $types { + if {[supported_type $type]} {lappend new_types $type} + } + return $new_types +}; # generic::supported_types + +# ---------------------------------------------------------------------------- +# Command generic::supported_type +# ---------------------------------------------------------------------------- +proc generic::supported_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return 1 + } + return 0 +}; # generic::supported_type diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl new file mode 100644 index 0000000..307f6da --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl @@ -0,0 +1,144 @@ +# +# tkdnd_macosx.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. + +# This software is copyrighted by: +# Georgios Petasis, Athens, Greece. +# e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr +# +# Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, +# kw@codebykevin.com +# +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +#basic API for Mac Drag and Drop + +#two data types supported: strings and file paths + +#two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget + +#data retrieval mechanism: text or file paths are copied from drag clipboard to system clipboard and retrieved via [clipboard get]; array of file paths is converted to single tab-separated string, can be split into Tcl list + +if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { + error {TkAqua Cocoa required} +} + +namespace eval macdnd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + NSPasteboardTypeString DND_Text \ + NSFilenamesPboardType DND_Files \ + NSPasteboardTypeHTML DND_HTML \ + ] + };# initialise + +};# namespace macdnd + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleEnter +# ---------------------------------------------------------------------------- +proc macdnd::HandleEnter { path drag_source typelist { data {} } } { + variable _pressedkeys + variable _actionlist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# macdnd::HandleEnter + +# ---------------------------------------------------------------------------- +# Command macdnd::HandlePosition +# ---------------------------------------------------------------------------- +proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { + variable _pressedkeys + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# macdnd::HandlePosition + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleLeave +# ---------------------------------------------------------------------------- +proc macdnd::HandleLeave { args } { + ::tkdnd::generic::HandleLeave +};# macdnd::HandleLeave + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleDrop +# ---------------------------------------------------------------------------- +proc macdnd::HandleDrop { drop_target data args } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y 0 +};# macdnd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command macdnd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc macdnd::GetDragSourceCommonTypes { } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# macdnd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # macdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # macdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # macdnd::platform_independent_type diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_unix.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_unix.tcl new file mode 100644 index 0000000..56d17c4 --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_unix.tcl @@ -0,0 +1,810 @@ +# +# tkdnd_unix.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval xdnd { + variable _dragging 0 + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + text/plain\;charset=utf-8 DND_Text \ + UTF8_STRING DND_Text \ + text/plain DND_Text \ + STRING DND_Text \ + TEXT DND_Text \ + COMPOUND_TEXT DND_Text \ + text/uri-list DND_Files \ + text/html\;charset=utf-8 DND_HTML \ + text/html DND_HTML \ + application/x-color DND_Color \ + ] + };# initialise + +};# namespace xdnd + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndEnter { path drag_source typelist time { data {} } } { + variable _pressedkeys + variable _actionlist + variable _typelist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + set _typelist $typelist + # puts "xdnd::HandleXdndEnter: $time" + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# xdnd::HandleXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndPosition { drop_target rootX rootY time {drag_source {}} } { + variable _pressedkeys + variable _typelist + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + # puts "xdnd::HandleXdndPosition: $time" + ## Get the dropped data... + catch { + ::tkdnd::generic::SetDroppedData [GetPositionData $drop_target $_typelist $time] + } + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# xdnd::HandleXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndLeave { } { + ::tkdnd::generic::HandleLeave +};# xdnd::HandleXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndDrop { time } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData [GetDroppedData \ + [::tkdnd::generic::GetDragSource] [::tkdnd::generic::GetDropTarget] \ + [::tkdnd::generic::GetDragSourceCommonTypes] $time] + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y $time +};# xdnd::HandleXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::GetPositionData +# ---------------------------------------------------------------------------- +proc xdnd::GetPositionData { drop_target typelist time } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + GetDroppedData [::tkdnd::generic::GetDragSource] $drop_target \ + $common_drag_source_types $time +};# xdnd::GetPositionData + +# ---------------------------------------------------------------------------- +# Command xdnd::GetDroppedData +# ---------------------------------------------------------------------------- +proc xdnd::GetDroppedData { _drag_source _drop_target _common_drag_source_types time } { + if {![llength $_common_drag_source_types]} { + error "no common data types between the drag source and drop target widgets" + } + ## Is drag source in this application? + if {[catch {winfo pathname -displayof $_drop_target $_drag_source} p]} { + set _use_tk_selection 0 + } else { + set _use_tk_selection 1 + } + foreach type $_common_drag_source_types { + # puts "TYPE: $type ($_drop_target)" + # _get_selection $_drop_target $time $type + if {$_use_tk_selection} { + if {![catch { + selection get -displayof $_drop_target -selection XdndSelection \ + -type $type + } result options]} { + return [normalise_data $type $result] + } + } else { + # puts "_selection_get -displayof $_drop_target -selection XdndSelection \ + # -type $type -time $time" + #after 100 [list focus -force $_drop_target] + #after 50 [list raise [winfo toplevel $_drop_target]] + if {![catch { + _selection_get -displayof $_drop_target -selection XdndSelection \ + -type $type -time $time + } result options]} { + return [normalise_data $type $result] + } + } + } + return -options $options $result +};# xdnd::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # xdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # xdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # xdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command xdnd::_normalise_data +# ---------------------------------------------------------------------------- +proc xdnd::normalise_data { type data } { + # Tk knows how to interpret the following types: + # STRING, TEXT, COMPOUND_TEXT + # UTF8_STRING + # Else, it returns a list of 8 or 32 bit numbers... + switch -glob $type { + STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data} + text/html { + if {[catch { + encoding convertfrom unicode $data + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/html\;charset=utf-8 - + text/plain\;charset=utf-8 - + text/plain { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/uri-list* { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + ## Get rid of \r\n + set string [string trim [string map {\r\n \n} $string]] + set files {} + foreach quoted_file [split $string] { + set file [tkdnd::urn_unquote $quoted_file] + switch -glob $file { + \#* {} + file://* {lappend files [string range $file 7 end]} + ftp://* - + https://* - + http://* {lappend files $quoted_file} + default {lappend files $file} + } + } + return $files + } + application/x-color { + return $data + } + text/x-moz-url - + application/q-iconlist - + default {return $data} + } +}; # xdnd::normalise_data + +############################################################################# +## +## XDND drag implementation +## +############################################################################# + +# ---------------------------------------------------------------------------- +# Command xdnd::_selection_ownership_lost +# ---------------------------------------------------------------------------- +proc xdnd::_selection_ownership_lost {} { + variable _dragging + set _dragging 0 +};# _selection_ownership_lost + +# ---------------------------------------------------------------------------- +# Command xdnd::_dodragdrop +# ---------------------------------------------------------------------------- +proc xdnd::_dodragdrop { source actions types data button } { + variable _dragging + + # puts "xdnd::_dodragdrop: source: $source, actions: $actions, types: $types,\ + # data: \"$data\", button: $button" + if {$_dragging} { + ## We are in the middle of another drag operation... + error "another drag operation in progress" + } + + variable _dodragdrop_drag_source $source + variable _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_proxy 0 + variable _dodragdrop_actions $actions + variable _dodragdrop_action_descriptions $actions + variable _dodragdrop_actions_len [llength $actions] + variable _dodragdrop_types $types + variable _dodragdrop_types_len [llength $types] + variable _dodragdrop_data $data + variable _dodragdrop_transfer_data {} + variable _dodragdrop_button $button + variable _dodragdrop_time 0 + variable _dodragdrop_default_action refuse_drop + variable _dodragdrop_waiting_status 0 + variable _dodragdrop_drop_target_accepts_drop 0 + variable _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_current_cursor $_dodragdrop_default_action + variable _dodragdrop_drop_occured 0 + variable _dodragdrop_selection_requestor 0 + + ## + ## If we have more than 3 types, the property XdndTypeList must be set on + ## the drag source widget... + ## + if {$_dodragdrop_types_len > 3} { + _announce_type_list $_dodragdrop_drag_source $_dodragdrop_types + } + + ## + ## Announce the actions & their descriptions on the XdndActionList & + ## XdndActionDescription properties... + ## + _announce_action_list $_dodragdrop_drag_source $_dodragdrop_actions \ + $_dodragdrop_action_descriptions + + ## + ## Arrange selection handlers for our drag source, and all the supported types + ## + registerSelectionHandler $source $types + + ## + ## Step 1: When a drag begins, the source takes ownership of XdndSelection. + ## + selection own -command ::tkdnd::xdnd::_selection_ownership_lost \ + -selection XdndSelection $source + set _dragging 1 + + ## Grab the mouse pointer... + _grab_pointer $source $_dodragdrop_default_action + + ## Register our generic event handler... + # The generic event callback will report events by modifying variable + # ::xdnd::_dodragdrop_event: a dict with event information will be set as + # the value of the variable... + _register_generic_event_handler + + ## Set a timeout for debugging purposes... + # after 60000 {set ::tkdnd::xdnd::_dragging 0} + + tkwait variable ::tkdnd::xdnd::_dragging + _SendXdndLeave + + set _dragging 0 + _ungrab_pointer $source + _unregister_generic_event_handler + catch {selection clear -selection XdndSelection} + unregisterSelectionHandler $source $types + return $_dodragdrop_drop_target_accepts_action +};# xdnd::_dodragdrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_process_drag_events +# ---------------------------------------------------------------------------- +proc xdnd::_process_drag_events {event} { + # The return value from proc is normally 0. A non-zero return value indicates + # that the event is not to be handled further; that is, proc has done all + # processing that is to be allowed for the event + variable _dragging + if {!$_dragging} {return 0} + # puts $event + + variable _dodragdrop_time + set time [dict get $event time] + set type [dict get $event type] + if {$time < $_dodragdrop_time && ![string equal $type SelectionRequest]} { + return 0 + } + set _dodragdrop_time $time + + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_default_action + switch $type { + MotionNotify { + set rootx [dict get $event x_root] + set rooty [dict get $event y_root] + set window [_find_drop_target_window $_dodragdrop_drag_source \ + $rootx $rooty] + if {[string length $window]} { + ## Examine the modifiers to suggest an action... + set _dodragdrop_default_action [_default_action $event] + ## Is it a Tk widget? + # set path [winfo containing $rootx $rooty] + # puts "Window under mouse: $window ($path)" + if {$_dodragdrop_drop_target != $window} { + ## Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + ## Is there a proxy? If not, _find_drop_target_proxy returns the + ## target window, so we always get a valid "proxy". + set proxy [_find_drop_target_proxy $_dodragdrop_drag_source $window] + ## Send XdndEnter to $window + _SendXdndEnter $window $proxy + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } else { + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } + } else { + ## No window under the mouse. Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + } + } + ButtonPress { + } + ButtonRelease { + variable _dodragdrop_button + set button [dict get $event button] + if {$button == $_dodragdrop_button} { + ## The button that initiated the drag was released. Trigger drop... + _SendXdndDrop + } + return 1 + } + KeyPress { + } + KeyRelease { + set keysym [dict get $event keysym] + switch $keysym { + Escape { + ## The user has pressed escape. Abort... + if {$_dragging} {set _dragging 0} + } + } + } + SelectionRequest { + variable _dodragdrop_selection_requestor + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + set _dodragdrop_selection_requestor [dict get $event requestor] + set _dodragdrop_selection_property [dict get $event property] + set _dodragdrop_selection_selection [dict get $event selection] + set _dodragdrop_selection_target [dict get $event target] + set _dodragdrop_selection_time $time + return 0 + } + default { + return 0 + } + } + return 0 +};# _process_drag_events + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndEnter {window proxy} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_types + variable _dodragdrop_waiting_status + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_target > 0} _SendXdndLeave + if {$_dodragdrop_drop_occured} return + set _dodragdrop_drop_target $window + set _dodragdrop_drop_target_proxy $proxy + set _dodragdrop_waiting_status 0 + if {$_dodragdrop_drop_target < 1} return + # puts "XdndEnter: $_dodragdrop_drop_target $_dodragdrop_drop_target_proxy" + _send_XdndEnter $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $_dodragdrop_types +};# xdnd::_SendXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndPosition {rootx rooty action} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_waiting_status + ## Arrange a new XdndPosition, to be send periodically... + variable _dodragdrop_xdnd_position_heartbeat + catch {after cancel $_dodragdrop_xdnd_position_heartbeat} + set _dodragdrop_xdnd_position_heartbeat [after 200 \ + [list ::tkdnd::xdnd::_SendXdndPosition $rootx $rooty $action]] + if {$_dodragdrop_waiting_status} {return} + # puts "XdndPosition: $_dodragdrop_drop_target $rootx $rooty $action" + _send_XdndPosition $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $rootx $rooty $action + set _dodragdrop_waiting_status 1 +};# xdnd::_SendXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndStatus +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndStatus {event} { + variable _dodragdrop_drop_target + variable _dodragdrop_waiting_status + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_waiting_status 0 + foreach key {target accept want_position action x y w h} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor + # puts "XdndStatus: $event" +};# xdnd::_HandleXdndStatus + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndFinished +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndFinished {event} { + variable _dodragdrop_xdnd_finished_event_after_id + catch {after cancel $_dodragdrop_xdnd_finished_event_after_id} + set _dodragdrop_xdnd_finished_event_after_id {} + variable _dodragdrop_drop_target + set _dodragdrop_drop_target 0 + variable _dragging + if {$_dragging} {set _dragging 0} + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + if {[dict size $event]} { + foreach key {target accept action} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + } else { + set _dodragdrop_drop_target_accepts_drop 0 + } + if {!$_dodragdrop_drop_target_accepts_drop} { + set _dodragdrop_drop_target_accepts_action refuse_drop + } + # puts "XdndFinished: $event" +};# xdnd::_HandleXdndFinished + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndLeave {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_target_proxy + # puts "XdndLeave: $_dodragdrop_drop_target" + _send_XdndLeave $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy + set _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_drop_target_accepts_drop 0 + set _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor +};# xdnd::_SendXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndDrop {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} { + ## The mouse has been released over a widget that does not accept drops. + _HandleXdndFinished {} + return + } + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} {return} + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + set _dodragdrop_drop_occured 1 + _update_cursor clock + + if {!$_dodragdrop_drop_target_accepts_drop} { + _SendXdndLeave + _HandleXdndFinished {} + return + } + # puts "XdndDrop: $_dodragdrop_drop_target" + variable _dodragdrop_drop_timestamp + set _dodragdrop_drop_timestamp [_send_XdndDrop \ + $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy] + set _dodragdrop_drop_target 0 + # puts "XdndDrop: $_dodragdrop_drop_target" + ## Arrange a timeout for receiving XdndFinished... + variable _dodragdrop_xdnd_finished_event_after_id + set _dodragdrop_xdnd_finished_event_after_id \ + [after 10000 [list ::tkdnd::xdnd::_HandleXdndFinished {}]] +};# xdnd::_SendXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_update_cursor +# ---------------------------------------------------------------------------- +proc xdnd::_update_cursor { {cursor {}}} { + # puts "_update_cursor $cursor" + variable _dodragdrop_current_cursor + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + if {![string length $cursor]} { + set cursor refuse_drop + if {$_dodragdrop_drop_target_accepts_drop} { + set cursor $_dodragdrop_drop_target_accepts_action + } + } + if {![string equal $cursor $_dodragdrop_current_cursor]} { + _set_pointer_cursor $_dodragdrop_drag_source $cursor + set _dodragdrop_current_cursor $cursor + } +};# xdnd::_update_cursor + +# ---------------------------------------------------------------------------- +# Command xdnd::_default_action +# ---------------------------------------------------------------------------- +proc xdnd::_default_action {event} { + variable _dodragdrop_actions + variable _dodragdrop_actions_len + if {$_dodragdrop_actions_len == 1} {return [lindex $_dodragdrop_actions 0]} + + set alt [dict get $event Alt] + set shift [dict get $event Shift] + set control [dict get $event Control] + + if {$shift && $control && [lsearch $_dodragdrop_actions link] != -1} { + return link + } elseif {$control && [lsearch $_dodragdrop_actions copy] != -1} { + return copy + } elseif {$shift && [lsearch $_dodragdrop_actions move] != -1} { + return move + } elseif {$alt && [lsearch $_dodragdrop_actions link] != -1} { + return link + } + return default +};# xdnd::_default_action + +# ---------------------------------------------------------------------------- +# Command xdnd::getFormatForType +# ---------------------------------------------------------------------------- +proc xdnd::getFormatForType {type} { + switch -glob [string tolower $type] { + text/plain\;charset=utf-8 - + text/html\;charset=utf-8 - + utf8_string {set format UTF8_STRING} + text/html - + text/plain - + string - + text - + compound_text {set format STRING} + text/uri-list* {set format UTF8_STRING} + application/x-color {set format $type} + default {set format $type} + } + return $format +};# xdnd::getFormatForType + +# ---------------------------------------------------------------------------- +# Command xdnd::registerSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::registerSelectionHandler {source types} { + foreach type $types { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source [list ::tkdnd::xdnd::_SendData $type] + } +};# xdnd::registerSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::unregisterSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::unregisterSelectionHandler {source types} { + foreach type $types { + catch { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source {} + } + } +};# xdnd::unregisterSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::_convert_to_unsigned +# ---------------------------------------------------------------------------- +proc xdnd::_convert_to_unsigned {data format} { + switch $format { + 8 { set mask 0xff } + 16 { set mask 0xffff } + 32 { set mask 0xffffff } + default {error "unsupported format $format"} + } + ## Convert signed integer into unsigned... + set d [list] + foreach num $data { + lappend d [expr { $num & $mask }] + } + return $d +};# xdnd::_convert_to_unsigned + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendData +# ---------------------------------------------------------------------------- +proc xdnd::_SendData {type offset bytes args} { + variable _dodragdrop_drag_source + variable _dodragdrop_types + variable _dodragdrop_data + variable _dodragdrop_transfer_data + + ## The variable _dodragdrop_data contains a list of data, one for each + ## type in the _dodragdrop_types variable. We have to search types, and find + ## the corresponding entry in the _dodragdrop_data list. + set index [lsearch $_dodragdrop_types $type] + if {$index < 0} { + error "unable to locate data suitable for type \"$type\"" + } + set typed_data [lindex $_dodragdrop_data $index] + set format 8 + if {$offset == 0} { + ## Prepare the data to be transferred... + switch -glob $type { + text/plain* - UTF8_STRING - STRING - TEXT - COMPOUND_TEXT { + binary scan [encoding convertto utf-8 $typed_data] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + text/uri-list* { + set files [list] + foreach file $typed_data { + switch -glob $file { + *://* {lappend files $file} + default {lappend files file://$file} + } + } + binary scan [encoding convertto utf-8 "[join $files \r\n]\r\n"] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + application/x-color { + set format 16 + ## Try to understand the provided data: we accept a standard Tk colour, + ## or a list of 3 values (red green blue) or a list of 4 values + ## (red green blue opacity). + switch [llength $typed_data] { + 1 { set color [winfo rgb $_dodragdrop_drag_source $typed_data] + lappend color 65535 } + 3 { set color $typed_data; lappend color 65535 } + 4 { set color $typed_data } + default {error "unknown color data: \"$typed_data\""} + } + ## Convert the 4 elements into 16 bit values... + set _dodragdrop_transfer_data [list] + foreach c $color { + lappend _dodragdrop_transfer_data [format 0x%04X $c] + } + } + default { + set format 32 + binary scan $typed_data c* _dodragdrop_transfer_data + } + } + } + + ## + ## Data has been split into bytes. Count the bytes requested, and return them + ## + set data [lrange $_dodragdrop_transfer_data $offset [expr {$offset+$bytes-1}]] + switch $format { + 8 { + set data [encoding convertfrom utf-8 [binary format c* $data]] + } + 16 { + variable _dodragdrop_selection_requestor + if {$_dodragdrop_selection_requestor} { + ## Tk selection cannot process this format (only 8 & 32 supported). + ## Call our XChangeProperty... + set numItems [llength $data] + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + XChangeProperty $_dodragdrop_drag_source \ + $_dodragdrop_selection_requestor \ + $_dodragdrop_selection_property \ + $_dodragdrop_selection_target \ + $format \ + $_dodragdrop_selection_time \ + $data $numItems + return -code break + } + } + 32 { + } + default { + error "unsupported format $format" + } + } + # puts "SendData: $type $offset $bytes $args ($typed_data)" + # puts " $data" + return $data +};# xdnd::_SendData diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_utils.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_utils.tcl new file mode 100644 index 0000000..ee961dd --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_utils.tcl @@ -0,0 +1,252 @@ +# +# tkdnd_utils.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +package require tkdnd +namespace eval ::tkdnd { + namespace eval utils { + };# namespace ::tkdnd::utils + namespace eval text { + variable _drag_tag tkdnd::drag::selection::tag + variable _state {} + variable _drag_source_widget {} + variable _drop_target_widget {} + variable _now_dragging 0 + };# namespace ::tkdnd::text +};# namespace ::tkdnd + +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag clear 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag motion 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_TextAutoScan %W %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag reset 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag clear 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag motion 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag reset 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag clear 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag motion 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag reset 3 %W %s %X %Y %x %y} + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drag_source { mode path { types DND_Text } { event 1 } { tagprefix TkDND_Drag_Text } { tag sel } } { + switch -exact -- $mode { + register { + $path tag bind $tag \ + "tkdnd::text::_begin_drag press ${event} %W %s %X %Y %x %y" + ## Set a binding to the widget, to put selection as data... + bind $path <> "::tkdnd::text::DragInitCmd $path {%t} $tag" + ## Set a binding to the widget, to remove selection if action is move... + bind $path <> "::tkdnd::text::DragEndCmd $path %A $tag" + } + unregister { + $path tag bind $tag {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drag_source $mode $path $types $event $tagprefix +};# ::tkdnd::text::drag_source + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drop_target { mode path { types DND_Text } } { + switch -exact -- $mode { + register { + bind $path <> "::tkdnd::text::DropPosition $path %X %Y %A %a %m" + bind $path <> "::tkdnd::text::Drop $path %D %X %Y %A %a %m" + } + unregister { + bind $path <> {} + bind $path <> {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drop_target $mode $path $types +};# ::tkdnd::text::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragInitCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragInitCmd { path { types DND_Text } { tag sel } { actions { copy move } } } { + ## Save the selection indices... + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget $path + set _drop_target_widget {} + _save_selection $path $tag + list $actions $types [$path get $tag.first $tag.last] +};# ::tkdnd::text::DragInitCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragEndCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragEndCmd { path action { tag sel } } { + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget {} + set _drop_target_widget {} + _restore_selection $path $tag + switch -exact -- $action { + move { + ## Delete the original selected text... + variable _selection_first + variable _selection_last + $path delete $_selection_first $_selection_last + } + } +};# ::tkdnd::text::DragEndCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DropPosition +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DropPosition { path X Y action actions keys} { + variable _drag_source_widget + variable _drop_target_widget + set _drop_target_widget $path + ## This check is primitive, a more accurate one is needed! + if {$path eq $_drag_source_widget} { + ## This is a drag within the same widget! Set action to move... + if {"move" in $actions} {set action move} + } + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y; update + return $action +};# ::tkdnd::text::DropPosition + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::Drop +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::Drop { path data X Y action actions keys } { + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y + $path insert [$path index insert] $data + return $action +};# ::tkdnd::text::Drop + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_save_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_save_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + variable _selection_tag $tag + set _selection_first [$path index $tag.first] + set _selection_last [$path index $tag.last] + $path tag add $_drag_tag $_selection_first $_selection_last + $path tag configure $_drag_tag \ + -background [$path tag cget $tag -background] \ + -foreground [$path tag cget $tag -foreground] +};# tkdnd::text::_save_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_restore_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_restore_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + $path tag delete $_drag_tag + $path tag remove $tag 0.0 end + #$path tag add $tag $_selection_first $_selection_last +};# tkdnd::text::_restore_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_begin_drag { event button source state X Y x y } { + variable _drop_target_widget + variable _state + # puts "::tkdnd::text::_begin_drag $event $button $source $state $X $Y $x $y" + + switch -exact -- $event { + clear { + switch -exact -- $_state { + press { + ## Do not execute other bindings, as they will erase selection... + return -code break + } + } + set _state clear + } + motion { + variable _now_dragging + if {$_now_dragging} {return -code break} + if { [string equal $_state "press"] } { + variable _x0; variable _y0 + if { abs($_x0-$X) > ${::tkdnd::_dx} || abs($_y0-$Y) > ${::tkdnd::_dy} } { + set _state "done" + set _drop_target_widget {} + set _now_dragging 1 + set code [catch { + ::tkdnd::_init_drag $button $source $state $X $Y $x $y + } info options] + set _drop_target_widget {} + set _now_dragging 0 + if {$code != 0} { + ## Something strange occurred... + return -options $options $info + } + } + return -code break + } + set _state clear + } + press { + variable _x0; variable _y0 + set _x0 $X + set _y0 $Y + set _state "press" + } + reset { + set _state {} + } + } + if {$source eq $_drop_target_widget} {return -code break} + return -code continue +};# tkdnd::text::_begin_drag + +proc tkdnd::text::_TextAutoScan {w x y} { + variable _now_dragging + if {$_now_dragging} {return -code break} + return -code continue +};# tkdnd::text::_TextAutoScan diff --git a/tkinterdnd2/tkdnd/linux64/tkdnd_windows.tcl b/tkinterdnd2/tkdnd/linux64/tkdnd_windows.tcl new file mode 100644 index 0000000..a1d01f3 --- /dev/null +++ b/tkinterdnd2/tkdnd/linux64/tkdnd_windows.tcl @@ -0,0 +1,167 @@ +# +# tkdnd_windows.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval olednd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + CF_UNICODETEXT DND_Text \ + CF_TEXT DND_Text \ + CF_HDROP DND_Files \ + UniformResourceLocator DND_URL \ + CF_HTML DND_HTML \ + {HTML Format} DND_HTML \ + CF_RTF DND_RTF \ + CF_RTFTEXT DND_RTF \ + {Rich Text Format} DND_RTF \ + ] + # FileGroupDescriptorW DND_Files \ + # FileGroupDescriptor DND_Files \ + + ## Mapping from TkDND types to platform types... + ::tkdnd::generic::initialise_tkdnd_to_platform_types [list \ + DND_Text {CF_UNICODETEXT CF_TEXT} \ + DND_Files {CF_HDROP} \ + DND_URL {UniformResourceLocator UniformResourceLocatorW} \ + DND_HTML {CF_HTML {HTML Format}} \ + DND_RTF {CF_RTF CF_RTFTEXT {Rich Text Format}} \ + ] + };# initialise + +};# namespace olednd + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragEnter +# ---------------------------------------------------------------------------- +proc olednd::HandleDragEnter { drop_target typelist actionlist pressedkeys + rootX rootY codelist { data {} } } { + ::tkdnd::generic::SetDroppedData $data + focus $drop_target + ::tkdnd::generic::HandleEnter $drop_target 0 $typelist \ + $codelist $actionlist $pressedkeys + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragEnter + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragOver +# ---------------------------------------------------------------------------- +proc olednd::HandleDragOver { drop_target pressedkeys rootX rootY } { + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragOver + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragLeave +# ---------------------------------------------------------------------------- +proc olednd::HandleDragLeave { drop_target } { + ::tkdnd::generic::HandleLeave + if {$::tkdnd::_auto_update} {update idletasks} +};# olednd::HandleDragLeave + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDrop +# ---------------------------------------------------------------------------- +proc olednd::HandleDrop { drop_target pressedkeys rootX rootY type data } { + ::tkdnd::generic::SetDroppedData [normalise_data $type $data] + set action [::tkdnd::generic::HandleDrop $drop_target {} \ + $pressedkeys $rootX $rootY 0] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command olednd::GetDataType +# ---------------------------------------------------------------------------- +proc olednd::GetDataType { drop_target typelist } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + lindex $common_drag_source_types 0 +};# olednd::GetDataType + +# ---------------------------------------------------------------------------- +# Command olednd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc olednd::GetDragSourceCommonTypes { drop_target } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# olednd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_types +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # olednd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_type +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # olednd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_independent_type +# ---------------------------------------------------------------------------- +proc olednd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # olednd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command olednd::normalise_data +# ---------------------------------------------------------------------------- +proc olednd::normalise_data { type data } { + switch [lindex [::tkdnd::generic::platform_independent_type $type] 0] { + DND_Text {return $data} + DND_Files {return $data} + DND_HTML {return [encoding convertfrom utf-8 $data]} + default {return $data} + } +}; # olednd::normalise_data diff --git a/tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib b/tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib new file mode 100644 index 0000000000000000000000000000000000000000..2f511c423e109f80e7511c768cfb81d16a1cd65a GIT binary patch literal 40176 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 a#5j! {tkdnd::_begin_drag press 1 %W %s %X %Y %x %y} + bind TkDND_Drag1 {tkdnd::_begin_drag motion 1 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag press 2 %W %s %X %Y %x %y} + bind TkDND_Drag2 {tkdnd::_begin_drag motion 2 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag press 3 %W %s %X %Y %x %y} + bind TkDND_Drag3 {tkdnd::_begin_drag motion 3 %W %s %X %Y %x %y} + + # ---------------------------------------------------------------------------- + # Command tkdnd::initialise: Initialise the TkDND package. + # ---------------------------------------------------------------------------- + proc initialise { dir PKG_LIB_FILE PACKAGE_NAME} { + variable _platform_namespace + variable _drop_file_temp_dir + variable _windowingsystem + global env + + switch [tk windowingsystem] { + x11 { + set _windowingsystem x11 + } + win32 - + windows { + set _windowingsystem windows + } + aqua { + set _windowingsystem aqua + } + default { + error "unknown Tk windowing system" + } + } + + ## Get User's home directory: We try to locate the proper path from a set of + ## environmental variables... + foreach var {HOME HOMEPATH USERPROFILE ALLUSERSPROFILE APPDATA} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)]} { + set UserHomeDir $env($var) + break + } + } + } + + ## Should use [tk windowingsystem] instead of tcl platform array: + ## OS X returns "unix," but that's not useful because it has its own + ## windowing system, aqua + ## Under windows we have to also combine HOMEDRIVE & HOMEPATH... + if {![info exists UserHomeDir] && + [string equal $_windowingsystem windows] && + [info exists env(HOMEDRIVE)] && [info exists env(HOMEPATH)]} { + if {[file isdirectory $env(HOMEDRIVE)$env(HOMEPATH)]} { + set UserHomeDir $env(HOMEDRIVE)$env(HOMEPATH) + } + } + ## Have we located the needed path? + if {![info exists UserHomeDir]} { + set UserHomeDir [pwd] + } + set UserHomeDir [file normalize $UserHomeDir] + + ## Try to locate a temporary directory... + foreach var {TKDND_TEMP_DIR TEMP TMP} { + if {[info exists env($var)]} { + if {[file isdirectory $env($var)] && [file writable $env($var)]} { + set _drop_file_temp_dir $env($var) + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + foreach _dir [list "$UserHomeDir/Local Settings/Temp" \ + "$UserHomeDir/AppData/Local/Temp" \ + /tmp \ + C:/WINDOWS/Temp C:/Temp C:/tmp \ + D:/WINDOWS/Temp D:/Temp D:/tmp] { + if {[file isdirectory $_dir] && [file writable $_dir]} { + set _drop_file_temp_dir $_dir + break + } + } + } + if {![info exists _drop_file_temp_dir]} { + set _drop_file_temp_dir $UserHomeDir + } + set _drop_file_temp_dir [file native $_drop_file_temp_dir] + + source $dir/tkdnd_generic.tcl + switch $_windowingsystem { + x11 { + source $dir/tkdnd_unix.tcl + set _platform_namespace xdnd + } + win32 - + windows { + source $dir/tkdnd_windows.tcl + set _platform_namespace olednd + } + aqua { + source $dir/tkdnd_macosx.tcl + set _platform_namespace macdnd + } + default { + error "unknown Tk windowing system" + } + } + load $dir/$PKG_LIB_FILE $PACKAGE_NAME + source $dir/tkdnd_compat.tcl + ${_platform_namespace}::initialise + };# initialise + + proc GetDropFileTempDirectory { } { + variable _drop_file_temp_dir + return $_drop_file_temp_dir + } + proc SetDropFileTempDirectory { dir } { + variable _drop_file_temp_dir + set _drop_file_temp_dir $dir + } + +};# namespace ::tkdnd + +# ---------------------------------------------------------------------------- +# Command tkdnd::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::drag_source { mode path { types {} } { event 1 } + { tagprefix TkDND_Drag } } { + set tags [bindtags $path] + set idx [lsearch $tags ${tagprefix}$event] + switch -- $mode { + register { + if { $idx != -1 } { + ## No need to do anything! + # bindtags $path [lreplace $tags $idx $idx ${tagprefix}$event] + } else { + bindtags $path [linsert $tags 1 ${tagprefix}$event] + } + _drag_source_update_types $path $types + } + unregister { + if { $idx != -1 } { + bindtags $path [lreplace $tags $idx $idx] + } + } + } +};# tkdnd::drag_source + +proc ::tkdnd::_drag_source_update_types { path types } { + set types [platform_specific_types $types] + set old_types [bind $path <>] + foreach type $types { + if {[lsearch $old_types $type] < 0} {lappend old_types $type} + } + bind $path <> $old_types +};# ::tkdnd::_drag_source_update_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::drop_target { mode path { types {} } } { + variable _windowingsystem + set types [platform_specific_types $types] + switch -- $mode { + register { + switch $_windowingsystem { + x11 { + _register_types $path [winfo toplevel $path] $types + } + win32 - + windows { + _RegisterDragDrop $path + bind $path {+ tkdnd::_RevokeDragDrop %W} + } + aqua { + macdnd::registerdragwidget [winfo toplevel $path] $types + } + default { + error "unknown Tk windowing system" + } + } + set old_types [bind $path <>] + set new_types {} + foreach type $types { + if {[lsearch -exact $old_types $type] < 0} {lappend new_types $type} + } + if {[llength $new_types]} { + bind $path <> [concat $old_types $new_types] + } + } + unregister { + switch $_windowingsystem { + x11 { + } + win32 - + windows { + _RevokeDragDrop $path + } + aqua { + error todo + } + default { + error "unknown Tk windowing system" + } + } + bind $path <> {} + } + } +};# tkdnd::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_begin_drag { event button source state X Y x y } { + variable _x0 + variable _y0 + variable _state + + switch -- $event { + press { + set _x0 $X + set _y0 $Y + set _state "press" + } + motion { + if { ![info exists _state] } { + # This is just extra protection. There seem to be + # rare cases where the motion comes before the press. + return + } + if { [string equal $_state "press"] } { + variable _dx + variable _dy + if { abs($_x0-$X) > ${_dx} || abs($_y0-$Y) > ${_dy} } { + set _state "done" + _init_drag $button $source $state $X $Y $x $y + } + } + } + } +};# tkdnd::_begin_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_init_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_init_drag { button source state rootX rootY X Y } { + # Call the <> binding. + set cmd [bind $source <>] + # puts "CMD: $cmd" + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y \ + %S $state %e <> %A \{\} %% % \ + %t [bind $source <>]] $cmd] + set code [catch {uplevel \#0 $cmd} info options] + # puts "CODE: $code ---- $info" + switch -exact -- $code { + 0 {} + 3 - 4 { + # FRINK: nocheck + return + } + default { + return -options $options $info + } + } + + set len [llength $info] + if {$len == 3} { + foreach { actions types _data } $info { break } + set types [platform_specific_types $types] + set data [list] + foreach type $types { + lappend data $_data + } + unset _data + } elseif {$len == 2} { + foreach { actions _data } $info { break } + set data [list]; set types [list] + foreach {t d} $_data { + foreach t [platform_specific_types $t] { + lappend types $t; lappend data $d + } + } + unset _data t d + } else { + if {$len == 1 && [string equal [lindex $actions 0] "refuse_drop"]} { + return + } + error "not enough items in the result of the <>\ + event binding. Either 2 or 3 items are expected. The command + executed was: \"$cmd\"\nResult was: \"$info\"" + } + set action refuse_drop + variable _windowingsystem + # puts "Source: \"$source\"" + # puts "Types: \"[join $types {", "}]\"" + # puts "Actions: \"[join $actions {", "}]\"" + # puts "Button: \"$button\"" + # puts "Data: \"[string range $data 0 100]\"" + switch $_windowingsystem { + x11 { + set action [xdnd::_dodragdrop $source $actions $types $data $button] + } + win32 - + windows { + set action [_DoDragDrop $source $actions $types $data $button] + } + aqua { + set action [macdnd::dodragdrop $source $actions $types $data $button] + } + default { + error "unknown Tk windowing system" + } + } + ## Call _end_drag to notify the widget of the result of the drag + ## operation... + _end_drag $button $source {} $action {} $data {} $state $rootX $rootY $X $Y + } +};# tkdnd::_init_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::_end_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::_end_drag { button source target action type data result + state rootX rootY X Y } { + set rootX 0 + set rootY 0 + # Call the <> binding. + set cmd [bind $source <>] + if {[string length $cmd]} { + set cmd [string map [list %W $source %X $rootX %Y $rootY %x $X %y $Y %% % \ + %S $state %e <> %A \{$action\}] $cmd] + set info [uplevel \#0 $cmd] + # if { $info != "" } { + # variable _windowingsystem + # foreach { actions types data } $info { break } + # set types [platform_specific_types $types] + # switch $_windowingsystem { + # x11 { + # error "dragging from Tk widgets not yet supported" + # } + # win32 - + # windows { + # set action [_DoDragDrop $source $actions $types $data $button] + # } + # aqua { + # macdnd::dodragdrop $source $actions $types $data + # } + # default { + # error "unknown Tk windowing system" + # } + # } + # ## Call _end_drag to notify the widget of the result of the drag + # ## operation... + # _end_drag $button $source {} $action {} $data {} $state $rootX $rootY + # } + } +};# tkdnd::_end_drag + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_types $types +}; # tkdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_specific_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_specific_type $type +}; # tkdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_type { type } { + variable _platform_namespace + ${_platform_namespace}::platform_independent_type $type +}; # tkdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::bytes_to_string +# ---------------------------------------------------------------------------- +proc ::tkdnd::bytes_to_string { bytes } { + set string {} + foreach byte $bytes { + append string [binary format c $byte] + } + return $string +};# tkdnd::bytes_to_string + +# ---------------------------------------------------------------------------- +# Command tkdnd::urn_unquote +# ---------------------------------------------------------------------------- +proc ::tkdnd::urn_unquote {url} { + set result "" + set start 0 + while {[regexp -start $start -indices {%[0-9a-fA-F]{2}} $url match]} { + foreach {first last} $match break + append result [string range $url $start [expr {$first - 1}]] + append result [format %c 0x[string range $url [incr first] $last]] + set start [incr last] + } + append result [string range $url $start end] + return [encoding convertfrom utf-8 $result] +};# tkdnd::urn_unquote diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl new file mode 100644 index 0000000..efc96f7 --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl @@ -0,0 +1,160 @@ +# +# tkdnd_compat.tcl -- +# +# This file implements some utility procedures, to support older versions +# of the TkDND package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval compat { + +};# namespace compat + +# ---------------------------------------------------------------------------- +# Command ::dnd +# ---------------------------------------------------------------------------- +proc ::dnd {method window args} { + switch $method { + bindtarget { + switch [llength $args] { + 0 {return [tkdnd::compat::bindtarget0 $window]} + 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2] [lindex $args 3]]} + } + } + cleartarget { + return [tkdnd::compat::cleartarget $window] + } + bindsource { + switch [llength $args] { + 0 {return [tkdnd::compat::bindsource0 $window]} + 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} + 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ + [lindex $args 1]]} + 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ + [lindex $args 1] [lindex $args 2]]} + } + } + clearsource { + return [tkdnd::compat::clearsource $window] + } + drag { + return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] + } + } + error "invalid number of arguments!" +};# ::dnd + +# ---------------------------------------------------------------------------- +# Command compat::bindtarget +# ---------------------------------------------------------------------------- +proc compat::bindtarget0 {window} { + return [bind $window <>] +};# compat::bindtarget0 + +proc compat::bindtarget1 {window type} { + return [bindtarget2 $window $type ] +};# compat::bindtarget1 + +proc compat::bindtarget2 {window type event} { + switch $event { + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + {return [bind $window <>]} + } +};# compat::bindtarget2 + +proc compat::bindtarget3 {window type event script} { + set type [normalise_type $type] + ::tkdnd::drop_target register $window [list $type] + switch $event { + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + {return [bind $window <> $script]} + } +};# compat::bindtarget3 + +proc compat::bindtarget4 {window type event script priority} { + return [bindtarget3 $window $type $event $script] +};# compat::bindtarget4 + +proc compat::normalise_type { type } { + switch $type { + text/plain - + {text/plain;charset=UTF-8} - + Text {return DND_Text} + text/uri-list - + Files {return DND_Files} + default {return $type} + } +};# compat::normalise_type + +# ---------------------------------------------------------------------------- +# Command compat::bindsource +# ---------------------------------------------------------------------------- +proc compat::bindsource0 {window} { + return [bind $window <>] +};# compat::bindsource0 + +proc compat::bindsource1 {window type} { + return [bindsource2 $window $type ] +};# compat::bindsource1 + +proc compat::bindsource2 {window type script} { + set type [normalise_type $type] + ::tkdnd::drag_source register $window $type + bind $window <> "list {copy} {%t} \[$script\]" +};# compat::bindsource2 + +proc compat::bindsource3 {window type script priority} { + return [bindsource2 $window $type $script] +};# compat::bindsource3 + +# ---------------------------------------------------------------------------- +# Command compat::cleartarget +# ---------------------------------------------------------------------------- +proc compat::cleartarget {window} { +};# compat::cleartarget + +# ---------------------------------------------------------------------------- +# Command compat::clearsource +# ---------------------------------------------------------------------------- +proc compat::clearsource {window} { +};# compat::clearsource diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_generic.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_generic.tcl new file mode 100644 index 0000000..698b464 --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_generic.tcl @@ -0,0 +1,520 @@ +# +# tkdnd_generic.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval generic { + variable _types {} + variable _typelist {} + variable _codelist {} + variable _actionlist {} + variable _pressedkeys {} + variable _action {} + variable _common_drag_source_types {} + variable _common_drop_target_types {} + variable _drag_source {} + variable _drop_target {} + + variable _last_mouse_root_x 0 + variable _last_mouse_root_y 0 + + variable _tkdnd2platform + variable _platform2tkdnd + + proc debug {msg} { + puts $msg + };# debug + + proc initialise { } { + };# initialise + + proc initialise_platform_to_tkdnd_types { types } { + variable _platform2tkdnd + variable _tkdnd2platform + set _platform2tkdnd [dict create {*}$types] + set _tkdnd2platform [dict create] + foreach type [dict keys $_platform2tkdnd] { + dict lappend _tkdnd2platform [dict get $_platform2tkdnd $type] $type + } + };# initialise_platform_to_tkdnd_types + + proc initialise_tkdnd_to_platform_types { types } { + variable _tkdnd2platform + set _tkdnd2platform [dict create {*}$types] + };# initialise_tkdnd_to_platform_types + +};# namespace generic + +# ---------------------------------------------------------------------------- +# Command generic::HandleEnter +# ---------------------------------------------------------------------------- +proc generic::HandleEnter { drop_target drag_source typelist codelist + actionlist pressedkeys } { + variable _typelist; set _typelist $typelist + variable _pressedkeys; set _pressedkeys $pressedkeys + variable _action; set _action refuse_drop + variable _common_drag_source_types; set _common_drag_source_types {} + variable _common_drop_target_types; set _common_drop_target_types {} + variable _actionlist + variable _drag_source; set _drag_source $drag_source + variable _drop_target; set _drop_target {} + variable _actionlist; set _actionlist $actionlist + variable _codelist set _codelist $codelist + + variable _last_mouse_root_x; set _last_mouse_root_x 0 + variable _last_mouse_root_y; set _last_mouse_root_y 0 + # debug "\n===============================================================" + # debug "generic::HandleEnter: drop_target=$drop_target,\ + # drag_source=$drag_source,\ + # typelist=$typelist" + # debug "generic::HandleEnter: ACTION: default" + return default +};# generic::HandleEnter + +# ---------------------------------------------------------------------------- +# Command generic::HandlePosition +# ---------------------------------------------------------------------------- +proc generic::HandlePosition { drop_target drag_source pressedkeys + rootX rootY { time 0 } } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + # debug "generic::HandlePosition: drop_target=$drop_target,\ + # _drop_target=$_drop_target, rootX=$rootX, rootY=$rootY" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + # debug "generic::HandlePosition: no or empty _drag_source:\ + # return refuse_drop" + return refuse_drop + } + + if {$drag_source ne "" && $drag_source ne $_drag_source} { + debug "generic position event from unexpected source: $_drag_source\ + != $drag_source" + return refuse_drop + } + + set _pressedkeys $pressedkeys + + ## Does the new drop target support any of our new types? + # foreach {common_drag_source_types common_drop_target_types} \ + # [GetWindowCommonTypes $drop_target $_typelist] {break} + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [FindWindowWithCommonTypes $drop_target $_typelist] {break} + set data [GetDroppedData $time] + + # debug "\t($_drop_target) -> ($drop_target)" + if {$drop_target != $_drop_target} { + if {[string length $_drop_target]} { + ## Call the <> event. + # debug "\t<> on $_drop_target" + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + uplevel \#0 $cmd + } + } + set _drop_target $drop_target + set _action refuse_drop + + if {[llength $common_drag_source_types]} { + set _action [lindex $_actionlist 0] + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + ## Drop target supports at least one type. Send a <>. + # puts "<> -> $drop_target" + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + focus $drop_target + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + } + } + } + + set _drop_target {} + if {[llength $common_drag_source_types]} { + set _common_drag_source_types $common_drag_source_types + set _common_drop_target_types $common_drop_target_types + set _drop_target $drop_target + ## Drop target supports at least one type. Send a <>. + set cmd [bind $drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + # Return values: copy, move, link, ask, private, refuse_drop, default + # debug "generic::HandlePosition: ACTION: $_action" + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandlePosition + +# ---------------------------------------------------------------------------- +# Command generic::HandleLeave +# ---------------------------------------------------------------------------- +proc generic::HandleLeave { } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + if {![info exists _drop_target]} {set _drop_target {}} + # debug "generic::HandleLeave: _drop_target=$_drop_target" + if {[info exists _drop_target] && [string length $_drop_target]} { + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target \ + %X $_last_mouse_root_x %Y $_last_mouse_root_y \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A \{$_action\} %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D \{\} %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + } + foreach var {_types _typelist _actionlist _pressedkeys _action + _common_drag_source_types _common_drop_target_types + _drag_source _drop_target} { + set $var {} + } +};# generic::HandleLeave + +# ---------------------------------------------------------------------------- +# Command generic::HandleDrop +# ---------------------------------------------------------------------------- +proc generic::HandleDrop {drop_target drag_source pressedkeys rootX rootY time } { + variable _types + variable _typelist + variable _codelist + variable _actionlist + variable _pressedkeys + variable _action + variable _common_drag_source_types + variable _common_drop_target_types + variable _drag_source + variable _drop_target + variable _last_mouse_root_x + variable _last_mouse_root_y + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + + set _pressedkeys $pressedkeys + + # puts "generic::HandleDrop: $time" + + if {![info exists _drag_source] && ![string length $_drag_source]} { + return refuse_drop + } + if {![info exists _drop_target] && ![string length $_drop_target]} { + return refuse_drop + } + if {![llength $_common_drag_source_types]} {return refuse_drop} + ## Get the dropped data. + set data [GetDroppedData $time] + ## Try to select the most specific <> event. + foreach type [concat $_common_drag_source_types $_common_drop_target_types] { + set type [platform_independent_type $type] + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action + } + } + set cmd [bind $_drop_target <>] + if {[string length $cmd]} { + set cmd [string map [list %W $_drop_target %X $rootX %Y $rootY \ + %CST \{$_common_drag_source_types\} \ + %CTT \{$_common_drop_target_types\} \ + %CPT \{[lindex [platform_independent_type [lindex $_common_drag_source_types 0]] 0]\} \ + %ST \{$_typelist\} %TT \{$_types\} \ + %A $_action %a \{$_actionlist\} \ + %b \{$_pressedkeys\} %m \{$_pressedkeys\} \ + %D [list $data] %e <> \ + %L \{$_typelist\} %% % \ + %t \{$_typelist\} %T \{[lindex $_common_drag_source_types 0]\} \ + %c \{$_codelist\} %C \{[lindex $_codelist 0]\} \ + ] $cmd] + set _action [uplevel \#0 $cmd] + } + # Return values: copy, move, link, ask, private, refuse_drop + switch -exact -- $_action { + copy - move - link - ask - private - refuse_drop - default {} + default {set _action copy} + } + return $_action +};# generic::HandleDrop + +# ---------------------------------------------------------------------------- +# Command generic::GetWindowCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetWindowCommonTypes { win typelist } { + set types [bind $win <>] + # debug ">> Accepted types: $win $_types" + set common_drag_source_types {} + set common_drop_target_types {} + if {[llength $types]} { + ## Examine the drop target types, to find at least one match with the drag + ## source types... + set supported_types [supported_types $typelist] + foreach type $types { + foreach matched [lsearch -glob -all -inline $supported_types $type] { + ## Drop target supports this type. + lappend common_drag_source_types $matched + lappend common_drop_target_types $type + } + } + } + list $common_drag_source_types $common_drop_target_types +};# generic::GetWindowCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::FindWindowWithCommonTypes +# ---------------------------------------------------------------------------- +proc generic::FindWindowWithCommonTypes { win typelist } { + set toplevel [winfo toplevel $win] + while {![string equal $win $toplevel]} { + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + set win [winfo parent $win] + } + ## We have reached the toplevel, which may be also a target (SF Bug #30) + foreach {common_drag_source_types common_drop_target_types} \ + [GetWindowCommonTypes $win $typelist] {break} + if {[llength $common_drag_source_types]} { + return [list $win $common_drag_source_types $common_drop_target_types] + } + return { {} {} {} } +};# generic::FindWindowWithCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDroppedData +# ---------------------------------------------------------------------------- +proc generic::GetDroppedData { time } { + variable _dropped_data + return $_dropped_data +};# generic::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::SetDroppedData +# ---------------------------------------------------------------------------- +proc generic::SetDroppedData { data } { + variable _dropped_data + set _dropped_data $data +};# generic::SetDroppedData + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSource +# ---------------------------------------------------------------------------- +proc generic::GetDragSource { } { + variable _drag_source + return $_drag_source +};# generic::GetDragSource + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTarget +# ---------------------------------------------------------------------------- +proc generic::GetDropTarget { } { + variable _drop_target + return $_drop_target +};# generic::GetDropTarget + +# ---------------------------------------------------------------------------- +# Command generic::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDragSourceCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::GetDropTargetCommonTypes +# ---------------------------------------------------------------------------- +proc generic::GetDropTargetCommonTypes { } { + variable _common_drag_source_types + return $_common_drag_source_types +};# generic::GetDropTargetCommonTypes + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_types +# ---------------------------------------------------------------------------- +proc generic::platform_specific_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_specific_type $type]] + } + return $new_types +}; # generic::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_specific_type +# ---------------------------------------------------------------------------- +proc generic::platform_specific_type { type } { + variable _tkdnd2platform + if {[dict exists $_tkdnd2platform $type]} { + return [dict get $_tkdnd2platform $type] + } + list $type +}; # generic::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + set new_types {} + foreach type $types { + set new_types [concat $new_types [platform_independent_type $type]] + } + return $new_types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command generic::platform_independent_type +# ---------------------------------------------------------------------------- +proc generic::platform_independent_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return [dict get $_platform2tkdnd $type] + } + return $type +}; # generic::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command generic::supported_types +# ---------------------------------------------------------------------------- +proc generic::supported_types { types } { + set new_types {} + foreach type $types { + if {[supported_type $type]} {lappend new_types $type} + } + return $new_types +}; # generic::supported_types + +# ---------------------------------------------------------------------------- +# Command generic::supported_type +# ---------------------------------------------------------------------------- +proc generic::supported_type { type } { + variable _platform2tkdnd + if {[dict exists $_platform2tkdnd $type]} { + return 1 + } + return 0 +}; # generic::supported_type diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl new file mode 100644 index 0000000..307f6da --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl @@ -0,0 +1,144 @@ +# +# tkdnd_macosx.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. + +# This software is copyrighted by: +# Georgios Petasis, Athens, Greece. +# e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr +# +# Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, +# kw@codebykevin.com +# +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +#basic API for Mac Drag and Drop + +#two data types supported: strings and file paths + +#two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget + +#data retrieval mechanism: text or file paths are copied from drag clipboard to system clipboard and retrieved via [clipboard get]; array of file paths is converted to single tab-separated string, can be split into Tcl list + +if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { + error {TkAqua Cocoa required} +} + +namespace eval macdnd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + NSPasteboardTypeString DND_Text \ + NSFilenamesPboardType DND_Files \ + NSPasteboardTypeHTML DND_HTML \ + ] + };# initialise + +};# namespace macdnd + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleEnter +# ---------------------------------------------------------------------------- +proc macdnd::HandleEnter { path drag_source typelist { data {} } } { + variable _pressedkeys + variable _actionlist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# macdnd::HandleEnter + +# ---------------------------------------------------------------------------- +# Command macdnd::HandlePosition +# ---------------------------------------------------------------------------- +proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { + variable _pressedkeys + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# macdnd::HandlePosition + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleLeave +# ---------------------------------------------------------------------------- +proc macdnd::HandleLeave { args } { + ::tkdnd::generic::HandleLeave +};# macdnd::HandleLeave + +# ---------------------------------------------------------------------------- +# Command macdnd::HandleDrop +# ---------------------------------------------------------------------------- +proc macdnd::HandleDrop { drop_target data args } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y 0 +};# macdnd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command macdnd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc macdnd::GetDragSourceCommonTypes { } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# macdnd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # macdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # macdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command macdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc macdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # macdnd::platform_independent_type diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_unix.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_unix.tcl new file mode 100644 index 0000000..56d17c4 --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_unix.tcl @@ -0,0 +1,810 @@ +# +# tkdnd_unix.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval xdnd { + variable _dragging 0 + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + text/plain\;charset=utf-8 DND_Text \ + UTF8_STRING DND_Text \ + text/plain DND_Text \ + STRING DND_Text \ + TEXT DND_Text \ + COMPOUND_TEXT DND_Text \ + text/uri-list DND_Files \ + text/html\;charset=utf-8 DND_HTML \ + text/html DND_HTML \ + application/x-color DND_Color \ + ] + };# initialise + +};# namespace xdnd + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndEnter { path drag_source typelist time { data {} } } { + variable _pressedkeys + variable _actionlist + variable _typelist + set _pressedkeys 1 + set _actionlist { copy move link ask private } + set _typelist $typelist + # puts "xdnd::HandleXdndEnter: $time" + ::tkdnd::generic::SetDroppedData $data + ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ + $_actionlist $_pressedkeys +};# xdnd::HandleXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndPosition { drop_target rootX rootY time {drag_source {}} } { + variable _pressedkeys + variable _typelist + variable _last_mouse_root_x; set _last_mouse_root_x $rootX + variable _last_mouse_root_y; set _last_mouse_root_y $rootY + # puts "xdnd::HandleXdndPosition: $time" + ## Get the dropped data... + catch { + ::tkdnd::generic::SetDroppedData [GetPositionData $drop_target $_typelist $time] + } + ::tkdnd::generic::HandlePosition $drop_target $drag_source \ + $_pressedkeys $rootX $rootY +};# xdnd::HandleXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::HandleXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndLeave { } { + ::tkdnd::generic::HandleLeave +};# xdnd::HandleXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::HandleXdndDrop { time } { + variable _pressedkeys + variable _last_mouse_root_x + variable _last_mouse_root_y + ## Get the dropped data... + ::tkdnd::generic::SetDroppedData [GetDroppedData \ + [::tkdnd::generic::GetDragSource] [::tkdnd::generic::GetDropTarget] \ + [::tkdnd::generic::GetDragSourceCommonTypes] $time] + ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ + $_last_mouse_root_x $_last_mouse_root_y $time +};# xdnd::HandleXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::GetPositionData +# ---------------------------------------------------------------------------- +proc xdnd::GetPositionData { drop_target typelist time } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + GetDroppedData [::tkdnd::generic::GetDragSource] $drop_target \ + $common_drag_source_types $time +};# xdnd::GetPositionData + +# ---------------------------------------------------------------------------- +# Command xdnd::GetDroppedData +# ---------------------------------------------------------------------------- +proc xdnd::GetDroppedData { _drag_source _drop_target _common_drag_source_types time } { + if {![llength $_common_drag_source_types]} { + error "no common data types between the drag source and drop target widgets" + } + ## Is drag source in this application? + if {[catch {winfo pathname -displayof $_drop_target $_drag_source} p]} { + set _use_tk_selection 0 + } else { + set _use_tk_selection 1 + } + foreach type $_common_drag_source_types { + # puts "TYPE: $type ($_drop_target)" + # _get_selection $_drop_target $time $type + if {$_use_tk_selection} { + if {![catch { + selection get -displayof $_drop_target -selection XdndSelection \ + -type $type + } result options]} { + return [normalise_data $type $result] + } + } else { + # puts "_selection_get -displayof $_drop_target -selection XdndSelection \ + # -type $type -time $time" + #after 100 [list focus -force $_drop_target] + #after 50 [list raise [winfo toplevel $_drop_target]] + if {![catch { + _selection_get -displayof $_drop_target -selection XdndSelection \ + -type $type -time $time + } result options]} { + return [normalise_data $type $result] + } + } + } + return -options $options $result +};# xdnd::GetDroppedData + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_types +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # xdnd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_specific_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # xdnd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command xdnd::platform_independent_type +# ---------------------------------------------------------------------------- +proc xdnd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # xdnd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command xdnd::_normalise_data +# ---------------------------------------------------------------------------- +proc xdnd::normalise_data { type data } { + # Tk knows how to interpret the following types: + # STRING, TEXT, COMPOUND_TEXT + # UTF8_STRING + # Else, it returns a list of 8 or 32 bit numbers... + switch -glob $type { + STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data} + text/html { + if {[catch { + encoding convertfrom unicode $data + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/html\;charset=utf-8 - + text/plain\;charset=utf-8 - + text/plain { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + return [string map {\r\n \n} $string] + } + text/uri-list* { + if {[catch { + encoding convertfrom utf-8 [tkdnd::bytes_to_string $data] + } string]} { + set string $data + } + ## Get rid of \r\n + set string [string trim [string map {\r\n \n} $string]] + set files {} + foreach quoted_file [split $string] { + set file [tkdnd::urn_unquote $quoted_file] + switch -glob $file { + \#* {} + file://* {lappend files [string range $file 7 end]} + ftp://* - + https://* - + http://* {lappend files $quoted_file} + default {lappend files $file} + } + } + return $files + } + application/x-color { + return $data + } + text/x-moz-url - + application/q-iconlist - + default {return $data} + } +}; # xdnd::normalise_data + +############################################################################# +## +## XDND drag implementation +## +############################################################################# + +# ---------------------------------------------------------------------------- +# Command xdnd::_selection_ownership_lost +# ---------------------------------------------------------------------------- +proc xdnd::_selection_ownership_lost {} { + variable _dragging + set _dragging 0 +};# _selection_ownership_lost + +# ---------------------------------------------------------------------------- +# Command xdnd::_dodragdrop +# ---------------------------------------------------------------------------- +proc xdnd::_dodragdrop { source actions types data button } { + variable _dragging + + # puts "xdnd::_dodragdrop: source: $source, actions: $actions, types: $types,\ + # data: \"$data\", button: $button" + if {$_dragging} { + ## We are in the middle of another drag operation... + error "another drag operation in progress" + } + + variable _dodragdrop_drag_source $source + variable _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_proxy 0 + variable _dodragdrop_actions $actions + variable _dodragdrop_action_descriptions $actions + variable _dodragdrop_actions_len [llength $actions] + variable _dodragdrop_types $types + variable _dodragdrop_types_len [llength $types] + variable _dodragdrop_data $data + variable _dodragdrop_transfer_data {} + variable _dodragdrop_button $button + variable _dodragdrop_time 0 + variable _dodragdrop_default_action refuse_drop + variable _dodragdrop_waiting_status 0 + variable _dodragdrop_drop_target_accepts_drop 0 + variable _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_current_cursor $_dodragdrop_default_action + variable _dodragdrop_drop_occured 0 + variable _dodragdrop_selection_requestor 0 + + ## + ## If we have more than 3 types, the property XdndTypeList must be set on + ## the drag source widget... + ## + if {$_dodragdrop_types_len > 3} { + _announce_type_list $_dodragdrop_drag_source $_dodragdrop_types + } + + ## + ## Announce the actions & their descriptions on the XdndActionList & + ## XdndActionDescription properties... + ## + _announce_action_list $_dodragdrop_drag_source $_dodragdrop_actions \ + $_dodragdrop_action_descriptions + + ## + ## Arrange selection handlers for our drag source, and all the supported types + ## + registerSelectionHandler $source $types + + ## + ## Step 1: When a drag begins, the source takes ownership of XdndSelection. + ## + selection own -command ::tkdnd::xdnd::_selection_ownership_lost \ + -selection XdndSelection $source + set _dragging 1 + + ## Grab the mouse pointer... + _grab_pointer $source $_dodragdrop_default_action + + ## Register our generic event handler... + # The generic event callback will report events by modifying variable + # ::xdnd::_dodragdrop_event: a dict with event information will be set as + # the value of the variable... + _register_generic_event_handler + + ## Set a timeout for debugging purposes... + # after 60000 {set ::tkdnd::xdnd::_dragging 0} + + tkwait variable ::tkdnd::xdnd::_dragging + _SendXdndLeave + + set _dragging 0 + _ungrab_pointer $source + _unregister_generic_event_handler + catch {selection clear -selection XdndSelection} + unregisterSelectionHandler $source $types + return $_dodragdrop_drop_target_accepts_action +};# xdnd::_dodragdrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_process_drag_events +# ---------------------------------------------------------------------------- +proc xdnd::_process_drag_events {event} { + # The return value from proc is normally 0. A non-zero return value indicates + # that the event is not to be handled further; that is, proc has done all + # processing that is to be allowed for the event + variable _dragging + if {!$_dragging} {return 0} + # puts $event + + variable _dodragdrop_time + set time [dict get $event time] + set type [dict get $event type] + if {$time < $_dodragdrop_time && ![string equal $type SelectionRequest]} { + return 0 + } + set _dodragdrop_time $time + + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_default_action + switch $type { + MotionNotify { + set rootx [dict get $event x_root] + set rooty [dict get $event y_root] + set window [_find_drop_target_window $_dodragdrop_drag_source \ + $rootx $rooty] + if {[string length $window]} { + ## Examine the modifiers to suggest an action... + set _dodragdrop_default_action [_default_action $event] + ## Is it a Tk widget? + # set path [winfo containing $rootx $rooty] + # puts "Window under mouse: $window ($path)" + if {$_dodragdrop_drop_target != $window} { + ## Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + ## Is there a proxy? If not, _find_drop_target_proxy returns the + ## target window, so we always get a valid "proxy". + set proxy [_find_drop_target_proxy $_dodragdrop_drag_source $window] + ## Send XdndEnter to $window + _SendXdndEnter $window $proxy + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } else { + ## Send XdndPosition to $_dodragdrop_drop_target + _SendXdndPosition $rootx $rooty $_dodragdrop_default_action + } + } else { + ## No window under the mouse. Send XdndLeave to $_dodragdrop_drop_target + _SendXdndLeave + } + } + ButtonPress { + } + ButtonRelease { + variable _dodragdrop_button + set button [dict get $event button] + if {$button == $_dodragdrop_button} { + ## The button that initiated the drag was released. Trigger drop... + _SendXdndDrop + } + return 1 + } + KeyPress { + } + KeyRelease { + set keysym [dict get $event keysym] + switch $keysym { + Escape { + ## The user has pressed escape. Abort... + if {$_dragging} {set _dragging 0} + } + } + } + SelectionRequest { + variable _dodragdrop_selection_requestor + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + set _dodragdrop_selection_requestor [dict get $event requestor] + set _dodragdrop_selection_property [dict get $event property] + set _dodragdrop_selection_selection [dict get $event selection] + set _dodragdrop_selection_target [dict get $event target] + set _dodragdrop_selection_time $time + return 0 + } + default { + return 0 + } + } + return 0 +};# _process_drag_events + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndEnter +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndEnter {window proxy} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_types + variable _dodragdrop_waiting_status + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_target > 0} _SendXdndLeave + if {$_dodragdrop_drop_occured} return + set _dodragdrop_drop_target $window + set _dodragdrop_drop_target_proxy $proxy + set _dodragdrop_waiting_status 0 + if {$_dodragdrop_drop_target < 1} return + # puts "XdndEnter: $_dodragdrop_drop_target $_dodragdrop_drop_target_proxy" + _send_XdndEnter $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $_dodragdrop_types +};# xdnd::_SendXdndEnter + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndPosition +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndPosition {rootx rooty action} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_waiting_status + ## Arrange a new XdndPosition, to be send periodically... + variable _dodragdrop_xdnd_position_heartbeat + catch {after cancel $_dodragdrop_xdnd_position_heartbeat} + set _dodragdrop_xdnd_position_heartbeat [after 200 \ + [list ::tkdnd::xdnd::_SendXdndPosition $rootx $rooty $action]] + if {$_dodragdrop_waiting_status} {return} + # puts "XdndPosition: $_dodragdrop_drop_target $rootx $rooty $action" + _send_XdndPosition $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy $rootx $rooty $action + set _dodragdrop_waiting_status 1 +};# xdnd::_SendXdndPosition + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndStatus +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndStatus {event} { + variable _dodragdrop_drop_target + variable _dodragdrop_waiting_status + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_waiting_status 0 + foreach key {target accept want_position action x y w h} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor + # puts "XdndStatus: $event" +};# xdnd::_HandleXdndStatus + +# ---------------------------------------------------------------------------- +# Command xdnd::_HandleXdndFinished +# ---------------------------------------------------------------------------- +proc xdnd::_HandleXdndFinished {event} { + variable _dodragdrop_xdnd_finished_event_after_id + catch {after cancel $_dodragdrop_xdnd_finished_event_after_id} + set _dodragdrop_xdnd_finished_event_after_id {} + variable _dodragdrop_drop_target + set _dodragdrop_drop_target 0 + variable _dragging + if {$_dragging} {set _dragging 0} + + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + if {[dict size $event]} { + foreach key {target accept action} { + set $key [dict get $event $key] + } + set _dodragdrop_drop_target_accepts_drop $accept + set _dodragdrop_drop_target_accepts_action $action + } else { + set _dodragdrop_drop_target_accepts_drop 0 + } + if {!$_dodragdrop_drop_target_accepts_drop} { + set _dodragdrop_drop_target_accepts_action refuse_drop + } + # puts "XdndFinished: $event" +};# xdnd::_HandleXdndFinished + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndLeave +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndLeave {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} return + variable _dodragdrop_drop_target_proxy + # puts "XdndLeave: $_dodragdrop_drop_target" + _send_XdndLeave $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy + set _dodragdrop_drop_target 0 + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + set _dodragdrop_drop_target_accepts_drop 0 + set _dodragdrop_drop_target_accepts_action refuse_drop + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} return + _update_cursor +};# xdnd::_SendXdndLeave + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendXdndDrop +# ---------------------------------------------------------------------------- +proc xdnd::_SendXdndDrop {} { + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target + if {$_dodragdrop_drop_target < 1} { + ## The mouse has been released over a widget that does not accept drops. + _HandleXdndFinished {} + return + } + variable _dodragdrop_drop_occured + if {$_dodragdrop_drop_occured} {return} + variable _dodragdrop_drop_target_proxy + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + set _dodragdrop_drop_occured 1 + _update_cursor clock + + if {!$_dodragdrop_drop_target_accepts_drop} { + _SendXdndLeave + _HandleXdndFinished {} + return + } + # puts "XdndDrop: $_dodragdrop_drop_target" + variable _dodragdrop_drop_timestamp + set _dodragdrop_drop_timestamp [_send_XdndDrop \ + $_dodragdrop_drag_source $_dodragdrop_drop_target \ + $_dodragdrop_drop_target_proxy] + set _dodragdrop_drop_target 0 + # puts "XdndDrop: $_dodragdrop_drop_target" + ## Arrange a timeout for receiving XdndFinished... + variable _dodragdrop_xdnd_finished_event_after_id + set _dodragdrop_xdnd_finished_event_after_id \ + [after 10000 [list ::tkdnd::xdnd::_HandleXdndFinished {}]] +};# xdnd::_SendXdndDrop + +# ---------------------------------------------------------------------------- +# Command xdnd::_update_cursor +# ---------------------------------------------------------------------------- +proc xdnd::_update_cursor { {cursor {}}} { + # puts "_update_cursor $cursor" + variable _dodragdrop_current_cursor + variable _dodragdrop_drag_source + variable _dodragdrop_drop_target_accepts_drop + variable _dodragdrop_drop_target_accepts_action + + if {![string length $cursor]} { + set cursor refuse_drop + if {$_dodragdrop_drop_target_accepts_drop} { + set cursor $_dodragdrop_drop_target_accepts_action + } + } + if {![string equal $cursor $_dodragdrop_current_cursor]} { + _set_pointer_cursor $_dodragdrop_drag_source $cursor + set _dodragdrop_current_cursor $cursor + } +};# xdnd::_update_cursor + +# ---------------------------------------------------------------------------- +# Command xdnd::_default_action +# ---------------------------------------------------------------------------- +proc xdnd::_default_action {event} { + variable _dodragdrop_actions + variable _dodragdrop_actions_len + if {$_dodragdrop_actions_len == 1} {return [lindex $_dodragdrop_actions 0]} + + set alt [dict get $event Alt] + set shift [dict get $event Shift] + set control [dict get $event Control] + + if {$shift && $control && [lsearch $_dodragdrop_actions link] != -1} { + return link + } elseif {$control && [lsearch $_dodragdrop_actions copy] != -1} { + return copy + } elseif {$shift && [lsearch $_dodragdrop_actions move] != -1} { + return move + } elseif {$alt && [lsearch $_dodragdrop_actions link] != -1} { + return link + } + return default +};# xdnd::_default_action + +# ---------------------------------------------------------------------------- +# Command xdnd::getFormatForType +# ---------------------------------------------------------------------------- +proc xdnd::getFormatForType {type} { + switch -glob [string tolower $type] { + text/plain\;charset=utf-8 - + text/html\;charset=utf-8 - + utf8_string {set format UTF8_STRING} + text/html - + text/plain - + string - + text - + compound_text {set format STRING} + text/uri-list* {set format UTF8_STRING} + application/x-color {set format $type} + default {set format $type} + } + return $format +};# xdnd::getFormatForType + +# ---------------------------------------------------------------------------- +# Command xdnd::registerSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::registerSelectionHandler {source types} { + foreach type $types { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source [list ::tkdnd::xdnd::_SendData $type] + } +};# xdnd::registerSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::unregisterSelectionHandler +# ---------------------------------------------------------------------------- +proc xdnd::unregisterSelectionHandler {source types} { + foreach type $types { + catch { + selection handle -selection XdndSelection \ + -type $type \ + -format [getFormatForType $type] \ + $source {} + } + } +};# xdnd::unregisterSelectionHandler + +# ---------------------------------------------------------------------------- +# Command xdnd::_convert_to_unsigned +# ---------------------------------------------------------------------------- +proc xdnd::_convert_to_unsigned {data format} { + switch $format { + 8 { set mask 0xff } + 16 { set mask 0xffff } + 32 { set mask 0xffffff } + default {error "unsupported format $format"} + } + ## Convert signed integer into unsigned... + set d [list] + foreach num $data { + lappend d [expr { $num & $mask }] + } + return $d +};# xdnd::_convert_to_unsigned + +# ---------------------------------------------------------------------------- +# Command xdnd::_SendData +# ---------------------------------------------------------------------------- +proc xdnd::_SendData {type offset bytes args} { + variable _dodragdrop_drag_source + variable _dodragdrop_types + variable _dodragdrop_data + variable _dodragdrop_transfer_data + + ## The variable _dodragdrop_data contains a list of data, one for each + ## type in the _dodragdrop_types variable. We have to search types, and find + ## the corresponding entry in the _dodragdrop_data list. + set index [lsearch $_dodragdrop_types $type] + if {$index < 0} { + error "unable to locate data suitable for type \"$type\"" + } + set typed_data [lindex $_dodragdrop_data $index] + set format 8 + if {$offset == 0} { + ## Prepare the data to be transferred... + switch -glob $type { + text/plain* - UTF8_STRING - STRING - TEXT - COMPOUND_TEXT { + binary scan [encoding convertto utf-8 $typed_data] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + text/uri-list* { + set files [list] + foreach file $typed_data { + switch -glob $file { + *://* {lappend files $file} + default {lappend files file://$file} + } + } + binary scan [encoding convertto utf-8 "[join $files \r\n]\r\n"] \ + c* _dodragdrop_transfer_data + set _dodragdrop_transfer_data \ + [_convert_to_unsigned $_dodragdrop_transfer_data $format] + } + application/x-color { + set format 16 + ## Try to understand the provided data: we accept a standard Tk colour, + ## or a list of 3 values (red green blue) or a list of 4 values + ## (red green blue opacity). + switch [llength $typed_data] { + 1 { set color [winfo rgb $_dodragdrop_drag_source $typed_data] + lappend color 65535 } + 3 { set color $typed_data; lappend color 65535 } + 4 { set color $typed_data } + default {error "unknown color data: \"$typed_data\""} + } + ## Convert the 4 elements into 16 bit values... + set _dodragdrop_transfer_data [list] + foreach c $color { + lappend _dodragdrop_transfer_data [format 0x%04X $c] + } + } + default { + set format 32 + binary scan $typed_data c* _dodragdrop_transfer_data + } + } + } + + ## + ## Data has been split into bytes. Count the bytes requested, and return them + ## + set data [lrange $_dodragdrop_transfer_data $offset [expr {$offset+$bytes-1}]] + switch $format { + 8 { + set data [encoding convertfrom utf-8 [binary format c* $data]] + } + 16 { + variable _dodragdrop_selection_requestor + if {$_dodragdrop_selection_requestor} { + ## Tk selection cannot process this format (only 8 & 32 supported). + ## Call our XChangeProperty... + set numItems [llength $data] + variable _dodragdrop_selection_property + variable _dodragdrop_selection_selection + variable _dodragdrop_selection_target + variable _dodragdrop_selection_time + XChangeProperty $_dodragdrop_drag_source \ + $_dodragdrop_selection_requestor \ + $_dodragdrop_selection_property \ + $_dodragdrop_selection_target \ + $format \ + $_dodragdrop_selection_time \ + $data $numItems + return -code break + } + } + 32 { + } + default { + error "unsupported format $format" + } + } + # puts "SendData: $type $offset $bytes $args ($typed_data)" + # puts " $data" + return $data +};# xdnd::_SendData diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_utils.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_utils.tcl new file mode 100644 index 0000000..ee961dd --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_utils.tcl @@ -0,0 +1,252 @@ +# +# tkdnd_utils.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +package require tkdnd +namespace eval ::tkdnd { + namespace eval utils { + };# namespace ::tkdnd::utils + namespace eval text { + variable _drag_tag tkdnd::drag::selection::tag + variable _state {} + variable _drag_source_widget {} + variable _drop_target_widget {} + variable _now_dragging 0 + };# namespace ::tkdnd::text +};# namespace ::tkdnd + +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag clear 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag motion 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_TextAutoScan %W %x %y} +bind TkDND_Drag_Text1 {tkdnd::text::_begin_drag reset 1 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag clear 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag motion 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text2 {tkdnd::text::_begin_drag reset 2 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag clear 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag motion 3 %W %s %X %Y %x %y} +bind TkDND_Drag_Text3 {tkdnd::text::_begin_drag reset 3 %W %s %X %Y %x %y} + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drag_source +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drag_source { mode path { types DND_Text } { event 1 } { tagprefix TkDND_Drag_Text } { tag sel } } { + switch -exact -- $mode { + register { + $path tag bind $tag \ + "tkdnd::text::_begin_drag press ${event} %W %s %X %Y %x %y" + ## Set a binding to the widget, to put selection as data... + bind $path <> "::tkdnd::text::DragInitCmd $path {%t} $tag" + ## Set a binding to the widget, to remove selection if action is move... + bind $path <> "::tkdnd::text::DragEndCmd $path %A $tag" + } + unregister { + $path tag bind $tag {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drag_source $mode $path $types $event $tagprefix +};# ::tkdnd::text::drag_source + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::drop_target +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::drop_target { mode path { types DND_Text } } { + switch -exact -- $mode { + register { + bind $path <> "::tkdnd::text::DropPosition $path %X %Y %A %a %m" + bind $path <> "::tkdnd::text::Drop $path %D %X %Y %A %a %m" + } + unregister { + bind $path <> {} + bind $path <> {} + bind $path <> {} + bind $path <> {} + } + } + ::tkdnd::drop_target $mode $path $types +};# ::tkdnd::text::drop_target + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragInitCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragInitCmd { path { types DND_Text } { tag sel } { actions { copy move } } } { + ## Save the selection indices... + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget $path + set _drop_target_widget {} + _save_selection $path $tag + list $actions $types [$path get $tag.first $tag.last] +};# ::tkdnd::text::DragInitCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DragEndCmd +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DragEndCmd { path action { tag sel } } { + variable _drag_source_widget + variable _drop_target_widget + set _drag_source_widget {} + set _drop_target_widget {} + _restore_selection $path $tag + switch -exact -- $action { + move { + ## Delete the original selected text... + variable _selection_first + variable _selection_last + $path delete $_selection_first $_selection_last + } + } +};# ::tkdnd::text::DragEndCmd + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::DropPosition +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::DropPosition { path X Y action actions keys} { + variable _drag_source_widget + variable _drop_target_widget + set _drop_target_widget $path + ## This check is primitive, a more accurate one is needed! + if {$path eq $_drag_source_widget} { + ## This is a drag within the same widget! Set action to move... + if {"move" in $actions} {set action move} + } + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y; update + return $action +};# ::tkdnd::text::DropPosition + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::Drop +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::Drop { path data X Y action actions keys } { + incr X -[winfo rootx $path] + incr Y -[winfo rooty $path] + $path mark set insert @$X,$Y + $path insert [$path index insert] $data + return $action +};# ::tkdnd::text::Drop + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_save_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_save_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + variable _selection_tag $tag + set _selection_first [$path index $tag.first] + set _selection_last [$path index $tag.last] + $path tag add $_drag_tag $_selection_first $_selection_last + $path tag configure $_drag_tag \ + -background [$path tag cget $tag -background] \ + -foreground [$path tag cget $tag -foreground] +};# tkdnd::text::_save_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_restore_selection +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_restore_selection { path tag} { + variable _drag_tag + variable _selection_first + variable _selection_last + $path tag delete $_drag_tag + $path tag remove $tag 0.0 end + #$path tag add $tag $_selection_first $_selection_last +};# tkdnd::text::_restore_selection + +# ---------------------------------------------------------------------------- +# Command tkdnd::text::_begin_drag +# ---------------------------------------------------------------------------- +proc ::tkdnd::text::_begin_drag { event button source state X Y x y } { + variable _drop_target_widget + variable _state + # puts "::tkdnd::text::_begin_drag $event $button $source $state $X $Y $x $y" + + switch -exact -- $event { + clear { + switch -exact -- $_state { + press { + ## Do not execute other bindings, as they will erase selection... + return -code break + } + } + set _state clear + } + motion { + variable _now_dragging + if {$_now_dragging} {return -code break} + if { [string equal $_state "press"] } { + variable _x0; variable _y0 + if { abs($_x0-$X) > ${::tkdnd::_dx} || abs($_y0-$Y) > ${::tkdnd::_dy} } { + set _state "done" + set _drop_target_widget {} + set _now_dragging 1 + set code [catch { + ::tkdnd::_init_drag $button $source $state $X $Y $x $y + } info options] + set _drop_target_widget {} + set _now_dragging 0 + if {$code != 0} { + ## Something strange occurred... + return -options $options $info + } + } + return -code break + } + set _state clear + } + press { + variable _x0; variable _y0 + set _x0 $X + set _y0 $Y + set _state "press" + } + reset { + set _state {} + } + } + if {$source eq $_drop_target_widget} {return -code break} + return -code continue +};# tkdnd::text::_begin_drag + +proc tkdnd::text::_TextAutoScan {w x y} { + variable _now_dragging + if {$_now_dragging} {return -code break} + return -code continue +};# tkdnd::text::_TextAutoScan diff --git a/tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl b/tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl new file mode 100644 index 0000000..a1d01f3 --- /dev/null +++ b/tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl @@ -0,0 +1,167 @@ +# +# tkdnd_windows.tcl -- +# +# This file implements some utility procedures that are used by the TkDND +# package. +# +# This software is copyrighted by: +# George Petasis, National Centre for Scientific Research "Demokritos", +# Aghia Paraskevi, Athens, Greece. +# e-mail: petasis@iit.demokritos.gr +# +# The following terms apply to all files associated +# with the software unless explicitly disclaimed in individual files. +# +# The authors hereby grant permission to use, copy, modify, distribute, +# and license this software and its documentation for any purpose, provided +# that existing copyright notices are retained in all copies and that this +# notice is included verbatim in any distributions. No written agreement, +# license, or royalty fee is required for any of the authorized uses. +# Modifications to this software may be copyrighted by their authors +# and need not follow the licensing terms described here, provided that +# the new terms are clearly indicated on the first page of each file where +# they apply. +# +# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +# MODIFICATIONS. +# + +namespace eval olednd { + + proc initialise { } { + ## Mapping from platform types to TkDND types... + ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ + CF_UNICODETEXT DND_Text \ + CF_TEXT DND_Text \ + CF_HDROP DND_Files \ + UniformResourceLocator DND_URL \ + CF_HTML DND_HTML \ + {HTML Format} DND_HTML \ + CF_RTF DND_RTF \ + CF_RTFTEXT DND_RTF \ + {Rich Text Format} DND_RTF \ + ] + # FileGroupDescriptorW DND_Files \ + # FileGroupDescriptor DND_Files \ + + ## Mapping from TkDND types to platform types... + ::tkdnd::generic::initialise_tkdnd_to_platform_types [list \ + DND_Text {CF_UNICODETEXT CF_TEXT} \ + DND_Files {CF_HDROP} \ + DND_URL {UniformResourceLocator UniformResourceLocatorW} \ + DND_HTML {CF_HTML {HTML Format}} \ + DND_RTF {CF_RTF CF_RTFTEXT {Rich Text Format}} \ + ] + };# initialise + +};# namespace olednd + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragEnter +# ---------------------------------------------------------------------------- +proc olednd::HandleDragEnter { drop_target typelist actionlist pressedkeys + rootX rootY codelist { data {} } } { + ::tkdnd::generic::SetDroppedData $data + focus $drop_target + ::tkdnd::generic::HandleEnter $drop_target 0 $typelist \ + $codelist $actionlist $pressedkeys + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragEnter + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragOver +# ---------------------------------------------------------------------------- +proc olednd::HandleDragOver { drop_target pressedkeys rootX rootY } { + set action [::tkdnd::generic::HandlePosition $drop_target {} \ + $pressedkeys $rootX $rootY] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDragOver + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDragLeave +# ---------------------------------------------------------------------------- +proc olednd::HandleDragLeave { drop_target } { + ::tkdnd::generic::HandleLeave + if {$::tkdnd::_auto_update} {update idletasks} +};# olednd::HandleDragLeave + +# ---------------------------------------------------------------------------- +# Command olednd::HandleDrop +# ---------------------------------------------------------------------------- +proc olednd::HandleDrop { drop_target pressedkeys rootX rootY type data } { + ::tkdnd::generic::SetDroppedData [normalise_data $type $data] + set action [::tkdnd::generic::HandleDrop $drop_target {} \ + $pressedkeys $rootX $rootY 0] + if {$::tkdnd::_auto_update} {update idletasks} + return $action +};# olednd::HandleDrop + +# ---------------------------------------------------------------------------- +# Command olednd::GetDataType +# ---------------------------------------------------------------------------- +proc olednd::GetDataType { drop_target typelist } { + foreach {drop_target common_drag_source_types common_drop_target_types} \ + [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} + lindex $common_drag_source_types 0 +};# olednd::GetDataType + +# ---------------------------------------------------------------------------- +# Command olednd::GetDragSourceCommonTypes +# ---------------------------------------------------------------------------- +proc olednd::GetDragSourceCommonTypes { drop_target } { + ::tkdnd::generic::GetDragSourceCommonTypes +};# olednd::GetDragSourceCommonTypes + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_types +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_types { types } { + ::tkdnd::generic::platform_specific_types $types +}; # olednd::platform_specific_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_specific_type +# ---------------------------------------------------------------------------- +proc olednd::platform_specific_type { type } { + ::tkdnd::generic::platform_specific_type $type +}; # olednd::platform_specific_type + +# ---------------------------------------------------------------------------- +# Command tkdnd::platform_independent_types +# ---------------------------------------------------------------------------- +proc ::tkdnd::platform_independent_types { types } { + ::tkdnd::generic::platform_independent_types $types +}; # tkdnd::platform_independent_types + +# ---------------------------------------------------------------------------- +# Command olednd::platform_independent_type +# ---------------------------------------------------------------------------- +proc olednd::platform_independent_type { type } { + ::tkdnd::generic::platform_independent_type $type +}; # olednd::platform_independent_type + +# ---------------------------------------------------------------------------- +# Command olednd::normalise_data +# ---------------------------------------------------------------------------- +proc olednd::normalise_data { type data } { + switch [lindex [::tkdnd::generic::platform_independent_type $type] 0] { + DND_Text {return $data} + DND_Files {return $data} + DND_HTML {return [encoding convertfrom utf-8 $data]} + default {return $data} + } +}; # olednd::normalise_data diff --git a/tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll b/tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll new file mode 100644 index 0000000000000000000000000000000000000000..c9cc5abbed923f273a5d22ca7590e45e771b11b5 GIT binary patch literal 153600 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