Files
diodiogod-TTS-Audio-Suite/utils/voicefixer_bundled/vocoder/config.py
T
diodiogod 40f0e873be Integrate Voice Fixer audio restoration (Issue #153)
- Bundle VoiceFixer locally to avoid cache downloads
- Create voice_fixer_downloader for TTS/voicefixer/ model management
- Implement Voice Fixer node with 3 restoration modes (original, high-freq removal, train mode)
- Register node in nodes.py with proper error handling
- Patch bundled VoiceFixer hardcoded paths to use TTS/voicefixer/ directory
- Disable auto-download in restorer/__init__.py, handled by node instead
- Support lazy loading and CUDA acceleration
- All models download to organized TTS/ folder, never to cache
2025-10-29 14:15:52 -03:00

317 lines
7.8 KiB
Python

import torch
import numpy as np
import os
from voicefixer_bundled.tools.path import root_path
class Config:
@classmethod
def refresh(cls, sr):
if sr == 44100:
Config.ckpt = os.path.join(
os.path.expanduser("~"),
".cache/voicefixer/synthesis_module/44100/model.ckpt-1490000_trimed.pt",
)
Config.cond_channels = 512
Config.m_channels = 768
Config.resstack_depth = [8, 8, 8, 8]
Config.channels = 1024
Config.cin_channels = 128
Config.upsample_scales = [7, 7, 3, 3]
Config.num_mels = 128
Config.n_fft = 2048
Config.hop_length = 441
Config.sample_rate = 44100
Config.fmax = 22000
Config.mel_win = 128
Config.local_condition_dim = 128
else:
raise RuntimeError(
"Error: Vocoder currently only support 44100 samplerate."
)
ckpt = os.path.join(
os.path.expanduser("~"),
".cache/voicefixer/synthesis_module/44100/model.ckpt-1490000_trimed.pt",
)
m_channels = 384
bits = 10
opt = "Ralamb"
cond_channels = 256
clip = 0.5
num_bands = 1
cin_channels = 128
upsample_scales = [7, 7, 3, 3]
filterbands = "test/filterbanks_4bands.dat"
##For inference
tag = ""
min_db = -115
num_mels = 128
n_fft = 2048
hop_length = 441
win_size = None
sample_rate = 44100
frame_shift_ms = None
trim_fft_size = 512
trim_hop_size = 128
trim_top_db = 23
signal_normalization = True
allow_clipping_in_normalization = True
symmetric_mels = True
max_abs_value = 4.0
preemphasis = 0.85
min_level_db = -100
ref_level_db = 20
fmin = 50
fmax = 22000
power = 1.5
griffin_lim_iters = 60
rescale = False
rescaling_max = 0.95
trim_silence = False
clip_mels_length = True
max_mel_frames = 2000
mel_win = 128
batch_size = 24
g_learning_rate = 0.001
d_learning_rate = 0.001
warmup_steps = 100000
decay_learning_rate = 0.5
exponential_moving_average = True
ema_decay = 0.99
reset_opt = False
reset_g_opt = False
reset_d_opt = False
local_condition_dim = 128
lambda_update_G = 1
multiscale_D = 3
lambda_adv = 4.0
lambda_fm_loss = 0.0
lambda_sc_loss = 5.0
lambda_mag_loss = 5.0
lambda_mel_loss = 50.0
use_mle_loss = False
lambda_mle_loss = 5.0
lambda_freq_loss = 2.0
lambda_energy_loss = 100.0
lambda_t_loss = 200.0
lambda_phase_loss = 100.0
lambda_f0_loss = 1.0
use_elu = False
de_preem = False # train
up_org = False
use_one = True
use_small_D = False
use_condnet = True
use_depreem = False # inference
use_msd = False
model_type = "tfgan" # or bytewave, frame level vocoder using istft
use_hjcud = False
no_skip = False
out_channels = 1
use_postnet = False # wn in postnet
use_wn = False # wn in resstack
up_type = "transpose"
use_smooth = False
use_drop = False
use_shift_scale = False
use_gcnn = False
resstack_depth = [6, 6, 6, 6]
kernel_size = [3, 3, 3, 3]
channels = 512
use_f0_loss = False
use_sine = False
use_cond_rnn = False
use_rnn = False
f0_step = 120
use_lowfreq_loss = False
lambda_lowfreq_loss = 1.0
use_film = False
use_mb_mr_gan = False
use_mssl = False
use_ml_gan = False
use_mb_gan = True
use_mpd = False
use_spec_gan = True
use_rwd = False
use_mr_gan = True
use_pqmf_rwd = False
no_sine = False
use_frame_mask = False
lambda_var_loss = 0.0
discriminator_train_start_steps = 40000 # 80k
aux_d_train_start_steps = 40000 # 100k
rescale_out = 0.40
use_dist = True
dist_backend = "nccl"
dist_url = "tcp://localhost:12345"
world_size = 1
mel_weight_torch = torch.tensor(
[
19.40951426,
19.94047336,
20.4859038,
21.04629067,
21.62194148,
22.21335214,
22.8210215,
23.44529231,
24.08660962,
24.74541882,
25.42234287,
26.11770576,
26.83212784,
27.56615283,
28.32007747,
29.0947679,
29.89060111,
30.70832636,
31.54828121,
32.41121487,
33.29780773,
34.20865341,
35.14437675,
36.1056621,
37.09332763,
38.10795802,
39.15039691,
40.22119881,
41.32154931,
42.45172373,
43.61293329,
44.80609379,
46.031602,
47.29070223,
48.58427549,
49.91327905,
51.27863232,
52.68119708,
54.1222372,
55.60274206,
57.12364703,
58.68617876,
60.29148652,
61.94081306,
63.63501986,
65.37562658,
67.16408954,
69.00109084,
70.88850318,
72.82736101,
74.81985537,
76.86654792,
78.96885475,
81.12900906,
83.34840929,
85.62810662,
87.97005418,
90.37689804,
92.84887686,
95.38872881,
97.99777002,
100.67862715,
103.43232942,
106.26140638,
109.16827015,
112.15470471,
115.22184756,
118.37439245,
121.6122689,
124.93877158,
128.35661454,
131.86761321,
135.47417938,
139.18059494,
142.98713744,
146.89771854,
150.91684347,
155.0446638,
159.28614648,
163.64270198,
168.12035831,
172.71749158,
177.44220154,
182.29556933,
187.28286676,
192.40502126,
197.6682721,
203.07516896,
208.63088733,
214.33770931,
220.19910108,
226.22363072,
232.41087124,
238.76803591,
245.30079083,
252.01064464,
258.90261676,
265.98474,
273.26010248,
280.73496362,
288.41440094,
296.30489752,
304.41180337,
312.7377183,
321.28877878,
330.07870237,
339.10812951,
348.38276173,
357.91393924,
367.70513992,
377.76413924,
388.09467408,
398.70920178,
409.61813793,
420.81980127,
432.33215467,
444.16083117,
456.30919947,
468.78589276,
481.61325588,
494.78824596,
508.31969844,
522.2238331,
536.51163441,
551.18859414,
566.26142988,
581.75006061,
597.66210737,
]
)
x_orig = np.linspace(1, mel_weight_torch.shape[0], num=mel_weight_torch.shape[0])
x_orig_torch = torch.linspace(
1, mel_weight_torch.shape[0], steps=mel_weight_torch.shape[0]
)
@classmethod
def get_mel_weight(cls, percent=1, a=18.8927416350036, b=0.0269863588184314):
b = percent * b
def func(a, b, x):
return a * np.exp(b * x)
return func(a, b, Config.x_orig)
@classmethod
def get_mel_weight_torch(cls, percent=1, a=18.8927416350036, b=0.0269863588184314):
b = percent * b
def func(a, b, x):
return a * torch.exp(b * x)
return func(a, b, Config.x_orig_torch)