在CosyVoice2项目中,Web界面点击生成按钮后的语音合成流程如下:

1. 前端交互与事件绑定

在中,生成按钮通过Gradio的事件绑定机制关联到函数:

generate_button.click(generate_audio, inputs=[tts_text, mode_checkbox_group, ...], outputs=[audio_output])

用户点击按钮后,Gradio自动收集界面输入(文本、音频、模式选择等)并传递给后端处理函数。

2. 参数验证与预处理

函数执行以下步骤:

  • 模式路由:根据选择的推理模式(3s极速复刻/跨语种复刻等)调用对应方法
  • 输入验证:检查音频采样率(≥16kHz)、文本长度等参数合法性
  • 种子控制:使用生成的随机种子确保合成结果可复现
  • 音频处理:对上传/录制的prompt音频调用进行语音识别,提取文本提示

3. 模型推理调用

根据推理模式调用CosyVoice2核心接口,以零样本模式为例:

# app.py中调用
audio_chunks = cosyvoice.inference_zero_shot(tts_text, prompt_text, prompt_speech_16k, stream=stream, speed=speed)

该方法在中实现,主要流程:

  • 文本规范化:通过frontend.text_normalize处理输入文本
  • 特征准备:调用frontend.frontend_zero_shot将文本和音频prompt转换为模型输入特征
  • 模型推理:调用self.model.tts(**model_input, stream=stream)生成音频流
  • 实时反馈:通过tqdm和日志输出合成进度、RTF(实时因子)等指标

4. 音频后处理与返回

生成的原始音频通过进行优化:

  • 静音修剪:使用librosa.effects.trim去除首尾静音
  • 音量归一化:防止音频过载失真
  • 静音添加:在音频末尾添加0.2秒静音提升自然度

5. 前端渲染

处理后的音频数据通过Gradio的audio_output组件实时返回Web界面,streaming=True参数实现边生成边播放的流式体验。

核心技术链路

Web界面 → Gradio事件系统 → generate_audio参数处理 → CosyVoice2推理接口 → 模型tts方法 → 音频后处理 → Web界面渲染
整个流程通过Gradio框架简化前后端通信,实现用户交互与模型推理的无缝衔接。

更多推荐