FireRedTTS-2:长达三分钟的开源长对话语音生成
语音合成(TTS)开源项目挺多,随着 AI 技术的进步,效果也越来越好。从一开始的 ChatTTS,到后来的 GPT-SoVITS,再到现在的 FireRedTTS-2,都在不断推动 TTS 技术的发展。
TTS 发展到现在,单句生成已经不是什么难题,但长对话生成依然有很多问题,比如在处理长文本时往往会出现音色漂移、韵律断裂或上下文不连贯的问题。简单的说,就是生成的对话听着不像是在”对话”,而是像在”朗读”,不够自然。
FireRedTTS-2 这个 TTS 项目在这个问题上又往前推了一小步,作为一个开源实现,它在长对话生成上表现还不错(最长支持 3 分钟对话),还引入了超低延迟的流式架构,让实时语音交互成为可能。
有什么特点
1. 长对话支持比较
FireRedTTS-2 目前支持 4 位说话人 进行长达 3 分钟 的连续对话生成,且模型能够根据上下文调整韵律,生成的对话自然了很多。
这个长度对于自媒体博主来说,做一期 10 分钟的视频,去掉中间的静音及无对白部分,只需要把稿子拆分成 3 段对话就够了。
2. 流式低延迟
这是该模型最硬核的技术突破之一。基于 12.5Hz 流式语音 Tokenizer 和 双 Transformer 架构,FireRedTTS-2 采用了文本-语音交错序列(text–speech interleaved sequence)的处理方式。
也就是说它可以做到一边生成语音一边播放,如果你不小心在路上捡到一块价格 7 万左右的 L20 GPU,又不小心用到这个开源项目上,那首包延迟(TTFT)能做到 140ms 以下,这个速度就很快了,用到语音机器人上,普通人对这个延迟是感知不出来的,体验上和真人对话差不多。
3. 消费级显卡友好
当然,也不是每个人都能有幸得到一块 L20,如果手里有张 RTX 3080 或 4070 也是可以的。在最近的更新中,FireRedTTS-2 增加了对 bf16 推理的支持,这一步优化将显存占用从原本的 14GB 降低到了 9GB。本地用 4070 跑这个模型还是绰绰有余的。
如果这些你都没有,那也没关系,Google 的 Colab 还有 Kaggle 都提供了免费的 GPU 资源,跑一些测试脚本,体验一下模型还是可以的。
4. 多语言与零样本克隆
原生支持中文、英语、日语、韩语、法语、德语和俄语,且具备 Zero-Shot(零样本)语音克隆 能力。如果能提供一段简短的参考音频,模型就能克隆出说话人的音色,并支持跨语言合成(例如用中文说话人的声音讲英语)。
技术架构解析
都是一些技术细节,每一个项目的推进必然是站在巨人的肩膀上,融合优化多项技术,只为往前推进一小步。
做研究的不容易, respect。
- 双 Transformer 架构:借鉴了 Moshi 和 Sesame CSM 的设计思路,实现了高效的流式处理。
- 文本处理:参考了 Qwen2.5-1.5B 的 Tokenizer 方案,增强了对多语言文本的理解能力。
- 声学解码:使用了基于 Xcodec2 的 Vocos 解码器,确保还原出的音频具有高保真度。
上手安装
1. 环境配置
推荐使用 Conda 进行环境隔离,Python 版本建议为 3.11。
git clone https://github.com/FireRedTeam/FireRedTTS2.git
cd FireRedTTS2
# 创建环境
conda create --name fireredtts2 python==3.11
conda activate fireredtts2
# 安装 PyTorch (根据你的 CUDA 版本调整)
pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu126
# 安装依赖
pip install -e .
pip install -r requirements.txt
2. 下载模型权重
模型托管在 Hugging Face 上,需要使用 Git LFS 下载。
git lfs install
git clone https://huggingface.co/FireRedTeam/FireRedTTS2 pretrained_models/FireRedTTS2
3. 启动 Web UI
对于大多数用户,直接使用 Web 界面是最方便的。Web 界面有直观的面板,支持语音克隆和随机音色生成。
python gradio_demo.py --pretrained-dir "./pretrained_models/FireRedTTS2"
面板界面如下图所求,基于 Gradio 实现,贵在简单实用。
4. 进阶:流式对话生成代码示例
如果你是开发者,想要将 FireRedTTS-2 集成到自己的应用中,可以使用它的流式 API:
import torch
import torchaudio
from fireredtts2.fireredtts2 import FireRedTTS2_Stream
device = "cuda"
# 初始化流式模型
fireredtts2 = FireRedTTS2_Stream(
pretrained_dir="./pretrained_models/FireRedTTS2",
gen_type="dialogue", # 设置为对话模式
device=device,
)
# 准备对话文本 (S1 和 S2 代表不同的说话人)
text_list = [
"[S1]你好,最近在研究什么新技术吗?",
"[S2]我在看 FireRedTTS-2,据说它的流式生成延迟很低。",
"[S1]是的,而且它还支持零样本克隆,非常适合做播客。"
]
# 准备参考音频 (用于克隆音色)
prompt_wav_list = ["path/to/speaker1.flac", "path/to/speaker2.flac"]
prompt_text_list = ["[S1]参考音频对应的文本内容...", "[S2]参考音频对应的文本内容..."]
all_audio = []
# 生成器模式调用
audio_generator = fireredtts2.generate_dialogue(
text_list=text_list,
prompt_wav_list=prompt_wav_list,
prompt_text_list=prompt_text_list,
temperature=0.9,
topk=30,
)
# 实时处理音频块
print("开始流式生成...")
for audio_chunk in audio_generator:
# 在实际应用中,这里可以将 audio_chunk 直接推送到播放器或网络流
all_audio.append(audio_chunk)
# 合并保存为文件 (仅作演示)
full_audio = torch.cat(all_audio, dim=1)
torchaudio.save("stream_dialogue.wav", full_audio, 24000)
进阶玩法:模型微调
官方很贴心的发布了详细的 微调教程,有兴趣的一定要观摩一下。
如果你有特定的说话人数据,或者想要优化特定语言的表现,还可以基于 LJSpeech 数据集的示例代码进行微调。
资源
- 项目地址:https://github.com/FireRedTeam/FireRedTTS2
- 微调教程:https://github.com/FireRedTeam/FireRedTTS2/blob/main/bin/finetune_example/tutorial.md
小结
之前我做视频博主的时候,最困难的部分就是录音了,设备、降噪、自己的音色,没有一个满意的。一直以来我都是很抵触用 TTS 项目来做语音部分,因为我觉得生成的语音太生硬,没有特点。但近两年 TTS 项目进展确实很快,很多时候都能以假乱真,不管你想克隆自己的声音还是名人的声音,都能做到轻轻松松,游刃有余。等我有时间深入体验一下,看看什么时间继续回归做视频。
技术总是在一直进步的,多体验多使用,优胜劣汰,总能找到适合自己的工具。


