Add Lang Support

This commit is contained in:
KamioRinn 2024-08-03 02:52:06 +08:00
parent de7ee7c7c1
commit f6ffb7b619

View File

@ -205,11 +205,16 @@ def get_spepc(hps, filename):
dict_language = { dict_language = {
i18n("中文"): "all_zh",#全部按中文识别 i18n("中文"): "all_zh",#全部按中文识别
i18n("粤语"): "all_yue",#全部按中文识别
i18n("英文"): "en",#全部按英文识别#######不变 i18n("英文"): "en",#全部按英文识别#######不变
i18n("日文"): "all_ja",#全部按日文识别 i18n("日文"): "all_ja",#全部按日文识别
i18n("韩文"): "all_ko",#全部按韩文识别
i18n("中英混合"): "zh",#按中英混合识别####不变 i18n("中英混合"): "zh",#按中英混合识别####不变
i18n("粤英混合"): "yue",#按粤英混合识别####不变
i18n("日英混合"): "ja",#按日英混合识别####不变 i18n("日英混合"): "ja",#按日英混合识别####不变
i18n("韩英混合"): "ko",#按韩英混合识别####不变
i18n("多语种混合"): "auto",#多语种启动切分识别语种 i18n("多语种混合"): "auto",#多语种启动切分识别语种
i18n("多语种混合(粤语)"): "auto_yue",#多语种启动切分识别语种
} }
@ -242,13 +247,13 @@ def get_first(text):
from text import chinese from text import chinese
def get_phones_and_bert(text,language): def get_phones_and_bert(text,language):
if language in {"en","all_zh","all_ja"}: if language in {"en", "all_zh", "all_ja", "all_ko", "all_yue"}:
language = language.replace("all_","") language = language.replace("all_","")
if language == "en": if language == "en":
LangSegment.setfilters(["en"]) LangSegment.setfilters(["en"])
formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text)) formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text))
else: else:
# 因无法区别中日文汉字,以用户输入为准 # 因无法区别中日文汉字,以用户输入为准
formattext = text formattext = text
while " " in formattext: while " " in formattext:
formattext = formattext.replace(" ", " ") formattext = formattext.replace(" ", " ")
@ -267,24 +272,26 @@ def get_phones_and_bert(text,language):
(1024, len(phones)), (1024, len(phones)),
dtype=torch.float16 if is_half == True else torch.float32, dtype=torch.float16 if is_half == True else torch.float32,
).to(device) ).to(device)
elif language in {"zh", "ja","auto"}: elif language in {"zh", "ja", "ko", "yue", "auto", "auto_yue"}:
textlist=[] textlist=[]
langlist=[] langlist=[]
LangSegment.setfilters(["zh","ja","en","ko"]) LangSegment.setfilters(["zh","ja","en","ko"])
if language == "auto": if language == "auto":
for tmp in LangSegment.getTexts(text): for tmp in LangSegment.getTexts(text):
if tmp["lang"] == "ko": langlist.append(tmp["lang"])
langlist.append("zh") textlist.append(tmp["text"])
textlist.append(tmp["text"]) elif language == "auto_yue":
else: for tmp in LangSegment.getTexts(text):
langlist.append(tmp["lang"]) if tmp["lang"] == "zh":
textlist.append(tmp["text"]) tmp["lang"] = "yue"
langlist.append(tmp["lang"])
textlist.append(tmp["text"])
else: else:
for tmp in LangSegment.getTexts(text): for tmp in LangSegment.getTexts(text):
if tmp["lang"] == "en": if tmp["lang"] == "en":
langlist.append(tmp["lang"]) langlist.append(tmp["lang"])
else: else:
# 因无法区别中日文汉字,以用户输入为准 # 因无法区别中日文汉字,以用户输入为准
langlist.append(language) langlist.append(language)
textlist.append(tmp["text"]) textlist.append(tmp["text"])
print(textlist) print(textlist)
@ -605,14 +612,14 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app:
gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。")) gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。"))
prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="")
prompt_language = gr.Dropdown( prompt_language = gr.Dropdown(
label=i18n("参考音频的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") label=i18n("参考音频的语种"), choices=list(dict_language.keys()), value=i18n("中文")
) )
gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式")) gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式"))
with gr.Row(): with gr.Row():
with gr.Column(): with gr.Column():
text = gr.Textbox(label=i18n("需要合成的文本"), value="") text = gr.Textbox(label=i18n("需要合成的文本"), value="")
text_language = gr.Dropdown( text_language = gr.Dropdown(
label=i18n("需要合成的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") label=i18n("需要合成的语种"), choices=list(dict_language.keys()), value=i18n("中文")
) )
how_to_cut = gr.Radio( how_to_cut = gr.Radio(
label=i18n("怎么切"), label=i18n("怎么切"),