TTS 把离散 token 扔了?3.9 万 Star 的 VoxCPM2:一句话捏出一个声音,30 种语言直接说

TTS 把离散 token 扔了?3.9 万 Star 的 VoxCPM2:一句话捏出一个声音,30 种语言直接说

语音合成圈又来了个”掀桌子”的:VoxCPM2(OpenBMB 出品),干脆把主流 TTS 的”离散 token 化”环节整个砍掉了——不量化、不查码本,用扩散自回归架构直接在连续音频隐空间里生成语音。仓库 38.7k Star、4.4k Fork,Apache-2.0 协议,权重代码全开,商用免费。

VoxCPM2 整体架构:四阶段管线 LocEnc → TSLM → RALM → LocDiT(图:官方仓库)
VoxCPM2 整体架构:四阶段管线 LocEnc → TSLM → RALM → LocDiT(图:官方仓库)

它能干什么,一句话版本:

  • 30 种语言直接合成,不用打语言标签,还支持 9 种中文方言(四川话、粤语、吴语、东北话、河南话、陕西话、山东话、天津话、闽南话)
  • 声音设计:不给任何参考音频,一句自然语言描述(性别、年龄、音色、情绪、语速)就能捏出一个全新声音
  • 可控克隆:短参考音频克隆音色,还能加指令调情绪、调语速、调风格
  • 终极克隆:参考音频 + 对应文本一起给,连节奏、情绪、说话习惯都复刻,还能无缝续写
  • 48kHz 录音棚音质输出,内置超分辨率,不用外挂上采样器
  • 4090 上 RTF 低至 ~0.3,接上 Nano-vLLM 或 vLLM-Omni 后到 ~0.13,实时流式无压力

无 tokenizer 是什么意思?

传统 TTS 管线里,文本和音频都要先离散化成 token,再用语言模型去”预测下一个 token”。量化这一步本身就是有损压缩,细节、情感、语气的损失大半从这来。

VoxCPM2 的做法:整个模型跑在 AudioVAE V2 的连续隐空间里。文本侧由 MiniCPM-4 骨干驱动(2B 参数、200 万小时多语言语音数据训练),音频侧用扩散方式逐步”雕”出连续表示——没有码本,没有量化误差,表现力自然上来了。技术报告在 arXiv:2606.06928。

在公开评测上,Seed-TTS-eval 英文 WER 1.84 / 相似度 75.3,中文 CER 0.97 / 相似度 79.5,多语言测试里英语相似度 85.4、粤语 83.5,多语种 WER 与 FishAudio S2、Minimax 等闭源商用服务打得有来有回。

5 分钟上手

安装就一行(Python ≥3.10,PyTorch ≥2.5):

pip install voxcpm

文字直接合成:

from voxcpm import VoxCPM
import soundfile as sf

model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)

wav = model.generate(
    text="VoxCPM2 is the current recommended release for realistic speech.",
    cfg_value=2.0,
    inference_timesteps=10,
    seed=42,
)
sf.write("demo.wav", wav, model.tts_model.sample_rate)

声音设计——重点来了,把描述放进 text 开头的括号里,一个参考音频都不用传:

wav = model.generate(
    text="(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!",
    cfg_value=2.0, inference_timesteps=10, seed=42,
)

可控克隆——给一段参考音频克隆音色,再叠控制指令:

wav = model.generate(
    text="(slightly faster, cheerful tone)This is a cloned voice with style control.",
    reference_wav_path="path/to/voice.wav",
)

流式输出也有现成 API,model.generate_streaming(text=...) 逐 chunk 出音频。

CLI 同样齐全:voxcpm design(造声)、voxcpm clone(克隆)、voxcpm batch(批量),还支持 --timestamps 导出词级/字级时间戳(stable-ts),做字幕对齐够用了。

部署:从 MacBook 到生产集群都有路

场景 方案 性能
本地体验 python app.py WebUI,Apple Silicon 自动走 MPS —
生产高吞吐 Nano-vLLM-VoxCPM RTF ~0.13(4090)
生产多租户 vLLM-Omni,OpenAI 兼容 /v1/audio/speech PagedAttention + 连续批处理
端侧无 Python llama.cpp-omni,GGUF 量化 RTF ~1.76(M4 Pro / Metal)

端侧方案值得单说:下载 GGUF 权重(BaseLM + Acoustic 两个文件,Q8_0 体积减半质量几乎无损),CMake 编译出 voxcpm2-cli,Mac/Linux/Windows 的 CPU、Metal、CUDA、Vulkan 都能跑。一个 2B 的 48kHz TTS 模型能在笔记本上离线跑通,放在一年前是不敢想的。

vLLM-Omni 的接入方式对后端同学最友好,装好后一行命令起服务,任何 OpenAI SDK 改个 base_url 就能调:

vllm serve openbmb/VoxCPM2 --omni --port 8000

curl http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model":"openbmb/VoxCPM2","input":"Hello from VoxCPM2!","voice":"default"}' \
  --output out.wav

版本怎么选

  • VoxCPM2(2B,最新):30 语言、声音设计、可控克隆、48kHz——要能力就选它,显存 ~8GB
  • VoxCPM1.5(0.6B):中英双语、续写式克隆,更轻(~6GB 显存),RTF 更低
  • VoxCPM-0.5B:最轻量(~5GB),16kHz,适合资源受限场景

三个版本全部支持 SFT / LoRA 微调,lora_ft_webui.py 提供了微调 WebUI。

诚实提示

声音克隆是把双刃剑。项目在 README 里明确列了 Risks and Limitations:克隆他人声音需获授权,生成内容的 misuse 风险由使用者自行承担。做产品接入时,声纹级别的授权核验和内容水印建议一步到位。

另外硬性门槛:当前 Python API 需要 CUDA 环境(Windows 也仅支持 Linux WSL);Mac 用户想在本机玩,走 WebUI 的 MPS 路径或 llama.cpp-omni 端侧方案更省事。


仓库:github.com/OpenBMB/VoxCPM | 在线体验:HuggingFace Space | 音频样例:官方 Demo 页 | 文档:readthedocs

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注