From 6556af6feee5daf034f224ee6a82f7839c2e7dcc Mon Sep 17 00:00:00 2001 From: DD-MASTERT <15737567532@163.com> Date: Sun, 21 Jul 2024 01:09:56 +0800 Subject: [PATCH 1/5] Add files via upload --- inference_webui.py | 858 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 858 insertions(+) create mode 100644 inference_webui.py diff --git a/inference_webui.py b/inference_webui.py new file mode 100644 index 00000000..39e1c9c3 --- /dev/null +++ b/inference_webui.py @@ -0,0 +1,858 @@ +''' +按中英混合识别 +按日英混合识别 +多语种启动切分识别语种 +全部按中文识别 +全部按英文识别 +全部按日文识别 +''' +import os, re, logging +import LangSegment +logging.getLogger("markdown_it").setLevel(logging.ERROR) +logging.getLogger("urllib3").setLevel(logging.ERROR) +logging.getLogger("httpcore").setLevel(logging.ERROR) +logging.getLogger("httpx").setLevel(logging.ERROR) +logging.getLogger("asyncio").setLevel(logging.ERROR) +logging.getLogger("charset_normalizer").setLevel(logging.ERROR) +logging.getLogger("torchaudio._extension").setLevel(logging.ERROR) +import pdb +import torch +import shutil +from scipy.io import wavfile + +if os.path.exists("./gweight.txt"): + with open("./gweight.txt", 'r', encoding="utf-8") as file: + gweight_data = file.read() + gpt_path = os.environ.get( + "gpt_path", gweight_data) +else: + gpt_path = os.environ.get( + "gpt_path", "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt") + +if os.path.exists("./sweight.txt"): + with open("./sweight.txt", 'r', encoding="utf-8") as file: + sweight_data = file.read() + sovits_path = os.environ.get("sovits_path", sweight_data) +else: + sovits_path = os.environ.get("sovits_path", "GPT_SoVITS/pretrained_models/s2G488k.pth") +# gpt_path = os.environ.get( +# "gpt_path", "pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" +# ) +# sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") +cnhubert_base_path = os.environ.get( + "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" +) +bert_path = os.environ.get( + "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" +) +infer_ttswebui = os.environ.get("infer_ttswebui", 9872) +infer_ttswebui = int(infer_ttswebui) +is_share = os.environ.get("is_share", "False") +is_share = eval(is_share) +if "_CUDA_VISIBLE_DEVICES" in os.environ: + os.environ["CUDA_VISIBLE_DEVICES"] = os.environ["_CUDA_VISIBLE_DEVICES"] +is_half = eval(os.environ.get("is_half", "True")) and torch.cuda.is_available() +punctuation = set(['!', '?', '…', ',', '.', '-'," "]) +import gradio as gr +from transformers import AutoModelForMaskedLM, AutoTokenizer +import numpy as np +import librosa +from feature_extractor import cnhubert + +cnhubert.cnhubert_base_path = cnhubert_base_path + +from module.models import SynthesizerTrn +from AR.models.t2s_lightning_module import Text2SemanticLightningModule +from text import cleaned_text_to_sequence +from text.cleaner import clean_text +from time import time as ttime +from module.mel_processing import spectrogram_torch +from tools.my_utils import load_audio +from tools.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +# os.environ['PYTORCH_ENABLE_MPS_FALLBACK'] = '1' # 确保直接启动推理UI时也能够设置。 + +if torch.cuda.is_available(): + device = "cuda" +else: + device = "cpu" + +tokenizer = AutoTokenizer.from_pretrained(bert_path) +bert_model = AutoModelForMaskedLM.from_pretrained(bert_path) +if is_half == True: + bert_model = bert_model.half().to(device) +else: + bert_model = bert_model.to(device) + + +def get_bert_feature(text, word2ph): + with torch.no_grad(): + inputs = tokenizer(text, return_tensors="pt") + for i in inputs: + inputs[i] = inputs[i].to(device) + res = bert_model(**inputs, output_hidden_states=True) + res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()[1:-1] + assert len(word2ph) == len(text) + phone_level_feature = [] + for i in range(len(word2ph)): + repeat_feature = res[i].repeat(word2ph[i], 1) + phone_level_feature.append(repeat_feature) + phone_level_feature = torch.cat(phone_level_feature, dim=0) + return phone_level_feature.T + + +class DictToAttrRecursive(dict): + def __init__(self, input_dict): + super().__init__(input_dict) + for key, value in input_dict.items(): + if isinstance(value, dict): + value = DictToAttrRecursive(value) + self[key] = value + setattr(self, key, value) + + def __getattr__(self, item): + try: + return self[item] + except KeyError: + raise AttributeError(f"Attribute {item} not found") + + def __setattr__(self, key, value): + if isinstance(value, dict): + value = DictToAttrRecursive(value) + super(DictToAttrRecursive, self).__setitem__(key, value) + super().__setattr__(key, value) + + def __delattr__(self, item): + try: + del self[item] + except KeyError: + raise AttributeError(f"Attribute {item} not found") + + +ssl_model = cnhubert.get_model() +if is_half == True: + ssl_model = ssl_model.half().to(device) +else: + ssl_model = ssl_model.to(device) + + +def change_sovits_weights(sovits_path): + global vq_model, hps + dict_s2 = torch.load(sovits_path, map_location="cpu") + hps = dict_s2["config"] + hps = DictToAttrRecursive(hps) + hps.model.semantic_frame_rate = "25hz" + vq_model = SynthesizerTrn( + hps.data.filter_length // 2 + 1, + hps.train.segment_size // hps.data.hop_length, + n_speakers=hps.data.n_speakers, + **hps.model + ) + if ("pretrained" not in sovits_path): + del vq_model.enc_q + if is_half == True: + vq_model = vq_model.half().to(device) + else: + vq_model = vq_model.to(device) + vq_model.eval() + print(vq_model.load_state_dict(dict_s2["weight"], strict=False)) + with open("./sweight.txt", "w", encoding="utf-8") as f: + f.write(sovits_path) + + +change_sovits_weights(sovits_path) + + +def change_gpt_weights(gpt_path): + global hz, max_sec, t2s_model, config + hz = 50 + dict_s1 = torch.load(gpt_path, map_location="cpu") + config = dict_s1["config"] + max_sec = config["data"]["max_sec"] + t2s_model = Text2SemanticLightningModule(config, "****", is_train=False) + t2s_model.load_state_dict(dict_s1["weight"]) + if is_half == True: + t2s_model = t2s_model.half() + t2s_model = t2s_model.to(device) + t2s_model.eval() + total = sum([param.nelement() for param in t2s_model.parameters()]) + print("Number of parameter: %.2fM" % (total / 1e6)) + with open("./gweight.txt", "w", encoding="utf-8") as f: f.write(gpt_path) + + +change_gpt_weights(gpt_path) + + +def get_spepc(hps, filename): + audio = load_audio(filename, int(hps.data.sampling_rate)) + audio = torch.FloatTensor(audio) + audio_norm = audio + audio_norm = audio_norm.unsqueeze(0) + spec = spectrogram_torch( + audio_norm, + hps.data.filter_length, + hps.data.sampling_rate, + hps.data.hop_length, + hps.data.win_length, + center=False, + ) + return spec + + +dict_language = { + i18n("中文"): "all_zh",#全部按中文识别 + i18n("英文"): "en",#全部按英文识别#######不变 + i18n("日文"): "all_ja",#全部按日文识别 + i18n("中英混合"): "zh",#按中英混合识别####不变 + i18n("日英混合"): "ja",#按日英混合识别####不变 + i18n("多语种混合"): "auto",#多语种启动切分识别语种 +} + + +def clean_text_inf(text, language): + phones, word2ph, norm_text = clean_text(text, language) + phones = cleaned_text_to_sequence(phones) + return phones, word2ph, norm_text + +dtype=torch.float16 if is_half == True else torch.float32 +def get_bert_inf(phones, word2ph, norm_text, language): + language=language.replace("all_","") + if language == "zh": + bert = get_bert_feature(norm_text, word2ph).to(device)#.to(dtype) + else: + bert = torch.zeros( + (1024, len(phones)), + dtype=torch.float16 if is_half == True else torch.float32, + ).to(device) + + return bert + + +splits = {",", "。", "?", "!", ",", ".", "?", "!", "~", ":", ":", "—", "…", } + + +def get_first(text): + pattern = "[" + "".join(re.escape(sep) for sep in splits) + "]" + text = re.split(pattern, text)[0].strip() + return text + + +def get_phones_and_bert(text,language): + if language in {"en","all_zh","all_ja"}: + language = language.replace("all_","") + if language == "en": + LangSegment.setfilters(["en"]) + formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text)) + else: + # 因无法区别中日文汉字,以用户输入为准 + formattext = text + while " " in formattext: + formattext = formattext.replace(" ", " ") + phones, word2ph, norm_text = clean_text_inf(formattext, language) + if language == "zh": + bert = get_bert_feature(norm_text, word2ph).to(device) + else: + bert = torch.zeros( + (1024, len(phones)), + dtype=torch.float16 if is_half == True else torch.float32, + ).to(device) + elif language in {"zh", "ja","auto"}: + textlist=[] + langlist=[] + LangSegment.setfilters(["zh","ja","en","ko"]) + if language == "auto": + for tmp in LangSegment.getTexts(text): + if tmp["lang"] == "ko": + langlist.append("zh") + textlist.append(tmp["text"]) + else: + langlist.append(tmp["lang"]) + textlist.append(tmp["text"]) + else: + for tmp in LangSegment.getTexts(text): + if tmp["lang"] == "en": + langlist.append(tmp["lang"]) + else: + # 因无法区别中日文汉字,以用户输入为准 + langlist.append(language) + textlist.append(tmp["text"]) + print(textlist) + print(langlist) + phones_list = [] + bert_list = [] + norm_text_list = [] + for i in range(len(textlist)): + lang = langlist[i] + phones, word2ph, norm_text = clean_text_inf(textlist[i], lang) + bert = get_bert_inf(phones, word2ph, norm_text, lang) + phones_list.append(phones) + norm_text_list.append(norm_text) + bert_list.append(bert) + bert = torch.cat(bert_list, dim=1) + phones = sum(phones_list, []) + norm_text = ''.join(norm_text_list) + + return phones,bert.to(dtype),norm_text + + +def merge_short_text_in_array(texts, threshold): + if (len(texts)) < 2: + return texts + result = [] + text = "" + for ele in texts: + text += ele + if len(text) >= threshold: + result.append(text) + text = "" + if (len(text) > 0): + if len(result) == 0: + result.append(text) + else: + result[len(result) - 1] += text + return result + +def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, how_to_cut=i18n("不切"), top_k=20, top_p=0.6, temperature=0.6, interval=0.3, ref_free = False): + if prompt_text is None or len(prompt_text) == 0: + ref_free = True + t0 = ttime() + prompt_language = dict_language[prompt_language] + text_language = dict_language[text_language] + if not ref_free: + prompt_text = prompt_text.strip("\n") + if (prompt_text[-1] not in splits): prompt_text += "。" if prompt_language != "en" else "." + print(i18n("实际输入的参考文本:"), prompt_text) + text = text.strip("\n") + text = replace_consecutive_punctuation(text) + if (text[0] not in splits and len(get_first(text)) < 4): text = "。" + text if text_language != "en" else "." + text + + print(i18n("实际输入的目标文本:"), text) + zero_wav = np.zeros( + int(hps.data.sampling_rate * interval), + dtype=np.float16 if is_half == True else np.float32, + ) + if not ref_free: + with torch.no_grad(): + wav16k, sr = librosa.load(ref_wav_path, sr=16000) + if (wav16k.shape[0] > 160000 or wav16k.shape[0] < 48000): + raise OSError(i18n("参考音频在3~10秒范围外,请更换!")) + wav16k = torch.from_numpy(wav16k) + zero_wav_torch = torch.from_numpy(zero_wav) + if is_half == True: + wav16k = wav16k.half().to(device) + zero_wav_torch = zero_wav_torch.half().to(device) + else: + wav16k = wav16k.to(device) + zero_wav_torch = zero_wav_torch.to(device) + wav16k = torch.cat([wav16k, zero_wav_torch]) + ssl_content = ssl_model.model(wav16k.unsqueeze(0))[ + "last_hidden_state" + ].transpose( + 1, 2 + ) # .float() + codes = vq_model.extract_latent(ssl_content) + prompt_semantic = codes[0, 0] + prompt = prompt_semantic.unsqueeze(0).to(device) + + t1 = ttime() + + if (how_to_cut == i18n("凑四句一切")): + text = cut1(text) + elif (how_to_cut == i18n("凑50字一切")): + text = cut2(text) + elif (how_to_cut == i18n("按中文句号。切")): + text = cut3(text) + elif (how_to_cut == i18n("按英文句号.切")): + text = cut4(text) + elif (how_to_cut == i18n("按标点符号切")): + text = cut5(text) + while "\n\n" in text: + text = text.replace("\n\n", "\n") + print(i18n("实际输入的目标文本(切句后):"), text) + texts = text.split("\n") + texts = process_text(texts) + texts = merge_short_text_in_array(texts, 5) + audio_opt = [] + if not ref_free: + phones1,bert1,norm_text1=get_phones_and_bert(prompt_text, prompt_language) + + for text in texts: + # 解决输入目标文本的空行导致报错的问题 + if (len(text.strip()) == 0): + continue + if (text[-1] not in splits): text += "。" if text_language != "en" else "." + print(i18n("实际输入的目标文本(每句):"), text) + phones2,bert2,norm_text2=get_phones_and_bert(text, text_language) + print(i18n("前端处理后的文本(每句):"), norm_text2) + if not ref_free: + bert = torch.cat([bert1, bert2], 1) + all_phoneme_ids = torch.LongTensor(phones1+phones2).to(device).unsqueeze(0) + else: + bert = bert2 + all_phoneme_ids = torch.LongTensor(phones2).to(device).unsqueeze(0) + + bert = bert.to(device).unsqueeze(0) + all_phoneme_len = torch.tensor([all_phoneme_ids.shape[-1]]).to(device) + + t2 = ttime() + with torch.no_grad(): + # pred_semantic = t2s_model.model.infer( + pred_semantic, idx = t2s_model.model.infer_panel( + all_phoneme_ids, + all_phoneme_len, + None if ref_free else prompt, + bert, + # prompt_phone_len=ph_offset, + top_k=top_k, + top_p=top_p, + temperature=temperature, + early_stop_num=hz * max_sec, + ) + t3 = ttime() + # print(pred_semantic.shape,idx) + pred_semantic = pred_semantic[:, -idx:].unsqueeze( + 0 + ) # .unsqueeze(0)#mq要多unsqueeze一次 + refer = get_spepc(hps, ref_wav_path) # .to(device) + if is_half == True: + refer = refer.half().to(device) + else: + refer = refer.to(device) + # audio = vq_model.decode(pred_semantic, all_phoneme_ids, refer).detach().cpu().numpy()[0, 0] + audio = ( + vq_model.decode( + pred_semantic, torch.LongTensor(phones2).to(device).unsqueeze(0), refer + ) + .detach() + .cpu() + .numpy()[0, 0] + ) ###试试重建不带上prompt部分 + max_audio=np.abs(audio).max()#简单防止16bit爆音 + if max_audio>1:audio/=max_audio + audio_opt.append(audio) + audio_opt.append(zero_wav) + t4 = ttime() + print("%.3f\t%.3f\t%.3f\t%.3f" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3)) + yield hps.data.sampling_rate, (np.concatenate(audio_opt, 0) * 32768).astype( + np.int16 + ) + # 指定保存音频的文件路径 + file_path = 'moys/temp/audio.wav' + + # 调用保存音频的函数 + save_audio(hps.data.sampling_rate, np.concatenate(audio_opt, 0), file_path) + +# 保存音频数据到文件 +def save_audio(sampling_rate, audio_data, file_path): + # 确保音频数据是16位PCM格式 + audio_data = np.int16(audio_data / np.max(np.abs(audio_data)) * 32767) + wavfile.write(file_path, sampling_rate, audio_data) + +def split(todo_text): + todo_text = todo_text.replace("……", "。").replace("——", ",") + if todo_text[-1] not in splits: + todo_text += "。" + i_split_head = i_split_tail = 0 + len_text = len(todo_text) + todo_texts = [] + while 1: + if i_split_head >= len_text: + break # 结尾一定有标点,所以直接跳出即可,最后一段在上次已加入 + if todo_text[i_split_head] in splits: + i_split_head += 1 + todo_texts.append(todo_text[i_split_tail:i_split_head]) + i_split_tail = i_split_head + else: + i_split_head += 1 + return todo_texts + + +def cut1(inp): + inp = inp.strip("\n") + inps = split(inp) + split_idx = list(range(0, len(inps), 4)) + split_idx[-1] = None + if len(split_idx) > 1: + opts = [] + for idx in range(len(split_idx) - 1): + opts.append("".join(inps[split_idx[idx]: split_idx[idx + 1]])) + else: + opts = [inp] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +def cut2(inp): + inp = inp.strip("\n") + inps = split(inp) + if len(inps) < 2: + return inp + opts = [] + summ = 0 + tmp_str = "" + for i in range(len(inps)): + summ += len(inps[i]) + tmp_str += inps[i] + if summ > 50: + summ = 0 + opts.append(tmp_str) + tmp_str = "" + if tmp_str != "": + opts.append(tmp_str) + # print(opts) + if len(opts) > 1 and len(opts[-1]) < 50: ##如果最后一个太短了,和前一个合一起 + opts[-2] = opts[-2] + opts[-1] + opts = opts[:-1] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +def cut3(inp): + inp = inp.strip("\n") + opts = ["%s" % item for item in inp.strip("。").split("。")] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + +def cut4(inp): + inp = inp.strip("\n") + opts = ["%s" % item for item in inp.strip(".").split(".")] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +# contributed by https://github.com/AI-Hobbyist/GPT-SoVITS/blob/main/GPT_SoVITS/inference_webui.py +def cut5(inp): + inp = inp.strip("\n") + punds = {',', '.', ';', '?', '!', '、', ',', '。', '?', '!', ';', ':', '…'} + mergeitems = [] + items = [] + + for i, char in enumerate(inp): + if char in punds: + if char == '.' and i > 0 and i < len(inp) - 1 and inp[i - 1].isdigit() and inp[i + 1].isdigit(): + items.append(char) + else: + items.append(char) + mergeitems.append("".join(items)) + items = [] + else: + items.append(char) + + if items: + mergeitems.append("".join(items)) + + opt = [item for item in mergeitems if not set(item).issubset(punds)] + return "\n".join(opt) + + +def custom_sort_key(s): + # 使用正则表达式提取字符串中的数字部分和非数字部分 + parts = re.split('(\d+)', s) + # 将数字部分转换为整数,非数字部分保持不变 + parts = [int(part) if part.isdigit() else part for part in parts] + return parts + +def process_text(texts): + _text=[] + if all(text in [None, " ", "\n",""] for text in texts): + raise ValueError(i18n("请输入有效文本")) + for text in texts: + if text in [None, " ", ""]: + pass + else: + _text.append(text) + return _text + + +def replace_consecutive_punctuation(text): + punctuations = ''.join(re.escape(p) for p in punctuation) + pattern = f'([{punctuations}])([{punctuations}])+' + result = re.sub(pattern, r'\1', text) + return result + + +def change_choices(): + SoVITS_names, GPT_names = get_weights_names() + return {"choices": sorted(SoVITS_names, key=custom_sort_key), "__type__": "update"}, {"choices": sorted(GPT_names, key=custom_sort_key), "__type__": "update"} + + +pretrained_sovits_name = "GPT_SoVITS/pretrained_models/s2G488k.pth" +pretrained_gpt_name = "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" +SoVITS_weight_root = "SoVITS_weights" +GPT_weight_root = "GPT_weights" +os.makedirs(SoVITS_weight_root, exist_ok=True) +os.makedirs(GPT_weight_root, exist_ok=True) + + +def get_weights_names(): + SoVITS_names = [pretrained_sovits_name] + for name in os.listdir(SoVITS_weight_root): + if name.endswith(".pth"): SoVITS_names.append("%s/%s" % (SoVITS_weight_root, name)) + GPT_names = [pretrained_gpt_name] + for name in os.listdir(GPT_weight_root): + if name.endswith(".ckpt"): GPT_names.append("%s/%s" % (GPT_weight_root, name)) + return SoVITS_names, GPT_names + + +def save_model_config(GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): + config_dir = "moys" + config_dir1 = r"moys\audio" + if not os.path.exists(config_dir): + os.makedirs(config_dir) + + # 复制参考音频文件到配置目录 + copy_ref_audio_path = os.path.join(config_dir1, os.path.basename(inp_ref)) + shutil.copy(inp_ref, copy_ref_audio_path) + + gpt_model_name = os.path.basename(GPT_dropdown).split('-')[0] + config_file_path = os.path.join(config_dir, f"{gpt_model_name}.txt") + + with open(config_file_path, 'w', encoding='utf-8') as f: + f.write(f"GPT_model_path={GPT_dropdown}\n") + f.write(f"SoVITS_model_path={SoVITS_dropdown}\n") + f.write(f"ref_audio_path={copy_ref_audio_path}\n") # 修改写入的路径为复制文件的路径 + f.write(f"ref_text={prompt_text}\n") + f.write(f"ref_audio_language={prompt_language}\n") + + return f"Configuration saved to {config_file_path}" + +def load_model_config(config_file_name): + config_dir = "moys" + # 因为 config_file_name 现在是字符串,我们直接使用它来构造文件路径 + config_file_path = os.path.join(config_dir, config_file_name) + + with open(config_file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + config = {} + for line in lines: + key, value = line.strip().split('=') + config[key] = value + + # 返回一个包含所有组件期望值的字典 + return ( + config["GPT_model_path"], + config["SoVITS_model_path"], + config["ref_audio_path"], + config["ref_text"], + config["ref_audio_language"] + ) +def refresh_config_files(): + # 获取最新的配置文件列表 + config_files = get_config_files() + # 创建一个新的文件名列表,只包含文件名 + config_file_names = [os.path.basename(path) for path in config_files] + + # 返回一个更新的配置,告诉 Gradio 更新下拉菜单的选项 + return {"choices": config_file_names, "__type__": "update"} + + + + # 辅助函数,用于处理 load_model_config 函数的输出 +def handle_load_model_config(config_file_name, GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): + # 调用原始函数获取配置 + config = load_model_config(config_file_name) + + # 更新组件的值 + GPT_dropdown.update(value=config.get("GPT_model_path")) + SoVITS_dropdown.update(value=config.get("SoVITS_model_path")) + inp_ref.update(value=config.get("ref_audio_path")) + prompt_text.update(value=config.get("ref_text")) + prompt_language.update(value=config.get("ref_audio_language")) + +def get_config_files(): + config_dir = "moys" + if not os.path.exists(config_dir): + return [] + + return [os.path.join(config_dir, f) for f in os.listdir(config_dir) if f.endswith('.txt')] + +def echo(input_text): + # 直接返回输入的文本 + return input_text + + +def find_latest_wav(source_dir, dest_dir): + # 确保目标文件夹存在 + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + + # 初始化找到的wav文件路径 + wav_file_path = None + + # 遍历源文件夹 + for root, dirs, files in os.walk(source_dir): + for file in files: + if file.lower().endswith('.wav'): + wav_file_path = os.path.join(root, file) + # 找到第一个wav文件就退出循环 + break + if wav_file_path: + break # 确保找到文件后不再继续遍历 + + # 如果找到了wav文件,复制到目标文件夹 + if wav_file_path: + base_name = os.path.basename(wav_file_path) + file_name, file_ext = os.path.splitext(base_name) + dest_file_path = os.path.join(dest_dir, base_name) + + # 检查目标文件夹中是否存在同名文件,并添加后缀以避免覆盖 + counter = 1 + while os.path.exists(dest_file_path): + new_name = f"{file_name}({counter}){file_ext}" + dest_file_path = os.path.join(dest_dir, new_name) + counter += 1 + # 复制文件 + shutil.copy2(wav_file_path, dest_file_path) + print(f"Copied WAV file to {dest_file_path}") + return dest_file_path # 返回复制的文件路径 + else: + print("No WAV files found.") + return None # 没有找到 WAV 文件时返回 None + + + + +def on_download_click(textq_value): + source_directory = r'moys/temp' # 源文件夹路径 + destination_directory = textq_value + # outputs.update_value(f"开始查找最新的WAV文件...") + + result = find_latest_wav(source_directory, destination_directory) # 调用函数 + # outputs.update_value(f"已保存到: {destination_directory}") + return f"{result}已保存到: {destination_directory}" + + +SoVITS_names, GPT_names = get_weights_names() + +with gr.Blocks(title="GPT-SoVITS WebUI") as app: + gr.Markdown( + value=i18n("本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录LICENSE.") + ) + with gr.Group(): + gr.Markdown(value=i18n("模型切换")) + with gr.Row(): + GPT_dropdown = gr.Dropdown(label=i18n("GPT模型列表"), choices=sorted(GPT_names, key=custom_sort_key), value=gpt_path, interactive=True) + SoVITS_dropdown = gr.Dropdown(label=i18n("SoVITS模型列表"), choices=sorted(SoVITS_names, key=custom_sort_key), value=sovits_path, interactive=True) + refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary") + refresh_button.click(fn=change_choices, inputs=[], outputs=[SoVITS_dropdown, GPT_dropdown]) + SoVITS_dropdown.change(change_sovits_weights, [SoVITS_dropdown], []) + GPT_dropdown.change(change_gpt_weights, [GPT_dropdown], []) + gr.Markdown(value=i18n("*请上传并填写参考信息")) + with gr.Row(): + inp_ref = gr.Audio(label=i18n("请上传3~10秒内参考音频,超过会报错!"), type="filepath") + with gr.Column(): + ref_text_free = gr.Checkbox(label=i18n("开启无参考文本模式。不填参考文本亦相当于开启。"), value=False, interactive=True, show_label=True) + gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT,听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。")) + prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") + prompt_language = gr.Dropdown( + label=i18n("参考音频的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") + ) + gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式")) + with gr.Row(): + text = gr.Textbox(label=i18n("需要合成的文本"), value="") + text_language = gr.Dropdown( + label=i18n("需要合成的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") + ) + how_to_cut = gr.Radio( + label=i18n("怎么切"), + choices=[i18n("不切"), i18n("凑四句一切"), i18n("凑50字一切"), i18n("按中文句号。切"), i18n("按英文句号.切"), i18n("按标点符号切"), ], + value=i18n("凑四句一切"), + interactive=True, + ) + with gr.Row(): + gr.Markdown(value=i18n("gpt采样参数(无参考文本时不要太低):")) + top_k = gr.Slider(minimum=1,maximum=100,step=1,label=i18n("top_k"),value=5,interactive=True) + top_p = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("top_p"),value=1,interactive=True) + temperature = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("temperature"),value=1,interactive=True) + interval = gr.Slider(minimum=0,maximum=5,step=0.02,label=i18n("interval"),value=0.3,interactive=True) + inference_button = gr.Button(i18n("合成语音"), variant="primary") + output = gr.Audio(label=i18n("输出的语音")) + + with gr.Row(): + # 创建文本框和下载按钮 + download_button = gr.Button("下载语音", variant="primary") + textq = gr.Textbox(label="保存的语音路径", value="") + outputs0 = gr.Textbox(label=i18n("保存状态"), value="", interactive=False) + # 将事件处理函数绑定到按钮的点击事件 + download_button.click( + on_download_click, + inputs=[textq], # 这里确保 textq 是正确的组件引用 + outputs=[outputs0] # 这里确保 outputs 是正确的组件引用 + ) + + inference_button.click( + get_tts_wav, + [inp_ref, prompt_text, prompt_language, text, text_language, how_to_cut, top_k, top_p, temperature, interval, ref_text_free], + [output], + ) + # Add new UI elements for saving and loading configurations + with gr.Row(): + + + # 初始加载配置文件列表 + config_files = get_config_files() + # 创建一个新的列表,只包含文件名 + config_file_names = [os.path.basename(path) for path in config_files] + + # 使用文件名列表作为 Dropdown 组件的选项 + config_dropdown = gr.Dropdown( + label=i18n("加载模型配置"), + choices=config_file_names, + value=config_file_names[0] if config_file_names else None + ) + + # Output textbox for displaying save confirmation + save_output = gr.Textbox(label=i18n("保存配置状态"), value="", interactive=False) + + # 绑定刷新按钮的点击事件 + refresh_button = gr.Button(i18n("刷新配置文件列表"), variant="primary") + refresh_button.click( + fn=refresh_config_files, # 使用新创建的 refresh_config_files 函数 + inputs=[], # 刷新按钮不需要输入 + outputs=[config_dropdown] # 指定输出为 config_dropdown 组件,以更新其选项 + ) + + # 绑定保存按钮的点击事件 + save_button = gr.Button(i18n("保存模型配置"), variant="primary") + save_button.click( + fn=save_model_config, + inputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language], + outputs=[save_output] + ) + + # 绑定加载按钮的点击事件 + load_button = gr.Button(i18n("加载模型配置"), variant="primary") + load_button.click( + fn=load_model_config, # 直接使用 load_model_config 函数 + inputs=[config_dropdown], # config_dropdown 组件本身作为输入 + outputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language] # 期望更新的组件列表 + ) + gr.Markdown(value=i18n("文本切分工具。太长的文本合成出来效果不一定好,所以太长建议先切。合成会根据文本的换行分开合成再拼起来。")) + with gr.Row(): + text_inp = gr.Textbox(label=i18n("需要合成的切分前文本"), value="") + button1 = gr.Button(i18n("凑四句一切"), variant="primary") + button2 = gr.Button(i18n("凑50字一切"), variant="primary") + button3 = gr.Button(i18n("按中文句号。切"), variant="primary") + button4 = gr.Button(i18n("按英文句号.切"), variant="primary") + button5 = gr.Button(i18n("按标点符号切"), variant="primary") + button6 = gr.Button(i18n("推送"), variant="primary") + text_opt = gr.Textbox(label=i18n("切分后文本"), value="") + button1.click(cut1, [text_inp], [text_opt]) + button2.click(cut2, [text_inp], [text_opt]) + button3.click(cut3, [text_inp], [text_opt]) + button4.click(cut4, [text_inp], [text_opt]) + button5.click(cut5, [text_inp], [text_opt]) + button6.click(echo, [text_opt], [text]) + gr.Markdown(value=i18n("后续将支持转音素、手工修改音素、语音合成分步执行。")) + +if __name__ == '__main__': + app.queue(concurrency_count=511, max_size=1022).launch( + server_name="0.0.0.0", + inbrowser=True, + share=is_share, + server_port=infer_ttswebui, + quiet=True, + ) From ca323cec56ed1a9824b07fe58e037b6eed482dd4 Mon Sep 17 00:00:00 2001 From: DD-MASTERT <15737567532@163.com> Date: Sun, 21 Jul 2024 01:15:46 +0800 Subject: [PATCH 2/5] Update inference_webui.py --- inference_webui.py | 857 --------------------------------------------- 1 file changed, 857 deletions(-) diff --git a/inference_webui.py b/inference_webui.py index 39e1c9c3..d3f5a12f 100644 --- a/inference_webui.py +++ b/inference_webui.py @@ -1,858 +1 @@ -''' -按中英混合识别 -按日英混合识别 -多语种启动切分识别语种 -全部按中文识别 -全部按英文识别 -全部按日文识别 -''' -import os, re, logging -import LangSegment -logging.getLogger("markdown_it").setLevel(logging.ERROR) -logging.getLogger("urllib3").setLevel(logging.ERROR) -logging.getLogger("httpcore").setLevel(logging.ERROR) -logging.getLogger("httpx").setLevel(logging.ERROR) -logging.getLogger("asyncio").setLevel(logging.ERROR) -logging.getLogger("charset_normalizer").setLevel(logging.ERROR) -logging.getLogger("torchaudio._extension").setLevel(logging.ERROR) -import pdb -import torch -import shutil -from scipy.io import wavfile -if os.path.exists("./gweight.txt"): - with open("./gweight.txt", 'r', encoding="utf-8") as file: - gweight_data = file.read() - gpt_path = os.environ.get( - "gpt_path", gweight_data) -else: - gpt_path = os.environ.get( - "gpt_path", "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt") - -if os.path.exists("./sweight.txt"): - with open("./sweight.txt", 'r', encoding="utf-8") as file: - sweight_data = file.read() - sovits_path = os.environ.get("sovits_path", sweight_data) -else: - sovits_path = os.environ.get("sovits_path", "GPT_SoVITS/pretrained_models/s2G488k.pth") -# gpt_path = os.environ.get( -# "gpt_path", "pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" -# ) -# sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") -cnhubert_base_path = os.environ.get( - "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" -) -bert_path = os.environ.get( - "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" -) -infer_ttswebui = os.environ.get("infer_ttswebui", 9872) -infer_ttswebui = int(infer_ttswebui) -is_share = os.environ.get("is_share", "False") -is_share = eval(is_share) -if "_CUDA_VISIBLE_DEVICES" in os.environ: - os.environ["CUDA_VISIBLE_DEVICES"] = os.environ["_CUDA_VISIBLE_DEVICES"] -is_half = eval(os.environ.get("is_half", "True")) and torch.cuda.is_available() -punctuation = set(['!', '?', '…', ',', '.', '-'," "]) -import gradio as gr -from transformers import AutoModelForMaskedLM, AutoTokenizer -import numpy as np -import librosa -from feature_extractor import cnhubert - -cnhubert.cnhubert_base_path = cnhubert_base_path - -from module.models import SynthesizerTrn -from AR.models.t2s_lightning_module import Text2SemanticLightningModule -from text import cleaned_text_to_sequence -from text.cleaner import clean_text -from time import time as ttime -from module.mel_processing import spectrogram_torch -from tools.my_utils import load_audio -from tools.i18n.i18n import I18nAuto - -i18n = I18nAuto() - -# os.environ['PYTORCH_ENABLE_MPS_FALLBACK'] = '1' # 确保直接启动推理UI时也能够设置。 - -if torch.cuda.is_available(): - device = "cuda" -else: - device = "cpu" - -tokenizer = AutoTokenizer.from_pretrained(bert_path) -bert_model = AutoModelForMaskedLM.from_pretrained(bert_path) -if is_half == True: - bert_model = bert_model.half().to(device) -else: - bert_model = bert_model.to(device) - - -def get_bert_feature(text, word2ph): - with torch.no_grad(): - inputs = tokenizer(text, return_tensors="pt") - for i in inputs: - inputs[i] = inputs[i].to(device) - res = bert_model(**inputs, output_hidden_states=True) - res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()[1:-1] - assert len(word2ph) == len(text) - phone_level_feature = [] - for i in range(len(word2ph)): - repeat_feature = res[i].repeat(word2ph[i], 1) - phone_level_feature.append(repeat_feature) - phone_level_feature = torch.cat(phone_level_feature, dim=0) - return phone_level_feature.T - - -class DictToAttrRecursive(dict): - def __init__(self, input_dict): - super().__init__(input_dict) - for key, value in input_dict.items(): - if isinstance(value, dict): - value = DictToAttrRecursive(value) - self[key] = value - setattr(self, key, value) - - def __getattr__(self, item): - try: - return self[item] - except KeyError: - raise AttributeError(f"Attribute {item} not found") - - def __setattr__(self, key, value): - if isinstance(value, dict): - value = DictToAttrRecursive(value) - super(DictToAttrRecursive, self).__setitem__(key, value) - super().__setattr__(key, value) - - def __delattr__(self, item): - try: - del self[item] - except KeyError: - raise AttributeError(f"Attribute {item} not found") - - -ssl_model = cnhubert.get_model() -if is_half == True: - ssl_model = ssl_model.half().to(device) -else: - ssl_model = ssl_model.to(device) - - -def change_sovits_weights(sovits_path): - global vq_model, hps - dict_s2 = torch.load(sovits_path, map_location="cpu") - hps = dict_s2["config"] - hps = DictToAttrRecursive(hps) - hps.model.semantic_frame_rate = "25hz" - vq_model = SynthesizerTrn( - hps.data.filter_length // 2 + 1, - hps.train.segment_size // hps.data.hop_length, - n_speakers=hps.data.n_speakers, - **hps.model - ) - if ("pretrained" not in sovits_path): - del vq_model.enc_q - if is_half == True: - vq_model = vq_model.half().to(device) - else: - vq_model = vq_model.to(device) - vq_model.eval() - print(vq_model.load_state_dict(dict_s2["weight"], strict=False)) - with open("./sweight.txt", "w", encoding="utf-8") as f: - f.write(sovits_path) - - -change_sovits_weights(sovits_path) - - -def change_gpt_weights(gpt_path): - global hz, max_sec, t2s_model, config - hz = 50 - dict_s1 = torch.load(gpt_path, map_location="cpu") - config = dict_s1["config"] - max_sec = config["data"]["max_sec"] - t2s_model = Text2SemanticLightningModule(config, "****", is_train=False) - t2s_model.load_state_dict(dict_s1["weight"]) - if is_half == True: - t2s_model = t2s_model.half() - t2s_model = t2s_model.to(device) - t2s_model.eval() - total = sum([param.nelement() for param in t2s_model.parameters()]) - print("Number of parameter: %.2fM" % (total / 1e6)) - with open("./gweight.txt", "w", encoding="utf-8") as f: f.write(gpt_path) - - -change_gpt_weights(gpt_path) - - -def get_spepc(hps, filename): - audio = load_audio(filename, int(hps.data.sampling_rate)) - audio = torch.FloatTensor(audio) - audio_norm = audio - audio_norm = audio_norm.unsqueeze(0) - spec = spectrogram_torch( - audio_norm, - hps.data.filter_length, - hps.data.sampling_rate, - hps.data.hop_length, - hps.data.win_length, - center=False, - ) - return spec - - -dict_language = { - i18n("中文"): "all_zh",#全部按中文识别 - i18n("英文"): "en",#全部按英文识别#######不变 - i18n("日文"): "all_ja",#全部按日文识别 - i18n("中英混合"): "zh",#按中英混合识别####不变 - i18n("日英混合"): "ja",#按日英混合识别####不变 - i18n("多语种混合"): "auto",#多语种启动切分识别语种 -} - - -def clean_text_inf(text, language): - phones, word2ph, norm_text = clean_text(text, language) - phones = cleaned_text_to_sequence(phones) - return phones, word2ph, norm_text - -dtype=torch.float16 if is_half == True else torch.float32 -def get_bert_inf(phones, word2ph, norm_text, language): - language=language.replace("all_","") - if language == "zh": - bert = get_bert_feature(norm_text, word2ph).to(device)#.to(dtype) - else: - bert = torch.zeros( - (1024, len(phones)), - dtype=torch.float16 if is_half == True else torch.float32, - ).to(device) - - return bert - - -splits = {",", "。", "?", "!", ",", ".", "?", "!", "~", ":", ":", "—", "…", } - - -def get_first(text): - pattern = "[" + "".join(re.escape(sep) for sep in splits) + "]" - text = re.split(pattern, text)[0].strip() - return text - - -def get_phones_and_bert(text,language): - if language in {"en","all_zh","all_ja"}: - language = language.replace("all_","") - if language == "en": - LangSegment.setfilters(["en"]) - formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text)) - else: - # 因无法区别中日文汉字,以用户输入为准 - formattext = text - while " " in formattext: - formattext = formattext.replace(" ", " ") - phones, word2ph, norm_text = clean_text_inf(formattext, language) - if language == "zh": - bert = get_bert_feature(norm_text, word2ph).to(device) - else: - bert = torch.zeros( - (1024, len(phones)), - dtype=torch.float16 if is_half == True else torch.float32, - ).to(device) - elif language in {"zh", "ja","auto"}: - textlist=[] - langlist=[] - LangSegment.setfilters(["zh","ja","en","ko"]) - if language == "auto": - for tmp in LangSegment.getTexts(text): - if tmp["lang"] == "ko": - langlist.append("zh") - textlist.append(tmp["text"]) - else: - langlist.append(tmp["lang"]) - textlist.append(tmp["text"]) - else: - for tmp in LangSegment.getTexts(text): - if tmp["lang"] == "en": - langlist.append(tmp["lang"]) - else: - # 因无法区别中日文汉字,以用户输入为准 - langlist.append(language) - textlist.append(tmp["text"]) - print(textlist) - print(langlist) - phones_list = [] - bert_list = [] - norm_text_list = [] - for i in range(len(textlist)): - lang = langlist[i] - phones, word2ph, norm_text = clean_text_inf(textlist[i], lang) - bert = get_bert_inf(phones, word2ph, norm_text, lang) - phones_list.append(phones) - norm_text_list.append(norm_text) - bert_list.append(bert) - bert = torch.cat(bert_list, dim=1) - phones = sum(phones_list, []) - norm_text = ''.join(norm_text_list) - - return phones,bert.to(dtype),norm_text - - -def merge_short_text_in_array(texts, threshold): - if (len(texts)) < 2: - return texts - result = [] - text = "" - for ele in texts: - text += ele - if len(text) >= threshold: - result.append(text) - text = "" - if (len(text) > 0): - if len(result) == 0: - result.append(text) - else: - result[len(result) - 1] += text - return result - -def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, how_to_cut=i18n("不切"), top_k=20, top_p=0.6, temperature=0.6, interval=0.3, ref_free = False): - if prompt_text is None or len(prompt_text) == 0: - ref_free = True - t0 = ttime() - prompt_language = dict_language[prompt_language] - text_language = dict_language[text_language] - if not ref_free: - prompt_text = prompt_text.strip("\n") - if (prompt_text[-1] not in splits): prompt_text += "。" if prompt_language != "en" else "." - print(i18n("实际输入的参考文本:"), prompt_text) - text = text.strip("\n") - text = replace_consecutive_punctuation(text) - if (text[0] not in splits and len(get_first(text)) < 4): text = "。" + text if text_language != "en" else "." + text - - print(i18n("实际输入的目标文本:"), text) - zero_wav = np.zeros( - int(hps.data.sampling_rate * interval), - dtype=np.float16 if is_half == True else np.float32, - ) - if not ref_free: - with torch.no_grad(): - wav16k, sr = librosa.load(ref_wav_path, sr=16000) - if (wav16k.shape[0] > 160000 or wav16k.shape[0] < 48000): - raise OSError(i18n("参考音频在3~10秒范围外,请更换!")) - wav16k = torch.from_numpy(wav16k) - zero_wav_torch = torch.from_numpy(zero_wav) - if is_half == True: - wav16k = wav16k.half().to(device) - zero_wav_torch = zero_wav_torch.half().to(device) - else: - wav16k = wav16k.to(device) - zero_wav_torch = zero_wav_torch.to(device) - wav16k = torch.cat([wav16k, zero_wav_torch]) - ssl_content = ssl_model.model(wav16k.unsqueeze(0))[ - "last_hidden_state" - ].transpose( - 1, 2 - ) # .float() - codes = vq_model.extract_latent(ssl_content) - prompt_semantic = codes[0, 0] - prompt = prompt_semantic.unsqueeze(0).to(device) - - t1 = ttime() - - if (how_to_cut == i18n("凑四句一切")): - text = cut1(text) - elif (how_to_cut == i18n("凑50字一切")): - text = cut2(text) - elif (how_to_cut == i18n("按中文句号。切")): - text = cut3(text) - elif (how_to_cut == i18n("按英文句号.切")): - text = cut4(text) - elif (how_to_cut == i18n("按标点符号切")): - text = cut5(text) - while "\n\n" in text: - text = text.replace("\n\n", "\n") - print(i18n("实际输入的目标文本(切句后):"), text) - texts = text.split("\n") - texts = process_text(texts) - texts = merge_short_text_in_array(texts, 5) - audio_opt = [] - if not ref_free: - phones1,bert1,norm_text1=get_phones_and_bert(prompt_text, prompt_language) - - for text in texts: - # 解决输入目标文本的空行导致报错的问题 - if (len(text.strip()) == 0): - continue - if (text[-1] not in splits): text += "。" if text_language != "en" else "." - print(i18n("实际输入的目标文本(每句):"), text) - phones2,bert2,norm_text2=get_phones_and_bert(text, text_language) - print(i18n("前端处理后的文本(每句):"), norm_text2) - if not ref_free: - bert = torch.cat([bert1, bert2], 1) - all_phoneme_ids = torch.LongTensor(phones1+phones2).to(device).unsqueeze(0) - else: - bert = bert2 - all_phoneme_ids = torch.LongTensor(phones2).to(device).unsqueeze(0) - - bert = bert.to(device).unsqueeze(0) - all_phoneme_len = torch.tensor([all_phoneme_ids.shape[-1]]).to(device) - - t2 = ttime() - with torch.no_grad(): - # pred_semantic = t2s_model.model.infer( - pred_semantic, idx = t2s_model.model.infer_panel( - all_phoneme_ids, - all_phoneme_len, - None if ref_free else prompt, - bert, - # prompt_phone_len=ph_offset, - top_k=top_k, - top_p=top_p, - temperature=temperature, - early_stop_num=hz * max_sec, - ) - t3 = ttime() - # print(pred_semantic.shape,idx) - pred_semantic = pred_semantic[:, -idx:].unsqueeze( - 0 - ) # .unsqueeze(0)#mq要多unsqueeze一次 - refer = get_spepc(hps, ref_wav_path) # .to(device) - if is_half == True: - refer = refer.half().to(device) - else: - refer = refer.to(device) - # audio = vq_model.decode(pred_semantic, all_phoneme_ids, refer).detach().cpu().numpy()[0, 0] - audio = ( - vq_model.decode( - pred_semantic, torch.LongTensor(phones2).to(device).unsqueeze(0), refer - ) - .detach() - .cpu() - .numpy()[0, 0] - ) ###试试重建不带上prompt部分 - max_audio=np.abs(audio).max()#简单防止16bit爆音 - if max_audio>1:audio/=max_audio - audio_opt.append(audio) - audio_opt.append(zero_wav) - t4 = ttime() - print("%.3f\t%.3f\t%.3f\t%.3f" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3)) - yield hps.data.sampling_rate, (np.concatenate(audio_opt, 0) * 32768).astype( - np.int16 - ) - # 指定保存音频的文件路径 - file_path = 'moys/temp/audio.wav' - - # 调用保存音频的函数 - save_audio(hps.data.sampling_rate, np.concatenate(audio_opt, 0), file_path) - -# 保存音频数据到文件 -def save_audio(sampling_rate, audio_data, file_path): - # 确保音频数据是16位PCM格式 - audio_data = np.int16(audio_data / np.max(np.abs(audio_data)) * 32767) - wavfile.write(file_path, sampling_rate, audio_data) - -def split(todo_text): - todo_text = todo_text.replace("……", "。").replace("——", ",") - if todo_text[-1] not in splits: - todo_text += "。" - i_split_head = i_split_tail = 0 - len_text = len(todo_text) - todo_texts = [] - while 1: - if i_split_head >= len_text: - break # 结尾一定有标点,所以直接跳出即可,最后一段在上次已加入 - if todo_text[i_split_head] in splits: - i_split_head += 1 - todo_texts.append(todo_text[i_split_tail:i_split_head]) - i_split_tail = i_split_head - else: - i_split_head += 1 - return todo_texts - - -def cut1(inp): - inp = inp.strip("\n") - inps = split(inp) - split_idx = list(range(0, len(inps), 4)) - split_idx[-1] = None - if len(split_idx) > 1: - opts = [] - for idx in range(len(split_idx) - 1): - opts.append("".join(inps[split_idx[idx]: split_idx[idx + 1]])) - else: - opts = [inp] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -def cut2(inp): - inp = inp.strip("\n") - inps = split(inp) - if len(inps) < 2: - return inp - opts = [] - summ = 0 - tmp_str = "" - for i in range(len(inps)): - summ += len(inps[i]) - tmp_str += inps[i] - if summ > 50: - summ = 0 - opts.append(tmp_str) - tmp_str = "" - if tmp_str != "": - opts.append(tmp_str) - # print(opts) - if len(opts) > 1 and len(opts[-1]) < 50: ##如果最后一个太短了,和前一个合一起 - opts[-2] = opts[-2] + opts[-1] - opts = opts[:-1] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -def cut3(inp): - inp = inp.strip("\n") - opts = ["%s" % item for item in inp.strip("。").split("。")] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - -def cut4(inp): - inp = inp.strip("\n") - opts = ["%s" % item for item in inp.strip(".").split(".")] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -# contributed by https://github.com/AI-Hobbyist/GPT-SoVITS/blob/main/GPT_SoVITS/inference_webui.py -def cut5(inp): - inp = inp.strip("\n") - punds = {',', '.', ';', '?', '!', '、', ',', '。', '?', '!', ';', ':', '…'} - mergeitems = [] - items = [] - - for i, char in enumerate(inp): - if char in punds: - if char == '.' and i > 0 and i < len(inp) - 1 and inp[i - 1].isdigit() and inp[i + 1].isdigit(): - items.append(char) - else: - items.append(char) - mergeitems.append("".join(items)) - items = [] - else: - items.append(char) - - if items: - mergeitems.append("".join(items)) - - opt = [item for item in mergeitems if not set(item).issubset(punds)] - return "\n".join(opt) - - -def custom_sort_key(s): - # 使用正则表达式提取字符串中的数字部分和非数字部分 - parts = re.split('(\d+)', s) - # 将数字部分转换为整数,非数字部分保持不变 - parts = [int(part) if part.isdigit() else part for part in parts] - return parts - -def process_text(texts): - _text=[] - if all(text in [None, " ", "\n",""] for text in texts): - raise ValueError(i18n("请输入有效文本")) - for text in texts: - if text in [None, " ", ""]: - pass - else: - _text.append(text) - return _text - - -def replace_consecutive_punctuation(text): - punctuations = ''.join(re.escape(p) for p in punctuation) - pattern = f'([{punctuations}])([{punctuations}])+' - result = re.sub(pattern, r'\1', text) - return result - - -def change_choices(): - SoVITS_names, GPT_names = get_weights_names() - return {"choices": sorted(SoVITS_names, key=custom_sort_key), "__type__": "update"}, {"choices": sorted(GPT_names, key=custom_sort_key), "__type__": "update"} - - -pretrained_sovits_name = "GPT_SoVITS/pretrained_models/s2G488k.pth" -pretrained_gpt_name = "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" -SoVITS_weight_root = "SoVITS_weights" -GPT_weight_root = "GPT_weights" -os.makedirs(SoVITS_weight_root, exist_ok=True) -os.makedirs(GPT_weight_root, exist_ok=True) - - -def get_weights_names(): - SoVITS_names = [pretrained_sovits_name] - for name in os.listdir(SoVITS_weight_root): - if name.endswith(".pth"): SoVITS_names.append("%s/%s" % (SoVITS_weight_root, name)) - GPT_names = [pretrained_gpt_name] - for name in os.listdir(GPT_weight_root): - if name.endswith(".ckpt"): GPT_names.append("%s/%s" % (GPT_weight_root, name)) - return SoVITS_names, GPT_names - - -def save_model_config(GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): - config_dir = "moys" - config_dir1 = r"moys\audio" - if not os.path.exists(config_dir): - os.makedirs(config_dir) - - # 复制参考音频文件到配置目录 - copy_ref_audio_path = os.path.join(config_dir1, os.path.basename(inp_ref)) - shutil.copy(inp_ref, copy_ref_audio_path) - - gpt_model_name = os.path.basename(GPT_dropdown).split('-')[0] - config_file_path = os.path.join(config_dir, f"{gpt_model_name}.txt") - - with open(config_file_path, 'w', encoding='utf-8') as f: - f.write(f"GPT_model_path={GPT_dropdown}\n") - f.write(f"SoVITS_model_path={SoVITS_dropdown}\n") - f.write(f"ref_audio_path={copy_ref_audio_path}\n") # 修改写入的路径为复制文件的路径 - f.write(f"ref_text={prompt_text}\n") - f.write(f"ref_audio_language={prompt_language}\n") - - return f"Configuration saved to {config_file_path}" - -def load_model_config(config_file_name): - config_dir = "moys" - # 因为 config_file_name 现在是字符串,我们直接使用它来构造文件路径 - config_file_path = os.path.join(config_dir, config_file_name) - - with open(config_file_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - - config = {} - for line in lines: - key, value = line.strip().split('=') - config[key] = value - - # 返回一个包含所有组件期望值的字典 - return ( - config["GPT_model_path"], - config["SoVITS_model_path"], - config["ref_audio_path"], - config["ref_text"], - config["ref_audio_language"] - ) -def refresh_config_files(): - # 获取最新的配置文件列表 - config_files = get_config_files() - # 创建一个新的文件名列表,只包含文件名 - config_file_names = [os.path.basename(path) for path in config_files] - - # 返回一个更新的配置,告诉 Gradio 更新下拉菜单的选项 - return {"choices": config_file_names, "__type__": "update"} - - - - # 辅助函数,用于处理 load_model_config 函数的输出 -def handle_load_model_config(config_file_name, GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): - # 调用原始函数获取配置 - config = load_model_config(config_file_name) - - # 更新组件的值 - GPT_dropdown.update(value=config.get("GPT_model_path")) - SoVITS_dropdown.update(value=config.get("SoVITS_model_path")) - inp_ref.update(value=config.get("ref_audio_path")) - prompt_text.update(value=config.get("ref_text")) - prompt_language.update(value=config.get("ref_audio_language")) - -def get_config_files(): - config_dir = "moys" - if not os.path.exists(config_dir): - return [] - - return [os.path.join(config_dir, f) for f in os.listdir(config_dir) if f.endswith('.txt')] - -def echo(input_text): - # 直接返回输入的文本 - return input_text - - -def find_latest_wav(source_dir, dest_dir): - # 确保目标文件夹存在 - if not os.path.exists(dest_dir): - os.makedirs(dest_dir) - - # 初始化找到的wav文件路径 - wav_file_path = None - - # 遍历源文件夹 - for root, dirs, files in os.walk(source_dir): - for file in files: - if file.lower().endswith('.wav'): - wav_file_path = os.path.join(root, file) - # 找到第一个wav文件就退出循环 - break - if wav_file_path: - break # 确保找到文件后不再继续遍历 - - # 如果找到了wav文件,复制到目标文件夹 - if wav_file_path: - base_name = os.path.basename(wav_file_path) - file_name, file_ext = os.path.splitext(base_name) - dest_file_path = os.path.join(dest_dir, base_name) - - # 检查目标文件夹中是否存在同名文件,并添加后缀以避免覆盖 - counter = 1 - while os.path.exists(dest_file_path): - new_name = f"{file_name}({counter}){file_ext}" - dest_file_path = os.path.join(dest_dir, new_name) - counter += 1 - # 复制文件 - shutil.copy2(wav_file_path, dest_file_path) - print(f"Copied WAV file to {dest_file_path}") - return dest_file_path # 返回复制的文件路径 - else: - print("No WAV files found.") - return None # 没有找到 WAV 文件时返回 None - - - - -def on_download_click(textq_value): - source_directory = r'moys/temp' # 源文件夹路径 - destination_directory = textq_value - # outputs.update_value(f"开始查找最新的WAV文件...") - - result = find_latest_wav(source_directory, destination_directory) # 调用函数 - # outputs.update_value(f"已保存到: {destination_directory}") - return f"{result}已保存到: {destination_directory}" - - -SoVITS_names, GPT_names = get_weights_names() - -with gr.Blocks(title="GPT-SoVITS WebUI") as app: - gr.Markdown( - value=i18n("本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录LICENSE.") - ) - with gr.Group(): - gr.Markdown(value=i18n("模型切换")) - with gr.Row(): - GPT_dropdown = gr.Dropdown(label=i18n("GPT模型列表"), choices=sorted(GPT_names, key=custom_sort_key), value=gpt_path, interactive=True) - SoVITS_dropdown = gr.Dropdown(label=i18n("SoVITS模型列表"), choices=sorted(SoVITS_names, key=custom_sort_key), value=sovits_path, interactive=True) - refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary") - refresh_button.click(fn=change_choices, inputs=[], outputs=[SoVITS_dropdown, GPT_dropdown]) - SoVITS_dropdown.change(change_sovits_weights, [SoVITS_dropdown], []) - GPT_dropdown.change(change_gpt_weights, [GPT_dropdown], []) - gr.Markdown(value=i18n("*请上传并填写参考信息")) - with gr.Row(): - inp_ref = gr.Audio(label=i18n("请上传3~10秒内参考音频,超过会报错!"), type="filepath") - with gr.Column(): - ref_text_free = gr.Checkbox(label=i18n("开启无参考文本模式。不填参考文本亦相当于开启。"), value=False, interactive=True, show_label=True) - gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT,听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。")) - prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") - prompt_language = gr.Dropdown( - label=i18n("参考音频的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") - ) - gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式")) - with gr.Row(): - text = gr.Textbox(label=i18n("需要合成的文本"), value="") - text_language = gr.Dropdown( - label=i18n("需要合成的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") - ) - how_to_cut = gr.Radio( - label=i18n("怎么切"), - choices=[i18n("不切"), i18n("凑四句一切"), i18n("凑50字一切"), i18n("按中文句号。切"), i18n("按英文句号.切"), i18n("按标点符号切"), ], - value=i18n("凑四句一切"), - interactive=True, - ) - with gr.Row(): - gr.Markdown(value=i18n("gpt采样参数(无参考文本时不要太低):")) - top_k = gr.Slider(minimum=1,maximum=100,step=1,label=i18n("top_k"),value=5,interactive=True) - top_p = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("top_p"),value=1,interactive=True) - temperature = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("temperature"),value=1,interactive=True) - interval = gr.Slider(minimum=0,maximum=5,step=0.02,label=i18n("interval"),value=0.3,interactive=True) - inference_button = gr.Button(i18n("合成语音"), variant="primary") - output = gr.Audio(label=i18n("输出的语音")) - - with gr.Row(): - # 创建文本框和下载按钮 - download_button = gr.Button("下载语音", variant="primary") - textq = gr.Textbox(label="保存的语音路径", value="") - outputs0 = gr.Textbox(label=i18n("保存状态"), value="", interactive=False) - # 将事件处理函数绑定到按钮的点击事件 - download_button.click( - on_download_click, - inputs=[textq], # 这里确保 textq 是正确的组件引用 - outputs=[outputs0] # 这里确保 outputs 是正确的组件引用 - ) - - inference_button.click( - get_tts_wav, - [inp_ref, prompt_text, prompt_language, text, text_language, how_to_cut, top_k, top_p, temperature, interval, ref_text_free], - [output], - ) - # Add new UI elements for saving and loading configurations - with gr.Row(): - - - # 初始加载配置文件列表 - config_files = get_config_files() - # 创建一个新的列表,只包含文件名 - config_file_names = [os.path.basename(path) for path in config_files] - - # 使用文件名列表作为 Dropdown 组件的选项 - config_dropdown = gr.Dropdown( - label=i18n("加载模型配置"), - choices=config_file_names, - value=config_file_names[0] if config_file_names else None - ) - - # Output textbox for displaying save confirmation - save_output = gr.Textbox(label=i18n("保存配置状态"), value="", interactive=False) - - # 绑定刷新按钮的点击事件 - refresh_button = gr.Button(i18n("刷新配置文件列表"), variant="primary") - refresh_button.click( - fn=refresh_config_files, # 使用新创建的 refresh_config_files 函数 - inputs=[], # 刷新按钮不需要输入 - outputs=[config_dropdown] # 指定输出为 config_dropdown 组件,以更新其选项 - ) - - # 绑定保存按钮的点击事件 - save_button = gr.Button(i18n("保存模型配置"), variant="primary") - save_button.click( - fn=save_model_config, - inputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language], - outputs=[save_output] - ) - - # 绑定加载按钮的点击事件 - load_button = gr.Button(i18n("加载模型配置"), variant="primary") - load_button.click( - fn=load_model_config, # 直接使用 load_model_config 函数 - inputs=[config_dropdown], # config_dropdown 组件本身作为输入 - outputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language] # 期望更新的组件列表 - ) - gr.Markdown(value=i18n("文本切分工具。太长的文本合成出来效果不一定好,所以太长建议先切。合成会根据文本的换行分开合成再拼起来。")) - with gr.Row(): - text_inp = gr.Textbox(label=i18n("需要合成的切分前文本"), value="") - button1 = gr.Button(i18n("凑四句一切"), variant="primary") - button2 = gr.Button(i18n("凑50字一切"), variant="primary") - button3 = gr.Button(i18n("按中文句号。切"), variant="primary") - button4 = gr.Button(i18n("按英文句号.切"), variant="primary") - button5 = gr.Button(i18n("按标点符号切"), variant="primary") - button6 = gr.Button(i18n("推送"), variant="primary") - text_opt = gr.Textbox(label=i18n("切分后文本"), value="") - button1.click(cut1, [text_inp], [text_opt]) - button2.click(cut2, [text_inp], [text_opt]) - button3.click(cut3, [text_inp], [text_opt]) - button4.click(cut4, [text_inp], [text_opt]) - button5.click(cut5, [text_inp], [text_opt]) - button6.click(echo, [text_opt], [text]) - gr.Markdown(value=i18n("后续将支持转音素、手工修改音素、语音合成分步执行。")) - -if __name__ == '__main__': - app.queue(concurrency_count=511, max_size=1022).launch( - server_name="0.0.0.0", - inbrowser=True, - share=is_share, - server_port=infer_ttswebui, - quiet=True, - ) From f40e9893f50dc3062abdd95c42d1f5e5b8487052 Mon Sep 17 00:00:00 2001 From: DD-MASTERT <15737567532@163.com> Date: Sun, 21 Jul 2024 01:16:41 +0800 Subject: [PATCH 3/5] Delete inference_webui.py --- inference_webui.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 inference_webui.py diff --git a/inference_webui.py b/inference_webui.py deleted file mode 100644 index d3f5a12f..00000000 --- a/inference_webui.py +++ /dev/null @@ -1 +0,0 @@ - From 9150e2ca32ab7029366fba746c4e793fbf4cceb2 Mon Sep 17 00:00:00 2001 From: DD-MASTERT <15737567532@163.com> Date: Sun, 21 Jul 2024 01:17:19 +0800 Subject: [PATCH 4/5] Add files via upload --- moys/audio/audio.wav | Bin 0 -> 384044 bytes moys/temp/audio.wav | Bin 0 -> 384044 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 moys/audio/audio.wav create mode 100644 moys/temp/audio.wav diff --git a/moys/audio/audio.wav b/moys/audio/audio.wav new file mode 100644 index 0000000000000000000000000000000000000000..0e0215dbdcad5deeb572fce443117ddef6376ce5 GIT binary patch literal 384044 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

x8aC9|VUSRe*@MfAy574ByK*!s`%eQY$j0 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 Date: Sun, 21 Jul 2024 01:17:48 +0800 Subject: [PATCH 5/5] Add files via upload --- GPT_SoVITS/inference_webui.py | 1519 +++++++++++++++++++-------------- 1 file changed, 858 insertions(+), 661 deletions(-) diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index cc79817f..39e1c9c3 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -1,661 +1,858 @@ -''' -按中英混合识别 -按日英混合识别 -多语种启动切分识别语种 -全部按中文识别 -全部按英文识别 -全部按日文识别 -''' -import os, re, logging -import LangSegment -logging.getLogger("markdown_it").setLevel(logging.ERROR) -logging.getLogger("urllib3").setLevel(logging.ERROR) -logging.getLogger("httpcore").setLevel(logging.ERROR) -logging.getLogger("httpx").setLevel(logging.ERROR) -logging.getLogger("asyncio").setLevel(logging.ERROR) -logging.getLogger("charset_normalizer").setLevel(logging.ERROR) -logging.getLogger("torchaudio._extension").setLevel(logging.ERROR) -import pdb -import torch - -if os.path.exists("./gweight.txt"): - with open("./gweight.txt", 'r', encoding="utf-8") as file: - gweight_data = file.read() - gpt_path = os.environ.get( - "gpt_path", gweight_data) -else: - gpt_path = os.environ.get( - "gpt_path", "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt") - -if os.path.exists("./sweight.txt"): - with open("./sweight.txt", 'r', encoding="utf-8") as file: - sweight_data = file.read() - sovits_path = os.environ.get("sovits_path", sweight_data) -else: - sovits_path = os.environ.get("sovits_path", "GPT_SoVITS/pretrained_models/s2G488k.pth") -# gpt_path = os.environ.get( -# "gpt_path", "pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" -# ) -# sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") -cnhubert_base_path = os.environ.get( - "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" -) -bert_path = os.environ.get( - "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" -) -infer_ttswebui = os.environ.get("infer_ttswebui", 9872) -infer_ttswebui = int(infer_ttswebui) -is_share = os.environ.get("is_share", "False") -is_share = eval(is_share) -if "_CUDA_VISIBLE_DEVICES" in os.environ: - os.environ["CUDA_VISIBLE_DEVICES"] = os.environ["_CUDA_VISIBLE_DEVICES"] -is_half = eval(os.environ.get("is_half", "True")) and torch.cuda.is_available() -punctuation = set(['!', '?', '…', ',', '.', '-'," "]) -import gradio as gr -from transformers import AutoModelForMaskedLM, AutoTokenizer -import numpy as np -import librosa -from feature_extractor import cnhubert - -cnhubert.cnhubert_base_path = cnhubert_base_path - -from module.models import SynthesizerTrn -from AR.models.t2s_lightning_module import Text2SemanticLightningModule -from text import cleaned_text_to_sequence -from text.cleaner import clean_text -from time import time as ttime -from module.mel_processing import spectrogram_torch -from tools.my_utils import load_audio -from tools.i18n.i18n import I18nAuto - -i18n = I18nAuto() - -# os.environ['PYTORCH_ENABLE_MPS_FALLBACK'] = '1' # 确保直接启动推理UI时也能够设置。 - -if torch.cuda.is_available(): - device = "cuda" -else: - device = "cpu" - -tokenizer = AutoTokenizer.from_pretrained(bert_path) -bert_model = AutoModelForMaskedLM.from_pretrained(bert_path) -if is_half == True: - bert_model = bert_model.half().to(device) -else: - bert_model = bert_model.to(device) - - -def get_bert_feature(text, word2ph): - with torch.no_grad(): - inputs = tokenizer(text, return_tensors="pt") - for i in inputs: - inputs[i] = inputs[i].to(device) - res = bert_model(**inputs, output_hidden_states=True) - res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()[1:-1] - assert len(word2ph) == len(text) - phone_level_feature = [] - for i in range(len(word2ph)): - repeat_feature = res[i].repeat(word2ph[i], 1) - phone_level_feature.append(repeat_feature) - phone_level_feature = torch.cat(phone_level_feature, dim=0) - return phone_level_feature.T - - -class DictToAttrRecursive(dict): - def __init__(self, input_dict): - super().__init__(input_dict) - for key, value in input_dict.items(): - if isinstance(value, dict): - value = DictToAttrRecursive(value) - self[key] = value - setattr(self, key, value) - - def __getattr__(self, item): - try: - return self[item] - except KeyError: - raise AttributeError(f"Attribute {item} not found") - - def __setattr__(self, key, value): - if isinstance(value, dict): - value = DictToAttrRecursive(value) - super(DictToAttrRecursive, self).__setitem__(key, value) - super().__setattr__(key, value) - - def __delattr__(self, item): - try: - del self[item] - except KeyError: - raise AttributeError(f"Attribute {item} not found") - - -ssl_model = cnhubert.get_model() -if is_half == True: - ssl_model = ssl_model.half().to(device) -else: - ssl_model = ssl_model.to(device) - - -def change_sovits_weights(sovits_path): - global vq_model, hps - dict_s2 = torch.load(sovits_path, map_location="cpu") - hps = dict_s2["config"] - hps = DictToAttrRecursive(hps) - hps.model.semantic_frame_rate = "25hz" - vq_model = SynthesizerTrn( - hps.data.filter_length // 2 + 1, - hps.train.segment_size // hps.data.hop_length, - n_speakers=hps.data.n_speakers, - **hps.model - ) - if ("pretrained" not in sovits_path): - del vq_model.enc_q - if is_half == True: - vq_model = vq_model.half().to(device) - else: - vq_model = vq_model.to(device) - vq_model.eval() - print(vq_model.load_state_dict(dict_s2["weight"], strict=False)) - with open("./sweight.txt", "w", encoding="utf-8") as f: - f.write(sovits_path) - - -change_sovits_weights(sovits_path) - - -def change_gpt_weights(gpt_path): - global hz, max_sec, t2s_model, config - hz = 50 - dict_s1 = torch.load(gpt_path, map_location="cpu") - config = dict_s1["config"] - max_sec = config["data"]["max_sec"] - t2s_model = Text2SemanticLightningModule(config, "****", is_train=False) - t2s_model.load_state_dict(dict_s1["weight"]) - if is_half == True: - t2s_model = t2s_model.half() - t2s_model = t2s_model.to(device) - t2s_model.eval() - total = sum([param.nelement() for param in t2s_model.parameters()]) - print("Number of parameter: %.2fM" % (total / 1e6)) - with open("./gweight.txt", "w", encoding="utf-8") as f: f.write(gpt_path) - - -change_gpt_weights(gpt_path) - - -def get_spepc(hps, filename): - audio = load_audio(filename, int(hps.data.sampling_rate)) - audio = torch.FloatTensor(audio) - audio_norm = audio - audio_norm = audio_norm.unsqueeze(0) - spec = spectrogram_torch( - audio_norm, - hps.data.filter_length, - hps.data.sampling_rate, - hps.data.hop_length, - hps.data.win_length, - center=False, - ) - return spec - - -dict_language = { - i18n("中文"): "all_zh",#全部按中文识别 - i18n("英文"): "en",#全部按英文识别#######不变 - i18n("日文"): "all_ja",#全部按日文识别 - i18n("中英混合"): "zh",#按中英混合识别####不变 - i18n("日英混合"): "ja",#按日英混合识别####不变 - i18n("多语种混合"): "auto",#多语种启动切分识别语种 -} - - -def clean_text_inf(text, language): - phones, word2ph, norm_text = clean_text(text, language) - phones = cleaned_text_to_sequence(phones) - return phones, word2ph, norm_text - -dtype=torch.float16 if is_half == True else torch.float32 -def get_bert_inf(phones, word2ph, norm_text, language): - language=language.replace("all_","") - if language == "zh": - bert = get_bert_feature(norm_text, word2ph).to(device)#.to(dtype) - else: - bert = torch.zeros( - (1024, len(phones)), - dtype=torch.float16 if is_half == True else torch.float32, - ).to(device) - - return bert - - -splits = {",", "。", "?", "!", ",", ".", "?", "!", "~", ":", ":", "—", "…", } - - -def get_first(text): - pattern = "[" + "".join(re.escape(sep) for sep in splits) + "]" - text = re.split(pattern, text)[0].strip() - return text - - -def get_phones_and_bert(text,language): - if language in {"en","all_zh","all_ja"}: - language = language.replace("all_","") - if language == "en": - LangSegment.setfilters(["en"]) - formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text)) - else: - # 因无法区别中日文汉字,以用户输入为准 - formattext = text - while " " in formattext: - formattext = formattext.replace(" ", " ") - phones, word2ph, norm_text = clean_text_inf(formattext, language) - if language == "zh": - bert = get_bert_feature(norm_text, word2ph).to(device) - else: - bert = torch.zeros( - (1024, len(phones)), - dtype=torch.float16 if is_half == True else torch.float32, - ).to(device) - elif language in {"zh", "ja","auto"}: - textlist=[] - langlist=[] - LangSegment.setfilters(["zh","ja","en","ko"]) - if language == "auto": - for tmp in LangSegment.getTexts(text): - if tmp["lang"] == "ko": - langlist.append("zh") - textlist.append(tmp["text"]) - else: - langlist.append(tmp["lang"]) - textlist.append(tmp["text"]) - else: - for tmp in LangSegment.getTexts(text): - if tmp["lang"] == "en": - langlist.append(tmp["lang"]) - else: - # 因无法区别中日文汉字,以用户输入为准 - langlist.append(language) - textlist.append(tmp["text"]) - print(textlist) - print(langlist) - phones_list = [] - bert_list = [] - norm_text_list = [] - for i in range(len(textlist)): - lang = langlist[i] - phones, word2ph, norm_text = clean_text_inf(textlist[i], lang) - bert = get_bert_inf(phones, word2ph, norm_text, lang) - phones_list.append(phones) - norm_text_list.append(norm_text) - bert_list.append(bert) - bert = torch.cat(bert_list, dim=1) - phones = sum(phones_list, []) - norm_text = ''.join(norm_text_list) - - return phones,bert.to(dtype),norm_text - - -def merge_short_text_in_array(texts, threshold): - if (len(texts)) < 2: - return texts - result = [] - text = "" - for ele in texts: - text += ele - if len(text) >= threshold: - result.append(text) - text = "" - if (len(text) > 0): - if len(result) == 0: - result.append(text) - else: - result[len(result) - 1] += text - return result - -def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, how_to_cut=i18n("不切"), top_k=20, top_p=0.6, temperature=0.6, ref_free = False): - if prompt_text is None or len(prompt_text) == 0: - ref_free = True - t0 = ttime() - prompt_language = dict_language[prompt_language] - text_language = dict_language[text_language] - if not ref_free: - prompt_text = prompt_text.strip("\n") - if (prompt_text[-1] not in splits): prompt_text += "。" if prompt_language != "en" else "." - print(i18n("实际输入的参考文本:"), prompt_text) - text = text.strip("\n") - text = replace_consecutive_punctuation(text) - if (text[0] not in splits and len(get_first(text)) < 4): text = "。" + text if text_language != "en" else "." + text - - print(i18n("实际输入的目标文本:"), text) - zero_wav = np.zeros( - int(hps.data.sampling_rate * 0.3), - dtype=np.float16 if is_half == True else np.float32, - ) - if not ref_free: - with torch.no_grad(): - wav16k, sr = librosa.load(ref_wav_path, sr=16000) - if (wav16k.shape[0] > 160000 or wav16k.shape[0] < 48000): - raise OSError(i18n("参考音频在3~10秒范围外,请更换!")) - wav16k = torch.from_numpy(wav16k) - zero_wav_torch = torch.from_numpy(zero_wav) - if is_half == True: - wav16k = wav16k.half().to(device) - zero_wav_torch = zero_wav_torch.half().to(device) - else: - wav16k = wav16k.to(device) - zero_wav_torch = zero_wav_torch.to(device) - wav16k = torch.cat([wav16k, zero_wav_torch]) - ssl_content = ssl_model.model(wav16k.unsqueeze(0))[ - "last_hidden_state" - ].transpose( - 1, 2 - ) # .float() - codes = vq_model.extract_latent(ssl_content) - prompt_semantic = codes[0, 0] - prompt = prompt_semantic.unsqueeze(0).to(device) - - t1 = ttime() - - if (how_to_cut == i18n("凑四句一切")): - text = cut1(text) - elif (how_to_cut == i18n("凑50字一切")): - text = cut2(text) - elif (how_to_cut == i18n("按中文句号。切")): - text = cut3(text) - elif (how_to_cut == i18n("按英文句号.切")): - text = cut4(text) - elif (how_to_cut == i18n("按标点符号切")): - text = cut5(text) - while "\n\n" in text: - text = text.replace("\n\n", "\n") - print(i18n("实际输入的目标文本(切句后):"), text) - texts = text.split("\n") - texts = process_text(texts) - texts = merge_short_text_in_array(texts, 5) - audio_opt = [] - if not ref_free: - phones1,bert1,norm_text1=get_phones_and_bert(prompt_text, prompt_language) - - for text in texts: - # 解决输入目标文本的空行导致报错的问题 - if (len(text.strip()) == 0): - continue - if (text[-1] not in splits): text += "。" if text_language != "en" else "." - print(i18n("实际输入的目标文本(每句):"), text) - phones2,bert2,norm_text2=get_phones_and_bert(text, text_language) - print(i18n("前端处理后的文本(每句):"), norm_text2) - if not ref_free: - bert = torch.cat([bert1, bert2], 1) - all_phoneme_ids = torch.LongTensor(phones1+phones2).to(device).unsqueeze(0) - else: - bert = bert2 - all_phoneme_ids = torch.LongTensor(phones2).to(device).unsqueeze(0) - - bert = bert.to(device).unsqueeze(0) - all_phoneme_len = torch.tensor([all_phoneme_ids.shape[-1]]).to(device) - - t2 = ttime() - with torch.no_grad(): - # pred_semantic = t2s_model.model.infer( - pred_semantic, idx = t2s_model.model.infer_panel( - all_phoneme_ids, - all_phoneme_len, - None if ref_free else prompt, - bert, - # prompt_phone_len=ph_offset, - top_k=top_k, - top_p=top_p, - temperature=temperature, - early_stop_num=hz * max_sec, - ) - t3 = ttime() - # print(pred_semantic.shape,idx) - pred_semantic = pred_semantic[:, -idx:].unsqueeze( - 0 - ) # .unsqueeze(0)#mq要多unsqueeze一次 - refer = get_spepc(hps, ref_wav_path) # .to(device) - if is_half == True: - refer = refer.half().to(device) - else: - refer = refer.to(device) - # audio = vq_model.decode(pred_semantic, all_phoneme_ids, refer).detach().cpu().numpy()[0, 0] - audio = ( - vq_model.decode( - pred_semantic, torch.LongTensor(phones2).to(device).unsqueeze(0), refer - ) - .detach() - .cpu() - .numpy()[0, 0] - ) ###试试重建不带上prompt部分 - max_audio=np.abs(audio).max()#简单防止16bit爆音 - if max_audio>1:audio/=max_audio - audio_opt.append(audio) - audio_opt.append(zero_wav) - t4 = ttime() - print("%.3f\t%.3f\t%.3f\t%.3f" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3)) - yield hps.data.sampling_rate, (np.concatenate(audio_opt, 0) * 32768).astype( - np.int16 - ) - - -def split(todo_text): - todo_text = todo_text.replace("……", "。").replace("——", ",") - if todo_text[-1] not in splits: - todo_text += "。" - i_split_head = i_split_tail = 0 - len_text = len(todo_text) - todo_texts = [] - while 1: - if i_split_head >= len_text: - break # 结尾一定有标点,所以直接跳出即可,最后一段在上次已加入 - if todo_text[i_split_head] in splits: - i_split_head += 1 - todo_texts.append(todo_text[i_split_tail:i_split_head]) - i_split_tail = i_split_head - else: - i_split_head += 1 - return todo_texts - - -def cut1(inp): - inp = inp.strip("\n") - inps = split(inp) - split_idx = list(range(0, len(inps), 4)) - split_idx[-1] = None - if len(split_idx) > 1: - opts = [] - for idx in range(len(split_idx) - 1): - opts.append("".join(inps[split_idx[idx]: split_idx[idx + 1]])) - else: - opts = [inp] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -def cut2(inp): - inp = inp.strip("\n") - inps = split(inp) - if len(inps) < 2: - return inp - opts = [] - summ = 0 - tmp_str = "" - for i in range(len(inps)): - summ += len(inps[i]) - tmp_str += inps[i] - if summ > 50: - summ = 0 - opts.append(tmp_str) - tmp_str = "" - if tmp_str != "": - opts.append(tmp_str) - # print(opts) - if len(opts) > 1 and len(opts[-1]) < 50: ##如果最后一个太短了,和前一个合一起 - opts[-2] = opts[-2] + opts[-1] - opts = opts[:-1] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -def cut3(inp): - inp = inp.strip("\n") - opts = ["%s" % item for item in inp.strip("。").split("。")] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - -def cut4(inp): - inp = inp.strip("\n") - opts = ["%s" % item for item in inp.strip(".").split(".")] - opts = [item for item in opts if not set(item).issubset(punctuation)] - return "\n".join(opts) - - -# contributed by https://github.com/AI-Hobbyist/GPT-SoVITS/blob/main/GPT_SoVITS/inference_webui.py -def cut5(inp): - inp = inp.strip("\n") - punds = {',', '.', ';', '?', '!', '、', ',', '。', '?', '!', ';', ':', '…'} - mergeitems = [] - items = [] - - for i, char in enumerate(inp): - if char in punds: - if char == '.' and i > 0 and i < len(inp) - 1 and inp[i - 1].isdigit() and inp[i + 1].isdigit(): - items.append(char) - else: - items.append(char) - mergeitems.append("".join(items)) - items = [] - else: - items.append(char) - - if items: - mergeitems.append("".join(items)) - - opt = [item for item in mergeitems if not set(item).issubset(punds)] - return "\n".join(opt) - - -def custom_sort_key(s): - # 使用正则表达式提取字符串中的数字部分和非数字部分 - parts = re.split('(\d+)', s) - # 将数字部分转换为整数,非数字部分保持不变 - parts = [int(part) if part.isdigit() else part for part in parts] - return parts - -def process_text(texts): - _text=[] - if all(text in [None, " ", "\n",""] for text in texts): - raise ValueError(i18n("请输入有效文本")) - for text in texts: - if text in [None, " ", ""]: - pass - else: - _text.append(text) - return _text - - -def replace_consecutive_punctuation(text): - punctuations = ''.join(re.escape(p) for p in punctuation) - pattern = f'([{punctuations}])([{punctuations}])+' - result = re.sub(pattern, r'\1', text) - return result - - -def change_choices(): - SoVITS_names, GPT_names = get_weights_names() - return {"choices": sorted(SoVITS_names, key=custom_sort_key), "__type__": "update"}, {"choices": sorted(GPT_names, key=custom_sort_key), "__type__": "update"} - - -pretrained_sovits_name = "GPT_SoVITS/pretrained_models/s2G488k.pth" -pretrained_gpt_name = "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" -SoVITS_weight_root = "SoVITS_weights" -GPT_weight_root = "GPT_weights" -os.makedirs(SoVITS_weight_root, exist_ok=True) -os.makedirs(GPT_weight_root, exist_ok=True) - - -def get_weights_names(): - SoVITS_names = [pretrained_sovits_name] - for name in os.listdir(SoVITS_weight_root): - if name.endswith(".pth"): SoVITS_names.append("%s/%s" % (SoVITS_weight_root, name)) - GPT_names = [pretrained_gpt_name] - for name in os.listdir(GPT_weight_root): - if name.endswith(".ckpt"): GPT_names.append("%s/%s" % (GPT_weight_root, name)) - return SoVITS_names, GPT_names - - -SoVITS_names, GPT_names = get_weights_names() - -with gr.Blocks(title="GPT-SoVITS WebUI") as app: - gr.Markdown( - value=i18n("本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录LICENSE.") - ) - with gr.Group(): - gr.Markdown(value=i18n("模型切换")) - with gr.Row(): - GPT_dropdown = gr.Dropdown(label=i18n("GPT模型列表"), choices=sorted(GPT_names, key=custom_sort_key), value=gpt_path, interactive=True) - SoVITS_dropdown = gr.Dropdown(label=i18n("SoVITS模型列表"), choices=sorted(SoVITS_names, key=custom_sort_key), value=sovits_path, interactive=True) - refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary") - refresh_button.click(fn=change_choices, inputs=[], outputs=[SoVITS_dropdown, GPT_dropdown]) - SoVITS_dropdown.change(change_sovits_weights, [SoVITS_dropdown], []) - GPT_dropdown.change(change_gpt_weights, [GPT_dropdown], []) - gr.Markdown(value=i18n("*请上传并填写参考信息")) - with gr.Row(): - inp_ref = gr.Audio(label=i18n("请上传3~10秒内参考音频,超过会报错!"), type="filepath") - with gr.Column(): - ref_text_free = gr.Checkbox(label=i18n("开启无参考文本模式。不填参考文本亦相当于开启。"), value=False, interactive=True, show_label=True) - gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT,听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。")) - prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") - prompt_language = gr.Dropdown( - label=i18n("参考音频的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") - ) - gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式")) - with gr.Row(): - text = gr.Textbox(label=i18n("需要合成的文本"), value="") - text_language = gr.Dropdown( - label=i18n("需要合成的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") - ) - how_to_cut = gr.Radio( - label=i18n("怎么切"), - choices=[i18n("不切"), i18n("凑四句一切"), i18n("凑50字一切"), i18n("按中文句号。切"), i18n("按英文句号.切"), i18n("按标点符号切"), ], - value=i18n("凑四句一切"), - interactive=True, - ) - with gr.Row(): - gr.Markdown(value=i18n("gpt采样参数(无参考文本时不要太低):")) - top_k = gr.Slider(minimum=1,maximum=100,step=1,label=i18n("top_k"),value=5,interactive=True) - top_p = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("top_p"),value=1,interactive=True) - temperature = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("temperature"),value=1,interactive=True) - inference_button = gr.Button(i18n("合成语音"), variant="primary") - output = gr.Audio(label=i18n("输出的语音")) - - inference_button.click( - get_tts_wav, - [inp_ref, prompt_text, prompt_language, text, text_language, how_to_cut, top_k, top_p, temperature, ref_text_free], - [output], - ) - - gr.Markdown(value=i18n("文本切分工具。太长的文本合成出来效果不一定好,所以太长建议先切。合成会根据文本的换行分开合成再拼起来。")) - with gr.Row(): - text_inp = gr.Textbox(label=i18n("需要合成的切分前文本"), value="") - button1 = gr.Button(i18n("凑四句一切"), variant="primary") - button2 = gr.Button(i18n("凑50字一切"), variant="primary") - button3 = gr.Button(i18n("按中文句号。切"), variant="primary") - button4 = gr.Button(i18n("按英文句号.切"), variant="primary") - button5 = gr.Button(i18n("按标点符号切"), variant="primary") - text_opt = gr.Textbox(label=i18n("切分后文本"), value="") - button1.click(cut1, [text_inp], [text_opt]) - button2.click(cut2, [text_inp], [text_opt]) - button3.click(cut3, [text_inp], [text_opt]) - button4.click(cut4, [text_inp], [text_opt]) - button5.click(cut5, [text_inp], [text_opt]) - gr.Markdown(value=i18n("后续将支持转音素、手工修改音素、语音合成分步执行。")) - -if __name__ == '__main__': - app.queue(concurrency_count=511, max_size=1022).launch( - server_name="0.0.0.0", - inbrowser=True, - share=is_share, - server_port=infer_ttswebui, - quiet=True, - ) +''' +按中英混合识别 +按日英混合识别 +多语种启动切分识别语种 +全部按中文识别 +全部按英文识别 +全部按日文识别 +''' +import os, re, logging +import LangSegment +logging.getLogger("markdown_it").setLevel(logging.ERROR) +logging.getLogger("urllib3").setLevel(logging.ERROR) +logging.getLogger("httpcore").setLevel(logging.ERROR) +logging.getLogger("httpx").setLevel(logging.ERROR) +logging.getLogger("asyncio").setLevel(logging.ERROR) +logging.getLogger("charset_normalizer").setLevel(logging.ERROR) +logging.getLogger("torchaudio._extension").setLevel(logging.ERROR) +import pdb +import torch +import shutil +from scipy.io import wavfile + +if os.path.exists("./gweight.txt"): + with open("./gweight.txt", 'r', encoding="utf-8") as file: + gweight_data = file.read() + gpt_path = os.environ.get( + "gpt_path", gweight_data) +else: + gpt_path = os.environ.get( + "gpt_path", "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt") + +if os.path.exists("./sweight.txt"): + with open("./sweight.txt", 'r', encoding="utf-8") as file: + sweight_data = file.read() + sovits_path = os.environ.get("sovits_path", sweight_data) +else: + sovits_path = os.environ.get("sovits_path", "GPT_SoVITS/pretrained_models/s2G488k.pth") +# gpt_path = os.environ.get( +# "gpt_path", "pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" +# ) +# sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") +cnhubert_base_path = os.environ.get( + "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" +) +bert_path = os.environ.get( + "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" +) +infer_ttswebui = os.environ.get("infer_ttswebui", 9872) +infer_ttswebui = int(infer_ttswebui) +is_share = os.environ.get("is_share", "False") +is_share = eval(is_share) +if "_CUDA_VISIBLE_DEVICES" in os.environ: + os.environ["CUDA_VISIBLE_DEVICES"] = os.environ["_CUDA_VISIBLE_DEVICES"] +is_half = eval(os.environ.get("is_half", "True")) and torch.cuda.is_available() +punctuation = set(['!', '?', '…', ',', '.', '-'," "]) +import gradio as gr +from transformers import AutoModelForMaskedLM, AutoTokenizer +import numpy as np +import librosa +from feature_extractor import cnhubert + +cnhubert.cnhubert_base_path = cnhubert_base_path + +from module.models import SynthesizerTrn +from AR.models.t2s_lightning_module import Text2SemanticLightningModule +from text import cleaned_text_to_sequence +from text.cleaner import clean_text +from time import time as ttime +from module.mel_processing import spectrogram_torch +from tools.my_utils import load_audio +from tools.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +# os.environ['PYTORCH_ENABLE_MPS_FALLBACK'] = '1' # 确保直接启动推理UI时也能够设置。 + +if torch.cuda.is_available(): + device = "cuda" +else: + device = "cpu" + +tokenizer = AutoTokenizer.from_pretrained(bert_path) +bert_model = AutoModelForMaskedLM.from_pretrained(bert_path) +if is_half == True: + bert_model = bert_model.half().to(device) +else: + bert_model = bert_model.to(device) + + +def get_bert_feature(text, word2ph): + with torch.no_grad(): + inputs = tokenizer(text, return_tensors="pt") + for i in inputs: + inputs[i] = inputs[i].to(device) + res = bert_model(**inputs, output_hidden_states=True) + res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()[1:-1] + assert len(word2ph) == len(text) + phone_level_feature = [] + for i in range(len(word2ph)): + repeat_feature = res[i].repeat(word2ph[i], 1) + phone_level_feature.append(repeat_feature) + phone_level_feature = torch.cat(phone_level_feature, dim=0) + return phone_level_feature.T + + +class DictToAttrRecursive(dict): + def __init__(self, input_dict): + super().__init__(input_dict) + for key, value in input_dict.items(): + if isinstance(value, dict): + value = DictToAttrRecursive(value) + self[key] = value + setattr(self, key, value) + + def __getattr__(self, item): + try: + return self[item] + except KeyError: + raise AttributeError(f"Attribute {item} not found") + + def __setattr__(self, key, value): + if isinstance(value, dict): + value = DictToAttrRecursive(value) + super(DictToAttrRecursive, self).__setitem__(key, value) + super().__setattr__(key, value) + + def __delattr__(self, item): + try: + del self[item] + except KeyError: + raise AttributeError(f"Attribute {item} not found") + + +ssl_model = cnhubert.get_model() +if is_half == True: + ssl_model = ssl_model.half().to(device) +else: + ssl_model = ssl_model.to(device) + + +def change_sovits_weights(sovits_path): + global vq_model, hps + dict_s2 = torch.load(sovits_path, map_location="cpu") + hps = dict_s2["config"] + hps = DictToAttrRecursive(hps) + hps.model.semantic_frame_rate = "25hz" + vq_model = SynthesizerTrn( + hps.data.filter_length // 2 + 1, + hps.train.segment_size // hps.data.hop_length, + n_speakers=hps.data.n_speakers, + **hps.model + ) + if ("pretrained" not in sovits_path): + del vq_model.enc_q + if is_half == True: + vq_model = vq_model.half().to(device) + else: + vq_model = vq_model.to(device) + vq_model.eval() + print(vq_model.load_state_dict(dict_s2["weight"], strict=False)) + with open("./sweight.txt", "w", encoding="utf-8") as f: + f.write(sovits_path) + + +change_sovits_weights(sovits_path) + + +def change_gpt_weights(gpt_path): + global hz, max_sec, t2s_model, config + hz = 50 + dict_s1 = torch.load(gpt_path, map_location="cpu") + config = dict_s1["config"] + max_sec = config["data"]["max_sec"] + t2s_model = Text2SemanticLightningModule(config, "****", is_train=False) + t2s_model.load_state_dict(dict_s1["weight"]) + if is_half == True: + t2s_model = t2s_model.half() + t2s_model = t2s_model.to(device) + t2s_model.eval() + total = sum([param.nelement() for param in t2s_model.parameters()]) + print("Number of parameter: %.2fM" % (total / 1e6)) + with open("./gweight.txt", "w", encoding="utf-8") as f: f.write(gpt_path) + + +change_gpt_weights(gpt_path) + + +def get_spepc(hps, filename): + audio = load_audio(filename, int(hps.data.sampling_rate)) + audio = torch.FloatTensor(audio) + audio_norm = audio + audio_norm = audio_norm.unsqueeze(0) + spec = spectrogram_torch( + audio_norm, + hps.data.filter_length, + hps.data.sampling_rate, + hps.data.hop_length, + hps.data.win_length, + center=False, + ) + return spec + + +dict_language = { + i18n("中文"): "all_zh",#全部按中文识别 + i18n("英文"): "en",#全部按英文识别#######不变 + i18n("日文"): "all_ja",#全部按日文识别 + i18n("中英混合"): "zh",#按中英混合识别####不变 + i18n("日英混合"): "ja",#按日英混合识别####不变 + i18n("多语种混合"): "auto",#多语种启动切分识别语种 +} + + +def clean_text_inf(text, language): + phones, word2ph, norm_text = clean_text(text, language) + phones = cleaned_text_to_sequence(phones) + return phones, word2ph, norm_text + +dtype=torch.float16 if is_half == True else torch.float32 +def get_bert_inf(phones, word2ph, norm_text, language): + language=language.replace("all_","") + if language == "zh": + bert = get_bert_feature(norm_text, word2ph).to(device)#.to(dtype) + else: + bert = torch.zeros( + (1024, len(phones)), + dtype=torch.float16 if is_half == True else torch.float32, + ).to(device) + + return bert + + +splits = {",", "。", "?", "!", ",", ".", "?", "!", "~", ":", ":", "—", "…", } + + +def get_first(text): + pattern = "[" + "".join(re.escape(sep) for sep in splits) + "]" + text = re.split(pattern, text)[0].strip() + return text + + +def get_phones_and_bert(text,language): + if language in {"en","all_zh","all_ja"}: + language = language.replace("all_","") + if language == "en": + LangSegment.setfilters(["en"]) + formattext = " ".join(tmp["text"] for tmp in LangSegment.getTexts(text)) + else: + # 因无法区别中日文汉字,以用户输入为准 + formattext = text + while " " in formattext: + formattext = formattext.replace(" ", " ") + phones, word2ph, norm_text = clean_text_inf(formattext, language) + if language == "zh": + bert = get_bert_feature(norm_text, word2ph).to(device) + else: + bert = torch.zeros( + (1024, len(phones)), + dtype=torch.float16 if is_half == True else torch.float32, + ).to(device) + elif language in {"zh", "ja","auto"}: + textlist=[] + langlist=[] + LangSegment.setfilters(["zh","ja","en","ko"]) + if language == "auto": + for tmp in LangSegment.getTexts(text): + if tmp["lang"] == "ko": + langlist.append("zh") + textlist.append(tmp["text"]) + else: + langlist.append(tmp["lang"]) + textlist.append(tmp["text"]) + else: + for tmp in LangSegment.getTexts(text): + if tmp["lang"] == "en": + langlist.append(tmp["lang"]) + else: + # 因无法区别中日文汉字,以用户输入为准 + langlist.append(language) + textlist.append(tmp["text"]) + print(textlist) + print(langlist) + phones_list = [] + bert_list = [] + norm_text_list = [] + for i in range(len(textlist)): + lang = langlist[i] + phones, word2ph, norm_text = clean_text_inf(textlist[i], lang) + bert = get_bert_inf(phones, word2ph, norm_text, lang) + phones_list.append(phones) + norm_text_list.append(norm_text) + bert_list.append(bert) + bert = torch.cat(bert_list, dim=1) + phones = sum(phones_list, []) + norm_text = ''.join(norm_text_list) + + return phones,bert.to(dtype),norm_text + + +def merge_short_text_in_array(texts, threshold): + if (len(texts)) < 2: + return texts + result = [] + text = "" + for ele in texts: + text += ele + if len(text) >= threshold: + result.append(text) + text = "" + if (len(text) > 0): + if len(result) == 0: + result.append(text) + else: + result[len(result) - 1] += text + return result + +def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, how_to_cut=i18n("不切"), top_k=20, top_p=0.6, temperature=0.6, interval=0.3, ref_free = False): + if prompt_text is None or len(prompt_text) == 0: + ref_free = True + t0 = ttime() + prompt_language = dict_language[prompt_language] + text_language = dict_language[text_language] + if not ref_free: + prompt_text = prompt_text.strip("\n") + if (prompt_text[-1] not in splits): prompt_text += "。" if prompt_language != "en" else "." + print(i18n("实际输入的参考文本:"), prompt_text) + text = text.strip("\n") + text = replace_consecutive_punctuation(text) + if (text[0] not in splits and len(get_first(text)) < 4): text = "。" + text if text_language != "en" else "." + text + + print(i18n("实际输入的目标文本:"), text) + zero_wav = np.zeros( + int(hps.data.sampling_rate * interval), + dtype=np.float16 if is_half == True else np.float32, + ) + if not ref_free: + with torch.no_grad(): + wav16k, sr = librosa.load(ref_wav_path, sr=16000) + if (wav16k.shape[0] > 160000 or wav16k.shape[0] < 48000): + raise OSError(i18n("参考音频在3~10秒范围外,请更换!")) + wav16k = torch.from_numpy(wav16k) + zero_wav_torch = torch.from_numpy(zero_wav) + if is_half == True: + wav16k = wav16k.half().to(device) + zero_wav_torch = zero_wav_torch.half().to(device) + else: + wav16k = wav16k.to(device) + zero_wav_torch = zero_wav_torch.to(device) + wav16k = torch.cat([wav16k, zero_wav_torch]) + ssl_content = ssl_model.model(wav16k.unsqueeze(0))[ + "last_hidden_state" + ].transpose( + 1, 2 + ) # .float() + codes = vq_model.extract_latent(ssl_content) + prompt_semantic = codes[0, 0] + prompt = prompt_semantic.unsqueeze(0).to(device) + + t1 = ttime() + + if (how_to_cut == i18n("凑四句一切")): + text = cut1(text) + elif (how_to_cut == i18n("凑50字一切")): + text = cut2(text) + elif (how_to_cut == i18n("按中文句号。切")): + text = cut3(text) + elif (how_to_cut == i18n("按英文句号.切")): + text = cut4(text) + elif (how_to_cut == i18n("按标点符号切")): + text = cut5(text) + while "\n\n" in text: + text = text.replace("\n\n", "\n") + print(i18n("实际输入的目标文本(切句后):"), text) + texts = text.split("\n") + texts = process_text(texts) + texts = merge_short_text_in_array(texts, 5) + audio_opt = [] + if not ref_free: + phones1,bert1,norm_text1=get_phones_and_bert(prompt_text, prompt_language) + + for text in texts: + # 解决输入目标文本的空行导致报错的问题 + if (len(text.strip()) == 0): + continue + if (text[-1] not in splits): text += "。" if text_language != "en" else "." + print(i18n("实际输入的目标文本(每句):"), text) + phones2,bert2,norm_text2=get_phones_and_bert(text, text_language) + print(i18n("前端处理后的文本(每句):"), norm_text2) + if not ref_free: + bert = torch.cat([bert1, bert2], 1) + all_phoneme_ids = torch.LongTensor(phones1+phones2).to(device).unsqueeze(0) + else: + bert = bert2 + all_phoneme_ids = torch.LongTensor(phones2).to(device).unsqueeze(0) + + bert = bert.to(device).unsqueeze(0) + all_phoneme_len = torch.tensor([all_phoneme_ids.shape[-1]]).to(device) + + t2 = ttime() + with torch.no_grad(): + # pred_semantic = t2s_model.model.infer( + pred_semantic, idx = t2s_model.model.infer_panel( + all_phoneme_ids, + all_phoneme_len, + None if ref_free else prompt, + bert, + # prompt_phone_len=ph_offset, + top_k=top_k, + top_p=top_p, + temperature=temperature, + early_stop_num=hz * max_sec, + ) + t3 = ttime() + # print(pred_semantic.shape,idx) + pred_semantic = pred_semantic[:, -idx:].unsqueeze( + 0 + ) # .unsqueeze(0)#mq要多unsqueeze一次 + refer = get_spepc(hps, ref_wav_path) # .to(device) + if is_half == True: + refer = refer.half().to(device) + else: + refer = refer.to(device) + # audio = vq_model.decode(pred_semantic, all_phoneme_ids, refer).detach().cpu().numpy()[0, 0] + audio = ( + vq_model.decode( + pred_semantic, torch.LongTensor(phones2).to(device).unsqueeze(0), refer + ) + .detach() + .cpu() + .numpy()[0, 0] + ) ###试试重建不带上prompt部分 + max_audio=np.abs(audio).max()#简单防止16bit爆音 + if max_audio>1:audio/=max_audio + audio_opt.append(audio) + audio_opt.append(zero_wav) + t4 = ttime() + print("%.3f\t%.3f\t%.3f\t%.3f" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3)) + yield hps.data.sampling_rate, (np.concatenate(audio_opt, 0) * 32768).astype( + np.int16 + ) + # 指定保存音频的文件路径 + file_path = 'moys/temp/audio.wav' + + # 调用保存音频的函数 + save_audio(hps.data.sampling_rate, np.concatenate(audio_opt, 0), file_path) + +# 保存音频数据到文件 +def save_audio(sampling_rate, audio_data, file_path): + # 确保音频数据是16位PCM格式 + audio_data = np.int16(audio_data / np.max(np.abs(audio_data)) * 32767) + wavfile.write(file_path, sampling_rate, audio_data) + +def split(todo_text): + todo_text = todo_text.replace("……", "。").replace("——", ",") + if todo_text[-1] not in splits: + todo_text += "。" + i_split_head = i_split_tail = 0 + len_text = len(todo_text) + todo_texts = [] + while 1: + if i_split_head >= len_text: + break # 结尾一定有标点,所以直接跳出即可,最后一段在上次已加入 + if todo_text[i_split_head] in splits: + i_split_head += 1 + todo_texts.append(todo_text[i_split_tail:i_split_head]) + i_split_tail = i_split_head + else: + i_split_head += 1 + return todo_texts + + +def cut1(inp): + inp = inp.strip("\n") + inps = split(inp) + split_idx = list(range(0, len(inps), 4)) + split_idx[-1] = None + if len(split_idx) > 1: + opts = [] + for idx in range(len(split_idx) - 1): + opts.append("".join(inps[split_idx[idx]: split_idx[idx + 1]])) + else: + opts = [inp] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +def cut2(inp): + inp = inp.strip("\n") + inps = split(inp) + if len(inps) < 2: + return inp + opts = [] + summ = 0 + tmp_str = "" + for i in range(len(inps)): + summ += len(inps[i]) + tmp_str += inps[i] + if summ > 50: + summ = 0 + opts.append(tmp_str) + tmp_str = "" + if tmp_str != "": + opts.append(tmp_str) + # print(opts) + if len(opts) > 1 and len(opts[-1]) < 50: ##如果最后一个太短了,和前一个合一起 + opts[-2] = opts[-2] + opts[-1] + opts = opts[:-1] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +def cut3(inp): + inp = inp.strip("\n") + opts = ["%s" % item for item in inp.strip("。").split("。")] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + +def cut4(inp): + inp = inp.strip("\n") + opts = ["%s" % item for item in inp.strip(".").split(".")] + opts = [item for item in opts if not set(item).issubset(punctuation)] + return "\n".join(opts) + + +# contributed by https://github.com/AI-Hobbyist/GPT-SoVITS/blob/main/GPT_SoVITS/inference_webui.py +def cut5(inp): + inp = inp.strip("\n") + punds = {',', '.', ';', '?', '!', '、', ',', '。', '?', '!', ';', ':', '…'} + mergeitems = [] + items = [] + + for i, char in enumerate(inp): + if char in punds: + if char == '.' and i > 0 and i < len(inp) - 1 and inp[i - 1].isdigit() and inp[i + 1].isdigit(): + items.append(char) + else: + items.append(char) + mergeitems.append("".join(items)) + items = [] + else: + items.append(char) + + if items: + mergeitems.append("".join(items)) + + opt = [item for item in mergeitems if not set(item).issubset(punds)] + return "\n".join(opt) + + +def custom_sort_key(s): + # 使用正则表达式提取字符串中的数字部分和非数字部分 + parts = re.split('(\d+)', s) + # 将数字部分转换为整数,非数字部分保持不变 + parts = [int(part) if part.isdigit() else part for part in parts] + return parts + +def process_text(texts): + _text=[] + if all(text in [None, " ", "\n",""] for text in texts): + raise ValueError(i18n("请输入有效文本")) + for text in texts: + if text in [None, " ", ""]: + pass + else: + _text.append(text) + return _text + + +def replace_consecutive_punctuation(text): + punctuations = ''.join(re.escape(p) for p in punctuation) + pattern = f'([{punctuations}])([{punctuations}])+' + result = re.sub(pattern, r'\1', text) + return result + + +def change_choices(): + SoVITS_names, GPT_names = get_weights_names() + return {"choices": sorted(SoVITS_names, key=custom_sort_key), "__type__": "update"}, {"choices": sorted(GPT_names, key=custom_sort_key), "__type__": "update"} + + +pretrained_sovits_name = "GPT_SoVITS/pretrained_models/s2G488k.pth" +pretrained_gpt_name = "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" +SoVITS_weight_root = "SoVITS_weights" +GPT_weight_root = "GPT_weights" +os.makedirs(SoVITS_weight_root, exist_ok=True) +os.makedirs(GPT_weight_root, exist_ok=True) + + +def get_weights_names(): + SoVITS_names = [pretrained_sovits_name] + for name in os.listdir(SoVITS_weight_root): + if name.endswith(".pth"): SoVITS_names.append("%s/%s" % (SoVITS_weight_root, name)) + GPT_names = [pretrained_gpt_name] + for name in os.listdir(GPT_weight_root): + if name.endswith(".ckpt"): GPT_names.append("%s/%s" % (GPT_weight_root, name)) + return SoVITS_names, GPT_names + + +def save_model_config(GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): + config_dir = "moys" + config_dir1 = r"moys\audio" + if not os.path.exists(config_dir): + os.makedirs(config_dir) + + # 复制参考音频文件到配置目录 + copy_ref_audio_path = os.path.join(config_dir1, os.path.basename(inp_ref)) + shutil.copy(inp_ref, copy_ref_audio_path) + + gpt_model_name = os.path.basename(GPT_dropdown).split('-')[0] + config_file_path = os.path.join(config_dir, f"{gpt_model_name}.txt") + + with open(config_file_path, 'w', encoding='utf-8') as f: + f.write(f"GPT_model_path={GPT_dropdown}\n") + f.write(f"SoVITS_model_path={SoVITS_dropdown}\n") + f.write(f"ref_audio_path={copy_ref_audio_path}\n") # 修改写入的路径为复制文件的路径 + f.write(f"ref_text={prompt_text}\n") + f.write(f"ref_audio_language={prompt_language}\n") + + return f"Configuration saved to {config_file_path}" + +def load_model_config(config_file_name): + config_dir = "moys" + # 因为 config_file_name 现在是字符串,我们直接使用它来构造文件路径 + config_file_path = os.path.join(config_dir, config_file_name) + + with open(config_file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + config = {} + for line in lines: + key, value = line.strip().split('=') + config[key] = value + + # 返回一个包含所有组件期望值的字典 + return ( + config["GPT_model_path"], + config["SoVITS_model_path"], + config["ref_audio_path"], + config["ref_text"], + config["ref_audio_language"] + ) +def refresh_config_files(): + # 获取最新的配置文件列表 + config_files = get_config_files() + # 创建一个新的文件名列表,只包含文件名 + config_file_names = [os.path.basename(path) for path in config_files] + + # 返回一个更新的配置,告诉 Gradio 更新下拉菜单的选项 + return {"choices": config_file_names, "__type__": "update"} + + + + # 辅助函数,用于处理 load_model_config 函数的输出 +def handle_load_model_config(config_file_name, GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language): + # 调用原始函数获取配置 + config = load_model_config(config_file_name) + + # 更新组件的值 + GPT_dropdown.update(value=config.get("GPT_model_path")) + SoVITS_dropdown.update(value=config.get("SoVITS_model_path")) + inp_ref.update(value=config.get("ref_audio_path")) + prompt_text.update(value=config.get("ref_text")) + prompt_language.update(value=config.get("ref_audio_language")) + +def get_config_files(): + config_dir = "moys" + if not os.path.exists(config_dir): + return [] + + return [os.path.join(config_dir, f) for f in os.listdir(config_dir) if f.endswith('.txt')] + +def echo(input_text): + # 直接返回输入的文本 + return input_text + + +def find_latest_wav(source_dir, dest_dir): + # 确保目标文件夹存在 + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + + # 初始化找到的wav文件路径 + wav_file_path = None + + # 遍历源文件夹 + for root, dirs, files in os.walk(source_dir): + for file in files: + if file.lower().endswith('.wav'): + wav_file_path = os.path.join(root, file) + # 找到第一个wav文件就退出循环 + break + if wav_file_path: + break # 确保找到文件后不再继续遍历 + + # 如果找到了wav文件,复制到目标文件夹 + if wav_file_path: + base_name = os.path.basename(wav_file_path) + file_name, file_ext = os.path.splitext(base_name) + dest_file_path = os.path.join(dest_dir, base_name) + + # 检查目标文件夹中是否存在同名文件,并添加后缀以避免覆盖 + counter = 1 + while os.path.exists(dest_file_path): + new_name = f"{file_name}({counter}){file_ext}" + dest_file_path = os.path.join(dest_dir, new_name) + counter += 1 + # 复制文件 + shutil.copy2(wav_file_path, dest_file_path) + print(f"Copied WAV file to {dest_file_path}") + return dest_file_path # 返回复制的文件路径 + else: + print("No WAV files found.") + return None # 没有找到 WAV 文件时返回 None + + + + +def on_download_click(textq_value): + source_directory = r'moys/temp' # 源文件夹路径 + destination_directory = textq_value + # outputs.update_value(f"开始查找最新的WAV文件...") + + result = find_latest_wav(source_directory, destination_directory) # 调用函数 + # outputs.update_value(f"已保存到: {destination_directory}") + return f"{result}已保存到: {destination_directory}" + + +SoVITS_names, GPT_names = get_weights_names() + +with gr.Blocks(title="GPT-SoVITS WebUI") as app: + gr.Markdown( + value=i18n("本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.
如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录LICENSE.") + ) + with gr.Group(): + gr.Markdown(value=i18n("模型切换")) + with gr.Row(): + GPT_dropdown = gr.Dropdown(label=i18n("GPT模型列表"), choices=sorted(GPT_names, key=custom_sort_key), value=gpt_path, interactive=True) + SoVITS_dropdown = gr.Dropdown(label=i18n("SoVITS模型列表"), choices=sorted(SoVITS_names, key=custom_sort_key), value=sovits_path, interactive=True) + refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary") + refresh_button.click(fn=change_choices, inputs=[], outputs=[SoVITS_dropdown, GPT_dropdown]) + SoVITS_dropdown.change(change_sovits_weights, [SoVITS_dropdown], []) + GPT_dropdown.change(change_gpt_weights, [GPT_dropdown], []) + gr.Markdown(value=i18n("*请上传并填写参考信息")) + with gr.Row(): + inp_ref = gr.Audio(label=i18n("请上传3~10秒内参考音频,超过会报错!"), type="filepath") + with gr.Column(): + ref_text_free = gr.Checkbox(label=i18n("开启无参考文本模式。不填参考文本亦相当于开启。"), value=False, interactive=True, show_label=True) + gr.Markdown(i18n("使用无参考文本模式时建议使用微调的GPT,听不清参考音频说的啥(不晓得写啥)可以开,开启后无视填写的参考文本。")) + prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") + prompt_language = gr.Dropdown( + label=i18n("参考音频的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") + ) + gr.Markdown(value=i18n("*请填写需要合成的目标文本和语种模式")) + with gr.Row(): + text = gr.Textbox(label=i18n("需要合成的文本"), value="") + text_language = gr.Dropdown( + label=i18n("需要合成的语种"), choices=[i18n("中文"), i18n("英文"), i18n("日文"), i18n("中英混合"), i18n("日英混合"), i18n("多语种混合")], value=i18n("中文") + ) + how_to_cut = gr.Radio( + label=i18n("怎么切"), + choices=[i18n("不切"), i18n("凑四句一切"), i18n("凑50字一切"), i18n("按中文句号。切"), i18n("按英文句号.切"), i18n("按标点符号切"), ], + value=i18n("凑四句一切"), + interactive=True, + ) + with gr.Row(): + gr.Markdown(value=i18n("gpt采样参数(无参考文本时不要太低):")) + top_k = gr.Slider(minimum=1,maximum=100,step=1,label=i18n("top_k"),value=5,interactive=True) + top_p = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("top_p"),value=1,interactive=True) + temperature = gr.Slider(minimum=0,maximum=1,step=0.05,label=i18n("temperature"),value=1,interactive=True) + interval = gr.Slider(minimum=0,maximum=5,step=0.02,label=i18n("interval"),value=0.3,interactive=True) + inference_button = gr.Button(i18n("合成语音"), variant="primary") + output = gr.Audio(label=i18n("输出的语音")) + + with gr.Row(): + # 创建文本框和下载按钮 + download_button = gr.Button("下载语音", variant="primary") + textq = gr.Textbox(label="保存的语音路径", value="") + outputs0 = gr.Textbox(label=i18n("保存状态"), value="", interactive=False) + # 将事件处理函数绑定到按钮的点击事件 + download_button.click( + on_download_click, + inputs=[textq], # 这里确保 textq 是正确的组件引用 + outputs=[outputs0] # 这里确保 outputs 是正确的组件引用 + ) + + inference_button.click( + get_tts_wav, + [inp_ref, prompt_text, prompt_language, text, text_language, how_to_cut, top_k, top_p, temperature, interval, ref_text_free], + [output], + ) + # Add new UI elements for saving and loading configurations + with gr.Row(): + + + # 初始加载配置文件列表 + config_files = get_config_files() + # 创建一个新的列表,只包含文件名 + config_file_names = [os.path.basename(path) for path in config_files] + + # 使用文件名列表作为 Dropdown 组件的选项 + config_dropdown = gr.Dropdown( + label=i18n("加载模型配置"), + choices=config_file_names, + value=config_file_names[0] if config_file_names else None + ) + + # Output textbox for displaying save confirmation + save_output = gr.Textbox(label=i18n("保存配置状态"), value="", interactive=False) + + # 绑定刷新按钮的点击事件 + refresh_button = gr.Button(i18n("刷新配置文件列表"), variant="primary") + refresh_button.click( + fn=refresh_config_files, # 使用新创建的 refresh_config_files 函数 + inputs=[], # 刷新按钮不需要输入 + outputs=[config_dropdown] # 指定输出为 config_dropdown 组件,以更新其选项 + ) + + # 绑定保存按钮的点击事件 + save_button = gr.Button(i18n("保存模型配置"), variant="primary") + save_button.click( + fn=save_model_config, + inputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language], + outputs=[save_output] + ) + + # 绑定加载按钮的点击事件 + load_button = gr.Button(i18n("加载模型配置"), variant="primary") + load_button.click( + fn=load_model_config, # 直接使用 load_model_config 函数 + inputs=[config_dropdown], # config_dropdown 组件本身作为输入 + outputs=[GPT_dropdown, SoVITS_dropdown, inp_ref, prompt_text, prompt_language] # 期望更新的组件列表 + ) + gr.Markdown(value=i18n("文本切分工具。太长的文本合成出来效果不一定好,所以太长建议先切。合成会根据文本的换行分开合成再拼起来。")) + with gr.Row(): + text_inp = gr.Textbox(label=i18n("需要合成的切分前文本"), value="") + button1 = gr.Button(i18n("凑四句一切"), variant="primary") + button2 = gr.Button(i18n("凑50字一切"), variant="primary") + button3 = gr.Button(i18n("按中文句号。切"), variant="primary") + button4 = gr.Button(i18n("按英文句号.切"), variant="primary") + button5 = gr.Button(i18n("按标点符号切"), variant="primary") + button6 = gr.Button(i18n("推送"), variant="primary") + text_opt = gr.Textbox(label=i18n("切分后文本"), value="") + button1.click(cut1, [text_inp], [text_opt]) + button2.click(cut2, [text_inp], [text_opt]) + button3.click(cut3, [text_inp], [text_opt]) + button4.click(cut4, [text_inp], [text_opt]) + button5.click(cut5, [text_inp], [text_opt]) + button6.click(echo, [text_opt], [text]) + gr.Markdown(value=i18n("后续将支持转音素、手工修改音素、语音合成分步执行。")) + +if __name__ == '__main__': + app.queue(concurrency_count=511, max_size=1022).launch( + server_name="0.0.0.0", + inbrowser=True, + share=is_share, + server_port=infer_ttswebui, + quiet=True, + )

x8aC9|VUSRe*@MfAy574ByK*!s`%eQY$j0 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