FireRedTTS-2:长达三分钟的开源长对话语音生成

2025年11月28日1639 words, 9 min read
Authors

    语音合成(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 资源,跑一些测试脚本,体验一下模型还是可以的。

    give me ad meney, google

    4. 多语言与零样本克隆

    原生支持中文、英语、日语、韩语、法语、德语和俄语,且具备 Zero-Shot(零样本)语音克隆 能力。如果能提供一段简短的参考音频,模型就能克隆出说话人的音色,并支持跨语言合成(例如用中文说话人的声音讲英语)。

    技术架构解析

    都是一些技术细节,每一个项目的推进必然是站在巨人的肩膀上,融合优化多项技术,只为往前推进一小步。

    做研究的不容易, respect。

    Image
    • 双 Transformer 架构:借鉴了 MoshiSesame 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 实现,贵在简单实用。

    FireRedTTS-2 Web UI 界面展示

    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 数据集的示例代码进行微调。

    资源

    小结

    之前我做视频博主的时候,最困难的部分就是录音了,设备、降噪、自己的音色,没有一个满意的。一直以来我都是很抵触用 TTS 项目来做语音部分,因为我觉得生成的语音太生硬,没有特点。但近两年 TTS 项目进展确实很快,很多时候都能以假乱真,不管你想克隆自己的声音还是名人的声音,都能做到轻轻松松,游刃有余。等我有时间深入体验一下,看看什么时间继续回归做视频。

    技术总是在一直进步的,多体验多使用,优胜劣汰,总能找到适合自己的工具。