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