FireRedAudio 上手记:一个模型搞定音频理解、生成和编辑
一个月前我在处理一段四十分钟的访谈录音,需要整理成带时间戳的文字稿,同时还要把受访者的声音克隆出来,用标准普通话重新录制其中几段被方言干扰的内容。常规做法是先跑一遍 ASR 得到文本,再用独立的 TTS 模型做克隆,中间还要手动对齐时间。来回折腾了差不多三个小时。
FireRedAudio 是小红书团队最近开源的音频语言模型,把上述流程压缩到了一个模型里。它的核心思路是:用一个 9B 参数的共享语言模型作为大脑,音频理解走 Audio Encoder 通路,音频生成走 RedAE 通路,两条通路各自优化但共享同一个推理骨干。
GitHub: https://github.com/FireRedTeam/FireRedAudio
论文: https://arxiv.org/abs/2608.24168
安装过程:uv 一把梭,但有几个前置条件
官方推荐用 uv 管理依赖,Python 版本锁定 3.10。如果你的环境不是 3.10,建议单独建一个虚拟环境再装。
uv sync --extra accel --extra accel-build --group tools
--extra accel 会拉 causal-conv1d 和 flash-attn 这两个加速库,--extra accel-build 会从源码编译它们。如果你的 CUDA 版本不是 12.8(官方 wheel 默认 cu128),需要先改 pyproject.toml 里的 PyTorch 索引 URL,比如换成 cu126 或 cu129,再执行 sync。
另外系统需要提前装好两样东西:CUDA toolkit(编译依赖)和 ffmpeg(torchaudio/torchcodec 解码音频用)。我在 Ubuntu 22.04 上缺了 ffmpeg,报错是 FileNotFoundError: ffmpeg,装完就好了:
sudo apt install ffmpeg
模型文件从 Hugging Face 拉,大约 20GB 左右:
uv run hf download FireRedTeam/FireRedAudio --local-dir pretrained_models/
如果 Hugging Face 访问慢,可以用 modelscope 替代:
uv pip install modelscope
uv run modelscope download --model FireRedTeam/FireRedAudio --local_dir pretrained_models/
核心设计:两条通路,一个大脑
FireRedAudio 最值得说的设计是「解耦连续表示」(decoupled continuous representations)。市面上多数统一音频模型把理解和生成塞进同一套 token 体系里,结果往往是两边互相妥协。FireRedAudio 的做法是两条独立的编码通路:
-
Audio Encoder:负责从音频波形中提取用于理解任务的语义特征。初始化来自 Whisper-large-v3。 -
RedAE:负责生成任务,TTS、语音编辑、声音设计都走这条通路。
两条通路输出的表示格式不同,但共享同一个 LLM 骨干做推理和条件控制。这样做的好处是理解和生成各自用最合适的表示方式,互不干扰,同时推理层又能把两者的信息融合起来。
体现在实际使用中就是:同一个模型实例可以处理 ASR、QA、TTS、语音编辑、声音设计这五种任务,切换任务只需要改变 prompt 和输入格式。
能用它做什么
语音识别(ASR)
ASR 是 FireRedAudio 支持语言最广的任务——中英文之外还能覆盖更多语种。调用方式很简单:
from inference import FireRedAudioInference
engine = FireRedAudioInference(
model_path="pretrained_models/FireRedAudio",
device="cuda:0",
)
res = engine.understand(
"assets/examples/asr_zh_fleurs.wav",
"Transcribe speech to text.",
task="asr"
)
print(res.answer)
CLI 版本:
uv run inference.py --task asr --model pretrained_models/FireRedAudio \
--audio assets/examples/asr_zh_fleurs.wav
实测 AISHELL-1 上 CER 0.71,AISHELL-2 test-ios 上 2.63。这个水平跟专业 ASR 模型相比不算惊艳,但考虑到它是一个统一模型顺带做的 ASR,完全够日常使用。
音频理解(带推理)
理解任务是 FireRedAudio 的强项。MMAU test-mini 上跑到了 82.0,MMSU 83.3,目前开源模型里排前列。
启用 CoT(chain-of-thought)可以让模型先输出推理过程再给答案,对复杂问题尤其有用:
res = engine.understand(
"audio.wav",
"What illness did Second speaker's friend suffer from?\n(A) Progressive arthritis (B) Progressive cancer (C) Acute pneumonia (D) Chronic heart disease",
task="understand",
enable_thinking=True,
max_new_tokens=10240,
)
print(res.reasoning) # 推理过程
print(res.answer) # 最终答案
CLI:
uv run inference.py --task understand --model pretrained_models/FireRedAudio \
--audio audio.wav \
--prompt "What illness did Second speaker's friend suffer from?\n(A) Progressive arthritis (B) Progressive cancer (C) Acute pneumonia (D) Chronic heart disease" \
--enable-thinking --max-new-tokens 4096
长音频理解是 FireRedAudio 的另一个重点方向。官方宣称支持一小时长度的录音,输出可以带时间戳。实际测试一段 35 分钟的多人会议录音,模型能按话题切分段落并给出每个段落的时间区间,基本接近人工整理访谈素材的水平。
零样本 TTS(声音克隆)
TTS 需要额外加载 RedAE 解码器权重:
engine = FireRedAudioInference(
model_path="pretrained_models/FireRedAudio",
vae_decoder_path="pretrained_models/RedAE_decoder/model.pt",
device="cuda:0",
)
res = engine.tts(
prompt_text="同时,他强调微调要科学有序。",
prompt_audio="assets/examples/tts_zh_prompt.wav",
target_text="安徽淮南秦师傅发现,停在小区的爱车右前驾驶窗玻璃被砸。",
language="zh",
)
torchaudio.save("tts.wav", res.audio.cpu(), sample_rate=24000)
CLI:
uv run inference.py --task tts --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--prompt-audio ref.wav --prompt-text "参考音频的转录文本" \
--target-text "要合成的目标文本" --language zh --output tts.wav
音色相似度在 Seed-TTS-Eval 上 SIM 值 0.74(中文)/ 0.68(英文),略低于 Seed-TTS 的 0.80/0.76,但词错误率更低(中文 0.83%,英文 1.56%)。实际听感上,克隆出的声音能保留原说话人的音色底色,但语调和韵律有时会偏中性——如果你需要高度还原原始情感,可能需要多试几次或调整随机种子。
注意:TTS 生成不是确定性的,因为 flow-matching 解码器会采样随机噪声。要复现结果需要固定随机种子:
from inference import set_seed
set_seed(42)
CLI 加 --seed 42。
另外 TTS 只支持中文和英文,通过 --language zh / en 选择。
语音编辑
这是 FireRedAudio 比较有特色的功能。编辑分两种类型:
语义编辑:改写、替换、插入、删除说话内容。模型会先输出 <|sot|>{修改后的文本}<|eot|> 再生成音频。
res = engine.edit(
"edit_semantic_zh_ref.wav",
"delete '比普通的茶叶要'",
edit_type="semantic"
)
print(res.text) # 修改后的文本
torchaudio.save("edit_semantic.wav", res.audio.cpu(), sample_rate=24000)
CLI:
uv run inference.py --task edit --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--audio ref.wav --instruction "delete '比普通的茶叶要'" --edit-type semantic \
--output edit_semantic.wav
声学编辑:调整音高、语速、音量。指令必须使用官方训练时用的模板(不支持自由描述):
-
音高: "shift the pitch by N step(s)",N ∈ {-6, …, -1, 1, …, 6} -
语速: "adjust the speed to X",X ∈ [0.5, 2.0],步长 0.1 -
音量: "adjust the volume to X",X ∈ [0.3, 2.0],步长 0.1
res = engine.edit(
"edit_acoustic_zh_ref.wav",
"shift the pitch by 3 steps",
edit_type="acoustic"
)
CLI:
uv run inference.py --task edit --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--audio ref.wav --instruction "shift the pitch by 3 steps" --edit-type acoustic \
--output edit_acoustic.wav
语义编辑在开源模型中比较少见。官方在 Ming-Freeform-Audio-Edit 基准上,替换任务中文准确率 87.42%,英文 75.98%,比之前的 Ming-UniAudio-Edit 高出不少。
声音设计(自然语言描述生成声音)
不需要参考音频,直接用文字描述想要的音色特征,模型合成对应的声音:
res = engine.voice_design(
instruction="以女性高音区的清亮音色,表现出青年阶段的特质,音量略强,语速适中稍快,语调带有解释意味和急切的情感流露,确保语音流畅自然。",
text="是我请他来的,可他什么也不知道,他来只是想打听一下,你们厂是不是有旧锅炉?",
)
torchaudio.save("voice_design.wav", res.audio.cpu(), sample_rate=24000)
CLI:
uv run inference.py --task voice_design --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--instruction "以女性高音区的清亮音色..." \
--text "是我请他来的..." --output voice_design.wav
这个功能适合快速生成配音或绕过版权问题的声音原型,不需要先找一段参考音频。合成结果对指令的遵循度比较高,中文 Instruct TTS 上 APS/DSD/RP 三项指标分别为 86.0/84.1/70.1。
性能表现速览
| 任务 | 测试集 | 结果 |
|---|---|---|
| 音频理解 | MMAU test-mini | 82.0 |
| 音频理解 | MMSU | 83.3 |
| ASR | AISHELL-1 | CER 0.71 |
| ASR | LibriSpeech clean | WER 0.67 |
| TTS (ZH) | Seed-TTS-Eval | CER 0.83 / SIM 0.74 |
| TTS (EN) | Seed-TTS-Eval | WER 1.56 / SIM 0.68 |
| 声音设计 (ZH) | InstructTTSEval | APS 86.0 / DSD 84.1 / RP 70.1 |
| 声音设计 (EN) | InstructTTSEval | APS 81.1 / DSD 83.6 / RP 70.3 |
数据来自官方 README,带 * 的为 FireRed 团队自己评估的结果,其余来自各 benchmark 公开榜单。
已知限制
-
生成任务(TTS、编辑、声音设计)仅支持中文和英文。ASR 是唯一支持多语言的。 -
长音频理解支持到约一小时,超过这个长度未经测试。 -
TTS 每次输出不同,需要固定 seed 才能复现。 -
声音克隆能力仅供学术研究使用,官方明确禁止用于任何非法活动。
操作速查
# 安装
uv sync --extra accel --extra accel-build --group tools
# 下载模型
uv run hf download FireRedTeam/FireRedAudio --local-dir pretrained_models/
# ASR
uv run inference.py --task asr --model pretrained_models/FireRedAudio --audio input.wav
# 音频理解(带 CoT)
uv run inference.py --task understand --model pretrained_models/FireRedAudio \
--audio input.wav --prompt "问题" --enable-thinking
# 零样本 TTS
uv run inference.py --task tts --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--prompt-audio ref.wav --prompt-text "参考文本" --target-text "目标文本" --language zh
# 语音编辑
uv run inference.py --task edit --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--audio ref.wav --instruction "删除'xxx'" --edit-type semantic
# 声音设计
uv run inference.py --task voice_design --model pretrained_models/FireRedAudio \
--vae-decoder pretrained_models/RedAE_decoder/model.pt \
--instruction "音色描述" --text "合成文本"
常见问题
FireRedAudio 需要多大显存?
9B 参数模型,FP16 推理约需 18GB 显存。实测在 A100 (40GB) 和 RTX 4090 (24GB) 上可以运行,但长音频场景下显存占用会更高。
ASR 支持哪些语言?
ASR 任务支持多语言(具体语种数量官方未完全列出),但 TTS、编辑、声音设计只支持中文和英文。
可以拿它做实时语音对话吗?
目前不支持流式推理,输入是完整音频文件,适合离线批量处理,不适合实时场景。
TTS 生成质量不稳定怎么办?
固定随机种子(set_seed(42) 或 CLI --seed 42)可以获得可复现的结果。如果某个种子效果不理想,换一个种子试试。
长音频输入需要注意什么?
官方支持到约一小时,但实际处理时长还受显存限制。一小时音频的特征序列大约对应数万帧,加上 CoT 的长文本生成,显存需求会显著增加。
语音编辑的指令必须严格按模板写吗?
语义编辑支持自由指令(如”把’苹果’换成’香蕉'”),声学编辑必须用模板(shift the pitch by N steps 等),否则模型无法正确理解。
模型开源许可证是什么?
Apache-2.0,允许商用,但声音克隆功能仅供学术研究,禁止非法使用。

