import json import os import pathlib default_param = {} default_param["bins"] = 768 default_param["unstable_bins"] = 9 # training only default_param["reduction_bins"] = 762 # training only default_param["sr"] = 44100 default_param["pre_filter_start"] = 757 default_param["pre_filter_stop"] = 768 default_param["band"] = {} default_param["band"][1] = { "sr": 11025, "hl": 128, "n_fft": 960, "crop_start": 0, "crop_stop": 245, "lpf_start": 61, # inference only "res_type": "polyphase", } default_param["band"][2] = { "sr": 44100, "hl": 512, "n_fft": 1536, "crop_start": 24, "crop_stop": 547, "hpf_start": 81, # inference only "res_type": "sinc_best", } def int_keys(d): r = {} for k, v in d: if k.isdigit(): k = int(k) r[k] = v return r class ModelParameters(object): def __init__(self, config_path=""): if ".pth" == pathlib.Path(config_path).suffix: import zipfile with zipfile.ZipFile(config_path, "r") as zip: self.param = json.loads( zip.read("param.json"), object_pairs_hook=int_keys ) elif ".json" == pathlib.Path(config_path).suffix: with open(config_path, "r") as f: self.param = json.loads(f.read(), object_pairs_hook=int_keys) else: self.param = default_param for k in [ "mid_side", "mid_side_b", "mid_side_b2", "stereo_w", "stereo_n", "reverse", ]: if not k in self.param: self.param[k] = False