76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
"""
|
|
1.0.1 版本兼容
|
|
https://github.com/fishaudio/Bert-VITS2/releases/tag/1.0.1
|
|
"""
|
|
import torch
|
|
import commons
|
|
from .text.cleaner import clean_text
|
|
from .text import cleaned_text_to_sequence
|
|
from oldVersion.V111.text import get_bert
|
|
|
|
|
|
def get_text(text, language_str, hps, device):
|
|
norm_text, phone, tone, word2ph = clean_text(text, language_str)
|
|
phone, tone, language = cleaned_text_to_sequence(phone, tone, language_str)
|
|
|
|
if hps.data.add_blank:
|
|
phone = commons.intersperse(phone, 0)
|
|
tone = commons.intersperse(tone, 0)
|
|
language = commons.intersperse(language, 0)
|
|
for i in range(len(word2ph)):
|
|
word2ph[i] = word2ph[i] * 2
|
|
word2ph[0] += 1
|
|
bert = get_bert(norm_text, word2ph, language_str, device)
|
|
del word2ph
|
|
|
|
assert bert.shape[-1] == len(phone)
|
|
|
|
phone = torch.LongTensor(phone)
|
|
tone = torch.LongTensor(tone)
|
|
language = torch.LongTensor(language)
|
|
|
|
return bert, phone, tone, language
|
|
|
|
|
|
def infer(
|
|
text,
|
|
sdp_ratio,
|
|
noise_scale,
|
|
noise_scale_w,
|
|
length_scale,
|
|
sid,
|
|
hps,
|
|
net_g,
|
|
device,
|
|
):
|
|
bert, phones, tones, lang_ids = get_text(text, "ZH", hps, device)
|
|
with torch.no_grad():
|
|
x_tst = phones.to(device).unsqueeze(0)
|
|
tones = tones.to(device).unsqueeze(0)
|
|
lang_ids = lang_ids.to(device).unsqueeze(0)
|
|
bert = bert.to(device).unsqueeze(0)
|
|
x_tst_lengths = torch.LongTensor([phones.size(0)]).to(device)
|
|
del phones
|
|
speakers = torch.LongTensor([hps.data.spk2id[sid]]).to(device)
|
|
audio = (
|
|
net_g.infer(
|
|
x_tst,
|
|
x_tst_lengths,
|
|
speakers,
|
|
tones,
|
|
lang_ids,
|
|
bert,
|
|
sdp_ratio=sdp_ratio,
|
|
noise_scale=noise_scale,
|
|
noise_scale_w=noise_scale_w,
|
|
length_scale=length_scale,
|
|
)[0][0, 0]
|
|
.data.cpu()
|
|
.float()
|
|
.numpy()
|
|
)
|
|
del x_tst, tones, lang_ids, bert, x_tst_lengths, speakers
|
|
if torch.cuda.is_available():
|
|
torch.cuda.empty_cache()
|
|
return audio
|