From 742b89ef5a26690644a8199ca274b3d37149f571 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Tue, 11 Apr 2023 12:38:40 +0800
Subject: [PATCH 01/10] =?UTF-8?q?optimize:=20=E7=B2=BE=E7=AE=80=E6=9C=AA?=
=?UTF-8?q?=E7=94=A8=E5=88=B0=E7=9A=84=E9=85=8D=E7=BD=AE=E9=A1=B9=E5=B9=B6?=
=?UTF-8?q?=E5=9C=A8=E7=89=B9=E5=BE=81=E6=8F=90=E5=8F=96=E5=88=9D=E6=AD=A5?=
=?UTF-8?q?=E5=BC=95=E5=85=A5mps?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
config.py | 77 ++++++++++++++++++---------
extract_feature_print.py | 22 ++++----
infer-web.py | 10 ++--
infer_pack/models.py | 2 +-
infer_pack/models_onnx.py | 2 +-
infer_uvr5.py | 2 +-
slicer2.py | 2 +-
trainset_preprocess_pipeline_print.py | 14 ++---
uvr5_pack/utils.py | 2 +-
vc_infer_pipeline.py | 6 +--
10 files changed, 82 insertions(+), 57 deletions(-)
diff --git a/config.py b/config.py
index 086f882e8..bffccf793 100644
--- a/config.py
+++ b/config.py
@@ -1,3 +1,20 @@
+########################硬件参数########################
+
+#填写cuda:x, cpu 或 mps, x指代第几张卡,只支持 N卡 / Apple Silicon 加速
+device = "cuda:0"
+
+#9-10-20-30-40系显卡无脑True,不影响质量,>=20显卡开启有加速
+is_half = True
+
+#默认0用上所有线程,写数字限制CPU资源使用
+n_cpu = 0
+
+########################硬件参数########################
+
+
+##################下为参数处理逻辑,勿动##################
+
+########################命令行参数########################
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--port", type=int, default=7865, help="Listen port")
@@ -5,34 +22,48 @@
parser.add_argument("--colab", action='store_true', help="Launch in colab")
parser.add_argument("--noparallel", action='store_true', help="Disable parallel processing")
cmd_opts = parser.parse_args()
-############离线VC参数
-inp_root=r"白鹭霜华长条"#对输入目录下所有音频进行转换,别放非音频文件
-opt_root=r"opt"#输出目录
-f0_up_key=0#升降调,整数,男转女12,女转男-12
-person=r"weights\洛天依v3.pt"#目前只有洛天依v3
-############硬件参数
-device = "cuda:0"#填写cuda:x或cpu,x指代第几张卡,只支持N卡加速
-is_half=True#9-10-20-30-40系显卡无脑True,不影响质量,>=20显卡开启有加速
-n_cpu=0#默认0用上所有线程,写数字限制CPU资源使用
-############python命令路径
+
python_cmd=cmd_opts.pycmd
listen_port=cmd_opts.port
iscolab=cmd_opts.colab
noparallel=cmd_opts.noparallel
-############下头别动
+########################命令行参数########################
+
+import sys
import torch
-if(torch.cuda.is_available()==False):
- print("没有发现支持的N卡, 使用CPU进行推理")
- device="cpu"
- is_half=False
-if(device!="cpu"):
- gpu_name=torch.cuda.get_device_name(int(device.split(":")[-1]))
- if("16"in gpu_name or "MX"in gpu_name):
+
+# has_mps is only available in nightly pytorch (for now) and MasOS 12.3+.
+# check `getattr` and try it for compatibility
+def has_mps() -> bool:
+ if sys.platform != "darwin":
+ return False
+ else:
+ if not getattr(torch, 'has_mps', False): return False
+ try:
+ torch.zeros(1).to(torch.device("mps"))
+ return True
+ except Exception:
+ return False
+
+
+if(not torch.cuda.is_available()):
+ if has_mps():
+ print("没有发现支持的N卡, 使用MPS进行推理")
+ device = "mps"
+ else:
+ print("没有发现支持的N卡, 使用CPU进行推理")
+ device = "cpu"
+ is_half = False
+
+if(device not in ["cpu", "mps"]):
+ gpu_name = torch.cuda.get_device_name(int(device.split(":")[-1]))
+ if("16" in gpu_name or "MX" in gpu_name):
print("16系显卡/MX系显卡强制单精度")
- is_half=False
+ is_half = False
+
from multiprocessing import cpu_count
-if(n_cpu==0):n_cpu=cpu_count()
-if(is_half==True):
+if(n_cpu==0): n_cpu=cpu_count()
+if(is_half):
#6G显存配置
x_pad = 3
x_query = 10
@@ -41,10 +72,6 @@
else:
#5G显存配置
x_pad = 1
- # x_query = 6
- # x_center = 30
- # x_max = 32
- #6G显存配置
x_query = 6
x_center = 38
x_max = 41
diff --git a/extract_feature_print.py b/extract_feature_print.py
index 23f08e34e..ef05bd40a 100644
--- a/extract_feature_print.py
+++ b/extract_feature_print.py
@@ -1,13 +1,12 @@
import os,sys,traceback
-if len(sys.argv) == 4:
- n_part=int(sys.argv[1])
- i_part=int(sys.argv[2])
- exp_dir=sys.argv[3]
-else:
- n_part=int(sys.argv[1])
- i_part=int(sys.argv[2])
- i_gpu=sys.argv[3]
+device=sys.argv[1]
+n_part=int(sys.argv[2])
+i_part=int(sys.argv[3])
+if len(sys.argv) == 5:
exp_dir=sys.argv[4]
+else:
+ i_gpu=sys.argv[4]
+ exp_dir=sys.argv[5]
os.environ["CUDA_VISIBLE_DEVICES"]=str(i_gpu)
import torch
@@ -15,7 +14,6 @@
import soundfile as sf
import numpy as np
from fairseq import checkpoint_utils
-device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
f = open("%s/extract_f0_feature.log"%exp_dir, "a+")
def printt(strr):
@@ -50,8 +48,8 @@ def readwave(wav_path, normalize=False):
)
model = models[0]
model = model.to(device)
-if torch.cuda.is_available():
- model = model.half()
+printt("move model to "+device)
+if device != "cpu": model = model.half()
model.eval()
todo=sorted(list(os.listdir(wavPath)))[i_part::n_part]
@@ -70,7 +68,7 @@ def readwave(wav_path, normalize=False):
feats = readwave(wav_path, normalize=saved_cfg.task.normalize)
padding_mask = torch.BoolTensor(feats.shape).fill_(False)
inputs = {
- "source": feats.half().to(device) if torch.cuda.is_available() else feats.to(device),
+ "source": feats.half().to(device) if device != "cpu" else feats.to(device),
"padding_mask": padding_mask.to(device),
"output_layer": 9, # layer 9
}
diff --git a/infer-web.py b/infer-web.py
index d2cd506c1..7ce8890b6 100644
--- a/infer-web.py
+++ b/infer-web.py
@@ -36,7 +36,7 @@
import gradio as gr
import logging
from vc_infer_pipeline import VC
-from config import is_half,device,is_half,python_cmd,listen_port,iscolab,noparallel
+from config import is_half,device,python_cmd,listen_port,iscolab,noparallel
from infer_uvr5 import _audio_pre_
from my_utils import load_audio
from train.process_ckpt import show_info,change_info,merge,extract_small_model
@@ -53,7 +53,7 @@ def get_block_name(self):
hubert_model=None
def load_hubert():
global hubert_model
- models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task(["hubert_base.pt"],suffix="",)
+ models, _, _ = checkpoint_utils.load_model_ensemble_and_task(["hubert_base.pt"],suffix="",)
hubert_model = models[0]
hubert_model = hubert_model.to(device)
if(is_half):hubert_model = hubert_model.half()
@@ -79,7 +79,7 @@ def vc_single(sid,input_audio,f0_up_key,f0_file,f0_method,file_index,file_big_np
if(hubert_model==None):load_hubert()
if_f0 = cpt.get("f0", 1)
audio_opt=vc.pipeline(hubert_model,net_g,sid,audio,times,f0_up_key,f0_method,file_index,file_big_npy,index_rate,if_f0,f0_file=f0_file)
- print("npy: ", times[0], "s, f0:", times[1], "s, infer: ", times[2], "s", sep='')
+ print("npy: ", times[0], "s, f0: ", times[1], "s, infer: ", times[2], "s", sep='')
return "Success", (tgt_sr, audio_opt)
except:
info=traceback.format_exc()
@@ -267,7 +267,7 @@ def extract_f0_feature(gpus,n_p,f0method,if_f0,exp_dir):
leng=len(gpus)
ps=[]
for idx,n_g in enumerate(gpus):
- cmd=python_cmd + " extract_feature_print.py %s %s %s %s/logs/%s"%(leng,idx,n_g,now_dir,exp_dir)
+ cmd=python_cmd + " extract_feature_print.py %s %s %s %s %s/logs/%s"%(device,leng,idx,n_g,now_dir,exp_dir)
print(cmd)
p = Popen(cmd, shell=True, cwd=now_dir)#, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir
ps.append(p)
@@ -382,7 +382,7 @@ def get_info_str(strr):
leng=len(gpus)
ps=[]
for idx,n_g in enumerate(gpus):
- cmd=python_cmd + " extract_feature_print.py %s %s %s %s/logs/%s"%(leng,idx,n_g,now_dir,exp_dir1)
+ cmd=python_cmd + " extract_feature_print.py %s %s %s %s %s/logs/%s"%(device,leng,idx,n_g,now_dir,exp_dir1)
yield get_info_str(cmd)
p = Popen(cmd, shell=True, cwd=now_dir)#, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir
ps.append(p)
diff --git a/infer_pack/models.py b/infer_pack/models.py
index c47213fb2..9eda8be45 100644
--- a/infer_pack/models.py
+++ b/infer_pack/models.py
@@ -345,7 +345,7 @@ def __init__(self, sampling_rate, harmonic_num=0, sine_amp=0.1,
def forward(self, x,upp=None):
sine_wavs, uv, _ = self.l_sin_gen(x,upp)
- if(self.is_half==True):sine_wavs=sine_wavs.half()
+ if(self.is_half):sine_wavs=sine_wavs.half()
sine_merge = self.l_tanh(self.l_linear(sine_wavs))
return sine_merge,None,None# noise, uv
class GeneratorNSF(torch.nn.Module):
diff --git a/infer_pack/models_onnx.py b/infer_pack/models_onnx.py
index 3e3656743..ea90d1c77 100644
--- a/infer_pack/models_onnx.py
+++ b/infer_pack/models_onnx.py
@@ -345,7 +345,7 @@ def __init__(self, sampling_rate, harmonic_num=0, sine_amp=0.1,
def forward(self, x,upp=None):
sine_wavs, uv, _ = self.l_sin_gen(x,upp)
- if(self.is_half==True):sine_wavs=sine_wavs.half()
+ if(self.is_half):sine_wavs=sine_wavs.half()
sine_merge = self.l_tanh(self.l_linear(sine_wavs))
return sine_merge,None,None# noise, uv
class GeneratorNSF(torch.nn.Module):
diff --git a/infer_uvr5.py b/infer_uvr5.py
index b38dd73e2..209c44dee 100644
--- a/infer_uvr5.py
+++ b/infer_uvr5.py
@@ -39,7 +39,7 @@ def __init__(self, model_path,device,is_half):
cpk = torch.load( model_path , map_location='cpu')
model.load_state_dict(cpk)
model.eval()
- if(is_half==True):model = model.half().to(device)
+ if(is_half):model = model.half().to(device)
else:model = model.to(device)
self.mp = mp
diff --git a/slicer2.py b/slicer2.py
index a09f0debc..78c08f059 100644
--- a/slicer2.py
+++ b/slicer2.py
@@ -182,4 +182,4 @@ def main():
if __name__ == '__main__':
- main()
\ No newline at end of file
+ main()
diff --git a/trainset_preprocess_pipeline_print.py b/trainset_preprocess_pipeline_print.py
index a5af3678c..54e0d3e42 100644
--- a/trainset_preprocess_pipeline_print.py
+++ b/trainset_preprocess_pipeline_print.py
@@ -40,7 +40,7 @@ def __init__(self,sr,exp_dir):
os.makedirs(self.gt_wavs_dir,exist_ok=True)
os.makedirs(self.wavs16k_dir,exist_ok=True)
- def print(self, strr):
+ def println(self, strr):
mutex.acquire()
print(strr)
self.f.write("%s\n" % strr)
@@ -70,9 +70,9 @@ def pipeline(self,path, idx0):
tmp_audio = audio[start:]
break
self.norm_write(tmp_audio, idx0, idx1)
- self.print("%s->Suc."%path)
+ self.println("%s->Suc."%path)
except:
- self.print("%s->%s"%(path,traceback.format_exc()))
+ self.println("%s->%s"%(path,traceback.format_exc()))
def pipeline_mp(self,infos):
for path, idx0 in infos:
@@ -91,14 +91,14 @@ def pipeline_mp_inp_dir(self,inp_root,n_p):
ps.append(p)
for p in ps:p.join()
except:
- self.print("Fail. %s"%traceback.format_exc())
+ self.println("Fail. %s"%traceback.format_exc())
def preprocess_trainset(inp_root, sr, n_p, exp_dir):
pp=PreProcess(sr,exp_dir)
- pp.print("start preprocess")
- pp.print(sys.argv)
+ pp.println("start preprocess")
+ pp.println(sys.argv)
pp.pipeline_mp_inp_dir(inp_root,n_p)
- pp.print("end preprocess")
+ pp.println("end preprocess")
if __name__=='__main__':
preprocess_trainset(inp_root, sr, n_p, exp_dir)
diff --git a/uvr5_pack/utils.py b/uvr5_pack/utils.py
index cfaffee7e..6d1e0e9d4 100644
--- a/uvr5_pack/utils.py
+++ b/uvr5_pack/utils.py
@@ -27,7 +27,7 @@ def _execute(X_mag_pad, roi_size, n_window, device, model, aggressiveness,is_hal
start = i * roi_size
X_mag_window = X_mag_pad[None, :, :, start:start + data['window_size']]
X_mag_window = torch.from_numpy(X_mag_window)
- if(is_half==True):X_mag_window=X_mag_window.half()
+ if(is_half):X_mag_window=X_mag_window.half()
X_mag_window=X_mag_window.to(device)
pred = model.predict(X_mag_window, aggressiveness)
diff --git a/vc_infer_pipeline.py b/vc_infer_pipeline.py
index e05ef4c06..9f75517a0 100644
--- a/vc_infer_pipeline.py
+++ b/vc_infer_pipeline.py
@@ -58,7 +58,7 @@ def get_f0(self,x, p_len,f0_up_key,f0_method,inp_f0=None):
def vc(self,model,net_g,sid,audio0,pitch,pitchf,times,index,big_npy,index_rate):#,file_index,file_big_npy
feats = torch.from_numpy(audio0)
- if(self.is_half==True):feats=feats.half()
+ if(self.is_half):feats=feats.half()
else:feats=feats.float()
if feats.dim() == 2: # double channels
feats = feats.mean(-1)
@@ -78,10 +78,10 @@ def vc(self,model,net_g,sid,audio0,pitch,pitchf,times,index,big_npy,index_rate):
if(isinstance(index,type(None))==False and isinstance(big_npy,type(None))==False and index_rate!=0):
npy = feats[0].cpu().numpy()
- if(self.is_half==True):npy=npy.astype("float32")
+ if(self.is_half):npy=npy.astype("float32")
_, I = index.search(npy, 1)
npy=big_npy[I.squeeze()]
- if(self.is_half==True):npy=npy.astype("float16")
+ if(self.is_half):npy=npy.astype("float16")
feats = torch.from_numpy(npy).unsqueeze(0).to(self.device)*index_rate + (1-index_rate)*feats
feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1)
From 5bb401895a904515605db041ef3df0e20838b8bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 15:11:40 +0800
Subject: [PATCH 02/10] add cmd argument: --noautoopen
---
config.py | 2 ++
infer-web.py | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/config.py b/config.py
index bffccf793..20c90a163 100644
--- a/config.py
+++ b/config.py
@@ -21,12 +21,14 @@
parser.add_argument("--pycmd", type=str, default="python", help="Python command")
parser.add_argument("--colab", action='store_true', help="Launch in colab")
parser.add_argument("--noparallel", action='store_true', help="Disable parallel processing")
+parser.add_argument("--noautoopen", action='store_true', help="Do not open in browser automatically")
cmd_opts = parser.parse_args()
python_cmd=cmd_opts.pycmd
listen_port=cmd_opts.port
iscolab=cmd_opts.colab
noparallel=cmd_opts.noparallel
+noautoopen=cmd_opts.noautoopen
########################命令行参数########################
import sys
diff --git a/infer-web.py b/infer-web.py
index 31e412c38..2679d5f2c 100644
--- a/infer-web.py
+++ b/infer-web.py
@@ -38,7 +38,7 @@
import gradio as gr
import logging
from vc_infer_pipeline import VC
-from config import is_half,device,python_cmd,listen_port,iscolab,noparallel
+from config import is_half,device,python_cmd,listen_port,iscolab,noparallel,noautoopen
from infer_uvr5 import _audio_pre_
from my_utils import load_audio
from train.process_ckpt import show_info,change_info,merge,extract_small_model
@@ -651,4 +651,4 @@ def change_info_(ckpt_path):
if iscolab:
app.queue(concurrency_count=511, max_size=1022).launch(share=True)
else:
- app.queue(concurrency_count=511, max_size=1022).launch(server_name="0.0.0.0",inbrowser=True,server_port=listen_port,quiet=True)
\ No newline at end of file
+ app.queue(concurrency_count=511, max_size=1022).launch(server_name="0.0.0.0",inbrowser=not noautoopen,server_port=listen_port,quiet=True)
From 540fb5941b125e44cb414d8f7bdb7a68f8d99756 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 15:29:18 +0800
Subject: [PATCH 03/10] fix: i18n
---
extract_locale.py | 4 +--
gui.py | 28 +++++++++----------
infer-web.py | 63 +++++++++++++++++++++----------------------
locale/en_US.json | 48 ++++++++++++++++++++++++---------
locale/ja_JP.json | 48 ++++++++++++++++++++++++---------
locale/locale_diff.py | 7 ++++-
locale/zh_CN.json | 61 ++++++++++++++++++++++++-----------------
7 files changed, 160 insertions(+), 99 deletions(-)
diff --git a/extract_locale.py b/extract_locale.py
index 366d19de5..7d7d4e968 100644
--- a/extract_locale.py
+++ b/extract_locale.py
@@ -12,7 +12,7 @@
contents = f.read()
matches = re.findall(pattern, contents)
for match in matches:
- key = match.strip('()"')
+ key = match.strip('i18n()"\'')
data[key] = key
# Extract labels from gui.py
@@ -20,7 +20,7 @@
contents = f.read()
matches = re.findall(pattern, contents)
for match in matches:
- key = match.strip('()"')
+ key = match.strip('i18n()"\'')
data[key] = key
# Save as a JSON file
diff --git a/gui.py b/gui.py
index b80a2ba03..054c18845 100644
--- a/gui.py
+++ b/gui.py
@@ -161,30 +161,30 @@ def launcher(self):
input_devices,output_devices,_, _=self.get_devices()
layout=[
[
- sg.Frame(title=i18n('加载模型/Load Model'),layout=[
- [sg.Input(default_text='TEMP\\atri.pth',key='pth_path'),sg.FileBrowse(i18n('选择.pth文件/.pth File'))],
- [sg.Input(default_text='TEMP\\added_IVF512_Flat_atri_baseline_src_feat.index',key='index_path'),sg.FileBrowse(i18n('选择.index文件/.index File'))],
- [sg.Input(default_text='TEMP\\big_src_feature_atri.npy',key='npy_path'),sg.FileBrowse(i18n('选择.npy文件/.npy File'))]
+ sg.Frame(title=i18n('加载模型'),layout=[
+ [sg.Input(default_text='TEMP\\atri.pth',key='pth_path'),sg.FileBrowse(i18n('选择.pth文件'))],
+ [sg.Input(default_text='TEMP\\added_IVF512_Flat_atri_baseline_src_feat.index',key='index_path'),sg.FileBrowse(i18n('选择.index文件'))],
+ [sg.Input(default_text='TEMP\\big_src_feature_atri.npy',key='npy_path'),sg.FileBrowse(i18n('选择.npy文件'))]
])
],
[
sg.Frame(layout=[
- [sg.Text(i18n("输入设备/Input Device")),sg.Combo(input_devices,key='sg_input_device',default_value=input_devices[sd.default.device[0]])],
- [sg.Text(i18n("输出设备/Output Device")),sg.Combo(output_devices,key='sg_output_device',default_value=output_devices[sd.default.device[1]])]
- ],title=i18n("音频设备(请使用同种类驱动)/Audio Devices"))
+ [sg.Text(i18n("输入设备")),sg.Combo(input_devices,key='sg_input_device',default_value=input_devices[sd.default.device[0]])],
+ [sg.Text(i18n("输出设备")),sg.Combo(output_devices,key='sg_output_device',default_value=output_devices[sd.default.device[1]])]
+ ],title=i18n("音频设备(请使用同种类驱动)"))
],
[
sg.Frame(layout=[
- [sg.Text(i18n("响应阈值/Silence Threhold")),sg.Slider(range=(-60,0),key='threhold',resolution=1,orientation='h',default_value=-30)],
- [sg.Text(i18n("音调设置/Pitch Offset")),sg.Slider(range=(-24,24),key='pitch',resolution=1,orientation='h',default_value=12)]
+ [sg.Text(i18n("响应阈值")),sg.Slider(range=(-60,0),key='threhold',resolution=1,orientation='h',default_value=-30)],
+ [sg.Text(i18n("音调设置")),sg.Slider(range=(-24,24),key='pitch',resolution=1,orientation='h',default_value=12)]
- ],title=i18n("常规设置/Common")),
+ ],title=i18n("常规设置")),
sg.Frame(layout=[
- [sg.Text(i18n("采样长度/Sample Length")),sg.Slider(range=(0.1,3.0),key='block_time',resolution=0.1,orientation='h',default_value=1.0)],
- [sg.Text(i18n("淡入淡出长度/Crossfade Length")),sg.Slider(range=(0.01,0.15),key='crossfade_length',resolution=0.01,orientation='h',default_value=0.08)],
- [sg.Text(i18n("额外推理时长/Extra Length")),sg.Slider(range=(0.05,3.00),key='extra_time',resolution=0.01,orientation='h',default_value=0.05)],
+ [sg.Text(i18n("采样长度")),sg.Slider(range=(0.1,3.0),key='block_time',resolution=0.1,orientation='h',default_value=1.0)],
+ [sg.Text(i18n("淡入淡出长度")),sg.Slider(range=(0.01,0.15),key='crossfade_length',resolution=0.01,orientation='h',default_value=0.08)],
+ [sg.Text(i18n("额外推理时长")),sg.Slider(range=(0.05,3.00),key='extra_time',resolution=0.01,orientation='h',default_value=0.05)],
[sg.Checkbox(i18n('输出降噪/Output Noisereduce'),key='noise_reduce')]
- ],title=i18n("性能设置/Performance"))
+ ],title=i18n("性能设置"))
],
[sg.Button(i18n("开始音频转换"),key='start_vc'),sg.Button(i18n("停止音频转换"),key='stop_vc')]
]
diff --git a/infer-web.py b/infer-web.py
index 2679d5f2c..340ebddcf 100644
--- a/infer-web.py
+++ b/infer-web.py
@@ -150,7 +150,7 @@ def get_vc(sid):
global n_spk,tgt_sr,net_g,vc,cpt
if(sid==[]):
global hubert_model
- if (hubert_model != None): # 考虑到轮询,需要加个判断看是否 sid 是由有模型切换到无模型的
+ if (hubert_model != None): # 考虑到轮询, 需要加个判断看是否 sid 是由有模型切换到无模型的
print("clean_empty_cache")
del net_g, n_spk, vc, hubert_model,tgt_sr#,cpt
hubert_model = net_g=n_spk=vc=hubert_model=tgt_sr=None
@@ -176,7 +176,7 @@ def get_vc(sid):
else:
net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"])
del net_g.enc_q
- print(net_g.load_state_dict(cpt["weight"], strict=False)) # 不加这一行清不干净,真奇葩
+ print(net_g.load_state_dict(cpt["weight"], strict=False)) # 不加这一行清不干净, 真奇葩
net_g.eval().to(device)
if (is_half):net_g = net_g.half()
else:net_g = net_g.float()
@@ -228,7 +228,7 @@ def preprocess_dataset(trainset_dir,exp_dir,sr,n_p=ncpu):
cmd=python_cmd + " trainset_preprocess_pipeline_print.py %s %s %s %s/logs/%s "%(trainset_dir,sr,n_p,now_dir,exp_dir)+str(noparallel)
print(cmd)
p = Popen(cmd, shell=True)#, stdin=PIPE, stdout=PIPE,stderr=PIPE,cwd=now_dir
- ###煞笔gr,popen read都非得全跑完了再一次性读取,不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
+ ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
done=[False]
threading.Thread(target=if_done,args=(done,p,)).start()
while(1):
@@ -248,7 +248,7 @@ def extract_f0_feature(gpus,n_p,f0method,if_f0,exp_dir):
cmd=python_cmd + " extract_f0_print.py %s/logs/%s %s %s"%(now_dir,exp_dir,n_p,f0method)
print(cmd)
p = Popen(cmd, shell=True,cwd=now_dir)#, stdin=PIPE, stdout=PIPE,stderr=PIPE
- ###煞笔gr,popen read都非得全跑完了再一次性读取,不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
+ ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
done=[False]
threading.Thread(target=if_done,args=(done,p,)).start()
while(1):
@@ -273,7 +273,7 @@ def extract_f0_feature(gpus,n_p,f0method,if_f0,exp_dir):
print(cmd)
p = Popen(cmd, shell=True, cwd=now_dir)#, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir
ps.append(p)
- ###煞笔gr,popen read都非得全跑完了再一次性读取,不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
+ ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读
done = [False]
threading.Thread(target=if_done_multi, args=(done, ps,)).start()
while (1):
@@ -321,7 +321,7 @@ def click_train(exp_dir1,sr2,if_f0_3,spk_id5,save_epoch10,total_epoch11,batch_si
print(cmd)
p = Popen(cmd, shell=True, cwd=now_dir)
p.wait()
- return "训练结束,您可查看控制台训练日志或实验文件夹下的train.log"
+ return "训练结束, 您可查看控制台训练日志或实验文件夹下的train.log"
# but4.click(train_index, [exp_dir1], info3)
def train_index(exp_dir1):
exp_dir="%s/logs/%s"%(now_dir,exp_dir1)
@@ -351,7 +351,7 @@ def train_index(exp_dir1):
yield "\n".join(infos)
index.add(big_npy)
faiss.write_index(index, '%s/added_IVF%s_Flat_nprobe_%s.index'%(exp_dir,n_ivf,index_ivf.nprobe))
- infos.append("成功构建索引,added_IVF%s_Flat_nprobe_%s.index"%(n_ivf,index_ivf.nprobe))
+ infos.append("成功构建索引, added_IVF%s_Flat_nprobe_%s.index"%(n_ivf,index_ivf.nprobe))
yield "\n".join(infos)
#but5.click(train1key, [exp_dir1, sr2, if_f0_3, trainset_dir4, spk_id5, gpus6, np7, f0method8, save_epoch10, total_epoch11, batch_size12, if_save_latest13, pretrained_G14, pretrained_D15, gpus16, if_cache_gpu17], info3)
def train1key(exp_dir1, sr2, if_f0_3, trainset_dir4, spk_id5, gpus6, np7, f0method8, save_epoch10, total_epoch11, batch_size12, if_save_latest13, pretrained_G14, pretrained_D15, gpus16, if_cache_gpu17):
@@ -421,7 +421,7 @@ def get_info_str(strr):
yield get_info_str(cmd)
p = Popen(cmd, shell=True, cwd=now_dir)
p.wait()
- yield get_info_str("训练结束,您可查看控制台训练日志或实验文件夹下的train.log")
+ yield get_info_str("训练结束, 您可查看控制台训练日志或实验文件夹下的train.log")
#######step3b:训练索引
feature_dir="%s/3_feature256"%(exp_dir)
npys = []
@@ -442,7 +442,7 @@ def get_info_str(strr):
yield get_info_str("adding index")
index.add(big_npy)
faiss.write_index(index, '%s/added_IVF%s_Flat_nprobe_%s.index'%(exp_dir,n_ivf,index_ivf.nprobe))
- yield get_info_str("成功构建索引,added_IVF%s_Flat_nprobe_%s.index"%(n_ivf,index_ivf.nprobe))
+ yield get_info_str("成功构建索引, added_IVF%s_Flat_nprobe_%s.index"%(n_ivf,index_ivf.nprobe))
yield get_info_str("全流程结束!")
# ckpt_path2.change(change_info_,[ckpt_path2],[sr__,if_f0__])
@@ -459,10 +459,7 @@ def change_info_(ckpt_path):
with gr.Blocks() as app:
- gr.Markdown(value=i18n("""
- 本软件以MIT协议开源,作者不对软件具备任何控制力,使用软件者、传播软件导出的声音者自负全责。
- 如不认可该条款,则不能使用或引用软件包内任何代码和文件。详见根目录"使用需遵守的协议-LICENSE.txt"。
- """))
+ gr.Markdown(value=i18n("本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt."))
with gr.Tabs():
with gr.TabItem(i18n("模型推理")):
with gr.Row():
@@ -487,18 +484,18 @@ def change_info_(ckpt_path):
)
with gr.Group():
gr.Markdown(value=i18n("""
- 男转女推荐+12key,女转男推荐-12key,如果音域爆炸导致音色失真也可以自己调整到合适音域。
+ 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域.
"""))
with gr.Row():
with gr.Column():
- vc_transform0 = gr.Number(label=i18n("变调(整数,半音数量,升八度12降八度-12)"), value=0)
+ vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
input_audio0 = gr.Textbox(label=i18n("输入待处理音频文件路径(默认是正确格式示例)"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs\冬之花clip1.wav")
f0method0=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
file_index1 = gr.Textbox(label=i18n("特征检索库文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\added_IVF677_Flat_nprobe_7.index", interactive=True)
file_big_npy1 = gr.Textbox(label=i18n("特征文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\total_fea.npy", interactive=True)
index_rate1 = gr.Slider(minimum=0, maximum=1,label='检索特征占比', value=1,interactive=True)
- f0_file = gr.File(label=i18n("F0曲线文件,可选,一行一个音高,代替默认F0及升降调"))
+ f0_file = gr.File(label=i18n("F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调"))
but0=gr.Button(i18n("转换"), variant="primary")
with gr.Column():
vc_output1 = gr.Textbox(label=i18n("输出信息"))
@@ -506,11 +503,11 @@ def change_info_(ckpt_path):
but0.click(vc_single, [spk_item, input_audio0, vc_transform0,f0_file,f0method0,file_index1,file_big_npy1,index_rate1], [vc_output1, vc_output2])
with gr.Group():
gr.Markdown(value=i18n("""
- 批量转换,输入待转换音频文件夹,或上传多个音频文件,在指定文件夹(默认opt)下输出转换的音频。
+ 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频.
"""))
with gr.Row():
with gr.Column():
- vc_transform1 = gr.Number(label=i18n("变调(整数,半音数量,升八度12降八度-12)"), value=0)
+ vc_transform1 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
opt_input = gr.Textbox(label=i18n("指定输出文件夹"),value="opt")
f0method1=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
@@ -519,21 +516,21 @@ def change_info_(ckpt_path):
index_rate2 = gr.Slider(minimum=0, maximum=1,label=i18n("检索特征占比"), value=1,interactive=True)
with gr.Column():
dir_input = gr.Textbox(label=i18n("输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs")
- inputs = gr.File(file_count="multiple", label=i18n("也可批量输入音频文件,二选一,优先读文件夹"))
+ inputs = gr.File(file_count="multiple", label=i18n("也可批量输入音频文件, 二选一, 优先读文件夹"))
but1=gr.Button(i18n("转换"), variant="primary")
vc_output3 = gr.Textbox(label=i18n("输出信息"))
but1.click(vc_multi, [spk_item, dir_input,opt_input,inputs, vc_transform1,f0method1,file_index2,file_big_npy2,index_rate2], [vc_output3])
with gr.TabItem(i18n("伴奏人声分离")):
with gr.Group():
gr.Markdown(value=i18n("""
- 人声伴奏分离批量处理,使用UVR5模型。
- 不带和声用HP2,带和声且提取的人声不需要和声用HP5
+ 人声伴奏分离批量处理, 使用UVR5模型.
+ 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例:E:\codes\py39\\vits_vc_gpu\白鹭霜华测试样例(去文件管理器地址栏拷就行了)
"""))
with gr.Row():
with gr.Column():
dir_wav_input = gr.Textbox(label=i18n("输入待处理音频文件夹路径"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs")
- wav_inputs = gr.File(file_count="multiple", label=i18n("也可批量输入音频文件,二选一,优先读文件夹"))
+ wav_inputs = gr.File(file_count="multiple", label=i18n("也可批量输入音频文件, 二选一, 优先读文件夹"))
with gr.Column():
model_choose = gr.Dropdown(label=i18n("模型"), choices=uvr5_names)
opt_vocal_root = gr.Textbox(label=i18n("指定输出人声文件夹"),value="opt")
@@ -543,15 +540,15 @@ def change_info_(ckpt_path):
but2.click(uvr, [model_choose, dir_wav_input,opt_vocal_root,wav_inputs,opt_ins_root], [vc_output4])
with gr.TabItem(i18n("训练")):
gr.Markdown(value=i18n("""
- step1:填写实验配置。实验数据放在logs下,每个实验一个文件夹,需手工输入实验名路径,内含实验配置,日志,训练得到的模型文件。
+ step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件.
"""))
with gr.Row():
exp_dir1 = gr.Textbox(label=i18n("输入实验名"),value="mi-test")
sr2 = gr.Radio(label=i18n("目标采样率"), choices=["32k","40k","48k"],value="40k", interactive=True)
- if_f0_3 = gr.Radio(label=i18n("模型是否带音高指导(唱歌一定要,语音可以不要)"), choices=["是","否"],value="是", interactive=True)
- with gr.Group():#暂时单人的,后面支持最多4人的#数据处理
+ if_f0_3 = gr.Radio(label=i18n("模型是否带音高指导(唱歌一定要, 语音可以不要)"), choices=["是","否"],value="是", interactive=True)
+ with gr.Group():#暂时单人的, 后面支持最多4人的#数据处理
gr.Markdown(value=i18n("""
- step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化,在实验目录下生成2个wav文件夹;暂时只支持单人训练。
+ step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练.
"""))
with gr.Row():
trainset_dir4 = gr.Textbox(label=i18n("输入训练文件夹路径"),value="E:\语音音频+标注\米津玄师\src")
@@ -561,11 +558,11 @@ def change_info_(ckpt_path):
but1.click(preprocess_dataset,[trainset_dir4,exp_dir1,sr2],[info1])
with gr.Group():
gr.Markdown(value=i18n("""
- step2b:使用CPU提取音高(如果模型带音高),使用GPU提取特征(选择卡号)
+ step2b:使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)
"""))
with gr.Row():
with gr.Column():
- gpus6 = gr.Textbox(label=i18n("以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2"),value=gpus,interactive=True)
+ gpus6 = gr.Textbox(label=i18n("以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2"),value=gpus,interactive=True)
gpu_info9 = gr.Textbox(label=i18n("显卡信息"),value=gpu_info)
with gr.Column():
np7 = gr.Slider(minimum=0, maximum=ncpu, step=1, label=i18n("提取音高使用的CPU进程数"), value=ncpu,interactive=True)
@@ -575,20 +572,20 @@ def change_info_(ckpt_path):
but2.click(extract_f0_feature,[gpus6,np7,f0method8,if_f0_3,exp_dir1],[info2])
with gr.Group():
gr.Markdown(value=i18n("""
- step3:填写训练设置,开始训练模型和索引
+ step3:填写训练设置, 开始训练模型和索引
"""))
with gr.Row():
save_epoch10 = gr.Slider(minimum=0, maximum=50, step=1, label=i18n("保存频率save_every_epoch"), value=5,interactive=True)
total_epoch11 = gr.Slider(minimum=0, maximum=1000, step=1, label=i18n("总训练轮数total_epoch"), value=20,interactive=True)
batch_size12 = gr.Slider(minimum=0, maximum=32, step=1, label='每张显卡的batch_size', value=4,interactive=True)
if_save_latest13 = gr.Radio(label=i18n("是否仅保存最新的ckpt文件以节省硬盘空间"), choices=["是", "否"], value="否", interactive=True)
- if_cache_gpu17 = gr.Radio(label=i18n("是否缓存所有训练集至显存。10min以下小数据可缓存以加速训练,大数据缓存会炸显存也加不了多少速"), choices=["是", "否"], value="否", interactive=True)
+ if_cache_gpu17 = gr.Radio(label=i18n("是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速"), choices=["是", "否"], value="否", interactive=True)
with gr.Row():
pretrained_G14 = gr.Textbox(label=i18n("加载预训练底模G路径"), value="pretrained/f0G40k.pth",interactive=True)
pretrained_D15 = gr.Textbox(label=i18n("加载预训练底模D路径"), value="pretrained/f0D40k.pth",interactive=True)
sr2.change(change_sr2, [sr2,if_f0_3], [pretrained_G14,pretrained_D15])
if_f0_3.change(change_f0, [if_f0_3, sr2], [np7, f0method8, pretrained_G14, pretrained_D15])
- gpus16 = gr.Textbox(label=i18n("以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2"), value=gpus,interactive=True)
+ gpus16 = gr.Textbox(label=i18n("以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2"), value=gpus,interactive=True)
but3 = gr.Button(i18n("训练模型"), variant="primary")
but4 = gr.Button(i18n("训练特征索引"), variant="primary")
but5 = gr.Button(i18n("一键训练"), variant="primary")
@@ -599,7 +596,7 @@ def change_info_(ckpt_path):
with gr.TabItem(i18n("ckpt处理")):
with gr.Group():
- gr.Markdown(value=i18n("""模型融合,可用于测试音色融合"""))
+ gr.Markdown(value=i18n("""模型融合, 可用于测试音色融合"""))
with gr.Row():
ckpt_a = gr.Textbox(label=i18n("A模型路径"), value="", interactive=True)
ckpt_b = gr.Textbox(label=i18n("B模型路径"), value="", interactive=True)
@@ -618,7 +615,7 @@ def change_info_(ckpt_path):
with gr.Row():
ckpt_path0 = gr.Textbox(label=i18n("模型路径"), value="", interactive=True)
info_=gr.Textbox(label=i18n("要改的模型信息"), value="", max_lines=8, interactive=True)
- name_to_save1=gr.Textbox(label=i18n("保存的文件名,默认空为和源文件同名"), value="", max_lines=8, interactive=True)
+ name_to_save1=gr.Textbox(label=i18n("保存的文件名, 默认空为和源文件同名"), value="", max_lines=8, interactive=True)
with gr.Row():
but7 = gr.Button(i18n("修改"), variant="primary")
info5 = gr.Textbox(label=i18n("输出信息"), value="", max_lines=8)
diff --git a/locale/en_US.json b/locale/en_US.json
index 8d8ca89b5..5b7706660 100644
--- a/locale/en_US.json
+++ b/locale/en_US.json
@@ -1,49 +1,58 @@
{
+ "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.": "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.",
"模型推理": "Model inference",
"推理音色": "Inferencing timbre",
"刷新音色列表": "Refresh timbre list",
"卸载音色省显存": "Unload timbre to save GPU memory",
"请选择说话人id": "Please select a speaker id",
- "变调(整数,半音数量,升八度12降八度-12)": "Pitch shift (integer, number of semitones, up to 12 octaves or down to -12 octaves)",
+ "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
"输入待处理音频文件路径(默认是正确格式示例": "Input the path of the audio file to be processed (the default format is an example of the correct format)",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "Select the algorithm for pitch extraction. Use 'pm' to speed up for singing voices, or use 'harvest' for better low-pitched voices, but it is extremely slow.",
"特征检索库文件路径": "Feature search database file path",
"特征文件路径": "Feature file path",
- "F0曲线文件,可选,一行一个音高,代替默认F0及升降调": "F0 curve file, optional. One pitch per line to replace default F0 and pitch shifting.",
+ "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "Conversion",
"输出信息": "Output information",
"输出音频(右下角三个点,点了可以下载": "Output audio (three dots in the lower right corner, click to download)",
+ "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
"指定输出文件夹": "Specify output folder",
"检索特征占比": "Search feature ratio",
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "Input the path of the audio file folder to be processed (just copy it from the address bar of the file manager)",
- "也可批量输入音频文件,二选一,优先读文件夹": "Batch input of audio files is also available. Choose one of them, and the folder has a higher priority.",
+ "也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "Accompaniment and vocal separation",
+ "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
"输入待处理音频文件夹路径": "Input audio folder path",
"模型": "Model",
"指定输出人声文件夹": "Specify output vocal folder",
"指定输出乐器文件夹": "Specify output instrumental folder",
"训练": "Train",
+ "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
"输入实验名": "Input experiment name",
"目标采样率": "Target sample rate",
- "模型是否带音高指导(唱歌一定要,语音可以不要": "Does the model have pitch guidance? (Necessary for singing, not necessary for speech)",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
+ "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
"输入训练文件夹路径": "Input training folder path",
"请指定说话人id": "Please specify speaker ID",
"处理数据": "Process data",
- "以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2": "Input card numbers to use, separated by '-'. For example, '0-1-2' means using card 0, card 1, and card 2.",
+ "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "GPU information",
"提取音高使用的CPU进程数": "Number of CPU processes used for pitch extraction",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "Select pitch extraction algorithm: Use 'pm' for faster processing of singing voice, 'dio' for high-quality speech but slower processing, and 'harvest' for the best quality but slowest processing.",
"特征提取": "Feature extraction",
+ "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
"保存频率save_every_epoch": "Save frequency (save_every_epoch)",
"总训练轮数total_epoch": "Total training epochs (total_epoch)",
"是否仅保存最新的ckpt文件以节省硬盘空间": "Whether to save only the latest ckpt file to save disk space",
- "是否缓存所有训练集至显存。10min以下小数据可缓存以加速训练,大数据缓存会炸显存也加不了多少速": "Whether to cache all training sets in the video memory. Small data less than 10 minutes can be cached to speed up training, but caching large data will cause the video memory to explode and not add much speed.",
+ "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速": "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速",
"加载预训练底模G路径": "Load pre-trained base model G path.",
"加载预训练底模D路径": "Load pre-trained base model D path.",
"训练模型": "Train model.",
"训练特征索引": "Train feature index.",
"一键训练": "One-click training.",
"ckpt处理": "ckpt processing.",
+ "模型融合, 可用于测试音色融合": "模型融合, 可用于测试音色融合",
"A模型路径": "A model path.",
"B模型路径": "B model path.",
"A模型权重": "A model weight.",
@@ -54,18 +63,33 @@
"修改模型信息(仅支持weights文件夹下提取的小模型文件": "Modify model information (only supports small model files extracted under the weights folder)",
"模型路径": "Model path",
"要改的模型信息": "Model information to be modified",
- "保存的文件名,默认空为和源文件同名": "Saved file name, empty by default to use the same name as the source file",
+ "保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "Modify",
"查看模型信息(仅支持weights文件夹下提取的小模型文件": "View model information (only supports small model files extracted under the weights folder)",
"查看": "View",
- "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "Model extraction (input the path of the large file model under the logs folder), suitable for situations where you do not want to continue training halfway and the model has not automatically extracted and saved a small file model, or when you want to test intermediate models",
+ "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
"保存名": "Save Name",
"模型是否带音高指导,1是0否": "Whether the model comes with pitch guidance, 1 for yes, 0 for no",
"提取": "Extract",
"招募音高曲线前端编辑器": "Recruit front-end editors for pitch curves",
+ "加开发群联系我xxxxx": "加开发群联系我xxxxx",
"点击查看交流、问题反馈群号": "Click to view the communication and problem feedback group number",
- "输入设备/Input Device": "Input device",
- "输出设备/Output Device": "Output device",
- "音频设备(请使用同种类驱动)/Audio Devices": "Audio devices (please use the same type of driver)",
- "音调设置/Pitch Offset": "Pitch setting / Pitch Offset"
+ "xxxxx": "xxxxx",
+ "加载模型": "加载模型",
+ "选择.pth文件": "选择.pth文件",
+ "选择.index文件": "选择.index文件",
+ "选择.npy文件": "选择.npy文件",
+ "输入设备": "输入设备",
+ "输出设备": "输出设备",
+ "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "响应阈值": "响应阈值",
+ "音调设置": "音调设置",
+ "常规设置": "常规设置",
+ "采样长度": "采样长度",
+ "淡入淡出长度": "淡入淡出长度",
+ "额外推理时长": "额外推理时长",
+ "输出降噪/Output Noisereduce": "输出降噪/Output Noisereduce",
+ "性能设置": "性能设置",
+ "开始音频转换": "开始音频转换",
+ "停止音频转换": "停止音频转换"
}
\ No newline at end of file
diff --git a/locale/ja_JP.json b/locale/ja_JP.json
index 1b79852d8..53d68f924 100644
--- a/locale/ja_JP.json
+++ b/locale/ja_JP.json
@@ -1,49 +1,58 @@
{
+ "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.": "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.",
"模型推理": "モデル推論",
"推理音色": "",
"刷新音色列表": "",
"卸载音色省显存": "",
"请选择说话人id": "話者IDを選択してください",
- "变调(整数,半音数量,升八度12降八度-12)": "音程変更(整数、半音数、12半音の上昇/下降)",
+ "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
"输入待处理音频文件路径(默认是正确格式示例": "処理対象のオーディオファイルのパスを入力してください(デフォルトは正しいフォーマットの例です)",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "ピッチ抽出アルゴリズムを選択してください。歌声の場合は、pmを使用して速度を上げることができます。低音が重要な場合は、harvestを使用できますが、非常に遅くなります。",
"特征检索库文件路径": "特徴量検索データベースのファイルパス",
"特征文件路径": "特徴量ファイルのパス",
- "F0曲线文件,可选,一行一个音高,代替默认F0及升降调": "F0曲線ファイル(オプション)、1行に1つのピッチが含まれます。デフォルトのF0および音程を置き換えます。",
+ "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "変換",
"输出信息": "出力情報",
"输出音频(右下角三个点,点了可以下载": "オーディオ出力(右下の3つの点をクリックするとダウンロードできます)",
+ "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
"指定输出文件夹": "出力フォルダを指定してください",
"检索特征占比": "検索特徴率",
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "処理対象のオーディオフォルダのパスを入力してください(ファイルマネージャーのアドレスバーからコピーしてください)",
- "也可批量输入音频文件,二选一,优先读文件夹": "オーディオファイルを一括入力することもできます。2つのオプションから1つを選択し、フォルダの読み込みを優先します。",
+ "也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏とボーカルの分離",
+ "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
"输入待处理音频文件夹路径": "処理するオーディオファイルのフォルダパスを入力してください",
"模型": "モデル",
"指定输出人声文件夹": "人の声を出力するフォルダを指定してください",
"指定输出乐器文件夹": "楽器の出力フォルダを指定してください",
"训练": "トレーニング",
+ "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
"输入实验名": "実験名を入力してください",
"目标采样率": "目標サンプリングレート",
- "模型是否带音高指导(唱歌一定要,语音可以不要": "モデルに音高ガイドを付けるかどうか(歌を歌う場合は必要ですが、音声は必要ありません)",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
+ "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
"输入训练文件夹路径": "トレーニング用フォルダのパスを入力してください",
"请指定说话人id": "話者IDを指定してください",
"处理数据": "データ処理",
- "以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2": "使用するカード番号を-で区切って入力してください。例:0-1-2は、カード0、カード1、カード2を使用します",
+ "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "カード情報",
"提取音高使用的CPU进程数": "抽出に使用するCPUプロセス数",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "",
"特征提取": "特徴抽出",
+ "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
"保存频率save_every_epoch": "エポックごとの保存頻度",
"总训练轮数total_epoch": "総トレーニング回数",
"是否仅保存最新的ckpt文件以节省硬盘空间": "ハードディスク容量を節約するため、最新のckptファイルのみを保存するかどうか",
- "是否缓存所有训练集至显存。10min以下小数据可缓存以加速训练,大数据缓存会炸显存也加不了多少速": "すべてのトレーニングセットをキャッシュしてGPUメモリに保存するかどうか。10分以下の小さなデータはキャッシュしてトレーニングを高速化できますが、大きなデータをキャッシュするとGPUメモリが不足して速度が上がりません。",
+ "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速": "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速",
"加载预训练底模G路径": "事前学習済みのGモデルのパスをロードしてください",
"加载预训练底模D路径": "事前学習済みのDモデルのパスをロードしてください",
"训练模型": "モデルのトレーニング",
"训练特征索引": "特徴インデックスのトレーニング",
"一键训练": "ワンクリックトレーニング",
"ckpt处理": "ckptファイルの処理",
+ "模型融合, 可用于测试音色融合": "模型融合, 可用于测试音色融合",
"A模型路径": "Aモデルのパス",
"B模型路径": "Bモデルのパス",
"A模型权重": "Aモデルの重み",
@@ -54,18 +63,33 @@
"修改模型信息(仅支持weights文件夹下提取的小模型文件": "モデル情報の変更(小さなモデルファイルのみ、weightsフォルダーから抽出)",
"模型路径": "モデルパス",
"要改的模型信息": "変更するモデル情報",
- "保存的文件名,默认空为和源文件同名": "保存するファイル名。デフォルトは元のファイル名と同じです",
+ "保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "変更",
"查看模型信息(仅支持weights文件夹下提取的小模型文件": "モデル情報の表示(小さなモデルファイルのみ、weightsフォルダーから抽出)",
"查看": "表示",
- "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "モデル抽出(logsフォルダー内の大きなファイルモデルパスを入力)。トレーニングが途中で止まり、自動的に小さなモデルファイルを保存していない場合、または中間モデルをテストしたい場合に使用できます。",
+ "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
"保存名": "保存するファイル名",
"模型是否带音高指导,1是0否": "モデルに音高ガイドを付けるかどうか、1は付ける、0は付けない",
"提取": "抽出",
"招募音高曲线前端编辑器": "音高曲線フロントエンドエディターを募集",
+ "加开发群联系我xxxxx": "加开发群联系我xxxxx",
"点击查看交流、问题反馈群号": "クリックして交流、問題フィードバックグループ番号を表示",
- "输入设备/Input Device": "入力デバイス",
- "输出设备/Output Device": "出力デバイス",
- "音频设备(请使用同种类驱动)/Audio Devices": "音声デバイス",
- "音调设置/Pitch Offset": "音程オフセット"
+ "xxxxx": "xxxxx",
+ "加载模型": "加载模型",
+ "选择.pth文件": "选择.pth文件",
+ "选择.index文件": "选择.index文件",
+ "选择.npy文件": "选择.npy文件",
+ "输入设备": "输入设备",
+ "输出设备": "输出设备",
+ "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "响应阈值": "响应阈值",
+ "音调设置": "音调设置",
+ "常规设置": "常规设置",
+ "采样长度": "采样长度",
+ "淡入淡出长度": "淡入淡出长度",
+ "额外推理时长": "额外推理时长",
+ "输出降噪/Output Noisereduce": "输出降噪/Output Noisereduce",
+ "性能设置": "性能设置",
+ "开始音频转换": "开始音频转换",
+ "停止音频转换": "停止音频转换"
}
\ No newline at end of file
diff --git a/locale/locale_diff.py b/locale/locale_diff.py
index 46a51cc62..de00aeca5 100644
--- a/locale/locale_diff.py
+++ b/locale/locale_diff.py
@@ -1,5 +1,4 @@
import json
-import os
from collections import OrderedDict
# Define the standard file name
@@ -21,10 +20,16 @@
# Find the difference between the language file and the standard file
diff = set(standard_data.keys()) - set(lang_data.keys())
+ miss = set(lang_data.keys()) - set(standard_data.keys())
+
# Add any missing keys to the language file
for key in diff:
lang_data[key] = key
+ # Del any extra keys to the language file
+ for key in miss:
+ del lang_data[key]
+
# Sort the keys of the language file to match the order of the standard file
lang_data = OrderedDict(sorted(lang_data.items(), key=lambda x: list(standard_data.keys()).index(x[0])))
diff --git a/locale/zh_CN.json b/locale/zh_CN.json
index 9f68ad18a..d9fd1b582 100644
--- a/locale/zh_CN.json
+++ b/locale/zh_CN.json
@@ -1,49 +1,58 @@
{
+ "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.": "本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录使用需遵守的协议-LICENSE.txt.",
"模型推理": "模型推理",
"推理音色": "推理音色",
"刷新音色列表": "刷新音色列表",
"卸载音色省显存": "卸载音色省显存",
"请选择说话人id": "请选择说话人id",
- "变调(整数,半音数量,升八度12降八度-12)": "变调(整数,半音数量,升八度12降八度-12)",
+ "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
"输入待处理音频文件路径(默认是正确格式示例": "输入待处理音频文件路径(默认是正确格式示例",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比",
"特征检索库文件路径": "特征检索库文件路径",
"特征文件路径": "特征文件路径",
- "F0曲线文件,可选,一行一个音高,代替默认F0及升降调": "F0曲线文件,可选,一行一个音高,代替默认F0及升降调",
+ "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "转换",
"输出信息": "输出信息",
"输出音频(右下角三个点,点了可以下载": "输出音频(右下角三个点,点了可以下载",
+ "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
"指定输出文件夹": "指定输出文件夹",
"检索特征占比": "检索特征占比",
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了",
- "也可批量输入音频文件,二选一,优先读文件夹": "也可批量输入音频文件,二选一,优先读文件夹",
+ "也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏人声分离",
+ "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
"输入待处理音频文件夹路径": "输入待处理音频文件夹路径",
"模型": "模型",
"指定输出人声文件夹": "指定输出人声文件夹",
"指定输出乐器文件夹": "指定输出乐器文件夹",
"训练": "训练",
+ "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
"输入实验名": "输入实验名",
"目标采样率": "目标采样率",
- "模型是否带音高指导(唱歌一定要,语音可以不要": "模型是否带音高指导(唱歌一定要,语音可以不要",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
+ "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
"输入训练文件夹路径": "输入训练文件夹路径",
"请指定说话人id": "请指定说话人id",
"处理数据": "处理数据",
- "以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号,例如 0-1-2 使用卡0和卡1和卡2",
+ "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "显卡信息",
"提取音高使用的CPU进程数": "提取音高使用的CPU进程数",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢",
"特征提取": "特征提取",
+ "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
"保存频率save_every_epoch": "保存频率save_every_epoch",
"总训练轮数total_epoch": "总训练轮数total_epoch",
"是否仅保存最新的ckpt文件以节省硬盘空间": "是否仅保存最新的ckpt文件以节省硬盘空间",
- "是否缓存所有训练集至显存。10min以下小数据可缓存以加速训练,大数据缓存会炸显存也加不了多少速": "是否缓存所有训练集至显存。10min以下小数据可缓存以加速训练,大数据缓存会炸显存也加不了多少速",
+ "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速": "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速",
"加载预训练底模G路径": "加载预训练底模G路径",
"加载预训练底模D路径": "加载预训练底模D路径",
"训练模型": "训练模型",
"训练特征索引": "训练特征索引",
"一键训练": "一键训练",
"ckpt处理": "ckpt处理",
+ "模型融合, 可用于测试音色融合": "模型融合, 可用于测试音色融合",
"A模型路径": "A模型路径",
"B模型路径": "B模型路径",
"A模型权重": "A模型权重",
@@ -54,31 +63,33 @@
"修改模型信息(仅支持weights文件夹下提取的小模型文件": "修改模型信息(仅支持weights文件夹下提取的小模型文件",
"模型路径": "模型路径",
"要改的模型信息": "要改的模型信息",
- "保存的文件名,默认空为和源文件同名": "保存的文件名,默认空为和源文件同名",
+ "保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "修改",
"查看模型信息(仅支持weights文件夹下提取的小模型文件": "查看模型信息(仅支持weights文件夹下提取的小模型文件",
"查看": "查看",
- "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况",
+ "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
"保存名": "保存名",
"模型是否带音高指导,1是0否": "模型是否带音高指导,1是0否",
"提取": "提取",
"招募音高曲线前端编辑器": "招募音高曲线前端编辑器",
+ "加开发群联系我xxxxx": "加开发群联系我xxxxx",
"点击查看交流、问题反馈群号": "点击查看交流、问题反馈群号",
- "加载模型/Load Model":"加载模型",
- "选择.pth文件/.pth File":"选择.pth文件",
- "选择.index文件/.index File":"选择.index文件",
- "选择.npy文件/.npy File":"选择.npy文件",
- "输入设备/Input Device": "输入设备",
- "输出设备/Output Device": "输出设备",
- "音频设备(请使用同种类驱动)/Audio Devices": "音频设备(请使用同种类驱动)",
- "响应阈值/Silence Threhold":"响应阈值",
- "音调设置/Pitch Offset": "音调设置",
- "常规设置/Common":"常规设置",
- "采样长度/Sample Length":"采样长度",
- "淡入淡出长度/Crossfade Length":"淡入淡出长度",
- "额外推理时长/Extra Length":"额外推理时长",
- "输出降噪/Output Noisereduce":"输出降噪",
- "性能设置/Performance":"性能设置",
- "开始音频转换":"开始音频转换",
- "停止音频转换":"停止音频转换"
+ "xxxxx": "xxxxx",
+ "加载模型": "加载模型",
+ "选择.pth文件": "选择.pth文件",
+ "选择.index文件": "选择.index文件",
+ "选择.npy文件": "选择.npy文件",
+ "输入设备": "输入设备",
+ "输出设备": "输出设备",
+ "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "响应阈值": "响应阈值",
+ "音调设置": "音调设置",
+ "常规设置": "常规设置",
+ "采样长度": "采样长度",
+ "淡入淡出长度": "淡入淡出长度",
+ "额外推理时长": "额外推理时长",
+ "输出降噪/Output Noisereduce": "输出降噪/Output Noisereduce",
+ "性能设置": "性能设置",
+ "开始音频转换": "开始音频转换",
+ "停止音频转换": "停止音频转换"
}
\ No newline at end of file
From 8485bf4c7495d9ccd82d974264ed4fe3aee5fd82 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 15:41:34 +0800
Subject: [PATCH 04/10] fix
---
extract_locale.py | 8 +++-----
infer-web.py | 42 +++++++++++++-----------------------------
locale/en_US.json | 32 ++++++++++++++++----------------
locale/ja_JP.json | 32 ++++++++++++++++----------------
locale/zh_CN.json | 32 ++++++++++++++++----------------
5 files changed, 64 insertions(+), 82 deletions(-)
diff --git a/extract_locale.py b/extract_locale.py
index 7d7d4e968..3eb2f2a0b 100644
--- a/extract_locale.py
+++ b/extract_locale.py
@@ -2,7 +2,7 @@
import re
# Define regular expression patterns
-pattern = r'i18n\([^)]*\)'
+pattern = r"""i18n\(["']([^"']+)["']\)"""
# Initialize the dictionary to store key-value pairs
data = {}
@@ -11,16 +11,14 @@
with open('infer-web.py', 'r', encoding='utf-8') as f:
contents = f.read()
matches = re.findall(pattern, contents)
- for match in matches:
- key = match.strip('i18n()"\'')
+ for key in matches:
data[key] = key
# Extract labels from gui.py
with open('gui.py', 'r', encoding='utf-8') as f:
contents = f.read()
matches = re.findall(pattern, contents)
- for match in matches:
- key = match.strip('i18n()"\'')
+ for key in matches:
data[key] = key
# Save as a JSON file
diff --git a/infer-web.py b/infer-web.py
index 340ebddcf..df4e76c53 100644
--- a/infer-web.py
+++ b/infer-web.py
@@ -483,12 +483,10 @@ def change_info_(ckpt_path):
outputs=[spk_item],
)
with gr.Group():
- gr.Markdown(value=i18n("""
- 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域.
- """))
+ gr.Markdown(value=i18n("男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. "))
with gr.Row():
with gr.Column():
- vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
+ vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
input_audio0 = gr.Textbox(label=i18n("输入待处理音频文件路径(默认是正确格式示例)"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs\冬之花clip1.wav")
f0method0=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
@@ -502,12 +500,10 @@ def change_info_(ckpt_path):
vc_output2 = gr.Audio(label=i18n("输出音频(右下角三个点,点了可以下载)"))
but0.click(vc_single, [spk_item, input_audio0, vc_transform0,f0_file,f0method0,file_index1,file_big_npy1,index_rate1], [vc_output1, vc_output2])
with gr.Group():
- gr.Markdown(value=i18n("""
- 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频.
- """))
+ gr.Markdown(value=i18n("批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. "))
with gr.Row():
with gr.Column():
- vc_transform1 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
+ vc_transform1 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
opt_input = gr.Textbox(label=i18n("指定输出文件夹"),value="opt")
f0method1=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
@@ -522,14 +518,10 @@ def change_info_(ckpt_path):
but1.click(vc_multi, [spk_item, dir_input,opt_input,inputs, vc_transform1,f0method1,file_index2,file_big_npy2,index_rate2], [vc_output3])
with gr.TabItem(i18n("伴奏人声分离")):
with gr.Group():
- gr.Markdown(value=i18n("""
- 人声伴奏分离批量处理, 使用UVR5模型.
- 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
- 合格的文件夹路径格式举例:E:\codes\py39\\vits_vc_gpu\白鹭霜华测试样例(去文件管理器地址栏拷就行了)
- """))
+ gr.Markdown(value=i18n("人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)"))
with gr.Row():
with gr.Column():
- dir_wav_input = gr.Textbox(label=i18n("输入待处理音频文件夹路径"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs")
+ dir_wav_input = gr.Textbox(label=i18n("输入待处理音频文件夹路径"),value="E:\\codes\\py39\\vits_vc_gpu_train\\todo-songs")
wav_inputs = gr.File(file_count="multiple", label=i18n("也可批量输入音频文件, 二选一, 优先读文件夹"))
with gr.Column():
model_choose = gr.Dropdown(label=i18n("模型"), choices=uvr5_names)
@@ -539,17 +531,13 @@ def change_info_(ckpt_path):
vc_output4 = gr.Textbox(label=i18n("输出信息"))
but2.click(uvr, [model_choose, dir_wav_input,opt_vocal_root,wav_inputs,opt_ins_root], [vc_output4])
with gr.TabItem(i18n("训练")):
- gr.Markdown(value=i18n("""
- step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件.
- """))
+ gr.Markdown(value=i18n("step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. "))
with gr.Row():
exp_dir1 = gr.Textbox(label=i18n("输入实验名"),value="mi-test")
sr2 = gr.Radio(label=i18n("目标采样率"), choices=["32k","40k","48k"],value="40k", interactive=True)
if_f0_3 = gr.Radio(label=i18n("模型是否带音高指导(唱歌一定要, 语音可以不要)"), choices=["是","否"],value="是", interactive=True)
with gr.Group():#暂时单人的, 后面支持最多4人的#数据处理
- gr.Markdown(value=i18n("""
- step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练.
- """))
+ gr.Markdown(value=i18n("step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. "))
with gr.Row():
trainset_dir4 = gr.Textbox(label=i18n("输入训练文件夹路径"),value="E:\语音音频+标注\米津玄师\src")
spk_id5 = gr.Slider(minimum=0, maximum=4, step=1, label=i18n("请指定说话人id"), value=0,interactive=True)
@@ -557,9 +545,7 @@ def change_info_(ckpt_path):
info1=gr.Textbox(label=i18n("输出信息"),value="")
but1.click(preprocess_dataset,[trainset_dir4,exp_dir1,sr2],[info1])
with gr.Group():
- gr.Markdown(value=i18n("""
- step2b:使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)
- """))
+ gr.Markdown(value=i18n("step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)"))
with gr.Row():
with gr.Column():
gpus6 = gr.Textbox(label=i18n("以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2"),value=gpus,interactive=True)
@@ -571,9 +557,7 @@ def change_info_(ckpt_path):
info2=gr.Textbox(label=i18n("输出信息"),value="",max_lines=8)
but2.click(extract_f0_feature,[gpus6,np7,f0method8,if_f0_3,exp_dir1],[info2])
with gr.Group():
- gr.Markdown(value=i18n("""
- step3:填写训练设置, 开始训练模型和索引
- """))
+ gr.Markdown(value=i18n("step3: 填写训练设置, 开始训练模型和索引"))
with gr.Row():
save_epoch10 = gr.Slider(minimum=0, maximum=50, step=1, label=i18n("保存频率save_every_epoch"), value=5,interactive=True)
total_epoch11 = gr.Slider(minimum=0, maximum=1000, step=1, label=i18n("总训练轮数total_epoch"), value=20,interactive=True)
@@ -596,7 +580,7 @@ def change_info_(ckpt_path):
with gr.TabItem(i18n("ckpt处理")):
with gr.Group():
- gr.Markdown(value=i18n("""模型融合, 可用于测试音色融合"""))
+ gr.Markdown(value=i18n("模型融合, 可用于测试音色融合"))
with gr.Row():
ckpt_a = gr.Textbox(label=i18n("A模型路径"), value="", interactive=True)
ckpt_b = gr.Textbox(label=i18n("B模型路径"), value="", interactive=True)
@@ -641,9 +625,9 @@ def change_info_(ckpt_path):
but9.click(extract_small_model, [ckpt_path2,save_name,sr__,if_f0__,info___], info7)
with gr.TabItem(i18n("招募音高曲线前端编辑器")):
- gr.Markdown(value=i18n("""加开发群联系我xxxxx"""))
+ gr.Markdown(value=i18n("加开发群联系我xxxxx"))
with gr.TabItem(i18n("点击查看交流、问题反馈群号")):
- gr.Markdown(value=i18n("""xxxxx"""))
+ gr.Markdown(value=i18n("xxxxx"))
if iscolab:
app.queue(concurrency_count=511, max_size=1022).launch(share=True)
diff --git a/locale/en_US.json b/locale/en_US.json
index 5b7706660..c47b05aea 100644
--- a/locale/en_US.json
+++ b/locale/en_US.json
@@ -5,43 +5,43 @@
"刷新音色列表": "Refresh timbre list",
"卸载音色省显存": "Unload timbre to save GPU memory",
"请选择说话人id": "Please select a speaker id",
- "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
- "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
- "输入待处理音频文件路径(默认是正确格式示例": "Input the path of the audio file to be processed (the default format is an example of the correct format)",
+ "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ": "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
+ "输入待处理音频文件路径(默认是正确格式示例)": "输入待处理音频文件路径(默认是正确格式示例)",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "Select the algorithm for pitch extraction. Use 'pm' to speed up for singing voices, or use 'harvest' for better low-pitched voices, but it is extremely slow.",
"特征检索库文件路径": "Feature search database file path",
"特征文件路径": "Feature file path",
"F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "Conversion",
"输出信息": "Output information",
- "输出音频(右下角三个点,点了可以下载": "Output audio (three dots in the lower right corner, click to download)",
- "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
+ "输出音频(右下角三个点,点了可以下载)": "输出音频(右下角三个点,点了可以下载)",
+ "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ": "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ",
"指定输出文件夹": "Specify output folder",
"检索特征占比": "Search feature ratio",
- "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "Input the path of the audio file folder to be processed (just copy it from the address bar of the file manager)",
+ "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "Accompaniment and vocal separation",
- "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "Input audio folder path",
"模型": "Model",
"指定输出人声文件夹": "Specify output vocal folder",
"指定输出乐器文件夹": "Specify output instrumental folder",
"训练": "Train",
- "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
+ "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ": "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ",
"输入实验名": "Input experiment name",
"目标采样率": "Target sample rate",
- "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
- "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要)": "模型是否带音高指导(唱歌一定要, 语音可以不要)",
+ "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ": "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ",
"输入训练文件夹路径": "Input training folder path",
"请指定说话人id": "Please specify speaker ID",
"处理数据": "Process data",
- "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)": "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)",
"以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "GPU information",
"提取音高使用的CPU进程数": "Number of CPU processes used for pitch extraction",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "Select pitch extraction algorithm: Use 'pm' for faster processing of singing voice, 'dio' for high-quality speech but slower processing, and 'harvest' for the best quality but slowest processing.",
"特征提取": "Feature extraction",
- "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
+ "step3: 填写训练设置, 开始训练模型和索引": "step3: 填写训练设置, 开始训练模型和索引",
"保存频率save_every_epoch": "Save frequency (save_every_epoch)",
"总训练轮数total_epoch": "Total training epochs (total_epoch)",
"是否仅保存最新的ckpt文件以节省硬盘空间": "Whether to save only the latest ckpt file to save disk space",
@@ -60,14 +60,14 @@
"要置入的模型信息": "Model information to be placed.",
"保存的模型名不带后缀": "Saved model name without extension.",
"融合": "Fusion.",
- "修改模型信息(仅支持weights文件夹下提取的小模型文件": "Modify model information (only supports small model files extracted under the weights folder)",
+ "修改模型信息(仅支持weights文件夹下提取的小模型文件)": "修改模型信息(仅支持weights文件夹下提取的小模型文件)",
"模型路径": "Model path",
"要改的模型信息": "Model information to be modified",
"保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "Modify",
- "查看模型信息(仅支持weights文件夹下提取的小模型文件": "View model information (only supports small model files extracted under the weights folder)",
+ "查看模型信息(仅支持weights文件夹下提取的小模型文件)": "查看模型信息(仅支持weights文件夹下提取的小模型文件)",
"查看": "View",
- "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
+ "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况",
"保存名": "Save Name",
"模型是否带音高指导,1是0否": "Whether the model comes with pitch guidance, 1 for yes, 0 for no",
"提取": "Extract",
@@ -81,7 +81,7 @@
"选择.npy文件": "选择.npy文件",
"输入设备": "输入设备",
"输出设备": "输出设备",
- "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "音频设备(请使用同种类驱动)": "音频设备(请使用同种类驱动)",
"响应阈值": "响应阈值",
"音调设置": "音调设置",
"常规设置": "常规设置",
diff --git a/locale/ja_JP.json b/locale/ja_JP.json
index 53d68f924..f6b31898a 100644
--- a/locale/ja_JP.json
+++ b/locale/ja_JP.json
@@ -5,43 +5,43 @@
"刷新音色列表": "",
"卸载音色省显存": "",
"请选择说话人id": "話者IDを選択してください",
- "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
- "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
- "输入待处理音频文件路径(默认是正确格式示例": "処理対象のオーディオファイルのパスを入力してください(デフォルトは正しいフォーマットの例です)",
+ "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ": "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
+ "输入待处理音频文件路径(默认是正确格式示例)": "输入待处理音频文件路径(默认是正确格式示例)",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "ピッチ抽出アルゴリズムを選択してください。歌声の場合は、pmを使用して速度を上げることができます。低音が重要な場合は、harvestを使用できますが、非常に遅くなります。",
"特征检索库文件路径": "特徴量検索データベースのファイルパス",
"特征文件路径": "特徴量ファイルのパス",
"F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "変換",
"输出信息": "出力情報",
- "输出音频(右下角三个点,点了可以下载": "オーディオ出力(右下の3つの点をクリックするとダウンロードできます)",
- "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
+ "输出音频(右下角三个点,点了可以下载)": "输出音频(右下角三个点,点了可以下载)",
+ "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ": "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ",
"指定输出文件夹": "出力フォルダを指定してください",
"检索特征占比": "検索特徴率",
- "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "処理対象のオーディオフォルダのパスを入力してください(ファイルマネージャーのアドレスバーからコピーしてください)",
+ "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏とボーカルの分離",
- "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "処理するオーディオファイルのフォルダパスを入力してください",
"模型": "モデル",
"指定输出人声文件夹": "人の声を出力するフォルダを指定してください",
"指定输出乐器文件夹": "楽器の出力フォルダを指定してください",
"训练": "トレーニング",
- "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
+ "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ": "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ",
"输入实验名": "実験名を入力してください",
"目标采样率": "目標サンプリングレート",
- "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
- "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要)": "模型是否带音高指导(唱歌一定要, 语音可以不要)",
+ "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ": "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ",
"输入训练文件夹路径": "トレーニング用フォルダのパスを入力してください",
"请指定说话人id": "話者IDを指定してください",
"处理数据": "データ処理",
- "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)": "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)",
"以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "カード情報",
"提取音高使用的CPU进程数": "抽出に使用するCPUプロセス数",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "",
"特征提取": "特徴抽出",
- "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
+ "step3: 填写训练设置, 开始训练模型和索引": "step3: 填写训练设置, 开始训练模型和索引",
"保存频率save_every_epoch": "エポックごとの保存頻度",
"总训练轮数total_epoch": "総トレーニング回数",
"是否仅保存最新的ckpt文件以节省硬盘空间": "ハードディスク容量を節約するため、最新のckptファイルのみを保存するかどうか",
@@ -60,14 +60,14 @@
"要置入的模型信息": "挿入するモデル情報",
"保存的模型名不带后缀": "拡張子のない保存するモデル名",
"融合": "フュージョン",
- "修改模型信息(仅支持weights文件夹下提取的小模型文件": "モデル情報の変更(小さなモデルファイルのみ、weightsフォルダーから抽出)",
+ "修改模型信息(仅支持weights文件夹下提取的小模型文件)": "修改模型信息(仅支持weights文件夹下提取的小模型文件)",
"模型路径": "モデルパス",
"要改的模型信息": "変更するモデル情報",
"保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "変更",
- "查看模型信息(仅支持weights文件夹下提取的小模型文件": "モデル情報の表示(小さなモデルファイルのみ、weightsフォルダーから抽出)",
+ "查看模型信息(仅支持weights文件夹下提取的小模型文件)": "查看模型信息(仅支持weights文件夹下提取的小模型文件)",
"查看": "表示",
- "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
+ "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况",
"保存名": "保存するファイル名",
"模型是否带音高指导,1是0否": "モデルに音高ガイドを付けるかどうか、1は付ける、0は付けない",
"提取": "抽出",
@@ -81,7 +81,7 @@
"选择.npy文件": "选择.npy文件",
"输入设备": "输入设备",
"输出设备": "输出设备",
- "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "音频设备(请使用同种类驱动)": "音频设备(请使用同种类驱动)",
"响应阈值": "响应阈值",
"音调设置": "音调设置",
"常规设置": "常规设置",
diff --git a/locale/zh_CN.json b/locale/zh_CN.json
index d9fd1b582..a80dfdc05 100644
--- a/locale/zh_CN.json
+++ b/locale/zh_CN.json
@@ -5,43 +5,43 @@
"刷新音色列表": "刷新音色列表",
"卸载音色省显存": "卸载音色省显存",
"请选择说话人id": "请选择说话人id",
- "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ": "\n 男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. \n ",
- "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
- "输入待处理音频文件路径(默认是正确格式示例": "输入待处理音频文件路径(默认是正确格式示例",
+ "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ": "男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ",
+ "变调(整数, 半音数量, 升八度12降八度-12)": "变调(整数, 半音数量, 升八度12降八度-12)",
+ "输入待处理音频文件路径(默认是正确格式示例)": "输入待处理音频文件路径(默认是正确格式示例)",
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比": "选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比",
"特征检索库文件路径": "特征检索库文件路径",
"特征文件路径": "特征文件路径",
"F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调": "F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调",
"转换": "转换",
"输出信息": "输出信息",
- "输出音频(右下角三个点,点了可以下载": "输出音频(右下角三个点,点了可以下载",
- "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ": "\n 批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. \n ",
+ "输出音频(右下角三个点,点了可以下载)": "输出音频(右下角三个点,点了可以下载)",
+ "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ": "批量转换, 输入待转换音频文件夹, 或上传多个音频文件, 在指定文件夹(默认opt)下输出转换的音频. ",
"指定输出文件夹": "指定输出文件夹",
"检索特征占比": "检索特征占比",
- "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了",
+ "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏人声分离",
- "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ": "\n 人声伴奏分离批量处理, 使用UVR5模型.
\n 不带和声用HP2, 带和声且提取的人声不需要和声用HP5
\n 合格的文件夹路径格式举例:E:\\codes\\py39\\\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)\n ",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "输入待处理音频文件夹路径",
"模型": "模型",
"指定输出人声文件夹": "指定输出人声文件夹",
"指定输出乐器文件夹": "指定输出乐器文件夹",
"训练": "训练",
- "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ": "\n step1:填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. \n ",
+ "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ": "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. ",
"输入实验名": "输入实验名",
"目标采样率": "目标采样率",
- "模型是否带音高指导(唱歌一定要, 语音可以不要": "模型是否带音高指导(唱歌一定要, 语音可以不要",
- "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ": "\n step2a:自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹;暂时只支持单人训练. \n ",
+ "模型是否带音高指导(唱歌一定要, 语音可以不要)": "模型是否带音高指导(唱歌一定要, 语音可以不要)",
+ "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ": "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. ",
"输入训练文件夹路径": "输入训练文件夹路径",
"请指定说话人id": "请指定说话人id",
"处理数据": "处理数据",
- "\n step2b:使用CPU提取音高(如果模型带音高": "\n step2b:使用CPU提取音高(如果模型带音高",
+ "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)": "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)",
"以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2": "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2",
"显卡信息": "显卡信息",
"提取音高使用的CPU进程数": "提取音高使用的CPU进程数",
"选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢": "选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢",
"特征提取": "特征提取",
- "\n step3:填写训练设置, 开始训练模型和索引\n ": "\n step3:填写训练设置, 开始训练模型和索引\n ",
+ "step3: 填写训练设置, 开始训练模型和索引": "step3: 填写训练设置, 开始训练模型和索引",
"保存频率save_every_epoch": "保存频率save_every_epoch",
"总训练轮数total_epoch": "总训练轮数total_epoch",
"是否仅保存最新的ckpt文件以节省硬盘空间": "是否仅保存最新的ckpt文件以节省硬盘空间",
@@ -60,14 +60,14 @@
"要置入的模型信息": "要置入的模型信息",
"保存的模型名不带后缀": "保存的模型名不带后缀",
"融合": "融合",
- "修改模型信息(仅支持weights文件夹下提取的小模型文件": "修改模型信息(仅支持weights文件夹下提取的小模型文件",
+ "修改模型信息(仅支持weights文件夹下提取的小模型文件)": "修改模型信息(仅支持weights文件夹下提取的小模型文件)",
"模型路径": "模型路径",
"要改的模型信息": "要改的模型信息",
"保存的文件名, 默认空为和源文件同名": "保存的文件名, 默认空为和源文件同名",
"修改": "修改",
- "查看模型信息(仅支持weights文件夹下提取的小模型文件": "查看模型信息(仅支持weights文件夹下提取的小模型文件",
+ "查看模型信息(仅支持weights文件夹下提取的小模型文件)": "查看模型信息(仅支持weights文件夹下提取的小模型文件)",
"查看": "查看",
- "模型提取(输入logs文件夹下大文件模型路径": "模型提取(输入logs文件夹下大文件模型路径",
+ "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况": "模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况",
"保存名": "保存名",
"模型是否带音高指导,1是0否": "模型是否带音高指导,1是0否",
"提取": "提取",
@@ -81,7 +81,7 @@
"选择.npy文件": "选择.npy文件",
"输入设备": "输入设备",
"输出设备": "输出设备",
- "音频设备(请使用同种类驱动": "音频设备(请使用同种类驱动",
+ "音频设备(请使用同种类驱动)": "音频设备(请使用同种类驱动)",
"响应阈值": "响应阈值",
"音调设置": "音调设置",
"常规设置": "常规设置",
From 6c5c7e708b4805e205c0e44fbc40b136ef8344cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 15:50:02 +0800
Subject: [PATCH 05/10] fix
---
extract_locale.py | 4 +++-
infer-web.py | 14 +++++++-------
locale/en_US.json | 2 +-
locale/ja_JP.json | 2 +-
locale/zh_CN.json | 2 +-
webui_locale.py | 8 ++------
6 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/extract_locale.py b/extract_locale.py
index 3eb2f2a0b..5f1de3712 100644
--- a/extract_locale.py
+++ b/extract_locale.py
@@ -2,7 +2,7 @@
import re
# Define regular expression patterns
-pattern = r"""i18n\(["']([^"']+)["']\)"""
+pattern = r"""i18n\((["'][^"']+["'])\)"""
# Initialize the dictionary to store key-value pairs
data = {}
@@ -12,6 +12,7 @@
contents = f.read()
matches = re.findall(pattern, contents)
for key in matches:
+ key = eval(key)
data[key] = key
# Extract labels from gui.py
@@ -19,6 +20,7 @@
contents = f.read()
matches = re.findall(pattern, contents)
for key in matches:
+ key = eval(key)
data[key] = key
# Save as a JSON file
diff --git a/infer-web.py b/infer-web.py
index df4e76c53..2bc59b5f3 100644
--- a/infer-web.py
+++ b/infer-web.py
@@ -487,11 +487,11 @@ def change_info_(ckpt_path):
with gr.Row():
with gr.Column():
vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)
- input_audio0 = gr.Textbox(label=i18n("输入待处理音频文件路径(默认是正确格式示例)"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs\冬之花clip1.wav")
+ input_audio0 = gr.Textbox(label=i18n("输入待处理音频文件路径(默认是正确格式示例)"),value="E:\\codes\\py39\\vits_vc_gpu_train\\todo-songs\\冬之花clip1.wav")
f0method0=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
- file_index1 = gr.Textbox(label=i18n("特征检索库文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\added_IVF677_Flat_nprobe_7.index", interactive=True)
- file_big_npy1 = gr.Textbox(label=i18n("特征文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\total_fea.npy", interactive=True)
+ file_index1 = gr.Textbox(label=i18n("特征检索库文件路径"),value="E:\\codes\\py39\\vits_vc_gpu_train\\logs\\mi-test-1key\\added_IVF677_Flat_nprobe_7.index", interactive=True)
+ file_big_npy1 = gr.Textbox(label=i18n("特征文件路径"),value="E:\\codes\py39\\vits_vc_gpu_train\\logs\\mi-test-1key\\total_fea.npy", interactive=True)
index_rate1 = gr.Slider(minimum=0, maximum=1,label='检索特征占比', value=1,interactive=True)
f0_file = gr.File(label=i18n("F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调"))
but0=gr.Button(i18n("转换"), variant="primary")
@@ -507,8 +507,8 @@ def change_info_(ckpt_path):
opt_input = gr.Textbox(label=i18n("指定输出文件夹"),value="opt")
f0method1=gr.Radio(label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比"), choices=["pm","harvest"],value="pm", interactive=True)
with gr.Column():
- file_index2 = gr.Textbox(label=i18n("特征检索库文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\added_IVF677_Flat_nprobe_7.index", interactive=True)
- file_big_npy2 = gr.Textbox(label=i18n("特征文件路径"),value="E:\codes\py39\\vits_vc_gpu_train\logs\mi-test-1key\\total_fea.npy", interactive=True)
+ file_index2 = gr.Textbox(label=i18n("特征检索库文件路径"),value="E:\\codes\\py39\\vits_vc_gpu_train\\logs\\mi-test-1key\\added_IVF677_Flat_nprobe_7.index", interactive=True)
+ file_big_npy2 = gr.Textbox(label=i18n("特征文件路径"),value="E:\\codes\\py39\\vits_vc_gpu_train\\logs\\mi-test-1key\\total_fea.npy", interactive=True)
index_rate2 = gr.Slider(minimum=0, maximum=1,label=i18n("检索特征占比"), value=1,interactive=True)
with gr.Column():
dir_input = gr.Textbox(label=i18n("输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)"),value="E:\codes\py39\\vits_vc_gpu_train\\todo-songs")
@@ -539,7 +539,7 @@ def change_info_(ckpt_path):
with gr.Group():#暂时单人的, 后面支持最多4人的#数据处理
gr.Markdown(value=i18n("step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. "))
with gr.Row():
- trainset_dir4 = gr.Textbox(label=i18n("输入训练文件夹路径"),value="E:\语音音频+标注\米津玄师\src")
+ trainset_dir4 = gr.Textbox(label=i18n("输入训练文件夹路径"),value="E:\\语音音频+标注\\米津玄师\\src")
spk_id5 = gr.Slider(minimum=0, maximum=4, step=1, label=i18n("请指定说话人id"), value=0,interactive=True)
but1=gr.Button(i18n("处理数据"), variant="primary")
info1=gr.Textbox(label=i18n("输出信息"),value="")
@@ -614,7 +614,7 @@ def change_info_(ckpt_path):
with gr.Group():
gr.Markdown(value=i18n("模型提取(输入logs文件夹下大文件模型路径),适用于训一半不想训了模型没有自动提取保存小文件模型,或者想测试中间模型的情况"))
with gr.Row():
- ckpt_path2 = gr.Textbox(label=i18n("模型路径"), value="E:\codes\py39\logs\mi-test_f0_48k\\G_23333.pth", interactive=True)
+ ckpt_path2 = gr.Textbox(label=i18n("模型路径"), value="E:\\codes\\py39\\logs\\mi-test_f0_48k\\G_23333.pth", interactive=True)
save_name = gr.Textbox(label=i18n("保存名"), value="", interactive=True)
sr__ = gr.Radio(label=i18n("目标采样率"), choices=["32k","40k","48k"],value="40k", interactive=True)
if_f0__ = gr.Radio(label=i18n("模型是否带音高指导,1是0否"), choices=["1","0"],value="1", interactive=True)
diff --git a/locale/en_US.json b/locale/en_US.json
index c47b05aea..5b724d01b 100644
--- a/locale/en_US.json
+++ b/locale/en_US.json
@@ -21,7 +21,7 @@
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "Accompaniment and vocal separation",
- "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "Input audio folder path",
"模型": "Model",
"指定输出人声文件夹": "Specify output vocal folder",
diff --git a/locale/ja_JP.json b/locale/ja_JP.json
index f6b31898a..641270c22 100644
--- a/locale/ja_JP.json
+++ b/locale/ja_JP.json
@@ -21,7 +21,7 @@
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏とボーカルの分離",
- "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "処理するオーディオファイルのフォルダパスを入力してください",
"模型": "モデル",
"指定输出人声文件夹": "人の声を出力するフォルダを指定してください",
diff --git a/locale/zh_CN.json b/locale/zh_CN.json
index a80dfdc05..01ee14991 100644
--- a/locale/zh_CN.json
+++ b/locale/zh_CN.json
@@ -21,7 +21,7 @@
"输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)": "输入待处理音频文件夹路径(去文件管理器地址栏拷就行了)",
"也可批量输入音频文件, 二选一, 优先读文件夹": "也可批量输入音频文件, 二选一, 优先读文件夹",
"伴奏人声分离": "伴奏人声分离",
- "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\\\codes\\\\py39\\\\vits_vc_gpu\\\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
+ "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)": "人声伴奏分离批量处理, 使用UVR5模型.
不带和声用HP2, 带和声且提取的人声不需要和声用HP5
合格的文件夹路径格式举例: E:\\codes\\py39\\vits_vc_gpu\\白鹭霜华测试样例(去文件管理器地址栏拷就行了)",
"输入待处理音频文件夹路径": "输入待处理音频文件夹路径",
"模型": "模型",
"指定输出人声文件夹": "指定输出人声文件夹",
diff --git a/webui_locale.py b/webui_locale.py
index b665c3d50..999eb6fb4 100644
--- a/webui_locale.py
+++ b/webui_locale.py
@@ -8,17 +8,13 @@ def load_language_list(language):
class I18nAuto:
def __init__(self, language=None):
- self.language_map = {}
if language is None:
language = 'auto'
if language == 'auto':
language = locale.getdefaultlocale()[0]
self.language = language
- self.language_list = load_language_list(language)
- self.read_language(self.language_list)
-
- def read_language(self, lang_dict: dict):
- self.language_map.update(lang_dict)
+ print("Use Languane:", language)
+ self.language_map = load_language_list(language)
def __call__(self, key):
return self.language_map[key]
From 2f3dd44e891b8a4ea134055b76e175bb84bf0a9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 15:57:34 +0800
Subject: [PATCH 06/10] add genlocale workflow
---
.github/workflows/genlocale.yml | 24 ++++++++++++++++++++++++
extract_locale.py | 28 ++++++++++++++--------------
2 files changed, 38 insertions(+), 14 deletions(-)
create mode 100644 .github/workflows/genlocale.yml
diff --git a/.github/workflows/genlocale.yml b/.github/workflows/genlocale.yml
new file mode 100644
index 000000000..e64f6cdb5
--- /dev/null
+++ b/.github/workflows/genlocale.yml
@@ -0,0 +1,24 @@
+name: genlocale
+on: [ push ]
+jobs:
+ golangci:
+ name: genlocale
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out
+ uses: actions/checkout@master
+
+ - name: Run locale generation
+ run: |
+ python3 extract_locale.py
+ cd locale
+ python3 locale_diff.py
+
+ - name: Commit back
+ if: ${{ !github.head_ref }}
+ continue-on-error: true
+ run: |
+ git config --local user.name 'github-actions[bot]'
+ git config --local user.email '41898282+github-actions[bot]@users.noreply.github.com'
+ git add --all
+ git commit -m "🎨 同步 locale"
diff --git a/extract_locale.py b/extract_locale.py
index 5f1de3712..1bb9e32b7 100644
--- a/extract_locale.py
+++ b/extract_locale.py
@@ -7,21 +7,21 @@
# Initialize the dictionary to store key-value pairs
data = {}
-# Extract labels from infer-webui.py
-with open('infer-web.py', 'r', encoding='utf-8') as f:
- contents = f.read()
- matches = re.findall(pattern, contents)
- for key in matches:
- key = eval(key)
- data[key] = key
+def process(fn: str):
+ global data
+ with open(fn, 'r', encoding='utf-8') as f:
+ contents = f.read()
+ matches = re.findall(pattern, contents)
+ for key in matches:
+ key = eval(key)
+ print("extract:", key)
+ data[key] = key
-# Extract labels from gui.py
-with open('gui.py', 'r', encoding='utf-8') as f:
- contents = f.read()
- matches = re.findall(pattern, contents)
- for key in matches:
- key = eval(key)
- data[key] = key
+print("processing infer-web.py")
+process('infer-web.py')
+
+print("processing gui.py")
+process('gui.py')
# Save as a JSON file
with open('./locale/zh_CN.json', 'w', encoding='utf-8') as f:
From 98ede4fa291d81747a1573ed3cf0797d850963eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 16:25:32 +0800
Subject: [PATCH 07/10] add unitest
---
.github/workflows/unitest.yml | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
create mode 100644 .github/workflows/unitest.yml
diff --git a/.github/workflows/unitest.yml b/.github/workflows/unitest.yml
new file mode 100644
index 000000000..274fe14c6
--- /dev/null
+++ b/.github/workflows/unitest.yml
@@ -0,0 +1,28 @@
+name: unitest
+on: [ push, pull_request ]
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ python-version: ["3.8", "3.9", "3.10"]
+ os: [ubuntu-latest]
+ fail-fast: false
+
+ steps:
+ - uses: actions/checkout@master
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ python -m pip install --upgrade setuptools
+ python -m pip install --upgrade wheel
+ pip install -r requirements.txt
+ - name: Test step 1 & 2
+ run: |
+ python trainset_preprocess_pipeline_print.py logs/mute/0_gt_wavs 48000 8 logs/mi-test True
+ python extract_f0_print.py logs/mi-test $(nproc) pm
+ python extract_feature_print.py cpu 1 0 0 logs/mi-test
From b93db8269d32b6b267817533d8ec0b34d460feda Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 16:31:57 +0800
Subject: [PATCH 08/10] fix
---
.github/workflows/unitest.yml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.github/workflows/unitest.yml b/.github/workflows/unitest.yml
index 274fe14c6..b7b9cdc10 100644
--- a/.github/workflows/unitest.yml
+++ b/.github/workflows/unitest.yml
@@ -20,9 +20,13 @@ jobs:
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
python -m pip install --upgrade wheel
+ pip install torch torchvision torchaudio
pip install -r requirements.txt
- name: Test step 1 & 2
run: |
+ mkdir -p logs/mi-test
+ touch logs/mi-test/preprocess.log
python trainset_preprocess_pipeline_print.py logs/mute/0_gt_wavs 48000 8 logs/mi-test True
+ touch logs/mi-test/extract_f0_feature.log
python extract_f0_print.py logs/mi-test $(nproc) pm
python extract_feature_print.py cpu 1 0 0 logs/mi-test
From 56a0689bde5db1f54af7cb15d11035fd0f48e3b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 16:36:25 +0800
Subject: [PATCH 09/10] fix
---
.github/workflows/unitest.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/unitest.yml b/.github/workflows/unitest.yml
index b7b9cdc10..e8bdc84db 100644
--- a/.github/workflows/unitest.yml
+++ b/.github/workflows/unitest.yml
@@ -17,6 +17,8 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
+ sudo apt update
+ sudo apt install -y ffmpeg
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
python -m pip install --upgrade wheel
From 60b49107c30d45064ed0335d2cbcfc1215fb7ee9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?=
<41315874+fumiama@users.noreply.github.com>
Date: Wed, 12 Apr 2023 16:38:22 +0800
Subject: [PATCH 10/10] fix
---
.github/workflows/unitest.yml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/unitest.yml b/.github/workflows/unitest.yml
index e8bdc84db..ee691d113 100644
--- a/.github/workflows/unitest.yml
+++ b/.github/workflows/unitest.yml
@@ -18,7 +18,9 @@ jobs:
- name: Install dependencies
run: |
sudo apt update
- sudo apt install -y ffmpeg
+ sudo apt -y install ffmpeg
+ sudo apt -y install -qq aria2
+ aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d ./ -o hubert_base.pt
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
python -m pip install --upgrade wheel