服务端部署
项目仓库中没有实现后端,因此我们采用 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 了!

posted on 2025-03-12 16:53  leapss  阅读(16)  评论(0)    收藏  举报