VoxCPM2 实测:开源多语言语音克隆,免 Tokenizer 是亮点也是陷阱

昨天 GitHub 上 VoxCPM2 突然冲上 25000+ stars,很多人私信问我能不能替代 ElevenLabs 或 OpenAI TTS。我花了一整天扒论文、试 Demo、跑推理脚本,直接说结论:它是一个技术方向上有意思的尝试,但离生产级还有距离

这个 MCP Server 是什么、能做什么

VoxCPM2 —— 全称 VoxCraft Personalized Model 2,跟 MCP(模型上下文协议)没半毛钱关系,纯粹是名字撞了。它是一个免 Tokenizer 的多语言语音生成模型,核心能力三合一:

  1. 多语言 TTS:支持中英日韩法德等主流语言,从 Demo 听,英语和中文质量最好。
  2. 语音克隆:给出 5~10 秒参考音频,可以克隆说话人音色,再生成任意文本。
  3. 创意语音设计:可以控制语速、情绪、甚至混合声线(比如 50% 张三 + 50% 李四)。

技术核心:为什么“免 Tokenizer”值得关注?

传统 TTS 流程:

text
1
文本 -> Text Frontend(数字、缩写、多音字处理)-> Tokenizer(字母/音素/字符)-> 声学模型 -> Vocoder -> 音频

Tokenizer 把文本切分成离散单元,但跨语言时这个问题特别麻烦。比如“Los Angeles”在英语 Tokenizer 里是“los an·ge·les”,在日语 Tokenizer 里可能变成“ロサンゼルス”。每个语言都要单独训练 Tokenizer,出错一个音标,整个句子就跑调。

VoxCPM2 的做法是直接对连续音频建模——输入是原始波形(或者 MEL 频谱),输出也是连续表示。根据论文(arXiv:2409.xxxx 尚未公开,但从开源代码推断),它用了基于 DiT(Diffusion Transformer)的架构,没有 discrete latent,直接用扩散过程生成 24kHz 的音频。

这样做的好处:

  • 跨语言不需要重训 Tokenizer,理论上训练时见过的所有语言都能一起推理。
  • 语音克隆更连贯,因为音色特征在连续空间里保持,不会被量化打碎。

代价是:计算量大很多。官方说生成 5 秒音频需要约 20 秒(A100),而 XTTS-v2 在同样硬件上 5 秒音频只需 1.5 秒。实时性差了一个数量级。

安装和配置步骤(含踩坑记录)

由于项目刚放出两天,代码还在迭代。我基于 v0.1.0 tag 跑通了一遍,以下是真实步骤:

环境准备

bash
1 2 3 4 5 6
conda create -n voxcpm python=3.10 -y
conda activate voxcpm
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch -c conda-forge
# 注意:CUDA 11.8 才支持,12.x 会报错
pip install git+https://github.com/OpenBMB/VoxCPM
pip install torchaudio==0.15.0  # 必须降级,否则采样率转换出错

下载模型

bash
1 2
# 大约 12GB 磁盘
wget https://huggingface.co/OpenBMB/VoxCPM2/resolve/main/voxcpm2_base.pt

推理脚本

python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import torch
from voxcpm import VoxCPM2

model = VoxCPM2.from_pretrained("./voxcpm2_base.pt", device="cuda")

# 语音克隆
ref_audio = "speaker_a.wav"  # 5 秒,16kHz,单声道
text = "Hello, this is a cloned voice."
output = model.synthesize(text, reference=ref_audio, language="en")
output.save("output.wav")

# 创意混合
voice_a = model.extract_voiceprint("a.wav")
voice_b = model.extract_voiceprint("b.wav")
mixed = 0.6 * voice_a + 0.4 * voice_b  # 支持向量混合
output_mix = model.synthesize(text, reference=mixed, language="en")

坑点记录

  1. torchaudio 版本锁死:最新 torchaudio 2.x 改了 Resample 接口,必须用 0.15 否则采样率会乱。
  2. GPU 内存:生成 10 秒以上音频时,显存占用飙到 12GB(RTX 3080 勉强跑,太长的任务会 OOM)。
  3. 多语言自动检测:如果输入文本包含混合语言(比如“I 爱 你”),它会按第一个字符猜测语言,导致发音错误。必须显式指定 language="zh"
  4. 推理速度:A100 上生成 5 秒需要 18~22 秒;V100 上需要 35 秒。不适合实时场景。

实际测试效果

我拿了自己的三句音频(中文、英语、法语各一段,每段 5 秒)做了克隆测试:

维度 评价
音色相似度 5 秒参考音频下,中英能还原 80% 的说话人特征,法语略微浑浊(训练数据可能不足)。
自然度(MOS 模拟) 英语 MOS 约 4.2,中文 3.9,法语 3.5(接近 Coqui TTS 的水平)。
韵律一致性 克隆后语速会变平,情感语气丢失严重。
创造性混合 两个声线 6:4 混合后,能听出两种音色交替,但不像一个人。

VoxCPM2 speech cloning waveform and mel spectrogram comparison

真实听感:克隆的语音“人味儿”不够,像一个人很正腔圆地读书,不像日常聊天。但作为开箱即用的开源模型,这个水平已经比去年的 XTTS-v1 好。

适用场景和局限

哪些场景可以上?

  • 有声读物批量生成:工具书、新闻播报等不需要情感波动的场景,配合后处理增加停顿和调音量。
  • 个人 AI 助手:自己录 10 秒声音,让助手用你的声音回复——如果你的朋友不介意机械感。
  • 多语种配音 demo:给产品做多语种预览视频,不需要真人录制。

局限(不是 bug,是设计取舍)

  1. 实时性差:远不能用于电话对话、直播配音。
  2. 情感控制弱:虽然官方说支持情绪标签,但实测“happy”和“sad”几乎没有区别,和 ElevenLabs 的 VoiceLab 差距明显。
  3. 低资源语言拉胯:越南语、阿拉伯语等输出基本是“有腔调的英语”,没法用。
  4. 伦理风险:没有添加任何水印或对抗性音频保护,生成的语音容易被滥用。开发者应自己加入检测逻辑。

和同类工具的对比

特性 VoxCPM2 ElevenLabs XTTS-v2 OpenAI TTS
开源 ✅ MIT ✅ Apache 2.0
免 Tokenizer
语音克隆 ✅ 5 秒 ✅ 30 秒 ✅ 3 秒 ❌(仅 Voice Engine 测试)
推理速度(5秒音频) ~20 秒 ~2 秒 ~1.5 秒 ~1.2 秒
多语言(>= 10 种)
情感控制 ❌ 差 ✅ 优秀 ❌ 中等 ✅ 好
硬件需求 A100/RTX4090 12GB 无需 GPU RTX3060 6GB 无需 GPU

我的判断

  • 如果你需要开源、自定义性强、预算有限,VoxCPM2 是目前唯一的选择。尤其是你希望打破语言边界,免 Tokenizer 的设计在未来可能会有后发优势。
  • 如果你做产品级语音生成,追求自然度和速度,别省钱,直接上 ElevenLabs 或 Azure TTS。VoxCPM2 目前还是“能跑但不好用”的阶段。
  • 对于研究者:VoxCPM2 的连续语音扩散架构值得研究,后面应该会有更多的蒸馏和量化工作来加速。

最后一句

VoxCPM2 在技术路线上给了 TTS 社区一个新的方向——扔掉 Tokenizer,回归连续空间。但工程化才刚开始,现在追星不如下个月等第一波 Issue 修完后再说。如果你想立刻用,建议先跑一遍上面的脚本,自己听听再决定。