Update server.py

This commit is contained in:
Stardust·减
2023-11-05 15:32:23 +08:00
committed by GitHub
parent b99419d94f
commit 7e41a1cb45

View File

@@ -3,7 +3,7 @@ from io import BytesIO
import torch import torch
from av import open as avopen from av import open as avopen
from typing import Dict, List from typing import Dict, List
import re_matching
import utils import utils
from infer import infer, get_net_g, latest_version from infer import infer, get_net_g, latest_version
from scipy.io import wavfile from scipy.io import wavfile
@@ -67,6 +67,35 @@ for model in models:
) )
) )
def generate_audio(
slices,
sdp_ratio,
noise_scale,
noise_scale_w,
length_scale,
speaker,
language,
):
audio_list = []
silence = np.zeros(hps.data.sampling_rate // 2, dtype=np.int16)
with torch.no_grad():
for piece in slices:
audio = infer(
piece,
sdp_ratio=sdp_ratio,
noise_scale=noise_scale,
noise_scale_w=noise_scale_w,
length_scale=length_scale,
sid=speaker,
language=language,
hps=hps,
net_g=net_g,
device=device,
)
audio16bit = gr.processing_utils.convert_to_16_bit_wav(audio)
audio_list.append(audio16bit)
audio_list.append(silence) # 将静音添加到列表中
return audio_list
@app.route("/") @app.route("/")
def main(): def main():
@@ -97,23 +126,45 @@ def main():
if speaker_id is not None: if speaker_id is not None:
if speaker_id.isdigit(): if speaker_id.isdigit():
speaker = chrsMap[model][int(speaker_id)] speaker = chrsMap[model][int(speaker_id)]
audio_list = []
with torch.no_grad(): if language == "mix":
audio = infer( bool_valid, str_valid = re_matching.validate_text(text)
text=text, if not bool_valid:
sdp_ratio=sdp_ratio, return str_valid, (
noise_scale=noise, hps.data.sampling_rate,
noise_scale_w=noisew, np.concatenate([np.zeros(hps.data.sampling_rate // 2)]),
length_scale=length, )
sid=speaker, result = re_matching.text_matching(text)
language=models[model]["language"], for one in result:
hps=hps_List[model], _speaker = one.pop()
net_g=net_g_List[model], for lang, content in one:
device=models[model]["device"], audio_list.extend(
generate_audio(
content.split("|"),
sdp_ratio,
noise_scale,
noise_scale_w,
length_scale,
_speaker,
lang,
)
)
else:
audio_list.extend(
generate_audio(
text.split("|"),
sdp_ratio,
noise_scale,
noise_scale_w,
length_scale,
speaker,
language,
)
) )
audio_concat = np.concatenate(audio_list)
with BytesIO() as wav: with BytesIO() as wav:
wavfile.write(wav, hps_List[model].data.sampling_rate, audio) wavfile.write(wav, hps_List[model].data.sampling_rate, audio_concat)
torch.cuda.empty_cache() torch.cuda.empty_cache()
if fmt == "wav": if fmt == "wav":
return Response(wav.getvalue(), mimetype="audio/wav") return Response(wav.getvalue(), mimetype="audio/wav")