├── README.md ├── UVR.py ├── __version__.py ├── demucs ├── __init__.py ├── __main__.py ├── apply.py ├── demucs.py ├── filtering.py ├── hdemucs.py ├── htdemucs.py ├── model.py ├── model_v2.py ├── pretrained.py ├── repo.py ├── spec.py ├── states.py ├── tasnet.py ├── tasnet_v2.py ├── transformer.py └── utils.py ├── gui_data ├── app_size_values.py ├── change_log.txt ├── complete_chime.wav ├── constants.py ├── error_handling.py ├── fail_chime.wav ├── fonts │ ├── Montserrat │ │ └── Montserrat.ttf │ ├── centurygothic │ │ └── GOTHIC.ttf │ └── other │ │ └── own_font_goes_here.txt ├── img │ ├── File.png │ ├── GUI-Icon.ico │ ├── GUI-Icon.png │ ├── UVR-banner.png │ ├── UVR.icns │ ├── UVR_v5.6.png │ ├── clear.png │ ├── copy.png │ ├── credits.png │ ├── donate.png │ ├── down.png │ ├── download.png │ ├── help.png │ ├── key.png │ ├── left.png │ ├── pause.png │ ├── play.png │ ├── right.png │ ├── splash.bmp │ ├── stop.png │ ├── stop_player.png │ └── up.png ├── model_manual_download.json ├── old_data_check.py ├── own_font.json ├── saved_ensembles │ └── saved_ensembles_go_here.txt ├── saved_settings │ └── saved_settings_go_here.txt ├── sv_ttk │ ├── __init__.py │ ├── sun-valley.tcl │ ├── sun-valley_darwin.tcl │ └── theme │ │ ├── dark.tcl │ │ └── dark │ │ ├── arrow-down.png │ │ ├── arrow-right.png │ │ ├── arrow-up.png │ │ ├── button-accent-disabled.png │ │ ├── button-accent-hover.png │ │ ├── button-accent-pressed.png │ │ ├── button-accent-rest.png │ │ ├── button-close-hover.png │ │ ├── button-close-pressed.png │ │ ├── button-disabled.png │ │ ├── button-hover.png │ │ ├── button-pressed.png │ │ ├── button-rest.png │ │ ├── button-titlebar-hover.png │ │ ├── button-titlebar-pressed.png │ │ ├── card.png │ │ ├── check-disabled.png │ │ ├── check-hover.png │ │ ├── check-pressed.png │ │ ├── check-rest.png │ │ ├── check-tri-disabled.png │ │ ├── check-tri-hover.png │ │ ├── check-tri-pressed.png │ │ ├── check-tri-rest.png │ │ ├── check-unsel-disabled.png │ │ ├── check-unsel-hover.png │ │ ├── check-unsel-pressed.png │ │ ├── check-unsel-rest.png │ │ ├── combo-disabled.png │ │ ├── empty.png │ │ ├── entry-disabled.png │ │ ├── entry-focus.png │ │ ├── entry-hover.png │ │ ├── entry-invalid.png │ │ ├── entry-rest-combo.png │ │ ├── entry-rest.png │ │ ├── notebook-border.png │ │ ├── notebook.png │ │ ├── progress-pbar-hor.png │ │ ├── progress-pbar-vert.png │ │ ├── progress-trough-hor.png │ │ ├── progress-trough-vert.png │ │ ├── radio-disabled.png │ │ ├── radio-hover.png │ │ ├── radio-pressed.png │ │ ├── radio-rest.png │ │ ├── radio-unsel-disabled.png │ │ ├── radio-unsel-hover.png │ │ ├── radio-unsel-pressed.png │ │ ├── radio-unsel-rest.png │ │ ├── scale-thumb-disabled.png │ │ ├── scale-thumb-hover.png │ │ ├── scale-thumb-pressed.png │ │ ├── scale-thumb-rest.png │ │ ├── scale-trough-hor.png │ │ ├── scale-trough-vert.png │ │ ├── scroll-down.png │ │ ├── scroll-hor-thumb.png │ │ ├── scroll-hor-trough.png │ │ ├── scroll-left.png │ │ ├── scroll-right.png │ │ ├── scroll-up.png │ │ ├── scroll-vert-thumb.png │ │ ├── scroll-vert-trough.png │ │ ├── separator.png │ │ ├── sizegrip.png │ │ ├── switch-off-disabled.png │ │ ├── switch-off-hover.png │ │ ├── switch-off-pressed.png │ │ ├── switch-off-rest.png │ │ ├── switch-on-disabled.png │ │ ├── switch-on-hover.png │ │ ├── switch-on-pressed.png │ │ ├── switch-on-rest.png │ │ ├── tab-hover.png │ │ ├── tab-rest.png │ │ ├── tab-selected.png │ │ ├── treeheading-hover.png │ │ ├── treeheading-pressed.png │ │ └── treeheading-rest.png └── tkinterdnd2 │ ├── TkinterDnD.py │ ├── __init__.py │ └── tkdnd │ ├── linux64 │ ├── libtkdnd2.9.2.so │ ├── pkgIndex.tcl │ ├── tkdnd.tcl │ ├── tkdnd_compat.tcl │ ├── tkdnd_generic.tcl │ ├── tkdnd_macosx.tcl │ ├── tkdnd_unix.tcl │ ├── tkdnd_utils.tcl │ └── tkdnd_windows.tcl │ ├── osx64 │ ├── libtkdnd2.9.2.dylib │ ├── pkgIndex.tcl │ ├── tkdnd.tcl │ ├── tkdnd_compat.tcl │ ├── tkdnd_generic.tcl │ ├── tkdnd_macosx.tcl │ ├── tkdnd_unix.tcl │ ├── tkdnd_utils.tcl │ └── tkdnd_windows.tcl │ ├── osx_arm │ ├── libtkdnd2.9.3.dylib │ ├── pkgIndex.tcl │ ├── tkdnd.tcl │ ├── tkdnd_compat.tcl │ ├── tkdnd_generic.tcl │ ├── tkdnd_macosx.tcl │ ├── tkdnd_unix.tcl │ ├── tkdnd_utils.tcl │ └── tkdnd_windows.tcl │ └── win64 │ ├── libtkdnd2.9.2.dll │ ├── pkgIndex.tcl │ ├── tkdnd.tcl │ ├── tkdnd2.9.2.lib │ ├── tkdnd_compat.tcl │ ├── tkdnd_generic.tcl │ ├── tkdnd_macosx.tcl │ ├── tkdnd_unix.tcl │ ├── tkdnd_utils.tcl │ └── tkdnd_windows.tcl ├── install_packages.sh ├── lib_v5 ├── mdxnet.py ├── mixer.ckpt ├── modules.py ├── pyrb.py ├── results.py ├── spec_utils.py ├── tfc_tdf_v3.py └── vr_network │ ├── __init__.py │ ├── layers.py │ ├── layers_new.py │ ├── model_param_init.py │ ├── modelparams │ ├── 1band_sr16000_hl512.json │ ├── 1band_sr32000_hl512.json │ ├── 1band_sr33075_hl384.json │ ├── 1band_sr44100_hl1024.json │ ├── 1band_sr44100_hl256.json │ ├── 1band_sr44100_hl512.json │ ├── 1band_sr44100_hl512_cut.json │ ├── 1band_sr44100_hl512_nf1024.json │ ├── 2band_32000.json │ ├── 2band_44100_lofi.json │ ├── 2band_48000.json │ ├── 3band_44100.json │ ├── 3band_44100_mid.json │ ├── 3band_44100_msb2.json │ ├── 4band_44100.json │ ├── 4band_44100_mid.json │ ├── 4band_44100_msb.json │ ├── 4band_44100_msb2.json │ ├── 4band_44100_reverse.json │ ├── 4band_44100_sw.json │ ├── 4band_v2.json │ ├── 4band_v2_sn.json │ ├── 4band_v3.json │ ├── 4band_v3_sn.json │ └── ensemble.json │ ├── nets.py │ └── nets_new.py ├── models ├── Demucs_Models │ ├── model_data │ │ └── model_name_mapper.json │ └── v3_v4_repo │ │ └── demucs_models.txt ├── MDX_Net_Models │ └── model_data │ │ ├── mdx_c_configs │ │ ├── model1.yaml │ │ ├── model2.yaml │ │ ├── model3.yaml │ │ ├── modelA.yaml │ │ ├── modelB.yaml │ │ ├── model_2_stem_061321.yaml │ │ ├── model_2_stem_full_band.yaml │ │ ├── model_2_stem_full_band_2.yaml │ │ ├── model_2_stem_full_band_3.yaml │ │ ├── model_2_stem_full_band_4.yaml │ │ ├── model_2_stem_full_band_8k.yaml │ │ └── sndfx.yaml │ │ ├── model_data.json │ │ └── model_name_mapper.json └── VR_Models │ ├── UVR-DeNoise-Lite.pth │ └── model_data │ └── model_data.json ├── requirements.txt └── separate.py /__version__.py: -------------------------------------------------------------------------------- 1 | VERSION = 'v5.6.0' 2 | PATCH = 'UVR_Patch_9_29_23_1_39' 3 | PATCH_MAC = 'UVR_Patch_9_29_23_1_39' 4 | PATCH_LINUX = 'UVR_Patch_9_29_23_1_39' 5 | -------------------------------------------------------------------------------- /demucs/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Facebook, Inc. and its affiliates. 2 | # All rights reserved. 3 | # 4 | # This source code is licensed under the license found in the 5 | # LICENSE file in the root directory of this source tree. 6 | -------------------------------------------------------------------------------- /demucs/pretrained.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Facebook, Inc. and its affiliates. 2 | # All rights reserved. 3 | # 4 | # This source code is licensed under the license found in the 5 | # LICENSE file in the root directory of this source tree. 6 | """Loading pretrained models. 7 | """ 8 | 9 | import logging 10 | from pathlib import Path 11 | import typing as tp 12 | 13 | #from dora.log import fatal 14 | 15 | import logging 16 | 17 | from diffq import DiffQuantizer 18 | import torch.hub 19 | 20 | from .model import Demucs 21 | from .tasnet_v2 import ConvTasNet 22 | from .utils import set_state 23 | 24 | from .hdemucs import HDemucs 25 | from .repo import RemoteRepo, LocalRepo, ModelOnlyRepo, BagOnlyRepo, AnyModelRepo, ModelLoadingError # noqa 26 | 27 | logger = logging.getLogger(__name__) 28 | ROOT_URL = "https://dl.fbaipublicfiles.com/demucs/mdx_final/" 29 | REMOTE_ROOT = Path(__file__).parent / 'remote' 30 | 31 | SOURCES = ["drums", "bass", "other", "vocals"] 32 | 33 | 34 | def demucs_unittest(): 35 | model = HDemucs(channels=4, sources=SOURCES) 36 | return model 37 | 38 | 39 | def add_model_flags(parser): 40 | group = parser.add_mutually_exclusive_group(required=False) 41 | group.add_argument("-s", "--sig", help="Locally trained XP signature.") 42 | group.add_argument("-n", "--name", default="mdx_extra_q", 43 | help="Pretrained model name or signature. Default is mdx_extra_q.") 44 | parser.add_argument("--repo", type=Path, 45 | help="Folder containing all pre-trained models for use with -n.") 46 | 47 | 48 | def _parse_remote_files(remote_file_list) -> tp.Dict[str, str]: 49 | root: str = '' 50 | models: tp.Dict[str, str] = {} 51 | for line in remote_file_list.read_text().split('\n'): 52 | line = line.strip() 53 | if line.startswith('#'): 54 | continue 55 | elif line.startswith('root:'): 56 | root = line.split(':', 1)[1].strip() 57 | else: 58 | sig = line.split('-', 1)[0] 59 | assert sig not in models 60 | models[sig] = ROOT_URL + root + line 61 | return models 62 | 63 | def get_model(name: str, 64 | repo: tp.Optional[Path] = None): 65 | """`name` must be a bag of models name or a pretrained signature 66 | from the remote AWS model repo or the specified local repo if `repo` is not None. 67 | """ 68 | if name == 'demucs_unittest': 69 | return demucs_unittest() 70 | model_repo: ModelOnlyRepo 71 | if repo is None: 72 | models = _parse_remote_files(REMOTE_ROOT / 'files.txt') 73 | model_repo = RemoteRepo(models) 74 | bag_repo = BagOnlyRepo(REMOTE_ROOT, model_repo) 75 | else: 76 | if not repo.is_dir(): 77 | fatal(f"{repo} must exist and be a directory.") 78 | model_repo = LocalRepo(repo) 79 | bag_repo = BagOnlyRepo(repo, model_repo) 80 | any_repo = AnyModelRepo(model_repo, bag_repo) 81 | model = any_repo.get_model(name) 82 | model.eval() 83 | return model 84 | 85 | def get_model_from_args(args): 86 | """ 87 | Load local model package or pre-trained model. 88 | """ 89 | return get_model(name=args.name, repo=args.repo) 90 | 91 | logger = logging.getLogger(__name__) 92 | ROOT = "https://dl.fbaipublicfiles.com/demucs/v3.0/" 93 | 94 | PRETRAINED_MODELS = { 95 | 'demucs': 'e07c671f', 96 | 'demucs48_hq': '28a1282c', 97 | 'demucs_extra': '3646af93', 98 | 'demucs_quantized': '07afea75', 99 | 'tasnet': 'beb46fac', 100 | 'tasnet_extra': 'df3777b2', 101 | 'demucs_unittest': '09ebc15f', 102 | } 103 | 104 | SOURCES = ["drums", "bass", "other", "vocals"] 105 | 106 | 107 | def get_url(name): 108 | sig = PRETRAINED_MODELS[name] 109 | return ROOT + name + "-" + sig[:8] + ".th" 110 | 111 | def is_pretrained(name): 112 | return name in PRETRAINED_MODELS 113 | 114 | 115 | def load_pretrained(name): 116 | if name == "demucs": 117 | return demucs(pretrained=True) 118 | elif name == "demucs48_hq": 119 | return demucs(pretrained=True, hq=True, channels=48) 120 | elif name == "demucs_extra": 121 | return demucs(pretrained=True, extra=True) 122 | elif name == "demucs_quantized": 123 | return demucs(pretrained=True, quantized=True) 124 | elif name == "demucs_unittest": 125 | return demucs_unittest(pretrained=True) 126 | elif name == "tasnet": 127 | return tasnet(pretrained=True) 128 | elif name == "tasnet_extra": 129 | return tasnet(pretrained=True, extra=True) 130 | else: 131 | raise ValueError(f"Invalid pretrained name {name}") 132 | 133 | 134 | def _load_state(name, model, quantizer=None): 135 | url = get_url(name) 136 | state = torch.hub.load_state_dict_from_url(url, map_location='cpu', check_hash=True) 137 | set_state(model, quantizer, state) 138 | if quantizer: 139 | quantizer.detach() 140 | 141 | 142 | def demucs_unittest(pretrained=True): 143 | model = Demucs(channels=4, sources=SOURCES) 144 | if pretrained: 145 | _load_state('demucs_unittest', model) 146 | return model 147 | 148 | 149 | def demucs(pretrained=True, extra=False, quantized=False, hq=False, channels=64): 150 | if not pretrained and (extra or quantized or hq): 151 | raise ValueError("if extra or quantized is True, pretrained must be True.") 152 | model = Demucs(sources=SOURCES, channels=channels) 153 | if pretrained: 154 | name = 'demucs' 155 | if channels != 64: 156 | name += str(channels) 157 | quantizer = None 158 | if sum([extra, quantized, hq]) > 1: 159 | raise ValueError("Only one of extra, quantized, hq, can be True.") 160 | if quantized: 161 | quantizer = DiffQuantizer(model, group_size=8, min_size=1) 162 | name += '_quantized' 163 | if extra: 164 | name += '_extra' 165 | if hq: 166 | name += '_hq' 167 | _load_state(name, model, quantizer) 168 | return model 169 | 170 | 171 | def tasnet(pretrained=True, extra=False): 172 | if not pretrained and extra: 173 | raise ValueError("if extra is True, pretrained must be True.") 174 | model = ConvTasNet(X=10, sources=SOURCES) 175 | if pretrained: 176 | name = 'tasnet' 177 | if extra: 178 | name = 'tasnet_extra' 179 | _load_state(name, model) 180 | return model -------------------------------------------------------------------------------- /demucs/repo.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Facebook, Inc. and its affiliates. 2 | # All rights reserved. 3 | # 4 | # This source code is licensed under the license found in the 5 | # LICENSE file in the root directory of this source tree. 6 | """Represents a model repository, including pre-trained models and bags of models. 7 | A repo can either be the main remote repository stored in AWS, or a local repository 8 | with your own models. 9 | """ 10 | 11 | from hashlib import sha256 12 | from pathlib import Path 13 | import typing as tp 14 | 15 | import torch 16 | import yaml 17 | 18 | from .apply import BagOfModels, Model 19 | from .states import load_model 20 | 21 | 22 | AnyModel = tp.Union[Model, BagOfModels] 23 | 24 | 25 | class ModelLoadingError(RuntimeError): 26 | pass 27 | 28 | 29 | def check_checksum(path: Path, checksum: str): 30 | sha = sha256() 31 | with open(path, 'rb') as file: 32 | while True: 33 | buf = file.read(2**20) 34 | if not buf: 35 | break 36 | sha.update(buf) 37 | actual_checksum = sha.hexdigest()[:len(checksum)] 38 | if actual_checksum != checksum: 39 | raise ModelLoadingError(f'Invalid checksum for file {path}, ' 40 | f'expected {checksum} but got {actual_checksum}') 41 | 42 | class ModelOnlyRepo: 43 | """Base class for all model only repos. 44 | """ 45 | def has_model(self, sig: str) -> bool: 46 | raise NotImplementedError() 47 | 48 | def get_model(self, sig: str) -> Model: 49 | raise NotImplementedError() 50 | 51 | 52 | class RemoteRepo(ModelOnlyRepo): 53 | def __init__(self, models: tp.Dict[str, str]): 54 | self._models = models 55 | 56 | def has_model(self, sig: str) -> bool: 57 | return sig in self._models 58 | 59 | def get_model(self, sig: str) -> Model: 60 | try: 61 | url = self._models[sig] 62 | except KeyError: 63 | raise ModelLoadingError(f'Could not find a pre-trained model with signature {sig}.') 64 | pkg = torch.hub.load_state_dict_from_url(url, map_location='cpu', check_hash=True) 65 | return load_model(pkg) 66 | 67 | 68 | class LocalRepo(ModelOnlyRepo): 69 | def __init__(self, root: Path): 70 | self.root = root 71 | self.scan() 72 | 73 | def scan(self): 74 | self._models = {} 75 | self._checksums = {} 76 | for file in self.root.iterdir(): 77 | if file.suffix == '.th': 78 | if '-' in file.stem: 79 | xp_sig, checksum = file.stem.split('-') 80 | self._checksums[xp_sig] = checksum 81 | else: 82 | xp_sig = file.stem 83 | if xp_sig in self._models: 84 | print('Whats xp? ', xp_sig) 85 | raise ModelLoadingError( 86 | f'Duplicate pre-trained model exist for signature {xp_sig}. ' 87 | 'Please delete all but one.') 88 | self._models[xp_sig] = file 89 | 90 | def has_model(self, sig: str) -> bool: 91 | return sig in self._models 92 | 93 | def get_model(self, sig: str) -> Model: 94 | try: 95 | file = self._models[sig] 96 | except KeyError: 97 | raise ModelLoadingError(f'Could not find pre-trained model with signature {sig}.') 98 | if sig in self._checksums: 99 | check_checksum(file, self._checksums[sig]) 100 | return load_model(file) 101 | 102 | 103 | class BagOnlyRepo: 104 | """Handles only YAML files containing bag of models, leaving the actual 105 | model loading to some Repo. 106 | """ 107 | def __init__(self, root: Path, model_repo: ModelOnlyRepo): 108 | self.root = root 109 | self.model_repo = model_repo 110 | self.scan() 111 | 112 | def scan(self): 113 | self._bags = {} 114 | for file in self.root.iterdir(): 115 | if file.suffix == '.yaml': 116 | self._bags[file.stem] = file 117 | 118 | def has_model(self, name: str) -> bool: 119 | return name in self._bags 120 | 121 | def get_model(self, name: str) -> BagOfModels: 122 | try: 123 | yaml_file = self._bags[name] 124 | except KeyError: 125 | raise ModelLoadingError(f'{name} is neither a single pre-trained model or ' 126 | 'a bag of models.') 127 | bag = yaml.safe_load(open(yaml_file)) 128 | signatures = bag['models'] 129 | models = [self.model_repo.get_model(sig) for sig in signatures] 130 | weights = bag.get('weights') 131 | segment = bag.get('segment') 132 | return BagOfModels(models, weights, segment) 133 | 134 | 135 | class AnyModelRepo: 136 | def __init__(self, model_repo: ModelOnlyRepo, bag_repo: BagOnlyRepo): 137 | self.model_repo = model_repo 138 | self.bag_repo = bag_repo 139 | 140 | def has_model(self, name_or_sig: str) -> bool: 141 | return self.model_repo.has_model(name_or_sig) or self.bag_repo.has_model(name_or_sig) 142 | 143 | def get_model(self, name_or_sig: str) -> AnyModel: 144 | print('name_or_sig: ', name_or_sig) 145 | if self.model_repo.has_model(name_or_sig): 146 | return self.model_repo.get_model(name_or_sig) 147 | else: 148 | return self.bag_repo.get_model(name_or_sig) 149 | -------------------------------------------------------------------------------- /demucs/spec.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Meta Platforms, Inc. and affiliates. 2 | # All rights reserved. 3 | # 4 | # This source code is licensed under the license found in the 5 | # LICENSE file in the root directory of this source tree. 6 | """Conveniance wrapper to perform STFT and iSTFT""" 7 | 8 | import torch as th 9 | 10 | 11 | def spectro(x, n_fft=512, hop_length=None, pad=0): 12 | *other, length = x.shape 13 | x = x.reshape(-1, length) 14 | 15 | device_type = x.device.type 16 | is_other_gpu = not device_type in ["cuda", "cpu"] 17 | 18 | if is_other_gpu: 19 | x = x.cpu() 20 | z = th.stft(x, 21 | n_fft * (1 + pad), 22 | hop_length or n_fft // 4, 23 | window=th.hann_window(n_fft).to(x), 24 | win_length=n_fft, 25 | normalized=True, 26 | center=True, 27 | return_complex=True, 28 | pad_mode='reflect') 29 | _, freqs, frame = z.shape 30 | return z.view(*other, freqs, frame) 31 | 32 | 33 | def ispectro(z, hop_length=None, length=None, pad=0): 34 | *other, freqs, frames = z.shape 35 | n_fft = 2 * freqs - 2 36 | z = z.view(-1, freqs, frames) 37 | win_length = n_fft // (1 + pad) 38 | 39 | device_type = z.device.type 40 | is_other_gpu = not device_type in ["cuda", "cpu"] 41 | 42 | if is_other_gpu: 43 | z = z.cpu() 44 | x = th.istft(z, 45 | n_fft, 46 | hop_length, 47 | window=th.hann_window(win_length).to(z.real), 48 | win_length=win_length, 49 | normalized=True, 50 | length=length, 51 | center=True) 52 | _, length = x.shape 53 | return x.view(*other, length) 54 | -------------------------------------------------------------------------------- /demucs/states.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Facebook, Inc. and its affiliates. 2 | # All rights reserved. 3 | # 4 | # This source code is licensed under the license found in the 5 | # LICENSE file in the root directory of this source tree. 6 | """ 7 | Utilities to save and load models. 8 | """ 9 | from contextlib import contextmanager 10 | 11 | import functools 12 | import hashlib 13 | import inspect 14 | import io 15 | from pathlib import Path 16 | import warnings 17 | 18 | from omegaconf import OmegaConf 19 | from diffq import DiffQuantizer, UniformQuantizer, restore_quantized_state 20 | import torch 21 | 22 | 23 | def get_quantizer(model, args, optimizer=None): 24 | """Return the quantizer given the XP quantization args.""" 25 | quantizer = None 26 | if args.diffq: 27 | quantizer = DiffQuantizer( 28 | model, min_size=args.min_size, group_size=args.group_size) 29 | if optimizer is not None: 30 | quantizer.setup_optimizer(optimizer) 31 | elif args.qat: 32 | quantizer = UniformQuantizer( 33 | model, bits=args.qat, min_size=args.min_size) 34 | return quantizer 35 | 36 | 37 | def load_model(path_or_package, strict=False): 38 | """Load a model from the given serialized model, either given as a dict (already loaded) 39 | or a path to a file on disk.""" 40 | if isinstance(path_or_package, dict): 41 | package = path_or_package 42 | elif isinstance(path_or_package, (str, Path)): 43 | with warnings.catch_warnings(): 44 | warnings.simplefilter("ignore") 45 | path = path_or_package 46 | package = torch.load(path, 'cpu') 47 | else: 48 | raise ValueError(f"Invalid type for {path_or_package}.") 49 | 50 | klass = package["klass"] 51 | args = package["args"] 52 | kwargs = package["kwargs"] 53 | 54 | if strict: 55 | model = klass(*args, **kwargs) 56 | else: 57 | sig = inspect.signature(klass) 58 | for key in list(kwargs): 59 | if key not in sig.parameters: 60 | warnings.warn("Dropping inexistant parameter " + key) 61 | del kwargs[key] 62 | model = klass(*args, **kwargs) 63 | 64 | state = package["state"] 65 | 66 | set_state(model, state) 67 | return model 68 | 69 | 70 | def get_state(model, quantizer, half=False): 71 | """Get the state from a model, potentially with quantization applied. 72 | If `half` is True, model are stored as half precision, which shouldn't impact performance 73 | but half the state size.""" 74 | if quantizer is None: 75 | dtype = torch.half if half else None 76 | state = {k: p.data.to(device='cpu', dtype=dtype) for k, p in model.state_dict().items()} 77 | else: 78 | state = quantizer.get_quantized_state() 79 | state['__quantized'] = True 80 | return state 81 | 82 | 83 | def set_state(model, state, quantizer=None): 84 | """Set the state on a given model.""" 85 | if state.get('__quantized'): 86 | if quantizer is not None: 87 | quantizer.restore_quantized_state(model, state['quantized']) 88 | else: 89 | restore_quantized_state(model, state) 90 | else: 91 | model.load_state_dict(state) 92 | return state 93 | 94 | 95 | def save_with_checksum(content, path): 96 | """Save the given value on disk, along with a sha256 hash. 97 | Should be used with the output of either `serialize_model` or `get_state`.""" 98 | buf = io.BytesIO() 99 | torch.save(content, buf) 100 | sig = hashlib.sha256(buf.getvalue()).hexdigest()[:8] 101 | 102 | path = path.parent / (path.stem + "-" + sig + path.suffix) 103 | path.write_bytes(buf.getvalue()) 104 | 105 | 106 | def serialize_model(model, training_args, quantizer=None, half=True): 107 | args, kwargs = model._init_args_kwargs 108 | klass = model.__class__ 109 | 110 | state = get_state(model, quantizer, half) 111 | return { 112 | 'klass': klass, 113 | 'args': args, 114 | 'kwargs': kwargs, 115 | 'state': state, 116 | 'training_args': OmegaConf.to_container(training_args, resolve=True), 117 | } 118 | 119 | 120 | def copy_state(state): 121 | return {k: v.cpu().clone() for k, v in state.items()} 122 | 123 | 124 | @contextmanager 125 | def swap_state(model, state): 126 | """ 127 | Context manager that swaps the state of a model, e.g: 128 | 129 | # model is in old state 130 | with swap_state(model, new_state): 131 | # model in new state 132 | # model back to old state 133 | """ 134 | old_state = copy_state(model.state_dict()) 135 | model.load_state_dict(state, strict=False) 136 | try: 137 | yield 138 | finally: 139 | model.load_state_dict(old_state) 140 | 141 | 142 | def capture_init(init): 143 | @functools.wraps(init) 144 | def __init__(self, *args, **kwargs): 145 | self._init_args_kwargs = (args, kwargs) 146 | init(self, *args, **kwargs) 147 | 148 | return __init__ 149 | -------------------------------------------------------------------------------- /gui_data/change_log.txt: -------------------------------------------------------------------------------- 1 | Most Recent Changes: 2 | 3 | ~ Fixed Download Center model list issue. 4 | ~ Fixed audio clip in ensemble mode. 5 | ~ Fixed output model name issue in ensemble mode. 6 | ~ Added "Batch Mode" for MDX-Net to increase performance. 7 | ~ Batch Mode is more memory efficient. 8 | ~ Batch Mode produces the best output, regardless of batch size. 9 | ~ Added Batch Mode for VR Architecture. 10 | ~ Added Mixer Mode for Demucs. 11 | ~ This option may improve separation for some 4-stem models. 12 | 13 | Fixes & Changes going from UVR v5.4 to v5.5: 14 | 15 | ~ The progress bar is now fully synced up with every process in the application. 16 | ~ Fixed low-resolution icon. 17 | ~ Added the ability to download models manually if the application can't connect 18 | to the internet. 19 | ~ Drag-n-drop is functional across all os platforms. 20 | ~ Resolved mp3 tag issue in MacOS version. 21 | 22 | Performance: 23 | 24 | ~ Model load times are faster. 25 | ~ Importing/exporting audio files is faster. 26 | 27 | MacOS M1 Notes: 28 | 29 | ~ The GPU Conversion checkbox will enable MPS for GPU acceleration. However, 30 | only the VR Architecture models are currently compatible with it. 31 | 32 | New Options: 33 | 34 | ~ Select Saved Settings option - Allows the user to save the current settings 35 | of the whole application. You can also load a saved setting or reset them to 36 | the default. 37 | ~ Right-click menu - Allows for quick access to important options. 38 | ~ Help Hints option - When enabled, users can hover over options to see a pop-up 39 | text that describes that option. The right-clicking option also allows copying 40 | the "Help Hint" text. 41 | ~ Secondary Model Mode - This option is an expanded version of the "Demucs Model" 42 | option that was only available to MDX-Net. Except now, this option is available 43 | in all three AI Networks and for any stem. Any model can now be Secondary, and 44 | the user can choose the amount of influence it has on the final result. 45 | ~ Robust caching for ensemble mode, allowing for much faster processing times. 46 | ~ Clicking the "Input" field will pop up a window allowing the user to review the selected audio inputs. Within this menu, users can: 47 | ~ Remove inputs. 48 | ~ Verify inputs. 49 | ~ Create samples of chosen inputs. 50 | ~ "Sample Mode" option - Allows the user to process only part of a track to sample 51 | settings or a model without running a full conversion. 52 | ~ The number in the parentheses is the current number of seconds the generated 53 | sample will be. 54 | ~ You can choose the number of seconds to extract from the track in the "Additional 55 | Settings" menu. 56 | 57 | VR Architecture: 58 | 59 | ~ Ability to toggle "High-End Processing." 60 | ~ Ability to change the post-processing threshold. 61 | ~ Support for the latest VR architecture 62 | ~ Crop Size and Batch Size are specifically for models using the latest 63 | architecture only. 64 | 65 | MDX-NET: 66 | 67 | ~ Denoise Output option results in cleaner results, 68 | but the processing time will be longer. This option has replaced Noise Reduction. 69 | ~ Spectral Inversion option uses spectral inversion techniques for a 70 | cleaner secondary stem result. This option may slow down the audio export process. 71 | ~ Secondary stem now has the same frequency cut-off as the main stem. 72 | 73 | Demucs: 74 | 75 | ~ Demucs v4 models are now supported, including the 6-stem model. 76 | ~ Ability to combine remaining stems instead of inverting selected stem with the 77 | mixture only when a user does not select "All Stems". 78 | ~ A Pre-process model that allows the user to run an inference through a robust 79 | vocal or instrumental model and separate the remaining stems from its generated 80 | instrumental mix. This option can significantly reduce vocal bleed in other 81 | Demucs-generated non-vocal stems. 82 | ~ The Pre-process model is intended for Demucs separations for all stems except 83 | vocals and instrumentals. 84 | 85 | Ensemble Mode: 86 | 87 | ~ Ensemble Mode has been extended to include the following: 88 | ~ Averaging is a new algorithm that averages the final results. 89 | ~ Unlimited models in the ensemble. 90 | ~ Ability to save different ensembles. 91 | ~ Ability to ensemble outputs for all individual stem types. 92 | ~ Ability to choose unique ensemble algorithms. 93 | ~ Ability to ensemble all 4 Demucs stems at once. -------------------------------------------------------------------------------- /gui_data/complete_chime.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/complete_chime.wav -------------------------------------------------------------------------------- /gui_data/error_handling.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import traceback 3 | 4 | CUDA_MEMORY_ERROR = "CUDA out of memory" 5 | CUDA_RUNTIME_ERROR = "CUDNN error executing cudnnSetTensorNdDescriptor" 6 | DEMUCS_MODEL_MISSING_ERROR = "is neither a single pre-trained model or a bag of models." 7 | ENSEMBLE_MISSING_MODEL_ERROR = "local variable \'enseExport\' referenced before assignment" 8 | FFMPEG_MISSING_ERROR = """audioread\__init__.py", line 116, in audio_open""" 9 | FILE_MISSING_ERROR = "FileNotFoundError" 10 | MDX_MEMORY_ERROR = "onnxruntime::CudaCall CUDA failure 2: out of memory" 11 | MDX_MODEL_MISSING = "[ONNXRuntimeError] : 3 : NO_SUCHFILE" 12 | MDX_MODEL_SETTINGS_ERROR = "Got invalid dimensions for input" 13 | MDX_RUNTIME_ERROR = "onnxruntime::BFCArena::AllocateRawInternal" 14 | MODULE_ERROR = "ModuleNotFoundError" 15 | WINDOW_SIZE_ERROR = "h1_shape[3] must be greater than h2_shape[3]" 16 | SF_WRITE_ERROR = "sf.write" 17 | SYSTEM_MEMORY_ERROR = "DefaultCPUAllocator: not enough memory" 18 | MISSING_MODEL_ERROR = "'NoneType\' object has no attribute \'model_basename\'" 19 | ARRAY_SIZE_ERROR = "ValueError: \"array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.\"" 20 | GPU_INCOMPATIBLE_ERROR = "no kernel image is available for execution on the device" 21 | SELECT_CORRECT_GPU = "CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect." 22 | 23 | CONTACT_DEV = 'If this error persists, please contact the developers with the error details.' 24 | 25 | ERROR_MAPPER = { 26 | CUDA_MEMORY_ERROR: 27 | ('The application was unable to allocate enough GPU memory to use this model. ' + 28 | 'Please close any GPU intensive applications and try again.\n' + 29 | 'If the error persists, your GPU might not be supported.') , 30 | CUDA_RUNTIME_ERROR: 31 | (f'Your PC cannot process this audio file with the segment size selected. Please lower the segment size and try again.\n\n{CONTACT_DEV}'), 32 | DEMUCS_MODEL_MISSING_ERROR: 33 | ('The selected Demucs model is missing. ' + 34 | 'Please download the model or make sure it is in the correct directory.'), 35 | ENSEMBLE_MISSING_MODEL_ERROR: 36 | ('The application was unable to locate a model you selected for this ensemble.\n\n' + 37 | 'Please do the following to use all compatible models:\n\n1. Navigate to the \"Updates\" tab in the Help Guide.\n2. Download and install the model expansion pack.\n3. Then try again.\n\n' + 38 | 'If the error persists, please verify all models are present.'), 39 | FFMPEG_MISSING_ERROR: 40 | ('The input file type is not supported or FFmpeg is missing. Please select a file type supported by FFmpeg and try again. ' + 41 | 'If FFmpeg is missing or not installed, you will only be able to process \".wav\" files until it is available on this system. ' + 42 | f'See the \"More Info\" tab in the Help Guide.\n\n{CONTACT_DEV}'), 43 | FILE_MISSING_ERROR: 44 | (f'Missing file error raised. Please address the error and try again.\n\n{CONTACT_DEV}'), 45 | MDX_MEMORY_ERROR: 46 | ('The application was unable to allocate enough GPU memory to use this model.\n\n' + 47 | 'Please do the following:\n\n1. Close any GPU intensive applications.\n2. Lower the set segment size.\n3. Then try again.\n\n' + 48 | 'If the error persists, your GPU might not be supported.'), 49 | MDX_MODEL_MISSING: 50 | ('The application could not detect this MDX-Net model on your system. ' + 51 | 'Please make sure all the models are present in the correct directory.\n\n' + 52 | 'If the error persists, please reinstall application or contact the developers.'), 53 | MDX_RUNTIME_ERROR: 54 | ('The application was unable to allocate enough GPU memory to use this model.\n\n' + 55 | 'Please do the following:\n\n1. Close any GPU intensive applications.\n2. Lower the set segment size.\n3. Then try again.\n\n' + 56 | 'If the error persists, your GPU might not be supported.'), 57 | WINDOW_SIZE_ERROR: 58 | ('Invalid window size.\n\n' + 59 | 'The chosen window size is likely not compatible with this model. Please select a different size and try again.'), 60 | SF_WRITE_ERROR: 61 | ('Could not write audio file.\n\n' + 62 | 'This could be due to one of the following:\n\n1. Low storage on target device.\n2. The export directory no longer exists.\n3. A system permissions issue.'), 63 | SYSTEM_MEMORY_ERROR: 64 | ('The application was unable to allocate enough system memory to use this model.\n\n' + 65 | 'Please do the following:\n\n1. Restart this application.\n2. Ensure any CPU intensive applications are closed.\n3. Then try again.\n\n' + 66 | 'Please Note: Intel Pentium and Intel Celeron processors do not work well with this application.\n\n' + 67 | 'If the error persists, the system may not have enough RAM, or your CPU might not be supported.'), 68 | MISSING_MODEL_ERROR: 69 | ('Model Missing: The application was unable to locate the chosen model.\n\n' + 70 | 'If the error persists, please verify any selected models are present.'), 71 | GPU_INCOMPATIBLE_ERROR: 72 | ('This process is not compatible with your GPU.\n\n' + 73 | 'Please uncheck \"GPU Conversion\" and try again'), 74 | SELECT_CORRECT_GPU: 75 | ('Make sure you\'ve chosen the correct GPU.\n\n' 76 | 'Go to the "Settings Guide", click the "Additional Settings" tab and select the correct GPU device.'), 77 | ARRAY_SIZE_ERROR: 78 | ('The application was not able to process the given audiofile. Please convert the audiofile to another format and try again.'), 79 | } 80 | 81 | def error_text(process_method, exception): 82 | 83 | traceback_text = ''.join(traceback.format_tb(exception.__traceback__)) 84 | message = f'{type(exception).__name__}: "{exception}"\nTraceback Error: "\n{traceback_text}"\n' 85 | error_message = f'\n\nRaw Error Details:\n\n{message}\nError Time Stamp [{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}]\n' 86 | process = f'Last Error Received:\n\nProcess: {process_method}\n\n' 87 | 88 | for error_type, full_text in ERROR_MAPPER.items(): 89 | if error_type in message: 90 | final_message = full_text 91 | break 92 | else: 93 | final_message = (CONTACT_DEV) 94 | 95 | return f"{process}{final_message}{error_message}" 96 | 97 | def error_dialouge(exception): 98 | 99 | error_name = f'{type(exception).__name__}' 100 | traceback_text = ''.join(traceback.format_tb(exception.__traceback__)) 101 | message = f'{error_name}: "{exception}"\n{traceback_text}"' 102 | 103 | for error_type, full_text in ERROR_MAPPER.items(): 104 | if error_type in message: 105 | final_message = full_text 106 | break 107 | else: 108 | final_message = (f'An Error Occurred: {error_name}\n\n{CONTACT_DEV}') 109 | 110 | return final_message 111 | -------------------------------------------------------------------------------- /gui_data/fail_chime.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/fail_chime.wav -------------------------------------------------------------------------------- /gui_data/fonts/Montserrat/Montserrat.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/fonts/Montserrat/Montserrat.ttf -------------------------------------------------------------------------------- /gui_data/fonts/centurygothic/GOTHIC.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/fonts/centurygothic/GOTHIC.ttf -------------------------------------------------------------------------------- /gui_data/fonts/other/own_font_goes_here.txt: -------------------------------------------------------------------------------- 1 | 0 -------------------------------------------------------------------------------- /gui_data/img/File.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/File.png -------------------------------------------------------------------------------- /gui_data/img/GUI-Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/GUI-Icon.ico -------------------------------------------------------------------------------- /gui_data/img/GUI-Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/GUI-Icon.png -------------------------------------------------------------------------------- /gui_data/img/UVR-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/UVR-banner.png -------------------------------------------------------------------------------- /gui_data/img/UVR.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/UVR.icns -------------------------------------------------------------------------------- /gui_data/img/UVR_v5.6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/UVR_v5.6.png -------------------------------------------------------------------------------- /gui_data/img/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/clear.png -------------------------------------------------------------------------------- /gui_data/img/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/copy.png -------------------------------------------------------------------------------- /gui_data/img/credits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/credits.png -------------------------------------------------------------------------------- /gui_data/img/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/donate.png -------------------------------------------------------------------------------- /gui_data/img/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/down.png -------------------------------------------------------------------------------- /gui_data/img/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/download.png -------------------------------------------------------------------------------- /gui_data/img/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/help.png -------------------------------------------------------------------------------- /gui_data/img/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/key.png -------------------------------------------------------------------------------- /gui_data/img/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/left.png -------------------------------------------------------------------------------- /gui_data/img/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/pause.png -------------------------------------------------------------------------------- /gui_data/img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/play.png -------------------------------------------------------------------------------- /gui_data/img/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/right.png -------------------------------------------------------------------------------- /gui_data/img/splash.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/splash.bmp -------------------------------------------------------------------------------- /gui_data/img/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/stop.png -------------------------------------------------------------------------------- /gui_data/img/stop_player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/stop_player.png -------------------------------------------------------------------------------- /gui_data/img/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/img/up.png -------------------------------------------------------------------------------- /gui_data/old_data_check.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | 4 | def file_check(original_dir, new_dir): 5 | 6 | if os.path.isdir(original_dir): 7 | for file in os.listdir(original_dir): 8 | shutil.move(os.path.join(original_dir, file), os.path.join(new_dir, file)) 9 | 10 | if len(os.listdir(original_dir)) == 0: 11 | shutil.rmtree(original_dir) 12 | 13 | def remove_unneeded_yamls(demucs_dir): 14 | 15 | for file in os.listdir(demucs_dir): 16 | if file.endswith('.yaml'): 17 | if os.path.isfile(os.path.join(demucs_dir, file)): 18 | os.remove(os.path.join(demucs_dir, file)) 19 | 20 | def remove_temps(remove_dir): 21 | 22 | if os.path.isdir(remove_dir): 23 | try: 24 | shutil.rmtree(remove_dir) 25 | except Exception as e: 26 | print(e) 27 | -------------------------------------------------------------------------------- /gui_data/own_font.json: -------------------------------------------------------------------------------- 1 | { 2 | "font_name": null, 3 | "font_file": null 4 | } -------------------------------------------------------------------------------- /gui_data/saved_ensembles/saved_ensembles_go_here.txt: -------------------------------------------------------------------------------- 1 | saved_ensembles_go_here -------------------------------------------------------------------------------- /gui_data/saved_settings/saved_settings_go_here.txt: -------------------------------------------------------------------------------- 1 | saved_settings_go_here -------------------------------------------------------------------------------- /gui_data/sv_ttk/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | import platform 3 | 4 | if platform.system() == "Darwin": 5 | sun_valley_tcl = "sun-valley_darwin.tcl" 6 | else: 7 | sun_valley_tcl = "sun-valley.tcl" 8 | 9 | inited = False 10 | root = None 11 | 12 | 13 | def init(func): 14 | def wrapper(*args, **kwargs): 15 | global inited 16 | global root 17 | 18 | if not inited: 19 | from tkinter import _default_root 20 | 21 | path = (Path(__file__).parent / sun_valley_tcl).resolve() 22 | 23 | try: 24 | _default_root.tk.call("source", str(path)) 25 | except AttributeError: 26 | raise RuntimeError( 27 | "can't set theme. " 28 | "Tk is not initialized. " 29 | "Please first create a tkinter.Tk instance, then set the theme." 30 | ) from None 31 | else: 32 | inited = True 33 | root = _default_root 34 | 35 | return func(*args, **kwargs) 36 | 37 | return wrapper 38 | 39 | 40 | @init 41 | def set_theme(theme, font_name="Century Gothic", f_size=10, fg_color_set="#F6F6F7"): 42 | if theme not in {"dark", "light"}: 43 | raise RuntimeError(f"not a valid theme name: {theme}") 44 | 45 | root.globalsetvar("fontName", (font_name, f_size)) 46 | root.globalsetvar("fgcolorset", (fg_color_set)) 47 | root.tk.call("set_theme", theme) 48 | 49 | 50 | @init 51 | def get_theme(): 52 | theme = root.tk.call("ttk::style", "theme", "use") 53 | 54 | try: 55 | return {"sun-valley-dark": "dark", "sun-valley-light": "light"}[theme] 56 | except KeyError: 57 | return theme 58 | 59 | 60 | @init 61 | def toggle_theme(): 62 | if get_theme() == "dark": 63 | use_light_theme() 64 | else: 65 | use_dark_theme() 66 | 67 | 68 | use_dark_theme = lambda: set_theme("dark") 69 | use_light_theme = lambda: set_theme("light") 70 | -------------------------------------------------------------------------------- /gui_data/sv_ttk/sun-valley.tcl: -------------------------------------------------------------------------------- 1 | # Copyright © 2021 rdbende <rdbende@gmail.com> 2 | 3 | source [file join [file dirname [info script]] theme dark.tcl] 4 | 5 | option add *tearOff 0 6 | 7 | proc set_theme {mode} { 8 | if {$mode == "dark"} { 9 | ttk::style theme use "sun-valley-dark" 10 | 11 | set fontString "$::fontName" 12 | set fgSet "$::fgcolorset" 13 | 14 | array set colors { 15 | -fg "#F6F6F7" 16 | -bg "#0e0e0f" 17 | -disabledfg "#F6F6F7" 18 | -selectfg "#F6F6F7" 19 | -selectbg "#003b50" 20 | } 21 | 22 | ttk::style configure . \ 23 | -background $colors(-bg) \ 24 | -foreground $fgSet \ 25 | -troughcolor $colors(-bg) \ 26 | -focuscolor $colors(-selectbg) \ 27 | -selectbackground $colors(-selectbg) \ 28 | -selectforeground $colors(-selectfg) \ 29 | -insertwidth 0 \ 30 | -insertcolor $colors(-fg) \ 31 | -fieldbackground $colors(-selectbg) \ 32 | -font $fontString \ 33 | -borderwidth 0 \ 34 | -relief flat 35 | 36 | tk_setPalette \ 37 | background [ttk::style lookup . -background] \ 38 | foreground [ttk::style lookup . -foreground] \ 39 | highlightColor [ttk::style lookup . -focuscolor] \ 40 | selectBackground [ttk::style lookup . -selectbackground] \ 41 | selectForeground [ttk::style lookup . -selectforeground] \ 42 | activeBackground [ttk::style lookup . -selectbackground] \ 43 | activeForeground [ttk::style lookup . -selectforeground] 44 | 45 | ttk::style map . -foreground [list disabled $colors(-disabledfg)] 46 | 47 | option add *font [ttk::style lookup . -font] 48 | option add *Menu.selectcolor $colors(-fg) 49 | option add *Menu.background #0e0e0f 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /gui_data/sv_ttk/sun-valley_darwin.tcl: -------------------------------------------------------------------------------- 1 | # Copyright © 2021 rdbende <rdbende@gmail.com> 2 | 3 | source [file join [file dirname [info script]] theme dark.tcl] 4 | 5 | option add *tearOff 0 6 | 7 | proc set_theme {mode} { 8 | if {$mode == "dark"} { 9 | ttk::style theme use "sun-valley-dark" 10 | 11 | array set colors { 12 | -fg "#F6F6F7" 13 | -bg "#0e0e0f" 14 | -disabledfg "#F6F6F7" 15 | -selectfg "#F6F6F7" 16 | -selectbg "#003b50" 17 | } 18 | 19 | ttk::style configure . \ 20 | -background $colors(-bg) \ 21 | -foreground $colors(-fg) \ 22 | -troughcolor $colors(-bg) \ 23 | -focuscolor $colors(-selectbg) \ 24 | -selectbackground $colors(-selectbg) \ 25 | -selectforeground $colors(-selectfg) \ 26 | -insertwidth 0 \ 27 | -insertcolor $colors(-fg) \ 28 | -fieldbackground $colors(-selectbg) \ 29 | -font {"Century Gothic" 13} \ 30 | -borderwidth 0 \ 31 | -relief flat 32 | 33 | tk_setPalette \ 34 | background [ttk::style lookup . -background] \ 35 | foreground [ttk::style lookup . -foreground] \ 36 | highlightColor [ttk::style lookup . -focuscolor] \ 37 | selectBackground [ttk::style lookup . -selectbackground] \ 38 | selectForeground [ttk::style lookup . -selectforeground] \ 39 | activeBackground [ttk::style lookup . -selectbackground] \ 40 | activeForeground [ttk::style lookup . -selectforeground] 41 | 42 | ttk::style map . -foreground [list disabled $colors(-disabledfg)] 43 | 44 | option add *font [ttk::style lookup . -font] 45 | option add *Menu.selectcolor $colors(-fg) 46 | option add *Menu.background #0e0e0f 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/arrow-down.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/arrow-right.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/arrow-up.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-accent-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-accent-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-accent-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-accent-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-accent-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-accent-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-accent-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-accent-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-close-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-close-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-close-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-close-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-titlebar-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-titlebar-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/button-titlebar-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/button-titlebar-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/card.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-tri-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-tri-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-tri-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-tri-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-tri-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-tri-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-tri-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-tri-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-unsel-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-unsel-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-unsel-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-unsel-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-unsel-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-unsel-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/check-unsel-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/check-unsel-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/combo-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/combo-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/empty.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-focus.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-invalid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-invalid.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-rest-combo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-rest-combo.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/entry-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/entry-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/notebook-border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/notebook-border.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/notebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/notebook.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/progress-pbar-hor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/progress-pbar-hor.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/progress-pbar-vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/progress-pbar-vert.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/progress-trough-hor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/progress-trough-hor.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/progress-trough-vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/progress-trough-vert.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-unsel-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-unsel-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-unsel-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-unsel-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-unsel-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-unsel-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/radio-unsel-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/radio-unsel-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-thumb-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-thumb-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-thumb-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-thumb-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-thumb-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-thumb-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-thumb-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-thumb-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-trough-hor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-trough-hor.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scale-trough-vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scale-trough-vert.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-down.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-hor-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-hor-thumb.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-hor-trough.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-hor-trough.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-left.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-right.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-up.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-vert-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-vert-thumb.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/scroll-vert-trough.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/scroll-vert-trough.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/separator.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/sizegrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/sizegrip.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-off-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-off-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-off-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-off-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-off-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-off-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-off-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-off-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-on-disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-on-disabled.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-on-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-on-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-on-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-on-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/switch-on-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/switch-on-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/tab-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/tab-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/tab-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/tab-rest.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/tab-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/tab-selected.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/treeheading-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/treeheading-hover.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/treeheading-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/treeheading-pressed.png -------------------------------------------------------------------------------- /gui_data/sv_ttk/theme/dark/treeheading-rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/sv_ttk/theme/dark/treeheading-rest.png -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/__init__.py: -------------------------------------------------------------------------------- 1 | # dnd actions 2 | PRIVATE = 'private' 3 | NONE = 'none' 4 | ASK = 'ask' 5 | COPY = 'copy' 6 | MOVE = 'move' 7 | LINK = 'link' 8 | REFUSE_DROP = 'refuse_drop' 9 | 10 | # dnd types 11 | DND_TEXT = 'DND_Text' 12 | DND_FILES = 'DND_Files' 13 | DND_ALL = '*' 14 | CF_UNICODETEXT = 'CF_UNICODETEXT' 15 | CF_TEXT = 'CF_TEXT' 16 | CF_HDROP = 'CF_HDROP' 17 | 18 | FileGroupDescriptor = 'FileGroupDescriptor - FileContents'# ?? 19 | FileGroupDescriptorW = 'FileGroupDescriptorW - FileContents'# ?? 20 | 21 | from . import TkinterDnD 22 | from .TkinterDnD import Tk 23 | from .TkinterDnD import TixTk 24 | 25 | 26 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/linux64/libtkdnd2.9.2.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/tkinterdnd2/tkdnd/linux64/libtkdnd2.9.2.so -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/linux64/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # Tcl package index file 3 | # 4 | package ifneeded tkdnd 2.9.2 \ 5 | "source \{$dir/tkdnd.tcl\} ; \ 6 | tkdnd::initialise \{$dir\} libtkdnd2.9.2.so tkdnd" 7 | 8 | package ifneeded tkdnd::utils 2.9.2 \ 9 | "source \{$dir/tkdnd_utils.tcl\} ; \ 10 | package provide tkdnd::utils 2.9.2" 11 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/linux64/tkdnd_compat.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_compat.tcl -- 3 | # 4 | # This file implements some utility procedures, to support older versions 5 | # of the TkDND package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval compat { 40 | 41 | };# namespace compat 42 | 43 | # ---------------------------------------------------------------------------- 44 | # Command ::dnd 45 | # ---------------------------------------------------------------------------- 46 | proc ::dnd {method window args} { 47 | switch $method { 48 | bindtarget { 49 | switch [llength $args] { 50 | 0 {return [tkdnd::compat::bindtarget0 $window]} 51 | 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 52 | 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ 53 | [lindex $args 1]]} 54 | 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ 55 | [lindex $args 1] [lindex $args 2]]} 56 | 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ 57 | [lindex $args 1] [lindex $args 2] [lindex $args 3]]} 58 | } 59 | } 60 | cleartarget { 61 | return [tkdnd::compat::cleartarget $window] 62 | } 63 | bindsource { 64 | switch [llength $args] { 65 | 0 {return [tkdnd::compat::bindsource0 $window]} 66 | 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 67 | 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ 68 | [lindex $args 1]]} 69 | 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ 70 | [lindex $args 1] [lindex $args 2]]} 71 | } 72 | } 73 | clearsource { 74 | return [tkdnd::compat::clearsource $window] 75 | } 76 | drag { 77 | return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] 78 | } 79 | } 80 | error "invalid number of arguments!" 81 | };# ::dnd 82 | 83 | # ---------------------------------------------------------------------------- 84 | # Command compat::bindtarget 85 | # ---------------------------------------------------------------------------- 86 | proc compat::bindtarget0 {window} { 87 | return [bind $window <<DropTargetTypes>>] 88 | };# compat::bindtarget0 89 | 90 | proc compat::bindtarget1 {window type} { 91 | return [bindtarget2 $window $type <Drop>] 92 | };# compat::bindtarget1 93 | 94 | proc compat::bindtarget2 {window type event} { 95 | switch $event { 96 | <DragEnter> {return [bind $window <<DropEnter>>]} 97 | <Drag> {return [bind $window <<DropPosition>>]} 98 | <DragLeave> {return [bind $window <<DropLeave>>]} 99 | <Drop> {return [bind $window <<Drop>>]} 100 | } 101 | };# compat::bindtarget2 102 | 103 | proc compat::bindtarget3 {window type event script} { 104 | set type [normalise_type $type] 105 | ::tkdnd::drop_target register $window [list $type] 106 | switch $event { 107 | <DragEnter> {return [bind $window <<DropEnter>> $script]} 108 | <Drag> {return [bind $window <<DropPosition>> $script]} 109 | <DragLeave> {return [bind $window <<DropLeave>> $script]} 110 | <Drop> {return [bind $window <<Drop>> $script]} 111 | } 112 | };# compat::bindtarget3 113 | 114 | proc compat::bindtarget4 {window type event script priority} { 115 | return [bindtarget3 $window $type $event $script] 116 | };# compat::bindtarget4 117 | 118 | proc compat::normalise_type { type } { 119 | switch $type { 120 | text/plain - 121 | {text/plain;charset=UTF-8} - 122 | Text {return DND_Text} 123 | text/uri-list - 124 | Files {return DND_Files} 125 | default {return $type} 126 | } 127 | };# compat::normalise_type 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command compat::bindsource 131 | # ---------------------------------------------------------------------------- 132 | proc compat::bindsource0 {window} { 133 | return [bind $window <<DropTargetTypes>>] 134 | };# compat::bindsource0 135 | 136 | proc compat::bindsource1 {window type} { 137 | return [bindsource2 $window $type <Drop>] 138 | };# compat::bindsource1 139 | 140 | proc compat::bindsource2 {window type script} { 141 | set type [normalise_type $type] 142 | ::tkdnd::drag_source register $window $type 143 | bind $window <<DragInitCmd>> "list {copy} {%t} \[$script\]" 144 | };# compat::bindsource2 145 | 146 | proc compat::bindsource3 {window type script priority} { 147 | return [bindsource2 $window $type $script] 148 | };# compat::bindsource3 149 | 150 | # ---------------------------------------------------------------------------- 151 | # Command compat::cleartarget 152 | # ---------------------------------------------------------------------------- 153 | proc compat::cleartarget {window} { 154 | };# compat::cleartarget 155 | 156 | # ---------------------------------------------------------------------------- 157 | # Command compat::clearsource 158 | # ---------------------------------------------------------------------------- 159 | proc compat::clearsource {window} { 160 | };# compat::clearsource 161 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/linux64/tkdnd_macosx.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_macosx.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | 7 | # This software is copyrighted by: 8 | # Georgios Petasis, Athens, Greece. 9 | # e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 10 | # 11 | # Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 12 | # kw@codebykevin.com 13 | # 14 | # 15 | # The following terms apply to all files associated 16 | # with the software unless explicitly disclaimed in individual files. 17 | # 18 | # The authors hereby grant permission to use, copy, modify, distribute, 19 | # and license this software and its documentation for any purpose, provided 20 | # that existing copyright notices are retained in all copies and that this 21 | # notice is included verbatim in any distributions. No written agreement, 22 | # license, or royalty fee is required for any of the authorized uses. 23 | # Modifications to this software may be copyrighted by their authors 24 | # and need not follow the licensing terms described here, provided that 25 | # the new terms are clearly indicated on the first page of each file where 26 | # they apply. 27 | # 28 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 29 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 31 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 32 | # POSSIBILITY OF SUCH DAMAGE. 33 | # 34 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 35 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 36 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 37 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 38 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 39 | # MODIFICATIONS. 40 | # 41 | 42 | #basic API for Mac Drag and Drop 43 | 44 | #two data types supported: strings and file paths 45 | 46 | #two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget 47 | 48 | #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 49 | 50 | if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { 51 | error {TkAqua Cocoa required} 52 | } 53 | 54 | namespace eval macdnd { 55 | 56 | proc initialise { } { 57 | ## Mapping from platform types to TkDND types... 58 | ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ 59 | NSPasteboardTypeString DND_Text \ 60 | NSFilenamesPboardType DND_Files \ 61 | NSPasteboardTypeHTML DND_HTML \ 62 | ] 63 | };# initialise 64 | 65 | };# namespace macdnd 66 | 67 | # ---------------------------------------------------------------------------- 68 | # Command macdnd::HandleEnter 69 | # ---------------------------------------------------------------------------- 70 | proc macdnd::HandleEnter { path drag_source typelist { data {} } } { 71 | variable _pressedkeys 72 | variable _actionlist 73 | set _pressedkeys 1 74 | set _actionlist { copy move link ask private } 75 | ::tkdnd::generic::SetDroppedData $data 76 | ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ 77 | $_actionlist $_pressedkeys 78 | };# macdnd::HandleEnter 79 | 80 | # ---------------------------------------------------------------------------- 81 | # Command macdnd::HandlePosition 82 | # ---------------------------------------------------------------------------- 83 | proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { 84 | variable _pressedkeys 85 | variable _last_mouse_root_x; set _last_mouse_root_x $rootX 86 | variable _last_mouse_root_y; set _last_mouse_root_y $rootY 87 | ::tkdnd::generic::HandlePosition $drop_target $drag_source \ 88 | $_pressedkeys $rootX $rootY 89 | };# macdnd::HandlePosition 90 | 91 | # ---------------------------------------------------------------------------- 92 | # Command macdnd::HandleLeave 93 | # ---------------------------------------------------------------------------- 94 | proc macdnd::HandleLeave { args } { 95 | ::tkdnd::generic::HandleLeave 96 | };# macdnd::HandleLeave 97 | 98 | # ---------------------------------------------------------------------------- 99 | # Command macdnd::HandleDrop 100 | # ---------------------------------------------------------------------------- 101 | proc macdnd::HandleDrop { drop_target data args } { 102 | variable _pressedkeys 103 | variable _last_mouse_root_x 104 | variable _last_mouse_root_y 105 | ## Get the dropped data... 106 | ::tkdnd::generic::SetDroppedData $data 107 | ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ 108 | $_last_mouse_root_x $_last_mouse_root_y 0 109 | };# macdnd::HandleDrop 110 | 111 | # ---------------------------------------------------------------------------- 112 | # Command macdnd::GetDragSourceCommonTypes 113 | # ---------------------------------------------------------------------------- 114 | proc macdnd::GetDragSourceCommonTypes { } { 115 | ::tkdnd::generic::GetDragSourceCommonTypes 116 | };# macdnd::GetDragSourceCommonTypes 117 | 118 | # ---------------------------------------------------------------------------- 119 | # Command macdnd::platform_specific_types 120 | # ---------------------------------------------------------------------------- 121 | proc macdnd::platform_specific_types { types } { 122 | ::tkdnd::generic::platform_specific_types $types 123 | }; # macdnd::platform_specific_types 124 | 125 | # ---------------------------------------------------------------------------- 126 | # Command macdnd::platform_specific_type 127 | # ---------------------------------------------------------------------------- 128 | proc macdnd::platform_specific_type { type } { 129 | ::tkdnd::generic::platform_specific_type $type 130 | }; # macdnd::platform_specific_type 131 | 132 | # ---------------------------------------------------------------------------- 133 | # Command tkdnd::platform_independent_types 134 | # ---------------------------------------------------------------------------- 135 | proc ::tkdnd::platform_independent_types { types } { 136 | ::tkdnd::generic::platform_independent_types $types 137 | }; # tkdnd::platform_independent_types 138 | 139 | # ---------------------------------------------------------------------------- 140 | # Command macdnd::platform_independent_type 141 | # ---------------------------------------------------------------------------- 142 | proc macdnd::platform_independent_type { type } { 143 | ::tkdnd::generic::platform_independent_type $type 144 | }; # macdnd::platform_independent_type 145 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/tkinterdnd2/tkdnd/osx64/libtkdnd2.9.2.dylib -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx64/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # Tcl package index file 3 | # 4 | package ifneeded tkdnd 2.9.2 \ 5 | "source \{$dir/tkdnd.tcl\} ; \ 6 | tkdnd::initialise \{$dir\} libtkdnd2.9.2.dylib tkdnd" 7 | 8 | package ifneeded tkdnd::utils 2.9.2 \ 9 | "source \{$dir/tkdnd_utils.tcl\} ; \ 10 | package provide tkdnd::utils 2.9.2" 11 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx64/tkdnd_compat.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_compat.tcl -- 3 | # 4 | # This file implements some utility procedures, to support older versions 5 | # of the TkDND package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval compat { 40 | 41 | };# namespace compat 42 | 43 | # ---------------------------------------------------------------------------- 44 | # Command ::dnd 45 | # ---------------------------------------------------------------------------- 46 | proc ::dnd {method window args} { 47 | switch $method { 48 | bindtarget { 49 | switch [llength $args] { 50 | 0 {return [tkdnd::compat::bindtarget0 $window]} 51 | 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 52 | 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ 53 | [lindex $args 1]]} 54 | 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ 55 | [lindex $args 1] [lindex $args 2]]} 56 | 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ 57 | [lindex $args 1] [lindex $args 2] [lindex $args 3]]} 58 | } 59 | } 60 | cleartarget { 61 | return [tkdnd::compat::cleartarget $window] 62 | } 63 | bindsource { 64 | switch [llength $args] { 65 | 0 {return [tkdnd::compat::bindsource0 $window]} 66 | 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 67 | 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ 68 | [lindex $args 1]]} 69 | 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ 70 | [lindex $args 1] [lindex $args 2]]} 71 | } 72 | } 73 | clearsource { 74 | return [tkdnd::compat::clearsource $window] 75 | } 76 | drag { 77 | return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] 78 | } 79 | } 80 | error "invalid number of arguments!" 81 | };# ::dnd 82 | 83 | # ---------------------------------------------------------------------------- 84 | # Command compat::bindtarget 85 | # ---------------------------------------------------------------------------- 86 | proc compat::bindtarget0 {window} { 87 | return [bind $window <<DropTargetTypes>>] 88 | };# compat::bindtarget0 89 | 90 | proc compat::bindtarget1 {window type} { 91 | return [bindtarget2 $window $type <Drop>] 92 | };# compat::bindtarget1 93 | 94 | proc compat::bindtarget2 {window type event} { 95 | switch $event { 96 | <DragEnter> {return [bind $window <<DropEnter>>]} 97 | <Drag> {return [bind $window <<DropPosition>>]} 98 | <DragLeave> {return [bind $window <<DropLeave>>]} 99 | <Drop> {return [bind $window <<Drop>>]} 100 | } 101 | };# compat::bindtarget2 102 | 103 | proc compat::bindtarget3 {window type event script} { 104 | set type [normalise_type $type] 105 | ::tkdnd::drop_target register $window [list $type] 106 | switch $event { 107 | <DragEnter> {return [bind $window <<DropEnter>> $script]} 108 | <Drag> {return [bind $window <<DropPosition>> $script]} 109 | <DragLeave> {return [bind $window <<DropLeave>> $script]} 110 | <Drop> {return [bind $window <<Drop>> $script]} 111 | } 112 | };# compat::bindtarget3 113 | 114 | proc compat::bindtarget4 {window type event script priority} { 115 | return [bindtarget3 $window $type $event $script] 116 | };# compat::bindtarget4 117 | 118 | proc compat::normalise_type { type } { 119 | switch $type { 120 | text/plain - 121 | {text/plain;charset=UTF-8} - 122 | Text {return DND_Text} 123 | text/uri-list - 124 | Files {return DND_Files} 125 | default {return $type} 126 | } 127 | };# compat::normalise_type 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command compat::bindsource 131 | # ---------------------------------------------------------------------------- 132 | proc compat::bindsource0 {window} { 133 | return [bind $window <<DropTargetTypes>>] 134 | };# compat::bindsource0 135 | 136 | proc compat::bindsource1 {window type} { 137 | return [bindsource2 $window $type <Drop>] 138 | };# compat::bindsource1 139 | 140 | proc compat::bindsource2 {window type script} { 141 | set type [normalise_type $type] 142 | ::tkdnd::drag_source register $window $type 143 | bind $window <<DragInitCmd>> "list {copy} {%t} \[$script\]" 144 | };# compat::bindsource2 145 | 146 | proc compat::bindsource3 {window type script priority} { 147 | return [bindsource2 $window $type $script] 148 | };# compat::bindsource3 149 | 150 | # ---------------------------------------------------------------------------- 151 | # Command compat::cleartarget 152 | # ---------------------------------------------------------------------------- 153 | proc compat::cleartarget {window} { 154 | };# compat::cleartarget 155 | 156 | # ---------------------------------------------------------------------------- 157 | # Command compat::clearsource 158 | # ---------------------------------------------------------------------------- 159 | proc compat::clearsource {window} { 160 | };# compat::clearsource 161 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx64/tkdnd_macosx.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_macosx.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | 7 | # This software is copyrighted by: 8 | # Georgios Petasis, Athens, Greece. 9 | # e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 10 | # 11 | # Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 12 | # kw@codebykevin.com 13 | # 14 | # 15 | # The following terms apply to all files associated 16 | # with the software unless explicitly disclaimed in individual files. 17 | # 18 | # The authors hereby grant permission to use, copy, modify, distribute, 19 | # and license this software and its documentation for any purpose, provided 20 | # that existing copyright notices are retained in all copies and that this 21 | # notice is included verbatim in any distributions. No written agreement, 22 | # license, or royalty fee is required for any of the authorized uses. 23 | # Modifications to this software may be copyrighted by their authors 24 | # and need not follow the licensing terms described here, provided that 25 | # the new terms are clearly indicated on the first page of each file where 26 | # they apply. 27 | # 28 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 29 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 31 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 32 | # POSSIBILITY OF SUCH DAMAGE. 33 | # 34 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 35 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 36 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 37 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 38 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 39 | # MODIFICATIONS. 40 | # 41 | 42 | #basic API for Mac Drag and Drop 43 | 44 | #two data types supported: strings and file paths 45 | 46 | #two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget 47 | 48 | #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 49 | 50 | if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { 51 | error {TkAqua Cocoa required} 52 | } 53 | 54 | namespace eval macdnd { 55 | 56 | proc initialise { } { 57 | ## Mapping from platform types to TkDND types... 58 | ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ 59 | NSPasteboardTypeString DND_Text \ 60 | NSFilenamesPboardType DND_Files \ 61 | NSPasteboardTypeHTML DND_HTML \ 62 | ] 63 | };# initialise 64 | 65 | };# namespace macdnd 66 | 67 | # ---------------------------------------------------------------------------- 68 | # Command macdnd::HandleEnter 69 | # ---------------------------------------------------------------------------- 70 | proc macdnd::HandleEnter { path drag_source typelist { data {} } } { 71 | variable _pressedkeys 72 | variable _actionlist 73 | set _pressedkeys 1 74 | set _actionlist { copy move link ask private } 75 | ::tkdnd::generic::SetDroppedData $data 76 | ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ 77 | $_actionlist $_pressedkeys 78 | };# macdnd::HandleEnter 79 | 80 | # ---------------------------------------------------------------------------- 81 | # Command macdnd::HandlePosition 82 | # ---------------------------------------------------------------------------- 83 | proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { 84 | variable _pressedkeys 85 | variable _last_mouse_root_x; set _last_mouse_root_x $rootX 86 | variable _last_mouse_root_y; set _last_mouse_root_y $rootY 87 | ::tkdnd::generic::HandlePosition $drop_target $drag_source \ 88 | $_pressedkeys $rootX $rootY 89 | };# macdnd::HandlePosition 90 | 91 | # ---------------------------------------------------------------------------- 92 | # Command macdnd::HandleLeave 93 | # ---------------------------------------------------------------------------- 94 | proc macdnd::HandleLeave { args } { 95 | ::tkdnd::generic::HandleLeave 96 | };# macdnd::HandleLeave 97 | 98 | # ---------------------------------------------------------------------------- 99 | # Command macdnd::HandleDrop 100 | # ---------------------------------------------------------------------------- 101 | proc macdnd::HandleDrop { drop_target data args } { 102 | variable _pressedkeys 103 | variable _last_mouse_root_x 104 | variable _last_mouse_root_y 105 | ## Get the dropped data... 106 | ::tkdnd::generic::SetDroppedData $data 107 | ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ 108 | $_last_mouse_root_x $_last_mouse_root_y 0 109 | };# macdnd::HandleDrop 110 | 111 | # ---------------------------------------------------------------------------- 112 | # Command macdnd::GetDragSourceCommonTypes 113 | # ---------------------------------------------------------------------------- 114 | proc macdnd::GetDragSourceCommonTypes { } { 115 | ::tkdnd::generic::GetDragSourceCommonTypes 116 | };# macdnd::GetDragSourceCommonTypes 117 | 118 | # ---------------------------------------------------------------------------- 119 | # Command macdnd::platform_specific_types 120 | # ---------------------------------------------------------------------------- 121 | proc macdnd::platform_specific_types { types } { 122 | ::tkdnd::generic::platform_specific_types $types 123 | }; # macdnd::platform_specific_types 124 | 125 | # ---------------------------------------------------------------------------- 126 | # Command macdnd::platform_specific_type 127 | # ---------------------------------------------------------------------------- 128 | proc macdnd::platform_specific_type { type } { 129 | ::tkdnd::generic::platform_specific_type $type 130 | }; # macdnd::platform_specific_type 131 | 132 | # ---------------------------------------------------------------------------- 133 | # Command tkdnd::platform_independent_types 134 | # ---------------------------------------------------------------------------- 135 | proc ::tkdnd::platform_independent_types { types } { 136 | ::tkdnd::generic::platform_independent_types $types 137 | }; # tkdnd::platform_independent_types 138 | 139 | # ---------------------------------------------------------------------------- 140 | # Command macdnd::platform_independent_type 141 | # ---------------------------------------------------------------------------- 142 | proc macdnd::platform_independent_type { type } { 143 | ::tkdnd::generic::platform_independent_type $type 144 | }; # macdnd::platform_independent_type 145 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx64/tkdnd_windows.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_windows.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval olednd { 40 | 41 | proc initialise { } { 42 | ## Mapping from platform types to TkDND types... 43 | ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ 44 | CF_UNICODETEXT DND_Text \ 45 | CF_TEXT DND_Text \ 46 | CF_HDROP DND_Files \ 47 | UniformResourceLocator DND_URL \ 48 | CF_HTML DND_HTML \ 49 | {HTML Format} DND_HTML \ 50 | CF_RTF DND_RTF \ 51 | CF_RTFTEXT DND_RTF \ 52 | {Rich Text Format} DND_RTF \ 53 | ] 54 | # FileGroupDescriptorW DND_Files \ 55 | # FileGroupDescriptor DND_Files \ 56 | 57 | ## Mapping from TkDND types to platform types... 58 | ::tkdnd::generic::initialise_tkdnd_to_platform_types [list \ 59 | DND_Text {CF_UNICODETEXT CF_TEXT} \ 60 | DND_Files {CF_HDROP} \ 61 | DND_URL {UniformResourceLocator UniformResourceLocatorW} \ 62 | DND_HTML {CF_HTML {HTML Format}} \ 63 | DND_RTF {CF_RTF CF_RTFTEXT {Rich Text Format}} \ 64 | ] 65 | };# initialise 66 | 67 | };# namespace olednd 68 | 69 | # ---------------------------------------------------------------------------- 70 | # Command olednd::HandleDragEnter 71 | # ---------------------------------------------------------------------------- 72 | proc olednd::HandleDragEnter { drop_target typelist actionlist pressedkeys 73 | rootX rootY codelist { data {} } } { 74 | ::tkdnd::generic::SetDroppedData $data 75 | focus $drop_target 76 | ::tkdnd::generic::HandleEnter $drop_target 0 $typelist \ 77 | $codelist $actionlist $pressedkeys 78 | set action [::tkdnd::generic::HandlePosition $drop_target {} \ 79 | $pressedkeys $rootX $rootY] 80 | if {$::tkdnd::_auto_update} {update idletasks} 81 | return $action 82 | };# olednd::HandleDragEnter 83 | 84 | # ---------------------------------------------------------------------------- 85 | # Command olednd::HandleDragOver 86 | # ---------------------------------------------------------------------------- 87 | proc olednd::HandleDragOver { drop_target pressedkeys rootX rootY } { 88 | set action [::tkdnd::generic::HandlePosition $drop_target {} \ 89 | $pressedkeys $rootX $rootY] 90 | if {$::tkdnd::_auto_update} {update idletasks} 91 | return $action 92 | };# olednd::HandleDragOver 93 | 94 | # ---------------------------------------------------------------------------- 95 | # Command olednd::HandleDragLeave 96 | # ---------------------------------------------------------------------------- 97 | proc olednd::HandleDragLeave { drop_target } { 98 | ::tkdnd::generic::HandleLeave 99 | if {$::tkdnd::_auto_update} {update idletasks} 100 | };# olednd::HandleDragLeave 101 | 102 | # ---------------------------------------------------------------------------- 103 | # Command olednd::HandleDrop 104 | # ---------------------------------------------------------------------------- 105 | proc olednd::HandleDrop { drop_target pressedkeys rootX rootY type data } { 106 | ::tkdnd::generic::SetDroppedData [normalise_data $type $data] 107 | set action [::tkdnd::generic::HandleDrop $drop_target {} \ 108 | $pressedkeys $rootX $rootY 0] 109 | if {$::tkdnd::_auto_update} {update idletasks} 110 | return $action 111 | };# olednd::HandleDrop 112 | 113 | # ---------------------------------------------------------------------------- 114 | # Command olednd::GetDataType 115 | # ---------------------------------------------------------------------------- 116 | proc olednd::GetDataType { drop_target typelist } { 117 | foreach {drop_target common_drag_source_types common_drop_target_types} \ 118 | [::tkdnd::generic::FindWindowWithCommonTypes $drop_target $typelist] {break} 119 | lindex $common_drag_source_types 0 120 | };# olednd::GetDataType 121 | 122 | # ---------------------------------------------------------------------------- 123 | # Command olednd::GetDragSourceCommonTypes 124 | # ---------------------------------------------------------------------------- 125 | proc olednd::GetDragSourceCommonTypes { drop_target } { 126 | ::tkdnd::generic::GetDragSourceCommonTypes 127 | };# olednd::GetDragSourceCommonTypes 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command olednd::platform_specific_types 131 | # ---------------------------------------------------------------------------- 132 | proc olednd::platform_specific_types { types } { 133 | ::tkdnd::generic::platform_specific_types $types 134 | }; # olednd::platform_specific_types 135 | 136 | # ---------------------------------------------------------------------------- 137 | # Command olednd::platform_specific_type 138 | # ---------------------------------------------------------------------------- 139 | proc olednd::platform_specific_type { type } { 140 | ::tkdnd::generic::platform_specific_type $type 141 | }; # olednd::platform_specific_type 142 | 143 | # ---------------------------------------------------------------------------- 144 | # Command tkdnd::platform_independent_types 145 | # ---------------------------------------------------------------------------- 146 | proc ::tkdnd::platform_independent_types { types } { 147 | ::tkdnd::generic::platform_independent_types $types 148 | }; # tkdnd::platform_independent_types 149 | 150 | # ---------------------------------------------------------------------------- 151 | # Command olednd::platform_independent_type 152 | # ---------------------------------------------------------------------------- 153 | proc olednd::platform_independent_type { type } { 154 | ::tkdnd::generic::platform_independent_type $type 155 | }; # olednd::platform_independent_type 156 | 157 | # ---------------------------------------------------------------------------- 158 | # Command olednd::normalise_data 159 | # ---------------------------------------------------------------------------- 160 | proc olednd::normalise_data { type data } { 161 | switch [lindex [::tkdnd::generic::platform_independent_type $type] 0] { 162 | DND_Text {return $data} 163 | DND_Files {return $data} 164 | DND_HTML {return [encoding convertfrom utf-8 $data]} 165 | default {return $data} 166 | } 167 | }; # olednd::normalise_data 168 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx_arm/libtkdnd2.9.3.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/tkinterdnd2/tkdnd/osx_arm/libtkdnd2.9.3.dylib -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx_arm/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # Tcl package index file 3 | # 4 | 5 | namespace eval ::tkdnd { 6 | ## Check if a debug level must be set... 7 | if {[info exists ::TKDND_DEBUG_LEVEL]} { 8 | variable _debug_level $::TKDND_DEBUG_LEVEL 9 | } elseif {[info exists ::env(TKDND_DEBUG_LEVEL)]} { 10 | variable _debug_level $::env(TKDND_DEBUG_LEVEL) 11 | } else { 12 | variable _debug_level 0 13 | } 14 | 15 | # ---------------------------------------------------------------------------- 16 | # Command tkdnd::debug_enabled: returns the requested debug level (0 = no debug). 17 | # ---------------------------------------------------------------------------- 18 | proc debug_enabled { {level {}} } { 19 | variable _debug_level 20 | if {$level != {}} { 21 | if {[string is integer -strict $level]} { 22 | set _debug_level $level 23 | } elseif {[string is true $level]} { 24 | set _debug_level 1 25 | } 26 | } 27 | return $_debug_level 28 | };# debug_enabled 29 | 30 | # ---------------------------------------------------------------------------- 31 | # Command tkdnd::source: source a Tcl fileInitialise the TkDND package. 32 | # ---------------------------------------------------------------------------- 33 | proc source { filename { encoding utf-8 } } { 34 | variable _package_dir 35 | # If in debug mode, enable debug statements... 36 | set dbg_lvl [debug_enabled] 37 | if {$dbg_lvl} { 38 | puts "tkdnd::source (debug level $dbg_lvl) $filename" 39 | set fd [open $filename r] 40 | fconfigure $fd -encoding $encoding 41 | set script [read $fd] 42 | close $fd 43 | set map {} 44 | for {set lvl 0} {$lvl <= $dbg_lvl} {incr lvl} { 45 | lappend map "#DBG$lvl " {} 46 | } 47 | lappend map {#DBG } {} 48 | set script [string map $map $script] 49 | return [eval $script] 50 | } 51 | ::source -encoding $encoding $filename 52 | };# source 53 | 54 | }; # namespace ::tkdnd 55 | 56 | package ifneeded tkdnd 2.9.3 \ 57 | "tkdnd::source \{$dir/tkdnd.tcl\} ; \ 58 | tkdnd::initialise \{$dir\} libtkdnd2.9.3.dylib tkdnd" 59 | 60 | package ifneeded tkdnd::utils 2.9.3 \ 61 | "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \ 62 | package provide tkdnd::utils 2.9.3" 63 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx_arm/tkdnd_compat.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_compat.tcl -- 3 | # 4 | # This file implements some utility procedures, to support older versions 5 | # of the TkDND package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval compat { 40 | 41 | };# namespace compat 42 | 43 | # ---------------------------------------------------------------------------- 44 | # Command ::dnd 45 | # ---------------------------------------------------------------------------- 46 | proc ::dnd {method window args} { 47 | switch $method { 48 | bindtarget { 49 | switch [llength $args] { 50 | 0 {return [tkdnd::compat::bindtarget0 $window]} 51 | 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 52 | 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ 53 | [lindex $args 1]]} 54 | 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ 55 | [lindex $args 1] [lindex $args 2]]} 56 | 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ 57 | [lindex $args 1] [lindex $args 2] [lindex $args 3]]} 58 | } 59 | } 60 | cleartarget { 61 | return [tkdnd::compat::cleartarget $window] 62 | } 63 | bindsource { 64 | switch [llength $args] { 65 | 0 {return [tkdnd::compat::bindsource0 $window]} 66 | 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 67 | 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ 68 | [lindex $args 1]]} 69 | 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ 70 | [lindex $args 1] [lindex $args 2]]} 71 | } 72 | } 73 | clearsource { 74 | return [tkdnd::compat::clearsource $window] 75 | } 76 | drag { 77 | return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] 78 | } 79 | } 80 | error "invalid number of arguments!" 81 | };# ::dnd 82 | 83 | # ---------------------------------------------------------------------------- 84 | # Command compat::bindtarget 85 | # ---------------------------------------------------------------------------- 86 | proc compat::bindtarget0 {window} { 87 | return [bind $window <<DropTargetTypes>>] 88 | };# compat::bindtarget0 89 | 90 | proc compat::bindtarget1 {window type} { 91 | return [bindtarget2 $window $type <Drop>] 92 | };# compat::bindtarget1 93 | 94 | proc compat::bindtarget2 {window type event} { 95 | switch $event { 96 | <DragEnter> {return [bind $window <<DropEnter>>]} 97 | <Drag> {return [bind $window <<DropPosition>>]} 98 | <DragLeave> {return [bind $window <<DropLeave>>]} 99 | <Drop> {return [bind $window <<Drop>>]} 100 | } 101 | };# compat::bindtarget2 102 | 103 | proc compat::bindtarget3 {window type event script} { 104 | set type [normalise_type $type] 105 | ::tkdnd::drop_target register $window [list $type] 106 | switch $event { 107 | <DragEnter> {return [bind $window <<DropEnter>> $script]} 108 | <Drag> {return [bind $window <<DropPosition>> $script]} 109 | <DragLeave> {return [bind $window <<DropLeave>> $script]} 110 | <Drop> {return [bind $window <<Drop>> $script]} 111 | } 112 | };# compat::bindtarget3 113 | 114 | proc compat::bindtarget4 {window type event script priority} { 115 | return [bindtarget3 $window $type $event $script] 116 | };# compat::bindtarget4 117 | 118 | proc compat::normalise_type { type } { 119 | switch $type { 120 | text/plain - 121 | {text/plain;charset=UTF-8} - 122 | Text {return DND_Text} 123 | text/uri-list - 124 | Files {return DND_Files} 125 | default {return $type} 126 | } 127 | };# compat::normalise_type 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command compat::bindsource 131 | # ---------------------------------------------------------------------------- 132 | proc compat::bindsource0 {window} { 133 | return [bind $window <<DropTargetTypes>>] 134 | };# compat::bindsource0 135 | 136 | proc compat::bindsource1 {window type} { 137 | return [bindsource2 $window $type <Drop>] 138 | };# compat::bindsource1 139 | 140 | proc compat::bindsource2 {window type script} { 141 | set type [normalise_type $type] 142 | ::tkdnd::drag_source register $window $type 143 | bind $window <<DragInitCmd>> "list {copy} {%t} \[$script\]" 144 | };# compat::bindsource2 145 | 146 | proc compat::bindsource3 {window type script priority} { 147 | return [bindsource2 $window $type $script] 148 | };# compat::bindsource3 149 | 150 | # ---------------------------------------------------------------------------- 151 | # Command compat::cleartarget 152 | # ---------------------------------------------------------------------------- 153 | proc compat::cleartarget {window} { 154 | };# compat::cleartarget 155 | 156 | # ---------------------------------------------------------------------------- 157 | # Command compat::clearsource 158 | # ---------------------------------------------------------------------------- 159 | proc compat::clearsource {window} { 160 | };# compat::clearsource 161 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/osx_arm/tkdnd_macosx.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_macosx.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | 7 | # This software is copyrighted by: 8 | # Georgios Petasis, Athens, Greece. 9 | # e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 10 | # 11 | # Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 12 | # kw@codebykevin.com 13 | # 14 | # 15 | # The following terms apply to all files associated 16 | # with the software unless explicitly disclaimed in individual files. 17 | # 18 | # The authors hereby grant permission to use, copy, modify, distribute, 19 | # and license this software and its documentation for any purpose, provided 20 | # that existing copyright notices are retained in all copies and that this 21 | # notice is included verbatim in any distributions. No written agreement, 22 | # license, or royalty fee is required for any of the authorized uses. 23 | # Modifications to this software may be copyrighted by their authors 24 | # and need not follow the licensing terms described here, provided that 25 | # the new terms are clearly indicated on the first page of each file where 26 | # they apply. 27 | # 28 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 29 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 31 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 32 | # POSSIBILITY OF SUCH DAMAGE. 33 | # 34 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 35 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 36 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 37 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 38 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 39 | # MODIFICATIONS. 40 | # 41 | 42 | #basic API for Mac Drag and Drop 43 | 44 | #two data types supported: strings and file paths 45 | 46 | #two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget 47 | 48 | #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 49 | 50 | if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { 51 | error {TkAqua Cocoa required} 52 | } 53 | 54 | namespace eval macdnd { 55 | 56 | proc initialise { } { 57 | ## Mapping from platform types to TkDND types... 58 | ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ 59 | NSPasteboardTypeString DND_Text \ 60 | NSFilenamesPboardType DND_Files \ 61 | NSPasteboardTypeHTML DND_HTML \ 62 | ] 63 | };# initialise 64 | 65 | };# namespace macdnd 66 | 67 | # ---------------------------------------------------------------------------- 68 | # Command macdnd::HandleEnter 69 | # ---------------------------------------------------------------------------- 70 | proc macdnd::HandleEnter { path drag_source typelist { data {} } } { 71 | variable _pressedkeys 72 | variable _actionlist 73 | set _pressedkeys 1 74 | set _actionlist { copy move link ask private } 75 | ::tkdnd::generic::SetDroppedData $data 76 | ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ 77 | $_actionlist $_pressedkeys 78 | };# macdnd::HandleEnter 79 | 80 | # ---------------------------------------------------------------------------- 81 | # Command macdnd::HandlePosition 82 | # ---------------------------------------------------------------------------- 83 | proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { 84 | variable _pressedkeys 85 | variable _last_mouse_root_x; set _last_mouse_root_x $rootX 86 | variable _last_mouse_root_y; set _last_mouse_root_y $rootY 87 | ::tkdnd::generic::HandlePosition $drop_target $drag_source \ 88 | $_pressedkeys $rootX $rootY 89 | };# macdnd::HandlePosition 90 | 91 | # ---------------------------------------------------------------------------- 92 | # Command macdnd::HandleLeave 93 | # ---------------------------------------------------------------------------- 94 | proc macdnd::HandleLeave { args } { 95 | ::tkdnd::generic::HandleLeave 96 | };# macdnd::HandleLeave 97 | 98 | # ---------------------------------------------------------------------------- 99 | # Command macdnd::HandleDrop 100 | # ---------------------------------------------------------------------------- 101 | proc macdnd::HandleDrop { drop_target data args } { 102 | variable _pressedkeys 103 | variable _last_mouse_root_x 104 | variable _last_mouse_root_y 105 | ## Get the dropped data... 106 | ::tkdnd::generic::SetDroppedData $data 107 | ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ 108 | $_last_mouse_root_x $_last_mouse_root_y 0 109 | };# macdnd::HandleDrop 110 | 111 | # ---------------------------------------------------------------------------- 112 | # Command macdnd::GetDragSourceCommonTypes 113 | # ---------------------------------------------------------------------------- 114 | proc macdnd::GetDragSourceCommonTypes { } { 115 | ::tkdnd::generic::GetDragSourceCommonTypes 116 | };# macdnd::GetDragSourceCommonTypes 117 | 118 | # ---------------------------------------------------------------------------- 119 | # Command macdnd::platform_specific_types 120 | # ---------------------------------------------------------------------------- 121 | proc macdnd::platform_specific_types { types } { 122 | ::tkdnd::generic::platform_specific_types $types 123 | }; # macdnd::platform_specific_types 124 | 125 | # ---------------------------------------------------------------------------- 126 | # Command macdnd::platform_specific_type 127 | # ---------------------------------------------------------------------------- 128 | proc macdnd::platform_specific_type { type } { 129 | ::tkdnd::generic::platform_specific_type $type 130 | }; # macdnd::platform_specific_type 131 | 132 | # ---------------------------------------------------------------------------- 133 | # Command tkdnd::platform_independent_types 134 | # ---------------------------------------------------------------------------- 135 | proc ::tkdnd::platform_independent_types { types } { 136 | ::tkdnd::generic::platform_independent_types $types 137 | }; # tkdnd::platform_independent_types 138 | 139 | # ---------------------------------------------------------------------------- 140 | # Command macdnd::platform_independent_type 141 | # ---------------------------------------------------------------------------- 142 | proc macdnd::platform_independent_type { type } { 143 | ::tkdnd::generic::platform_independent_type $type 144 | }; # macdnd::platform_independent_type 145 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/tkinterdnd2/tkdnd/win64/libtkdnd2.9.2.dll -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/win64/pkgIndex.tcl: -------------------------------------------------------------------------------- 1 | package ifneeded tkdnd 2.9.2 \ 2 | "source \{$dir/tkdnd.tcl\} ; \ 3 | tkdnd::initialise \{$dir\} libtkdnd2.9.2[info sharedlibextension] tkdnd" 4 | 5 | package ifneeded tkdnd::utils 2.9.2 \ 6 | "source \{$dir/tkdnd_utils.tcl\} ; \ 7 | package provide tkdnd::utils 2.9.2" -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/gui_data/tkinterdnd2/tkdnd/win64/tkdnd2.9.2.lib -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/win64/tkdnd_compat.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_compat.tcl -- 3 | # 4 | # This file implements some utility procedures, to support older versions 5 | # of the TkDND package. 6 | # 7 | # This software is copyrighted by: 8 | # George Petasis, National Centre for Scientific Research "Demokritos", 9 | # Aghia Paraskevi, Athens, Greece. 10 | # e-mail: petasis@iit.demokritos.gr 11 | # 12 | # The following terms apply to all files associated 13 | # with the software unless explicitly disclaimed in individual files. 14 | # 15 | # The authors hereby grant permission to use, copy, modify, distribute, 16 | # and license this software and its documentation for any purpose, provided 17 | # that existing copyright notices are retained in all copies and that this 18 | # notice is included verbatim in any distributions. No written agreement, 19 | # license, or royalty fee is required for any of the authorized uses. 20 | # Modifications to this software may be copyrighted by their authors 21 | # and need not follow the licensing terms described here, provided that 22 | # the new terms are clearly indicated on the first page of each file where 23 | # they apply. 24 | # 25 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 26 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 27 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 28 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 29 | # POSSIBILITY OF SUCH DAMAGE. 30 | # 31 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 32 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 33 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 34 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 35 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 36 | # MODIFICATIONS. 37 | # 38 | 39 | namespace eval compat { 40 | 41 | };# namespace compat 42 | 43 | # ---------------------------------------------------------------------------- 44 | # Command ::dnd 45 | # ---------------------------------------------------------------------------- 46 | proc ::dnd {method window args} { 47 | switch $method { 48 | bindtarget { 49 | switch [llength $args] { 50 | 0 {return [tkdnd::compat::bindtarget0 $window]} 51 | 1 {return [tkdnd::compat::bindtarget1 $window [lindex $args 0]]} 52 | 2 {return [tkdnd::compat::bindtarget2 $window [lindex $args 0] \ 53 | [lindex $args 1]]} 54 | 3 {return [tkdnd::compat::bindtarget3 $window [lindex $args 0] \ 55 | [lindex $args 1] [lindex $args 2]]} 56 | 4 {return [tkdnd::compat::bindtarget4 $window [lindex $args 0] \ 57 | [lindex $args 1] [lindex $args 2] [lindex $args 3]]} 58 | } 59 | } 60 | cleartarget { 61 | return [tkdnd::compat::cleartarget $window] 62 | } 63 | bindsource { 64 | switch [llength $args] { 65 | 0 {return [tkdnd::compat::bindsource0 $window]} 66 | 1 {return [tkdnd::compat::bindsource1 $window [lindex $args 0]]} 67 | 2 {return [tkdnd::compat::bindsource2 $window [lindex $args 0] \ 68 | [lindex $args 1]]} 69 | 3 {return [tkdnd::compat::bindsource3 $window [lindex $args 0] \ 70 | [lindex $args 1] [lindex $args 2]]} 71 | } 72 | } 73 | clearsource { 74 | return [tkdnd::compat::clearsource $window] 75 | } 76 | drag { 77 | return [tkdnd::_init_drag 1 $window "press" 0 0 0 0] 78 | } 79 | } 80 | error "invalid number of arguments!" 81 | };# ::dnd 82 | 83 | # ---------------------------------------------------------------------------- 84 | # Command compat::bindtarget 85 | # ---------------------------------------------------------------------------- 86 | proc compat::bindtarget0 {window} { 87 | return [bind $window <<DropTargetTypes>>] 88 | };# compat::bindtarget0 89 | 90 | proc compat::bindtarget1 {window type} { 91 | return [bindtarget2 $window $type <Drop>] 92 | };# compat::bindtarget1 93 | 94 | proc compat::bindtarget2 {window type event} { 95 | switch $event { 96 | <DragEnter> {return [bind $window <<DropEnter>>]} 97 | <Drag> {return [bind $window <<DropPosition>>]} 98 | <DragLeave> {return [bind $window <<DropLeave>>]} 99 | <Drop> {return [bind $window <<Drop>>]} 100 | } 101 | };# compat::bindtarget2 102 | 103 | proc compat::bindtarget3 {window type event script} { 104 | set type [normalise_type $type] 105 | ::tkdnd::drop_target register $window [list $type] 106 | switch $event { 107 | <DragEnter> {return [bind $window <<DropEnter>> $script]} 108 | <Drag> {return [bind $window <<DropPosition>> $script]} 109 | <DragLeave> {return [bind $window <<DropLeave>> $script]} 110 | <Drop> {return [bind $window <<Drop>> $script]} 111 | } 112 | };# compat::bindtarget3 113 | 114 | proc compat::bindtarget4 {window type event script priority} { 115 | return [bindtarget3 $window $type $event $script] 116 | };# compat::bindtarget4 117 | 118 | proc compat::normalise_type { type } { 119 | switch $type { 120 | text/plain - 121 | {text/plain;charset=UTF-8} - 122 | Text {return DND_Text} 123 | text/uri-list - 124 | Files {return DND_Files} 125 | default {return $type} 126 | } 127 | };# compat::normalise_type 128 | 129 | # ---------------------------------------------------------------------------- 130 | # Command compat::bindsource 131 | # ---------------------------------------------------------------------------- 132 | proc compat::bindsource0 {window} { 133 | return [bind $window <<DropTargetTypes>>] 134 | };# compat::bindsource0 135 | 136 | proc compat::bindsource1 {window type} { 137 | return [bindsource2 $window $type <Drop>] 138 | };# compat::bindsource1 139 | 140 | proc compat::bindsource2 {window type script} { 141 | set type [normalise_type $type] 142 | ::tkdnd::drag_source register $window $type 143 | bind $window <<DragInitCmd>> "list {copy} {%t} \[$script\]" 144 | };# compat::bindsource2 145 | 146 | proc compat::bindsource3 {window type script priority} { 147 | return [bindsource2 $window $type $script] 148 | };# compat::bindsource3 149 | 150 | # ---------------------------------------------------------------------------- 151 | # Command compat::cleartarget 152 | # ---------------------------------------------------------------------------- 153 | proc compat::cleartarget {window} { 154 | };# compat::cleartarget 155 | 156 | # ---------------------------------------------------------------------------- 157 | # Command compat::clearsource 158 | # ---------------------------------------------------------------------------- 159 | proc compat::clearsource {window} { 160 | };# compat::clearsource 161 | -------------------------------------------------------------------------------- /gui_data/tkinterdnd2/tkdnd/win64/tkdnd_macosx.tcl: -------------------------------------------------------------------------------- 1 | # 2 | # tkdnd_macosx.tcl -- 3 | # 4 | # This file implements some utility procedures that are used by the TkDND 5 | # package. 6 | 7 | # This software is copyrighted by: 8 | # Georgios Petasis, Athens, Greece. 9 | # e-mail: petasisg@yahoo.gr, petasis@iit.demokritos.gr 10 | # 11 | # Mac portions (c) 2009 Kevin Walzer/WordTech Communications LLC, 12 | # kw@codebykevin.com 13 | # 14 | # 15 | # The following terms apply to all files associated 16 | # with the software unless explicitly disclaimed in individual files. 17 | # 18 | # The authors hereby grant permission to use, copy, modify, distribute, 19 | # and license this software and its documentation for any purpose, provided 20 | # that existing copyright notices are retained in all copies and that this 21 | # notice is included verbatim in any distributions. No written agreement, 22 | # license, or royalty fee is required for any of the authorized uses. 23 | # Modifications to this software may be copyrighted by their authors 24 | # and need not follow the licensing terms described here, provided that 25 | # the new terms are clearly indicated on the first page of each file where 26 | # they apply. 27 | # 28 | # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY 29 | # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 30 | # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY 31 | # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 32 | # POSSIBILITY OF SUCH DAMAGE. 33 | # 34 | # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, 35 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, 36 | # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE 37 | # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE 38 | # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 39 | # MODIFICATIONS. 40 | # 41 | 42 | #basic API for Mac Drag and Drop 43 | 44 | #two data types supported: strings and file paths 45 | 46 | #two commands at C level: ::tkdnd::macdnd::registerdragwidget, ::tkdnd::macdnd::unregisterdragwidget 47 | 48 | #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 49 | 50 | if {[tk windowingsystem] eq "aqua" && "AppKit" ni [winfo server .]} { 51 | error {TkAqua Cocoa required} 52 | } 53 | 54 | namespace eval macdnd { 55 | 56 | proc initialise { } { 57 | ## Mapping from platform types to TkDND types... 58 | ::tkdnd::generic::initialise_platform_to_tkdnd_types [list \ 59 | NSPasteboardTypeString DND_Text \ 60 | NSFilenamesPboardType DND_Files \ 61 | NSPasteboardTypeHTML DND_HTML \ 62 | ] 63 | };# initialise 64 | 65 | };# namespace macdnd 66 | 67 | # ---------------------------------------------------------------------------- 68 | # Command macdnd::HandleEnter 69 | # ---------------------------------------------------------------------------- 70 | proc macdnd::HandleEnter { path drag_source typelist { data {} } } { 71 | variable _pressedkeys 72 | variable _actionlist 73 | set _pressedkeys 1 74 | set _actionlist { copy move link ask private } 75 | ::tkdnd::generic::SetDroppedData $data 76 | ::tkdnd::generic::HandleEnter $path $drag_source $typelist $typelist \ 77 | $_actionlist $_pressedkeys 78 | };# macdnd::HandleEnter 79 | 80 | # ---------------------------------------------------------------------------- 81 | # Command macdnd::HandlePosition 82 | # ---------------------------------------------------------------------------- 83 | proc macdnd::HandlePosition { drop_target rootX rootY {drag_source {}} } { 84 | variable _pressedkeys 85 | variable _last_mouse_root_x; set _last_mouse_root_x $rootX 86 | variable _last_mouse_root_y; set _last_mouse_root_y $rootY 87 | ::tkdnd::generic::HandlePosition $drop_target $drag_source \ 88 | $_pressedkeys $rootX $rootY 89 | };# macdnd::HandlePosition 90 | 91 | # ---------------------------------------------------------------------------- 92 | # Command macdnd::HandleLeave 93 | # ---------------------------------------------------------------------------- 94 | proc macdnd::HandleLeave { args } { 95 | ::tkdnd::generic::HandleLeave 96 | };# macdnd::HandleLeave 97 | 98 | # ---------------------------------------------------------------------------- 99 | # Command macdnd::HandleDrop 100 | # ---------------------------------------------------------------------------- 101 | proc macdnd::HandleDrop { drop_target data args } { 102 | variable _pressedkeys 103 | variable _last_mouse_root_x 104 | variable _last_mouse_root_y 105 | ## Get the dropped data... 106 | ::tkdnd::generic::SetDroppedData $data 107 | ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \ 108 | $_last_mouse_root_x $_last_mouse_root_y 0 109 | };# macdnd::HandleDrop 110 | 111 | # ---------------------------------------------------------------------------- 112 | # Command macdnd::GetDragSourceCommonTypes 113 | # ---------------------------------------------------------------------------- 114 | proc macdnd::GetDragSourceCommonTypes { } { 115 | ::tkdnd::generic::GetDragSourceCommonTypes 116 | };# macdnd::GetDragSourceCommonTypes 117 | 118 | # ---------------------------------------------------------------------------- 119 | # Command macdnd::platform_specific_types 120 | # ---------------------------------------------------------------------------- 121 | proc macdnd::platform_specific_types { types } { 122 | ::tkdnd::generic::platform_specific_types $types 123 | }; # macdnd::platform_specific_types 124 | 125 | # ---------------------------------------------------------------------------- 126 | # Command macdnd::platform_specific_type 127 | # ---------------------------------------------------------------------------- 128 | proc macdnd::platform_specific_type { type } { 129 | ::tkdnd::generic::platform_specific_type $type 130 | }; # macdnd::platform_specific_type 131 | 132 | # ---------------------------------------------------------------------------- 133 | # Command tkdnd::platform_independent_types 134 | # ---------------------------------------------------------------------------- 135 | proc ::tkdnd::platform_independent_types { types } { 136 | ::tkdnd::generic::platform_independent_types $types 137 | }; # tkdnd::platform_independent_types 138 | 139 | # ---------------------------------------------------------------------------- 140 | # Command macdnd::platform_independent_type 141 | # ---------------------------------------------------------------------------- 142 | proc macdnd::platform_independent_type { type } { 143 | ::tkdnd::generic::platform_independent_type $type 144 | }; # macdnd::platform_independent_type 145 | -------------------------------------------------------------------------------- /install_packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while read package; do 4 | pip install "$package" 5 | done < requirements.txt 6 | -------------------------------------------------------------------------------- /lib_v5/mdxnet.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | from .modules import TFC_TDF 4 | from pytorch_lightning import LightningModule 5 | 6 | dim_s = 4 7 | 8 | class AbstractMDXNet(LightningModule): 9 | def __init__(self, target_name, lr, optimizer, dim_c, dim_f, dim_t, n_fft, hop_length, overlap): 10 | super().__init__() 11 | self.target_name = target_name 12 | self.lr = lr 13 | self.optimizer = optimizer 14 | self.dim_c = dim_c 15 | self.dim_f = dim_f 16 | self.dim_t = dim_t 17 | self.n_fft = n_fft 18 | self.n_bins = n_fft // 2 + 1 19 | self.hop_length = hop_length 20 | self.window = nn.Parameter(torch.hann_window(window_length=self.n_fft, periodic=True), requires_grad=False) 21 | self.freq_pad = nn.Parameter(torch.zeros([1, dim_c, self.n_bins - self.dim_f, self.dim_t]), requires_grad=False) 22 | 23 | def get_optimizer(self): 24 | if self.optimizer == 'rmsprop': 25 | return torch.optim.RMSprop(self.parameters(), self.lr) 26 | 27 | if self.optimizer == 'adamw': 28 | return torch.optim.AdamW(self.parameters(), self.lr) 29 | 30 | class ConvTDFNet(AbstractMDXNet): 31 | def __init__(self, target_name, lr, optimizer, dim_c, dim_f, dim_t, n_fft, hop_length, 32 | num_blocks, l, g, k, bn, bias, overlap): 33 | 34 | super(ConvTDFNet, self).__init__( 35 | target_name, lr, optimizer, dim_c, dim_f, dim_t, n_fft, hop_length, overlap) 36 | #self.save_hyperparameters() 37 | 38 | self.num_blocks = num_blocks 39 | self.l = l 40 | self.g = g 41 | self.k = k 42 | self.bn = bn 43 | self.bias = bias 44 | 45 | if optimizer == 'rmsprop': 46 | norm = nn.BatchNorm2d 47 | 48 | if optimizer == 'adamw': 49 | norm = lambda input:nn.GroupNorm(2, input) 50 | 51 | self.n = num_blocks // 2 52 | scale = (2, 2) 53 | 54 | self.first_conv = nn.Sequential( 55 | nn.Conv2d(in_channels=self.dim_c, out_channels=g, kernel_size=(1, 1)), 56 | norm(g), 57 | nn.ReLU(), 58 | ) 59 | 60 | f = self.dim_f 61 | c = g 62 | self.encoding_blocks = nn.ModuleList() 63 | self.ds = nn.ModuleList() 64 | for i in range(self.n): 65 | self.encoding_blocks.append(TFC_TDF(c, l, f, k, bn, bias=bias, norm=norm)) 66 | self.ds.append( 67 | nn.Sequential( 68 | nn.Conv2d(in_channels=c, out_channels=c + g, kernel_size=scale, stride=scale), 69 | norm(c + g), 70 | nn.ReLU() 71 | ) 72 | ) 73 | f = f // 2 74 | c += g 75 | 76 | self.bottleneck_block = TFC_TDF(c, l, f, k, bn, bias=bias, norm=norm) 77 | 78 | self.decoding_blocks = nn.ModuleList() 79 | self.us = nn.ModuleList() 80 | for i in range(self.n): 81 | self.us.append( 82 | nn.Sequential( 83 | nn.ConvTranspose2d(in_channels=c, out_channels=c - g, kernel_size=scale, stride=scale), 84 | norm(c - g), 85 | nn.ReLU() 86 | ) 87 | ) 88 | f = f * 2 89 | c -= g 90 | 91 | self.decoding_blocks.append(TFC_TDF(c, l, f, k, bn, bias=bias, norm=norm)) 92 | 93 | self.final_conv = nn.Sequential( 94 | nn.Conv2d(in_channels=c, out_channels=self.dim_c, kernel_size=(1, 1)), 95 | ) 96 | 97 | def forward(self, x): 98 | 99 | x = self.first_conv(x) 100 | 101 | x = x.transpose(-1, -2) 102 | 103 | ds_outputs = [] 104 | for i in range(self.n): 105 | x = self.encoding_blocks[i](x) 106 | ds_outputs.append(x) 107 | x = self.ds[i](x) 108 | 109 | x = self.bottleneck_block(x) 110 | 111 | for i in range(self.n): 112 | x = self.us[i](x) 113 | x *= ds_outputs[-i - 1] 114 | x = self.decoding_blocks[i](x) 115 | 116 | x = x.transpose(-1, -2) 117 | 118 | x = self.final_conv(x) 119 | 120 | return x 121 | 122 | class Mixer(nn.Module): 123 | def __init__(self, device, mixer_path): 124 | 125 | super(Mixer, self).__init__() 126 | 127 | self.linear = nn.Linear((dim_s+1)*2, dim_s*2, bias=False) 128 | 129 | self.load_state_dict( 130 | torch.load(mixer_path, map_location=device) 131 | ) 132 | 133 | def forward(self, x): 134 | x = x.reshape(1,(dim_s+1)*2,-1).transpose(-1,-2) 135 | x = self.linear(x) 136 | return x.transpose(-1,-2).reshape(dim_s,2,-1) -------------------------------------------------------------------------------- /lib_v5/mixer.ckpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/lib_v5/mixer.ckpt -------------------------------------------------------------------------------- /lib_v5/modules.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | 4 | 5 | class TFC(nn.Module): 6 | def __init__(self, c, l, k, norm): 7 | super(TFC, self).__init__() 8 | 9 | self.H = nn.ModuleList() 10 | for i in range(l): 11 | self.H.append( 12 | nn.Sequential( 13 | nn.Conv2d(in_channels=c, out_channels=c, kernel_size=k, stride=1, padding=k // 2), 14 | norm(c), 15 | nn.ReLU(), 16 | ) 17 | ) 18 | 19 | def forward(self, x): 20 | for h in self.H: 21 | x = h(x) 22 | return x 23 | 24 | 25 | class DenseTFC(nn.Module): 26 | def __init__(self, c, l, k, norm): 27 | super(DenseTFC, self).__init__() 28 | 29 | self.conv = nn.ModuleList() 30 | for i in range(l): 31 | self.conv.append( 32 | nn.Sequential( 33 | nn.Conv2d(in_channels=c, out_channels=c, kernel_size=k, stride=1, padding=k // 2), 34 | norm(c), 35 | nn.ReLU(), 36 | ) 37 | ) 38 | 39 | def forward(self, x): 40 | for layer in self.conv[:-1]: 41 | x = torch.cat([layer(x), x], 1) 42 | return self.conv[-1](x) 43 | 44 | 45 | class TFC_TDF(nn.Module): 46 | def __init__(self, c, l, f, k, bn, dense=False, bias=True, norm=nn.BatchNorm2d): 47 | 48 | super(TFC_TDF, self).__init__() 49 | 50 | self.use_tdf = bn is not None 51 | 52 | self.tfc = DenseTFC(c, l, k, norm) if dense else TFC(c, l, k, norm) 53 | 54 | if self.use_tdf: 55 | if bn == 0: 56 | self.tdf = nn.Sequential( 57 | nn.Linear(f, f, bias=bias), 58 | norm(c), 59 | nn.ReLU() 60 | ) 61 | else: 62 | self.tdf = nn.Sequential( 63 | nn.Linear(f, f // bn, bias=bias), 64 | norm(c), 65 | nn.ReLU(), 66 | nn.Linear(f // bn, f, bias=bias), 67 | norm(c), 68 | nn.ReLU() 69 | ) 70 | 71 | def forward(self, x): 72 | x = self.tfc(x) 73 | return x + self.tdf(x) if self.use_tdf else x 74 | 75 | -------------------------------------------------------------------------------- /lib_v5/pyrb.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import tempfile 4 | import six 5 | import numpy as np 6 | import soundfile as sf 7 | import sys 8 | 9 | if getattr(sys, 'frozen', False): 10 | BASE_PATH_RUB = sys._MEIPASS 11 | else: 12 | BASE_PATH_RUB = os.path.dirname(os.path.abspath(__file__)) 13 | 14 | __all__ = ['time_stretch', 'pitch_shift'] 15 | 16 | __RUBBERBAND_UTIL = os.path.join(BASE_PATH_RUB, 'rubberband') 17 | 18 | if six.PY2: 19 | DEVNULL = open(os.devnull, 'w') 20 | else: 21 | DEVNULL = subprocess.DEVNULL 22 | 23 | def __rubberband(y, sr, **kwargs): 24 | 25 | assert sr > 0 26 | 27 | # Get the input and output tempfile 28 | fd, infile = tempfile.mkstemp(suffix='.wav') 29 | os.close(fd) 30 | fd, outfile = tempfile.mkstemp(suffix='.wav') 31 | os.close(fd) 32 | 33 | # dump the audio 34 | sf.write(infile, y, sr) 35 | 36 | try: 37 | # Execute rubberband 38 | arguments = [__RUBBERBAND_UTIL, '-q'] 39 | 40 | for key, value in six.iteritems(kwargs): 41 | arguments.append(str(key)) 42 | arguments.append(str(value)) 43 | 44 | arguments.extend([infile, outfile]) 45 | 46 | subprocess.check_call(arguments, stdout=DEVNULL, stderr=DEVNULL) 47 | 48 | # Load the processed audio. 49 | y_out, _ = sf.read(outfile, always_2d=True) 50 | 51 | # make sure that output dimensions matches input 52 | if y.ndim == 1: 53 | y_out = np.squeeze(y_out) 54 | 55 | except OSError as exc: 56 | six.raise_from(RuntimeError('Failed to execute rubberband. ' 57 | 'Please verify that rubberband-cli ' 58 | 'is installed.'), 59 | exc) 60 | 61 | finally: 62 | # Remove temp files 63 | os.unlink(infile) 64 | os.unlink(outfile) 65 | 66 | return y_out 67 | 68 | def time_stretch(y, sr, rate, rbargs=None): 69 | if rate <= 0: 70 | raise ValueError('rate must be strictly positive') 71 | 72 | if rate == 1.0: 73 | return y 74 | 75 | if rbargs is None: 76 | rbargs = dict() 77 | 78 | rbargs.setdefault('--tempo', rate) 79 | 80 | return __rubberband(y, sr, **rbargs) 81 | 82 | def pitch_shift(y, sr, n_steps, rbargs=None): 83 | 84 | if n_steps == 0: 85 | return y 86 | 87 | if rbargs is None: 88 | rbargs = dict() 89 | 90 | rbargs.setdefault('--pitch', n_steps) 91 | 92 | return __rubberband(y, sr, **rbargs) 93 | -------------------------------------------------------------------------------- /lib_v5/results.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """ 4 | Matchering - Audio Matching and Mastering Python Library 5 | Copyright (C) 2016-2022 Sergree 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see <https://www.gnu.org/licenses/>. 19 | """ 20 | 21 | import os 22 | import soundfile as sf 23 | 24 | 25 | class Result: 26 | def __init__( 27 | self, file: str, subtype: str, use_limiter: bool = True, normalize: bool = True 28 | ): 29 | _, file_ext = os.path.splitext(file) 30 | file_ext = file_ext[1:].upper() 31 | if not sf.check_format(file_ext): 32 | raise TypeError(f"{file_ext} format is not supported") 33 | if not sf.check_format(file_ext, subtype): 34 | raise TypeError(f"{file_ext} format does not have {subtype} subtype") 35 | self.file = file 36 | self.subtype = subtype 37 | self.use_limiter = use_limiter 38 | self.normalize = normalize 39 | 40 | 41 | def pcm16(file: str) -> Result: 42 | return Result(file, "PCM_16") 43 | 44 | def pcm24(file: str) -> Result: 45 | return Result(file, "FLOAT") 46 | 47 | def save_audiofile(file: str, wav_set="PCM_16") -> Result: 48 | return Result(file, wav_set) 49 | -------------------------------------------------------------------------------- /lib_v5/vr_network/__init__.py: -------------------------------------------------------------------------------- 1 | # VR init. 2 | -------------------------------------------------------------------------------- /lib_v5/vr_network/layers.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import torch.nn.functional as F 4 | 5 | from lib_v5 import spec_utils 6 | 7 | class Conv2DBNActiv(nn.Module): 8 | 9 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): 10 | super(Conv2DBNActiv, self).__init__() 11 | self.conv = nn.Sequential( 12 | nn.Conv2d( 13 | nin, nout, 14 | kernel_size=ksize, 15 | stride=stride, 16 | padding=pad, 17 | dilation=dilation, 18 | bias=False), 19 | nn.BatchNorm2d(nout), 20 | activ() 21 | ) 22 | 23 | def __call__(self, x): 24 | return self.conv(x) 25 | 26 | class SeperableConv2DBNActiv(nn.Module): 27 | 28 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): 29 | super(SeperableConv2DBNActiv, self).__init__() 30 | self.conv = nn.Sequential( 31 | nn.Conv2d( 32 | nin, nin, 33 | kernel_size=ksize, 34 | stride=stride, 35 | padding=pad, 36 | dilation=dilation, 37 | groups=nin, 38 | bias=False), 39 | nn.Conv2d( 40 | nin, nout, 41 | kernel_size=1, 42 | bias=False), 43 | nn.BatchNorm2d(nout), 44 | activ() 45 | ) 46 | 47 | def __call__(self, x): 48 | return self.conv(x) 49 | 50 | 51 | class Encoder(nn.Module): 52 | 53 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): 54 | super(Encoder, self).__init__() 55 | self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) 56 | self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) 57 | 58 | def __call__(self, x): 59 | skip = self.conv1(x) 60 | h = self.conv2(skip) 61 | 62 | return h, skip 63 | 64 | 65 | class Decoder(nn.Module): 66 | 67 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False): 68 | super(Decoder, self).__init__() 69 | self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) 70 | self.dropout = nn.Dropout2d(0.1) if dropout else None 71 | 72 | def __call__(self, x, skip=None): 73 | x = F.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) 74 | if skip is not None: 75 | skip = spec_utils.crop_center(skip, x) 76 | x = torch.cat([x, skip], dim=1) 77 | h = self.conv(x) 78 | 79 | if self.dropout is not None: 80 | h = self.dropout(h) 81 | 82 | return h 83 | 84 | 85 | class ASPPModule(nn.Module): 86 | 87 | def __init__(self, nn_architecture, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): 88 | super(ASPPModule, self).__init__() 89 | self.conv1 = nn.Sequential( 90 | nn.AdaptiveAvgPool2d((1, None)), 91 | Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) 92 | ) 93 | 94 | self.nn_architecture = nn_architecture 95 | self.six_layer = [129605] 96 | self.seven_layer = [537238, 537227, 33966] 97 | 98 | extra_conv = SeperableConv2DBNActiv( 99 | nin, nin, 3, 1, dilations[2], dilations[2], activ=activ) 100 | 101 | self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) 102 | self.conv3 = SeperableConv2DBNActiv( 103 | nin, nin, 3, 1, dilations[0], dilations[0], activ=activ) 104 | self.conv4 = SeperableConv2DBNActiv( 105 | nin, nin, 3, 1, dilations[1], dilations[1], activ=activ) 106 | self.conv5 = SeperableConv2DBNActiv( 107 | nin, nin, 3, 1, dilations[2], dilations[2], activ=activ) 108 | 109 | if self.nn_architecture in self.six_layer: 110 | self.conv6 = extra_conv 111 | nin_x = 6 112 | elif self.nn_architecture in self.seven_layer: 113 | self.conv6 = extra_conv 114 | self.conv7 = extra_conv 115 | nin_x = 7 116 | else: 117 | nin_x = 5 118 | 119 | self.bottleneck = nn.Sequential( 120 | Conv2DBNActiv(nin * nin_x, nout, 1, 1, 0, activ=activ), 121 | nn.Dropout2d(0.1) 122 | ) 123 | 124 | def forward(self, x): 125 | _, _, h, w = x.size() 126 | feat1 = F.interpolate(self.conv1(x), size=(h, w), mode='bilinear', align_corners=True) 127 | feat2 = self.conv2(x) 128 | feat3 = self.conv3(x) 129 | feat4 = self.conv4(x) 130 | feat5 = self.conv5(x) 131 | 132 | if self.nn_architecture in self.six_layer: 133 | feat6 = self.conv6(x) 134 | out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6), dim=1) 135 | elif self.nn_architecture in self.seven_layer: 136 | feat6 = self.conv6(x) 137 | feat7 = self.conv7(x) 138 | out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) 139 | else: 140 | out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) 141 | 142 | bottle = self.bottleneck(out) 143 | return bottle 144 | -------------------------------------------------------------------------------- /lib_v5/vr_network/layers_new.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import torch.nn.functional as F 4 | 5 | from lib_v5 import spec_utils 6 | 7 | class Conv2DBNActiv(nn.Module): 8 | 9 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): 10 | super(Conv2DBNActiv, self).__init__() 11 | self.conv = nn.Sequential( 12 | nn.Conv2d( 13 | nin, nout, 14 | kernel_size=ksize, 15 | stride=stride, 16 | padding=pad, 17 | dilation=dilation, 18 | bias=False), 19 | nn.BatchNorm2d(nout), 20 | activ() 21 | ) 22 | 23 | def __call__(self, x): 24 | return self.conv(x) 25 | 26 | class Encoder(nn.Module): 27 | 28 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): 29 | super(Encoder, self).__init__() 30 | self.conv1 = Conv2DBNActiv(nin, nout, ksize, stride, pad, activ=activ) 31 | self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) 32 | 33 | def __call__(self, x): 34 | h = self.conv1(x) 35 | h = self.conv2(h) 36 | 37 | return h 38 | 39 | 40 | class Decoder(nn.Module): 41 | 42 | def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False): 43 | super(Decoder, self).__init__() 44 | self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) 45 | # self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) 46 | self.dropout = nn.Dropout2d(0.1) if dropout else None 47 | 48 | def __call__(self, x, skip=None): 49 | x = F.interpolate(x, scale_factor=2, mode='bilinear', align_corners=True) 50 | 51 | if skip is not None: 52 | skip = spec_utils.crop_center(skip, x) 53 | x = torch.cat([x, skip], dim=1) 54 | 55 | h = self.conv1(x) 56 | # h = self.conv2(h) 57 | 58 | if self.dropout is not None: 59 | h = self.dropout(h) 60 | 61 | return h 62 | 63 | 64 | class ASPPModule(nn.Module): 65 | 66 | def __init__(self, nin, nout, dilations=(4, 8, 12), activ=nn.ReLU, dropout=False): 67 | super(ASPPModule, self).__init__() 68 | self.conv1 = nn.Sequential( 69 | nn.AdaptiveAvgPool2d((1, None)), 70 | Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ) 71 | ) 72 | self.conv2 = Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ) 73 | self.conv3 = Conv2DBNActiv( 74 | nin, nout, 3, 1, dilations[0], dilations[0], activ=activ 75 | ) 76 | self.conv4 = Conv2DBNActiv( 77 | nin, nout, 3, 1, dilations[1], dilations[1], activ=activ 78 | ) 79 | self.conv5 = Conv2DBNActiv( 80 | nin, nout, 3, 1, dilations[2], dilations[2], activ=activ 81 | ) 82 | self.bottleneck = Conv2DBNActiv(nout * 5, nout, 1, 1, 0, activ=activ) 83 | self.dropout = nn.Dropout2d(0.1) if dropout else None 84 | 85 | def forward(self, x): 86 | _, _, h, w = x.size() 87 | feat1 = F.interpolate(self.conv1(x), size=(h, w), mode='bilinear', align_corners=True) 88 | feat2 = self.conv2(x) 89 | feat3 = self.conv3(x) 90 | feat4 = self.conv4(x) 91 | feat5 = self.conv5(x) 92 | out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) 93 | out = self.bottleneck(out) 94 | 95 | if self.dropout is not None: 96 | out = self.dropout(out) 97 | 98 | return out 99 | 100 | 101 | class LSTMModule(nn.Module): 102 | 103 | def __init__(self, nin_conv, nin_lstm, nout_lstm): 104 | super(LSTMModule, self).__init__() 105 | self.conv = Conv2DBNActiv(nin_conv, 1, 1, 1, 0) 106 | self.lstm = nn.LSTM( 107 | input_size=nin_lstm, 108 | hidden_size=nout_lstm // 2, 109 | bidirectional=True 110 | ) 111 | self.dense = nn.Sequential( 112 | nn.Linear(nout_lstm, nin_lstm), 113 | nn.BatchNorm1d(nin_lstm), 114 | nn.ReLU() 115 | ) 116 | 117 | def forward(self, x): 118 | N, _, nbins, nframes = x.size() 119 | h = self.conv(x)[:, 0] # N, nbins, nframes 120 | h = h.permute(2, 0, 1) # nframes, N, nbins 121 | h, _ = self.lstm(h) 122 | h = self.dense(h.reshape(-1, h.size()[-1])) # nframes * N, nbins 123 | h = h.reshape(nframes, N, 1, nbins) 124 | h = h.permute(1, 2, 3, 0) 125 | 126 | return h 127 | -------------------------------------------------------------------------------- /lib_v5/vr_network/model_param_init.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | default_param = {} 4 | default_param['bins'] = -1 5 | default_param['unstable_bins'] = -1 # training only 6 | default_param['stable_bins'] = -1 # training only 7 | default_param['sr'] = 44100 8 | default_param['pre_filter_start'] = -1 9 | default_param['pre_filter_stop'] = -1 10 | default_param['band'] = {} 11 | 12 | N_BINS = 'n_bins' 13 | 14 | def int_keys(d): 15 | r = {} 16 | for k, v in d: 17 | if k.isdigit(): 18 | k = int(k) 19 | r[k] = v 20 | return r 21 | 22 | class ModelParameters(object): 23 | def __init__(self, config_path=''): 24 | with open(config_path, 'r') as f: 25 | self.param = json.loads(f.read(), object_pairs_hook=int_keys) 26 | 27 | for k in ['mid_side', 'mid_side_b', 'mid_side_b2', 'stereo_w', 'stereo_n', 'reverse']: 28 | if not k in self.param: 29 | self.param[k] = False 30 | 31 | if N_BINS in self.param: 32 | self.param['bins'] = self.param[N_BINS] -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr16000_hl512.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 16000, 8 | "hl": 512, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 1024, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 16000, 17 | "pre_filter_start": 1023, 18 | "pre_filter_stop": 1024 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr32000_hl512.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 32000, 8 | "hl": 512, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 1024, 12 | "hpf_start": -1, 13 | "res_type": "kaiser_fast" 14 | } 15 | }, 16 | "sr": 32000, 17 | "pre_filter_start": 1000, 18 | "pre_filter_stop": 1021 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr33075_hl384.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 33075, 8 | "hl": 384, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 1024, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 33075, 17 | "pre_filter_start": 1000, 18 | "pre_filter_stop": 1021 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr44100_hl1024.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 44100, 8 | "hl": 1024, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 1024, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 44100, 17 | "pre_filter_start": 1023, 18 | "pre_filter_stop": 1024 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr44100_hl256.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 256, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 44100, 8 | "hl": 256, 9 | "n_fft": 512, 10 | "crop_start": 0, 11 | "crop_stop": 256, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 44100, 17 | "pre_filter_start": 256, 18 | "pre_filter_stop": 256 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr44100_hl512.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 44100, 8 | "hl": 512, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 1024, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 44100, 17 | "pre_filter_start": 1023, 18 | "pre_filter_stop": 1024 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr44100_hl512_cut.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 1024, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 44100, 8 | "hl": 512, 9 | "n_fft": 2048, 10 | "crop_start": 0, 11 | "crop_stop": 700, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 44100, 17 | "pre_filter_start": 1023, 18 | "pre_filter_stop": 700 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/1band_sr44100_hl512_nf1024.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 512, 3 | "unstable_bins": 0, 4 | "reduction_bins": 0, 5 | "band": { 6 | "1": { 7 | "sr": 44100, 8 | "hl": 512, 9 | "n_fft": 1024, 10 | "crop_start": 0, 11 | "crop_stop": 512, 12 | "hpf_start": -1, 13 | "res_type": "sinc_best" 14 | } 15 | }, 16 | "sr": 44100, 17 | "pre_filter_start": 511, 18 | "pre_filter_stop": 512 19 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/2band_32000.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 768, 3 | "unstable_bins": 7, 4 | "reduction_bins": 705, 5 | "band": { 6 | "1": { 7 | "sr": 6000, 8 | "hl": 66, 9 | "n_fft": 512, 10 | "crop_start": 0, 11 | "crop_stop": 240, 12 | "lpf_start": 60, 13 | "lpf_stop": 118, 14 | "res_type": "sinc_fastest" 15 | }, 16 | "2": { 17 | "sr": 32000, 18 | "hl": 352, 19 | "n_fft": 1024, 20 | "crop_start": 22, 21 | "crop_stop": 505, 22 | "hpf_start": 44, 23 | "hpf_stop": 23, 24 | "res_type": "sinc_medium" 25 | } 26 | }, 27 | "sr": 32000, 28 | "pre_filter_start": 710, 29 | "pre_filter_stop": 731 30 | } 31 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/2band_44100_lofi.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 512, 3 | "unstable_bins": 7, 4 | "reduction_bins": 510, 5 | "band": { 6 | "1": { 7 | "sr": 11025, 8 | "hl": 160, 9 | "n_fft": 768, 10 | "crop_start": 0, 11 | "crop_stop": 192, 12 | "lpf_start": 41, 13 | "lpf_stop": 139, 14 | "res_type": "sinc_fastest" 15 | }, 16 | "2": { 17 | "sr": 44100, 18 | "hl": 640, 19 | "n_fft": 1024, 20 | "crop_start": 10, 21 | "crop_stop": 320, 22 | "hpf_start": 47, 23 | "hpf_stop": 15, 24 | "res_type": "sinc_medium" 25 | } 26 | }, 27 | "sr": 44100, 28 | "pre_filter_start": 510, 29 | "pre_filter_stop": 512 30 | } 31 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/2band_48000.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 768, 3 | "unstable_bins": 7, 4 | "reduction_bins": 705, 5 | "band": { 6 | "1": { 7 | "sr": 6000, 8 | "hl": 66, 9 | "n_fft": 512, 10 | "crop_start": 0, 11 | "crop_stop": 240, 12 | "lpf_start": 60, 13 | "lpf_stop": 240, 14 | "res_type": "sinc_fastest" 15 | }, 16 | "2": { 17 | "sr": 48000, 18 | "hl": 528, 19 | "n_fft": 1536, 20 | "crop_start": 22, 21 | "crop_stop": 505, 22 | "hpf_start": 82, 23 | "hpf_stop": 22, 24 | "res_type": "sinc_medium" 25 | } 26 | }, 27 | "sr": 48000, 28 | "pre_filter_start": 710, 29 | "pre_filter_stop": 731 30 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/3band_44100.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 768, 3 | "unstable_bins": 5, 4 | "reduction_bins": 733, 5 | "band": { 6 | "1": { 7 | "sr": 11025, 8 | "hl": 128, 9 | "n_fft": 768, 10 | "crop_start": 0, 11 | "crop_stop": 278, 12 | "lpf_start": 28, 13 | "lpf_stop": 140, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 22050, 18 | "hl": 256, 19 | "n_fft": 768, 20 | "crop_start": 14, 21 | "crop_stop": 322, 22 | "hpf_start": 70, 23 | "hpf_stop": 14, 24 | "lpf_start": 283, 25 | "lpf_stop": 314, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 44100, 30 | "hl": 512, 31 | "n_fft": 768, 32 | "crop_start": 131, 33 | "crop_stop": 313, 34 | "hpf_start": 154, 35 | "hpf_stop": 141, 36 | "res_type": "sinc_medium" 37 | } 38 | }, 39 | "sr": 44100, 40 | "pre_filter_start": 757, 41 | "pre_filter_stop": 768 42 | } 43 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/3band_44100_mid.json: -------------------------------------------------------------------------------- 1 | { 2 | "mid_side": true, 3 | "bins": 768, 4 | "unstable_bins": 5, 5 | "reduction_bins": 733, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 768, 11 | "crop_start": 0, 12 | "crop_stop": 278, 13 | "lpf_start": 28, 14 | "lpf_stop": 140, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 22050, 19 | "hl": 256, 20 | "n_fft": 768, 21 | "crop_start": 14, 22 | "crop_stop": 322, 23 | "hpf_start": 70, 24 | "hpf_stop": 14, 25 | "lpf_start": 283, 26 | "lpf_stop": 314, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 44100, 31 | "hl": 512, 32 | "n_fft": 768, 33 | "crop_start": 131, 34 | "crop_stop": 313, 35 | "hpf_start": 154, 36 | "hpf_stop": 141, 37 | "res_type": "sinc_medium" 38 | } 39 | }, 40 | "sr": 44100, 41 | "pre_filter_start": 757, 42 | "pre_filter_stop": 768 43 | } 44 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/3band_44100_msb2.json: -------------------------------------------------------------------------------- 1 | { 2 | "mid_side_b2": true, 3 | "bins": 640, 4 | "unstable_bins": 7, 5 | "reduction_bins": 565, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 108, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 187, 13 | "lpf_start": 92, 14 | "lpf_stop": 186, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 22050, 19 | "hl": 216, 20 | "n_fft": 768, 21 | "crop_start": 0, 22 | "crop_stop": 212, 23 | "hpf_start": 68, 24 | "hpf_stop": 34, 25 | "lpf_start": 174, 26 | "lpf_stop": 209, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 44100, 31 | "hl": 432, 32 | "n_fft": 640, 33 | "crop_start": 66, 34 | "crop_stop": 307, 35 | "hpf_start": 86, 36 | "hpf_stop": 72, 37 | "res_type": "kaiser_fast" 38 | } 39 | }, 40 | "sr": 44100, 41 | "pre_filter_start": 639, 42 | "pre_filter_stop": 640 43 | } 44 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 768, 3 | "unstable_bins": 7, 4 | "reduction_bins": 668, 5 | "band": { 6 | "1": { 7 | "sr": 11025, 8 | "hl": 128, 9 | "n_fft": 1024, 10 | "crop_start": 0, 11 | "crop_stop": 186, 12 | "lpf_start": 37, 13 | "lpf_stop": 73, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 11025, 18 | "hl": 128, 19 | "n_fft": 512, 20 | "crop_start": 4, 21 | "crop_stop": 185, 22 | "hpf_start": 36, 23 | "hpf_stop": 18, 24 | "lpf_start": 93, 25 | "lpf_stop": 185, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 22050, 30 | "hl": 256, 31 | "n_fft": 512, 32 | "crop_start": 46, 33 | "crop_stop": 186, 34 | "hpf_start": 93, 35 | "hpf_stop": 46, 36 | "lpf_start": 164, 37 | "lpf_stop": 186, 38 | "res_type": "polyphase" 39 | }, 40 | "4": { 41 | "sr": 44100, 42 | "hl": 512, 43 | "n_fft": 768, 44 | "crop_start": 121, 45 | "crop_stop": 382, 46 | "hpf_start": 138, 47 | "hpf_stop": 123, 48 | "res_type": "sinc_medium" 49 | } 50 | }, 51 | "sr": 44100, 52 | "pre_filter_start": 740, 53 | "pre_filter_stop": 768 54 | } 55 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100_mid.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 768, 3 | "unstable_bins": 7, 4 | "mid_side": true, 5 | "reduction_bins": 668, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 186, 13 | "lpf_start": 37, 14 | "lpf_stop": 73, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 11025, 19 | "hl": 128, 20 | "n_fft": 512, 21 | "crop_start": 4, 22 | "crop_stop": 185, 23 | "hpf_start": 36, 24 | "hpf_stop": 18, 25 | "lpf_start": 93, 26 | "lpf_stop": 185, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 22050, 31 | "hl": 256, 32 | "n_fft": 512, 33 | "crop_start": 46, 34 | "crop_stop": 186, 35 | "hpf_start": 93, 36 | "hpf_stop": 46, 37 | "lpf_start": 164, 38 | "lpf_stop": 186, 39 | "res_type": "polyphase" 40 | }, 41 | "4": { 42 | "sr": 44100, 43 | "hl": 512, 44 | "n_fft": 768, 45 | "crop_start": 121, 46 | "crop_stop": 382, 47 | "hpf_start": 138, 48 | "hpf_stop": 123, 49 | "res_type": "sinc_medium" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 740, 54 | "pre_filter_stop": 768 55 | } 56 | -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100_msb.json: -------------------------------------------------------------------------------- 1 | { 2 | "mid_side_b": true, 3 | "bins": 768, 4 | "unstable_bins": 7, 5 | "reduction_bins": 668, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 186, 13 | "lpf_start": 37, 14 | "lpf_stop": 73, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 11025, 19 | "hl": 128, 20 | "n_fft": 512, 21 | "crop_start": 4, 22 | "crop_stop": 185, 23 | "hpf_start": 36, 24 | "hpf_stop": 18, 25 | "lpf_start": 93, 26 | "lpf_stop": 185, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 22050, 31 | "hl": 256, 32 | "n_fft": 512, 33 | "crop_start": 46, 34 | "crop_stop": 186, 35 | "hpf_start": 93, 36 | "hpf_stop": 46, 37 | "lpf_start": 164, 38 | "lpf_stop": 186, 39 | "res_type": "polyphase" 40 | }, 41 | "4": { 42 | "sr": 44100, 43 | "hl": 512, 44 | "n_fft": 768, 45 | "crop_start": 121, 46 | "crop_stop": 382, 47 | "hpf_start": 138, 48 | "hpf_stop": 123, 49 | "res_type": "sinc_medium" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 740, 54 | "pre_filter_stop": 768 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100_msb2.json: -------------------------------------------------------------------------------- 1 | { 2 | "mid_side_b": true, 3 | "bins": 768, 4 | "unstable_bins": 7, 5 | "reduction_bins": 668, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 186, 13 | "lpf_start": 37, 14 | "lpf_stop": 73, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 11025, 19 | "hl": 128, 20 | "n_fft": 512, 21 | "crop_start": 4, 22 | "crop_stop": 185, 23 | "hpf_start": 36, 24 | "hpf_stop": 18, 25 | "lpf_start": 93, 26 | "lpf_stop": 185, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 22050, 31 | "hl": 256, 32 | "n_fft": 512, 33 | "crop_start": 46, 34 | "crop_stop": 186, 35 | "hpf_start": 93, 36 | "hpf_stop": 46, 37 | "lpf_start": 164, 38 | "lpf_stop": 186, 39 | "res_type": "polyphase" 40 | }, 41 | "4": { 42 | "sr": 44100, 43 | "hl": 512, 44 | "n_fft": 768, 45 | "crop_start": 121, 46 | "crop_stop": 382, 47 | "hpf_start": 138, 48 | "hpf_stop": 123, 49 | "res_type": "sinc_medium" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 740, 54 | "pre_filter_stop": 768 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100_reverse.json: -------------------------------------------------------------------------------- 1 | { 2 | "reverse": true, 3 | "bins": 768, 4 | "unstable_bins": 7, 5 | "reduction_bins": 668, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 186, 13 | "lpf_start": 37, 14 | "lpf_stop": 73, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 11025, 19 | "hl": 128, 20 | "n_fft": 512, 21 | "crop_start": 4, 22 | "crop_stop": 185, 23 | "hpf_start": 36, 24 | "hpf_stop": 18, 25 | "lpf_start": 93, 26 | "lpf_stop": 185, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 22050, 31 | "hl": 256, 32 | "n_fft": 512, 33 | "crop_start": 46, 34 | "crop_stop": 186, 35 | "hpf_start": 93, 36 | "hpf_stop": 46, 37 | "lpf_start": 164, 38 | "lpf_stop": 186, 39 | "res_type": "polyphase" 40 | }, 41 | "4": { 42 | "sr": 44100, 43 | "hl": 512, 44 | "n_fft": 768, 45 | "crop_start": 121, 46 | "crop_stop": 382, 47 | "hpf_start": 138, 48 | "hpf_stop": 123, 49 | "res_type": "sinc_medium" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 740, 54 | "pre_filter_stop": 768 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_44100_sw.json: -------------------------------------------------------------------------------- 1 | { 2 | "stereo_w": true, 3 | "bins": 768, 4 | "unstable_bins": 7, 5 | "reduction_bins": 668, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 128, 10 | "n_fft": 1024, 11 | "crop_start": 0, 12 | "crop_stop": 186, 13 | "lpf_start": 37, 14 | "lpf_stop": 73, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 11025, 19 | "hl": 128, 20 | "n_fft": 512, 21 | "crop_start": 4, 22 | "crop_stop": 185, 23 | "hpf_start": 36, 24 | "hpf_stop": 18, 25 | "lpf_start": 93, 26 | "lpf_stop": 185, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 22050, 31 | "hl": 256, 32 | "n_fft": 512, 33 | "crop_start": 46, 34 | "crop_stop": 186, 35 | "hpf_start": 93, 36 | "hpf_stop": 46, 37 | "lpf_start": 164, 38 | "lpf_stop": 186, 39 | "res_type": "polyphase" 40 | }, 41 | "4": { 42 | "sr": 44100, 43 | "hl": 512, 44 | "n_fft": 768, 45 | "crop_start": 121, 46 | "crop_stop": 382, 47 | "hpf_start": 138, 48 | "hpf_stop": 123, 49 | "res_type": "sinc_medium" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 740, 54 | "pre_filter_stop": 768 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_v2.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 672, 3 | "unstable_bins": 8, 4 | "reduction_bins": 637, 5 | "band": { 6 | "1": { 7 | "sr": 7350, 8 | "hl": 80, 9 | "n_fft": 640, 10 | "crop_start": 0, 11 | "crop_stop": 85, 12 | "lpf_start": 25, 13 | "lpf_stop": 53, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 7350, 18 | "hl": 80, 19 | "n_fft": 320, 20 | "crop_start": 4, 21 | "crop_stop": 87, 22 | "hpf_start": 25, 23 | "hpf_stop": 12, 24 | "lpf_start": 31, 25 | "lpf_stop": 62, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 14700, 30 | "hl": 160, 31 | "n_fft": 512, 32 | "crop_start": 17, 33 | "crop_stop": 216, 34 | "hpf_start": 48, 35 | "hpf_stop": 24, 36 | "lpf_start": 139, 37 | "lpf_stop": 210, 38 | "res_type": "polyphase" 39 | }, 40 | "4": { 41 | "sr": 44100, 42 | "hl": 480, 43 | "n_fft": 960, 44 | "crop_start": 78, 45 | "crop_stop": 383, 46 | "hpf_start": 130, 47 | "hpf_stop": 86, 48 | "res_type": "kaiser_fast" 49 | } 50 | }, 51 | "sr": 44100, 52 | "pre_filter_start": 668, 53 | "pre_filter_stop": 672 54 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_v2_sn.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 672, 3 | "unstable_bins": 8, 4 | "reduction_bins": 637, 5 | "band": { 6 | "1": { 7 | "sr": 7350, 8 | "hl": 80, 9 | "n_fft": 640, 10 | "crop_start": 0, 11 | "crop_stop": 85, 12 | "lpf_start": 25, 13 | "lpf_stop": 53, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 7350, 18 | "hl": 80, 19 | "n_fft": 320, 20 | "crop_start": 4, 21 | "crop_stop": 87, 22 | "hpf_start": 25, 23 | "hpf_stop": 12, 24 | "lpf_start": 31, 25 | "lpf_stop": 62, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 14700, 30 | "hl": 160, 31 | "n_fft": 512, 32 | "crop_start": 17, 33 | "crop_stop": 216, 34 | "hpf_start": 48, 35 | "hpf_stop": 24, 36 | "lpf_start": 139, 37 | "lpf_stop": 210, 38 | "res_type": "polyphase" 39 | }, 40 | "4": { 41 | "sr": 44100, 42 | "hl": 480, 43 | "n_fft": 960, 44 | "crop_start": 78, 45 | "crop_stop": 383, 46 | "hpf_start": 130, 47 | "hpf_stop": 86, 48 | "convert_channels": "stereo_n", 49 | "res_type": "kaiser_fast" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 668, 54 | "pre_filter_stop": 672 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_v3.json: -------------------------------------------------------------------------------- 1 | { 2 | "bins": 672, 3 | "unstable_bins": 8, 4 | "reduction_bins": 530, 5 | "band": { 6 | "1": { 7 | "sr": 7350, 8 | "hl": 80, 9 | "n_fft": 640, 10 | "crop_start": 0, 11 | "crop_stop": 85, 12 | "lpf_start": 25, 13 | "lpf_stop": 53, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 7350, 18 | "hl": 80, 19 | "n_fft": 320, 20 | "crop_start": 4, 21 | "crop_stop": 87, 22 | "hpf_start": 25, 23 | "hpf_stop": 12, 24 | "lpf_start": 31, 25 | "lpf_stop": 62, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 14700, 30 | "hl": 160, 31 | "n_fft": 512, 32 | "crop_start": 17, 33 | "crop_stop": 216, 34 | "hpf_start": 48, 35 | "hpf_stop": 24, 36 | "lpf_start": 139, 37 | "lpf_stop": 210, 38 | "res_type": "polyphase" 39 | }, 40 | "4": { 41 | "sr": 44100, 42 | "hl": 480, 43 | "n_fft": 960, 44 | "crop_start": 78, 45 | "crop_stop": 383, 46 | "hpf_start": 130, 47 | "hpf_stop": 86, 48 | "res_type": "kaiser_fast" 49 | } 50 | }, 51 | "sr": 44100, 52 | "pre_filter_start": 668, 53 | "pre_filter_stop": 672 54 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/4band_v3_sn.json: -------------------------------------------------------------------------------- 1 | { 2 | "n_bins": 672, 3 | "unstable_bins": 8, 4 | "stable_bins": 530, 5 | "band": { 6 | "1": { 7 | "sr": 7350, 8 | "hl": 80, 9 | "n_fft": 640, 10 | "crop_start": 0, 11 | "crop_stop": 85, 12 | "lpf_start": 25, 13 | "lpf_stop": 53, 14 | "res_type": "polyphase" 15 | }, 16 | "2": { 17 | "sr": 7350, 18 | "hl": 80, 19 | "n_fft": 320, 20 | "crop_start": 4, 21 | "crop_stop": 87, 22 | "hpf_start": 25, 23 | "hpf_stop": 12, 24 | "lpf_start": 31, 25 | "lpf_stop": 62, 26 | "res_type": "polyphase" 27 | }, 28 | "3": { 29 | "sr": 14700, 30 | "hl": 160, 31 | "n_fft": 512, 32 | "crop_start": 17, 33 | "crop_stop": 216, 34 | "hpf_start": 48, 35 | "hpf_stop": 24, 36 | "lpf_start": 139, 37 | "lpf_stop": 210, 38 | "res_type": "polyphase" 39 | }, 40 | "4": { 41 | "sr": 44100, 42 | "hl": 480, 43 | "n_fft": 960, 44 | "crop_start": 78, 45 | "crop_stop": 383, 46 | "hpf_start": 130, 47 | "hpf_stop": 86, 48 | "convert_channels": "stereo_n", 49 | "res_type": "kaiser_fast" 50 | } 51 | }, 52 | "sr": 44100, 53 | "pre_filter_start": 668, 54 | "pre_filter_stop": 672 55 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/modelparams/ensemble.json: -------------------------------------------------------------------------------- 1 | { 2 | "mid_side_b2": true, 3 | "bins": 1280, 4 | "unstable_bins": 7, 5 | "reduction_bins": 565, 6 | "band": { 7 | "1": { 8 | "sr": 11025, 9 | "hl": 108, 10 | "n_fft": 2048, 11 | "crop_start": 0, 12 | "crop_stop": 374, 13 | "lpf_start": 92, 14 | "lpf_stop": 186, 15 | "res_type": "polyphase" 16 | }, 17 | "2": { 18 | "sr": 22050, 19 | "hl": 216, 20 | "n_fft": 1536, 21 | "crop_start": 0, 22 | "crop_stop": 424, 23 | "hpf_start": 68, 24 | "hpf_stop": 34, 25 | "lpf_start": 348, 26 | "lpf_stop": 418, 27 | "res_type": "polyphase" 28 | }, 29 | "3": { 30 | "sr": 44100, 31 | "hl": 432, 32 | "n_fft": 1280, 33 | "crop_start": 132, 34 | "crop_stop": 614, 35 | "hpf_start": 172, 36 | "hpf_stop": 144, 37 | "res_type": "polyphase" 38 | } 39 | }, 40 | "sr": 44100, 41 | "pre_filter_start": 1280, 42 | "pre_filter_stop": 1280 43 | } -------------------------------------------------------------------------------- /lib_v5/vr_network/nets.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import torch.nn.functional as F 4 | 5 | from . import layers 6 | 7 | class BaseASPPNet(nn.Module): 8 | 9 | def __init__(self, nn_architecture, nin, ch, dilations=(4, 8, 16)): 10 | super(BaseASPPNet, self).__init__() 11 | self.nn_architecture = nn_architecture 12 | self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) 13 | self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) 14 | self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) 15 | self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) 16 | 17 | if self.nn_architecture == 129605: 18 | self.enc5 = layers.Encoder(ch * 8, ch * 16, 3, 2, 1) 19 | self.aspp = layers.ASPPModule(nn_architecture, ch * 16, ch * 32, dilations) 20 | self.dec5 = layers.Decoder(ch * (16 + 32), ch * 16, 3, 1, 1) 21 | else: 22 | self.aspp = layers.ASPPModule(nn_architecture, ch * 8, ch * 16, dilations) 23 | 24 | self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) 25 | self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) 26 | self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) 27 | self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) 28 | 29 | def __call__(self, x): 30 | h, e1 = self.enc1(x) 31 | h, e2 = self.enc2(h) 32 | h, e3 = self.enc3(h) 33 | h, e4 = self.enc4(h) 34 | 35 | if self.nn_architecture == 129605: 36 | h, e5 = self.enc5(h) 37 | h = self.aspp(h) 38 | h = self.dec5(h, e5) 39 | else: 40 | h = self.aspp(h) 41 | 42 | h = self.dec4(h, e4) 43 | h = self.dec3(h, e3) 44 | h = self.dec2(h, e2) 45 | h = self.dec1(h, e1) 46 | 47 | return h 48 | 49 | def determine_model_capacity(n_fft_bins, nn_architecture): 50 | 51 | sp_model_arch = [31191, 33966, 129605] 52 | hp_model_arch = [123821, 123812] 53 | hp2_model_arch = [537238, 537227] 54 | 55 | if nn_architecture in sp_model_arch: 56 | model_capacity_data = [ 57 | (2, 16), 58 | (2, 16), 59 | (18, 8, 1, 1, 0), 60 | (8, 16), 61 | (34, 16, 1, 1, 0), 62 | (16, 32), 63 | (32, 2, 1), 64 | (16, 2, 1), 65 | (16, 2, 1), 66 | ] 67 | 68 | if nn_architecture in hp_model_arch: 69 | model_capacity_data = [ 70 | (2, 32), 71 | (2, 32), 72 | (34, 16, 1, 1, 0), 73 | (16, 32), 74 | (66, 32, 1, 1, 0), 75 | (32, 64), 76 | (64, 2, 1), 77 | (32, 2, 1), 78 | (32, 2, 1), 79 | ] 80 | 81 | if nn_architecture in hp2_model_arch: 82 | model_capacity_data = [ 83 | (2, 64), 84 | (2, 64), 85 | (66, 32, 1, 1, 0), 86 | (32, 64), 87 | (130, 64, 1, 1, 0), 88 | (64, 128), 89 | (128, 2, 1), 90 | (64, 2, 1), 91 | (64, 2, 1), 92 | ] 93 | 94 | cascaded = CascadedASPPNet 95 | model = cascaded(n_fft_bins, model_capacity_data, nn_architecture) 96 | 97 | return model 98 | 99 | class CascadedASPPNet(nn.Module): 100 | 101 | def __init__(self, n_fft, model_capacity_data, nn_architecture): 102 | super(CascadedASPPNet, self).__init__() 103 | self.stg1_low_band_net = BaseASPPNet(nn_architecture, *model_capacity_data[0]) 104 | self.stg1_high_band_net = BaseASPPNet(nn_architecture, *model_capacity_data[1]) 105 | 106 | self.stg2_bridge = layers.Conv2DBNActiv(*model_capacity_data[2]) 107 | self.stg2_full_band_net = BaseASPPNet(nn_architecture, *model_capacity_data[3]) 108 | 109 | self.stg3_bridge = layers.Conv2DBNActiv(*model_capacity_data[4]) 110 | self.stg3_full_band_net = BaseASPPNet(nn_architecture, *model_capacity_data[5]) 111 | 112 | self.out = nn.Conv2d(*model_capacity_data[6], bias=False) 113 | self.aux1_out = nn.Conv2d(*model_capacity_data[7], bias=False) 114 | self.aux2_out = nn.Conv2d(*model_capacity_data[8], bias=False) 115 | 116 | self.max_bin = n_fft // 2 117 | self.output_bin = n_fft // 2 + 1 118 | 119 | self.offset = 128 120 | 121 | def forward(self, x): 122 | mix = x.detach() 123 | x = x.clone() 124 | 125 | x = x[:, :, :self.max_bin] 126 | 127 | bandw = x.size()[2] // 2 128 | aux1 = torch.cat([ 129 | self.stg1_low_band_net(x[:, :, :bandw]), 130 | self.stg1_high_band_net(x[:, :, bandw:]) 131 | ], dim=2) 132 | 133 | h = torch.cat([x, aux1], dim=1) 134 | aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) 135 | 136 | h = torch.cat([x, aux1, aux2], dim=1) 137 | h = self.stg3_full_band_net(self.stg3_bridge(h)) 138 | 139 | mask = torch.sigmoid(self.out(h)) 140 | mask = F.pad( 141 | input=mask, 142 | pad=(0, 0, 0, self.output_bin - mask.size()[2]), 143 | mode='replicate') 144 | 145 | if self.training: 146 | aux1 = torch.sigmoid(self.aux1_out(aux1)) 147 | aux1 = F.pad( 148 | input=aux1, 149 | pad=(0, 0, 0, self.output_bin - aux1.size()[2]), 150 | mode='replicate') 151 | aux2 = torch.sigmoid(self.aux2_out(aux2)) 152 | aux2 = F.pad( 153 | input=aux2, 154 | pad=(0, 0, 0, self.output_bin - aux2.size()[2]), 155 | mode='replicate') 156 | return mask * mix, aux1 * mix, aux2 * mix 157 | else: 158 | return mask# * mix 159 | 160 | def predict_mask(self, x): 161 | mask = self.forward(x) 162 | 163 | if self.offset > 0: 164 | mask = mask[:, :, :, self.offset:-self.offset] 165 | 166 | return mask -------------------------------------------------------------------------------- /lib_v5/vr_network/nets_new.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | import torch.nn.functional as F 4 | from . import layers_new as layers 5 | 6 | class BaseNet(nn.Module): 7 | 8 | def __init__(self, nin, nout, nin_lstm, nout_lstm, dilations=((4, 2), (8, 4), (12, 6))): 9 | super(BaseNet, self).__init__() 10 | self.enc1 = layers.Conv2DBNActiv(nin, nout, 3, 1, 1) 11 | self.enc2 = layers.Encoder(nout, nout * 2, 3, 2, 1) 12 | self.enc3 = layers.Encoder(nout * 2, nout * 4, 3, 2, 1) 13 | self.enc4 = layers.Encoder(nout * 4, nout * 6, 3, 2, 1) 14 | self.enc5 = layers.Encoder(nout * 6, nout * 8, 3, 2, 1) 15 | 16 | self.aspp = layers.ASPPModule(nout * 8, nout * 8, dilations, dropout=True) 17 | 18 | self.dec4 = layers.Decoder(nout * (6 + 8), nout * 6, 3, 1, 1) 19 | self.dec3 = layers.Decoder(nout * (4 + 6), nout * 4, 3, 1, 1) 20 | self.dec2 = layers.Decoder(nout * (2 + 4), nout * 2, 3, 1, 1) 21 | self.lstm_dec2 = layers.LSTMModule(nout * 2, nin_lstm, nout_lstm) 22 | self.dec1 = layers.Decoder(nout * (1 + 2) + 1, nout * 1, 3, 1, 1) 23 | 24 | def __call__(self, x): 25 | e1 = self.enc1(x) 26 | e2 = self.enc2(e1) 27 | e3 = self.enc3(e2) 28 | e4 = self.enc4(e3) 29 | e5 = self.enc5(e4) 30 | 31 | h = self.aspp(e5) 32 | 33 | h = self.dec4(h, e4) 34 | h = self.dec3(h, e3) 35 | h = self.dec2(h, e2) 36 | h = torch.cat([h, self.lstm_dec2(h)], dim=1) 37 | h = self.dec1(h, e1) 38 | 39 | return h 40 | 41 | class CascadedNet(nn.Module): 42 | 43 | def __init__(self, n_fft, nn_arch_size=51000, nout=32, nout_lstm=128): 44 | super(CascadedNet, self).__init__() 45 | self.max_bin = n_fft // 2 46 | self.output_bin = n_fft // 2 + 1 47 | self.nin_lstm = self.max_bin // 2 48 | self.offset = 64 49 | nout = 64 if nn_arch_size == 218409 else nout 50 | 51 | #print(nout, nout_lstm, n_fft) 52 | 53 | self.stg1_low_band_net = nn.Sequential( 54 | BaseNet(2, nout // 2, self.nin_lstm // 2, nout_lstm), 55 | layers.Conv2DBNActiv(nout // 2, nout // 4, 1, 1, 0) 56 | ) 57 | self.stg1_high_band_net = BaseNet(2, nout // 4, self.nin_lstm // 2, nout_lstm // 2) 58 | 59 | self.stg2_low_band_net = nn.Sequential( 60 | BaseNet(nout // 4 + 2, nout, self.nin_lstm // 2, nout_lstm), 61 | layers.Conv2DBNActiv(nout, nout // 2, 1, 1, 0) 62 | ) 63 | self.stg2_high_band_net = BaseNet(nout // 4 + 2, nout // 2, self.nin_lstm // 2, nout_lstm // 2) 64 | 65 | self.stg3_full_band_net = BaseNet(3 * nout // 4 + 2, nout, self.nin_lstm, nout_lstm) 66 | 67 | self.out = nn.Conv2d(nout, 2, 1, bias=False) 68 | self.aux_out = nn.Conv2d(3 * nout // 4, 2, 1, bias=False) 69 | 70 | def forward(self, x): 71 | x = x[:, :, :self.max_bin] 72 | 73 | bandw = x.size()[2] // 2 74 | l1_in = x[:, :, :bandw] 75 | h1_in = x[:, :, bandw:] 76 | l1 = self.stg1_low_band_net(l1_in) 77 | h1 = self.stg1_high_band_net(h1_in) 78 | aux1 = torch.cat([l1, h1], dim=2) 79 | 80 | l2_in = torch.cat([l1_in, l1], dim=1) 81 | h2_in = torch.cat([h1_in, h1], dim=1) 82 | l2 = self.stg2_low_band_net(l2_in) 83 | h2 = self.stg2_high_band_net(h2_in) 84 | aux2 = torch.cat([l2, h2], dim=2) 85 | 86 | f3_in = torch.cat([x, aux1, aux2], dim=1) 87 | f3 = self.stg3_full_band_net(f3_in) 88 | 89 | mask = torch.sigmoid(self.out(f3)) 90 | mask = F.pad( 91 | input=mask, 92 | pad=(0, 0, 0, self.output_bin - mask.size()[2]), 93 | mode='replicate' 94 | ) 95 | 96 | if self.training: 97 | aux = torch.cat([aux1, aux2], dim=1) 98 | aux = torch.sigmoid(self.aux_out(aux)) 99 | aux = F.pad( 100 | input=aux, 101 | pad=(0, 0, 0, self.output_bin - aux.size()[2]), 102 | mode='replicate' 103 | ) 104 | return mask, aux 105 | else: 106 | return mask 107 | 108 | def predict_mask(self, x): 109 | mask = self.forward(x) 110 | 111 | if self.offset > 0: 112 | mask = mask[:, :, :, self.offset:-self.offset] 113 | assert mask.size()[3] > 0 114 | 115 | return mask 116 | 117 | def predict(self, x): 118 | mask = self.forward(x) 119 | pred_mag = x * mask 120 | 121 | if self.offset > 0: 122 | pred_mag = pred_mag[:, :, :, self.offset:-self.offset] 123 | assert pred_mag.size()[3] > 0 124 | 125 | return pred_mag 126 | -------------------------------------------------------------------------------- /models/Demucs_Models/model_data/model_name_mapper.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasnet.th": "v1 | Tasnet", 3 | "tasnet_extra.th": "v1 | Tasnet_extra", 4 | "demucs.th": "v1 | Demucs", 5 | "demucs_extra.th": "v1 | Demucs_extra", 6 | "light.th": "v1 | Light", 7 | "light_extra.th": "v1 | Light_extra", 8 | "tasnet.th.gz": "v1 | Tasnet.gz", 9 | "tasnet_extra.th.gz": "v1 | Tasnet_extra.gz", 10 | "demucs.th.gz": "v1 | Demucs_extra.gz", 11 | "light.th.gz": "v1 | Light.gz", 12 | "light_extra.th.gz": "v1 | Light_extra.gz", 13 | "tasnet-beb46fac.th": "v2 | Tasnet", 14 | "tasnet_extra-df3777b2.th": "v2 | Tasnet_extra", 15 | "demucs48_hq-28a1282c.th": "v2 | Demucs48_hq", 16 | "demucs-e07c671f.th": "v2 | Demucs", 17 | "demucs_extra-3646af93.th": "v2 | Demucs_extra", 18 | "demucs_unittest-09ebc15f.th": "v2 | Demucs_unittest", 19 | "mdx.yaml": "v3 | mdx", 20 | "mdx_extra.yaml": "v3 | mdx_extra", 21 | "mdx_extra_q.yaml": "v3 | mdx_extra_q", 22 | "mdx_q.yaml": "v3 | mdx_q", 23 | "repro_mdx_a.yaml": "v3 | repro_mdx_a", 24 | "repro_mdx_a_hybrid_only.yaml": "v3 | repro_mdx_a_hybrid", 25 | "repro_mdx_a_time_only.yaml": "v3 | repro_mdx_a_time", 26 | "UVR_Demucs_Model_1.yaml": "v3 | UVR_Model_1", 27 | "UVR_Demucs_Model_2.yaml": "v3 | UVR_Model_2", 28 | "UVR_Demucs_Model_Bag.yaml": "v3 | UVR_Model_Bag", 29 | "hdemucs_mmi.yaml": "v4 | hdemucs_mmi", 30 | "htdemucs.yaml": "v4 | htdemucs", 31 | "htdemucs_ft.yaml": "v4 | htdemucs_ft", 32 | "htdemucs_6s.yaml": "v4 | htdemucs_6s", 33 | "UVR_Demucs_Model_ht.yaml": "v4 | UVR_Model_ht" 34 | } -------------------------------------------------------------------------------- /models/Demucs_Models/v3_v4_repo/demucs_models.txt: -------------------------------------------------------------------------------- 1 | Demucs v3 and v4 models go here. -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model1.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 4096 4 | dim_t: 128 5 | hop_length: 2048 6 | n_fft: 8192 7 | num_channels: 2 8 | sample_rate: 44100 9 | model: 10 | act: gelu 11 | bottleneck_factor: 4 12 | growth: 64 13 | norm: InstanceNorm 14 | num_blocks_per_scale: 2 15 | num_channels: 128 16 | num_scales: 5 17 | num_subbands: 4 18 | scale: 19 | - 2 20 | - 2 21 | training: 22 | batch_size: 8 23 | grad_clip: 0 24 | instruments: 25 | - Vocals 26 | - Drums 27 | - Bass 28 | - Other 29 | lr: 5.0e-05 30 | target_instrument: null 31 | inference: 32 | batch_size: 1 33 | dim_t: 256 34 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model2.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 4096 4 | dim_t: 128 5 | hop_length: 2048 6 | n_fft: 8192 7 | num_channels: 2 8 | sample_rate: 44100 9 | model: 10 | act: gelu 11 | bottleneck_factor: 4 12 | growth: 64 13 | norm: InstanceNorm 14 | num_blocks_per_scale: 2 15 | num_channels: 256 16 | num_scales: 5 17 | num_subbands: 4 18 | scale: 19 | - 2 20 | - 2 21 | training: 22 | batch_size: 8 23 | grad_clip: 0 24 | instruments: 25 | - Vocals 26 | - Drums 27 | - Bass 28 | - Other 29 | lr: 3.0e-05 30 | target_instrument: null 31 | inference: 32 | batch_size: 1 33 | dim_t: 256 34 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model3.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 4096 4 | dim_t: 128 5 | hop_length: 2048 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | model: 10 | act: gelu 11 | bottleneck_factor: 4 12 | growth: 64 13 | norm: InstanceNorm 14 | num_blocks_per_scale: 2 15 | num_channels: 128 16 | num_scales: 5 17 | num_subbands: 4 18 | scale: 19 | - 2 20 | - 2 21 | training: 22 | batch_size: 8 23 | grad_clip: 0 24 | instruments: 25 | - Vocals 26 | - Drums 27 | - Bass 28 | - Other 29 | lr: 5.0e-05 30 | target_instrument: Vocals 31 | inference: 32 | batch_size: 1 33 | dim_t: 256 34 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/modelA.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 4096 4 | dim_t: 256 5 | hop_length: 1024 6 | min_mean_abs: 0.01 7 | n_fft: 8192 8 | num_channels: 2 9 | sample_rate: 44100 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 64 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 64 17 | num_scales: 5 18 | num_subbands: 4 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 6 24 | coarse_loss_clip: true 25 | ema_momentum: 0.999 26 | grad_clip: null 27 | instruments: 28 | - Vocals 29 | - Drums 30 | - Bass 31 | - Other 32 | lr: 0.0001 33 | num_steps: 100000 34 | q: 0.4 35 | target_instrument: null 36 | inference: 37 | batch_size: 2 38 | dim_t: 256 39 | num_overlap: 8 40 | -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/modelB.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 4096 4 | dim_t: 256 5 | hop_length: 1024 6 | min_mean_abs: 0.01 7 | n_fft: 8192 8 | num_channels: 2 9 | sample_rate: 44100 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 64 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 64 17 | num_scales: 5 18 | num_subbands: 4 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 6 24 | coarse_loss_clip: false 25 | datasets: 26 | - ../data/moises/bleeding 27 | ema_momentum: 0.999 28 | grad_clip: null 29 | instruments: 30 | - Vocals 31 | - Drums 32 | - Bass 33 | - Other 34 | lr: 0.0001 35 | num_steps: 150000 36 | q: 0.93 37 | target_instrument: null 38 | inference: 39 | batch_size: 2 40 | dim_t: 256 41 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_061321.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 4096 4 | dim_t: 256 5 | hop_length: 2048 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 64 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 4 19 | scale: 20 | - 2 21 | - 2 22 | name: epoch_10.ckpt 23 | training: 24 | batch_size: 16 25 | grad_clip: 0 26 | instruments: 27 | - Vocals 28 | - Instrumental 29 | lr: 5.0e-05 30 | target_instrument: null 31 | num_epochs: 100 32 | num_steps: 1000 33 | inference: 34 | batch_size: 1 35 | dim_t: 256 36 | num_overlap: 8 37 | -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_full_band.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 6144 4 | dim_t: 128 5 | hop_length: 2048 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 64 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 6 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 14 24 | grad_clip: 0 25 | instruments: 26 | - Vocals 27 | - Instrumental 28 | lr: 3.0e-05 29 | target_instrument: null 30 | num_epochs: 1000 31 | num_steps: 1000 32 | augmentation: 1 33 | inference: 34 | batch_size: 1 35 | dim_t: 256 36 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_full_band_2.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 260096 3 | dim_f: 6144 4 | dim_t: 128 5 | hop_length: 2048 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 128 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 6 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 14 24 | grad_clip: 0 25 | instruments: 26 | - Vocals 27 | - Instrumental 28 | lr: 2.0e-05 29 | target_instrument: null 30 | num_epochs: 1000 31 | num_steps: 1000 32 | augmentation: 1 33 | inference: 34 | batch_size: 1 35 | dim_t: 256 36 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_full_band_3.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 6144 4 | dim_t: 256 5 | hop_length: 1024 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 128 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 6 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 6 24 | grad_clip: 0 25 | instruments: 26 | - Vocals 27 | - Instrumental 28 | lr: 1.0e-05 29 | target_instrument: null 30 | num_epochs: 1000 31 | num_steps: 1000 32 | augmentation: 1 33 | q: 0.95 34 | coarse_loss_clip: true 35 | ema_momentum: 0.999 36 | inference: 37 | batch_size: 1 38 | dim_t: 256 39 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_full_band_4.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 6144 4 | dim_t: 256 5 | hop_length: 1024 6 | n_fft: 12288 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 128 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 6 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 6 24 | grad_clip: 0 25 | instruments: 26 | - Vocals 27 | - Instrumental 28 | lr: 0.7e-05 29 | patience: 2 30 | target_instrument: null 31 | num_epochs: 1000 32 | num_steps: 1000 33 | augmentation: 1 34 | q: 0.95 35 | coarse_loss_clip: true 36 | ema_momentum: 0.999 37 | inference: 38 | batch_size: 1 39 | dim_t: 256 40 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/model_2_stem_full_band_8k.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 4096 4 | dim_t: 256 5 | hop_length: 1024 6 | n_fft: 8192 7 | num_channels: 2 8 | sample_rate: 44100 9 | min_mean_abs: 0.001 10 | model: 11 | act: gelu 12 | bottleneck_factor: 4 13 | growth: 128 14 | norm: InstanceNorm 15 | num_blocks_per_scale: 2 16 | num_channels: 128 17 | num_scales: 5 18 | num_subbands: 4 19 | scale: 20 | - 2 21 | - 2 22 | training: 23 | batch_size: 6 24 | grad_clip: 0 25 | instruments: 26 | - Vocals 27 | - Instrumental 28 | lr: 1.0e-05 29 | patience: 2 30 | reduce_factor: 0.95 31 | target_instrument: null 32 | num_epochs: 1000 33 | num_steps: 1000 34 | augmentation: 1 35 | augmentation_type: simple1 36 | augmentation_mix: true 37 | q: 0.95 38 | coarse_loss_clip: true 39 | ema_momentum: 0.999 40 | inference: 41 | batch_size: 1 42 | dim_t: 256 43 | num_overlap: 8 -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/mdx_c_configs/sndfx.yaml: -------------------------------------------------------------------------------- 1 | audio: 2 | chunk_size: 261120 3 | dim_f: 1024 4 | dim_t: 256 5 | hop_length: 1024 6 | min_mean_abs: 0.01 7 | n_fft: 2048 8 | num_channels: 2 9 | sample_rate: 44100 10 | stereo_prob: 0.7 11 | model: 12 | act: gelu 13 | bottleneck_factor: 4 14 | growth: 64 15 | norm: InstanceNorm 16 | num_blocks_per_scale: 2 17 | num_channels: 64 18 | num_scales: 5 19 | num_subbands: 4 20 | scale: 21 | - 2 22 | - 2 23 | training: 24 | batch_size: 8 25 | ema_momentum: 0.999 26 | grad_clip: null 27 | instruments: 28 | - Music 29 | - Speech 30 | - SFX 31 | lr: 0.0001 32 | num_steps: 30000 33 | target_instrument: null 34 | inference: 35 | batch_size: 8 36 | dim_t: 256 37 | instruments: 38 | - Music 39 | - Dialog 40 | - Effect 41 | num_overlap: 8 42 | -------------------------------------------------------------------------------- /models/MDX_Net_Models/model_data/model_name_mapper.json: -------------------------------------------------------------------------------- 1 | { 2 | "UVR_MDXNET_1_9703": "UVR-MDX-NET 1", 3 | "UVR_MDXNET_2_9682": "UVR-MDX-NET 2", 4 | "UVR_MDXNET_3_9662": "UVR-MDX-NET 3", 5 | "UVR_MDXNET_KARA": "UVR-MDX-NET Karaoke", 6 | "UVR_MDXNET_Main": "UVR-MDX-NET Main", 7 | "UVR-MDX-NET-Inst_1": "UVR-MDX-NET Inst 1", 8 | "UVR-MDX-NET-Inst_2": "UVR-MDX-NET Inst 2", 9 | "UVR-MDX-NET-Inst_3": "UVR-MDX-NET Inst 3", 10 | "UVR-MDX-NET-Inst_4": "UVR-MDX-NET Inst 4", 11 | "UVR-MDX-NET-Inst_Main": "UVR-MDX-NET Inst Main", 12 | "UVR-MDX-NET-Inst_Main_2": "UVR-MDX-NET Inst Main 2", 13 | "UVR-MDX-NET-Inst_HQ_1": "UVR-MDX-NET Inst HQ 1", 14 | "UVR-MDX-NET-Inst_HQ_2": "UVR-MDX-NET Inst HQ 2", 15 | "UVR-MDX-NET-Inst_HQ_3": "UVR-MDX-NET Inst HQ 3", 16 | "UVR_MDXNET_KARA_2": "UVR-MDX-NET Karaoke 2", 17 | "Kim_Vocal_1": "Kim Vocal 1", 18 | "Kim_Vocal_2": "Kim Vocal 2", 19 | "Kim_Inst": "Kim Inst", 20 | "MDX23C-8KFFT-InstVoc_HQ.ckpt": "MDX23C-InstVoc HQ", 21 | "Reverb_HQ_By_FoxJoy": "Reverb HQ" 22 | } -------------------------------------------------------------------------------- /models/VR_Models/UVR-DeNoise-Lite.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Anjok07/ultimatevocalremovergui/5517e0cf0d1acd16a1618eeedec596957523f9e1/models/VR_Models/UVR-DeNoise-Lite.pth -------------------------------------------------------------------------------- /models/VR_Models/model_data/model_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "0d0e6d143046b0eecc41a22e60224582": { 3 | "vr_model_param": "3band_44100_mid", 4 | "primary_stem": "Instrumental" 5 | }, 6 | "18b52f873021a0af556fb4ecd552bb8e": { 7 | "vr_model_param": "2band_32000", 8 | "primary_stem": "Instrumental" 9 | }, 10 | "1fc66027c82b499c7d8f55f79e64cadc": { 11 | "vr_model_param": "2band_32000", 12 | "primary_stem": "Instrumental" 13 | }, 14 | "2aa34fbc01f8e6d2bf509726481e7142": { 15 | "vr_model_param": "4band_44100", 16 | "primary_stem": "No Piano" 17 | }, 18 | "3e18f639b11abea7361db1a4a91c2559": { 19 | "vr_model_param": "4band_44100", 20 | "primary_stem": "Instrumental" 21 | }, 22 | "570b5f50054609a17741369a35007ddd": { 23 | "vr_model_param": "4band_v3", 24 | "primary_stem": "Instrumental" 25 | }, 26 | "5a6e24c1b530f2dab045a522ef89b751": { 27 | "vr_model_param": "1band_sr44100_hl512", 28 | "primary_stem": "Instrumental" 29 | }, 30 | "6b5916069a49be3fe29d4397ecfd73fa": { 31 | "vr_model_param": "3band_44100_msb2", 32 | "primary_stem": "Instrumental", 33 | "is_karaoke": true 34 | }, 35 | "74b3bc5fa2b69f29baf7839b858bc679": { 36 | "vr_model_param": "4band_44100", 37 | "primary_stem": "Instrumental" 38 | }, 39 | "827213b316df36b52a1f3d04fec89369": { 40 | "vr_model_param": "4band_44100", 41 | "primary_stem": "Instrumental" 42 | }, 43 | "911d4048eee7223eca4ee0efb7d29256": { 44 | "vr_model_param": "4band_44100", 45 | "primary_stem": "Vocals" 46 | }, 47 | "941f3f7f0b0341f12087aacdfef644b1": { 48 | "vr_model_param": "4band_v2", 49 | "primary_stem": "Instrumental" 50 | }, 51 | "a02827cf69d75781a35c0e8a327f3195": { 52 | "vr_model_param": "1band_sr33075_hl384", 53 | "primary_stem": "Instrumental" 54 | }, 55 | "b165fbff113c959dba5303b74c6484bc": { 56 | "vr_model_param": "3band_44100", 57 | "primary_stem": "Instrumental" 58 | }, 59 | "b5f988cd3e891dca7253bf5f0f3427c7": { 60 | "vr_model_param": "4band_44100", 61 | "primary_stem": "Instrumental" 62 | }, 63 | "b99c35723bc35cb11ed14a4780006a80": { 64 | "vr_model_param": "1band_sr44100_hl1024", 65 | "primary_stem": "Instrumental" 66 | }, 67 | "ba02fd25b71d620eebbdb49e18e4c336": { 68 | "vr_model_param": "3band_44100_mid", 69 | "primary_stem": "Instrumental" 70 | }, 71 | "c4476ef424d8cba65f38d8d04e8514e2": { 72 | "vr_model_param": "3band_44100_msb2", 73 | "primary_stem": "Instrumental" 74 | }, 75 | "da2d37b8be2972e550a409bae08335aa": { 76 | "vr_model_param": "4band_44100", 77 | "primary_stem": "Vocals" 78 | }, 79 | "db57205d3133e39df8e050b435a78c80": { 80 | "vr_model_param": "4band_44100", 81 | "primary_stem": "Instrumental" 82 | }, 83 | "ea83b08e32ec2303456fe50659035f69": { 84 | "vr_model_param": "4band_v3", 85 | "primary_stem": "Instrumental" 86 | }, 87 | "f6ea8473ff86017b5ebd586ccacf156b": { 88 | "vr_model_param": "4band_v2_sn", 89 | "primary_stem": "Instrumental", 90 | "is_karaoke": true 91 | }, 92 | "fd297a61eafc9d829033f8b987c39a3d": { 93 | "vr_model_param": "1band_sr32000_hl512", 94 | "primary_stem": "Instrumental" 95 | }, 96 | "0ec76fd9e65f81d8b4fbd13af4826ed8": { 97 | "vr_model_param": "4band_v3", 98 | "primary_stem": "No Woodwinds" 99 | }, 100 | "0fb9249ffe4ffc38d7b16243f394c0ff": { 101 | "vr_model_param": "4band_v3", 102 | "primary_stem": "No Reverb" 103 | }, 104 | "6857b2972e1754913aad0c9a1678c753": { 105 | "vr_model_param": "4band_v3", 106 | "primary_stem": "Echo", 107 | "nout": 48, 108 | "nout_lstm": 128 109 | }, 110 | "f200a145434efc7dcf0cd093f517ed52": { 111 | "vr_model_param": "4band_v3", 112 | "primary_stem": "No Echo", 113 | "nout": 48, 114 | "nout_lstm": 128 115 | }, 116 | "44c55d8b5d2e3edea98c2b2bf93071c7": { 117 | "vr_model_param": "4band_v3", 118 | "primary_stem": "Noise", 119 | "nout": 48, 120 | "nout_lstm": 128 121 | }, 122 | "51ea8c43a6928ed3c10ef5cb2707d57b": { 123 | "vr_model_param": "1band_sr44100_hl1024", 124 | "primary_stem": "Noise", 125 | "nout": 16, 126 | "nout_lstm": 128 127 | }, 128 | "944950a9c5963a5eb70b445d67b7068a": { 129 | "vr_model_param": "4band_v3_sn", 130 | "primary_stem": "Vocals", 131 | "nout": 64, 132 | "nout_lstm": 128, 133 | "is_karaoke": false, 134 | "is_bv_model": true, 135 | "is_bv_model_rebalanced": 0.9 136 | } 137 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | altgraph==0.17.3 2 | audioread==3.0.0 3 | certifi==2022.12.07 4 | cffi==1.15.1 5 | cryptography==3.4.6 6 | einops==0.6.0 7 | future==0.18.3 8 | julius==0.2.7 9 | kthread==0.2.3 10 | librosa==0.9.2 11 | llvmlite 12 | matchering==2.0.6 13 | ml_collections==0.1.1 14 | natsort==8.2.0 15 | omegaconf==2.2.3 16 | opencv-python==4.6.0.66 17 | Pillow==9.3.0 18 | psutil==5.9.4 19 | pydub==0.25.1 20 | pyglet==1.5.23 21 | pyperclip==1.8.2 22 | pyrubberband==0.3.0 23 | pytorch_lightning==2.0.0 24 | PyYAML==6.0 25 | resampy==0.4.2 26 | scipy==1.9.3 27 | soundstretch==1.2 28 | torch 29 | urllib3==1.26.12 30 | wget==3.2 31 | samplerate==0.1.0 32 | screeninfo==0.8.1 33 | diffq 34 | playsound 35 | onnx 36 | onnxruntime 37 | onnxruntime-gpu 38 | onnx2pytorch 39 | SoundFile==0.11.0; sys_platform != 'darwin' 40 | PySoundFile==0.9.0.post1; sys_platform == 'darwin' 41 | Dora==0.0.3 42 | numpy==1.23.5 43 | --------------------------------------------------------------------------------