Update server.py
This commit is contained in:
81
server.py
81
server.py
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user