服务端部署
项目仓库中没有实现后端,因此我们采用 fastapi 完成后端部署。
首先,新建一个配置文件,把后端支持的音色,都放进来:
[voices.zh]
ref_audio = "tests/ref_audio/test_zh_1_ref_short.wav"
ref_text = "对,这就是我,万人敬仰的太乙真人。"
[voices.zh-CN-XiaoxiaoNeural]
ref_audio = "tests/ref_audio/zh-CN-XiaoxiaoNeural.wav"
ref_text = "曾经有一份真诚的爱情放在我面前,我没有珍惜。"
[voices.zh-CN-XiaoyiNeural]
ref_audio = "tests/ref_audio/zh-CN-XiaoyiNeural.wav"
ref_text = "曾经有一份真诚的爱情放在我面前,我没有珍惜。"
[voices.zh-CN-YunjianNeural]
ref_audio = "tests/ref_audio/zh-CN-YunjianNeural.wav"
ref_text = "曾经有一份真诚的爱情放在我面前,我没有珍惜。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
此外,还应该支持客户端上传待克隆的音频文件,因此数据模型定义如下:
class TTSRequest(BaseModel):
voice_name: str = '' # 目标语音名称
ref_audio: str = '' # 参考语音 base64编码的音频文件
ref_text: str = '' # 参考语音的文本
ref_tag: str = '' # 参考语音的标签
gen_text: str = '' # 待合成的文本
1
2
3
4
5
6
如果客户端指定了 voice_name 则采用配置文件中的音色进行克隆,如果客户端上传了ref_audio,则参考ref_audio进行克隆。
实现逻辑如下,供大家参考:
@app.post("/f5tts")
async def f5tts(request: TTSRequest):
if request.voice_name:
ref_voice = target_voices[request.voice_name]
ref_audio, ref_text = ref_voice['ref_audio'], ref_voice['ref_text']
else:
ref_audio, ref_text = request.ref_audio, request.ref_text
if not ref_audio:
return {"msg": "Please provide voice name or reference audio"}
ref_audio = save_audio(ref_audio, request.ref_tag)
if not ref_text:
ref_text = asr_sensevoice(ref_audio)
final_wave = infer_batch(ref_audio, ref_text, gen_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
最后,调用 F5-TTS 模型将生成的音频文件返回,就 OK 了!
浙公网安备 33010602011771号