没有分词器也能说话?OpenBMB 开源 VoxCPM,无 tokenizer 的多语种 TTS 做到 48kHz 录音棚级

开头:你的 TTS 为什么不「像人」?

你有没有过这种体验:把一段中文丢进主流 TTS 服务,出来的声音字正腔圆,但总缺那么一口气 —— 读到「他轻轻地叹了口气」时,机器没有叹气;读到「这事儿,真让人头疼」时,机器也没有那种「啧」的无奈。一句话,技术上「对」,情感上「空」。

这背后有个长期被忽视的工程问题:传统 TTS 几乎都要先做「分词(tokenization)」—— 把连续的语音波形切成离散的语音 token,然后让语言模型去预测这些 token,再用声码器(vocoder)把 token 还原成波形。这个过程叫「离散化」。它方便模型训练,但代价是:语音里最细腻的那些东西 —— 气息、颤抖、笑场、犹豫 —— 被一刀刀切碎了

所以当 OpenBMB(面壁智能)前几天在 GitHub 放出 VoxCPM 的 2.0 大版本(VoxCPM2),并且当天就冲上了 GitHub Trending Python 榜时,整个语音社区都愣了一下 —— 它直接把分词器干掉了

项目背景:解决「分词丢掉情感」的问题

VoxCPM(GitHub stars 29.8k+,今日新增 400+)是面壁智能在 MiniCPM-4 系列上推出的 tokenizer-free(无分词器)TTS 系统。它用一个端到端的 扩散 - 自回归混合架构,直接在连续的语音潜在空间(latent space)里生成声音,跳过离散化这一步。

VoxCPM2 是最新主版本:

  • 2B 参数主干,训练数据 超 200 万小时多语种语音
  • 支持 30 种语言 + 9 种中文方言(粤语、四川话、东北话、吴语、河南话、陕西话、山东话、天津话、闽南话)
  • 输出 48kHz 录音棚级音频
  • Apache-2.0 协议,可商用

和上一代(VoxCPM-0.5B、VoxCPM1.5)相比,2.0 的核心升级是 Voice Design(声音设计)Controllable Cloning(可控克隆)—— 前者用自然语言描述就能造一个全新的声音,后者能在克隆音色基础上精细调控情感、语速、风格。

技术报告:arXiv:2606.06928。模型权重已在 HuggingFace 和 ModelScope 开源。

核心功能亮点

1. 无分词器架构,语音不再被「切片」

传统 TTS 的 pipeline:文本 → 音素 → 离散语音 token → 声码器 → 波形。离散化这步最伤音质 —— 为了把波形压成有限词表,模型必须丢弃很多高频细节。

VoxCPM 的做法:直接在一个 AudioVAE V2 的连续潜在空间里做扩散 + 自回归,整套流程是 LocEnc → TSLM → RALM → LocDiT 四阶段,全程不切词。结果是:保留气息、颤音、口头禅这些「人味儿」细节

2. 30 种语言 + 9 种中文方言,自动识别无需打标签

text="Bonjour, comment ça va?" 直接喂进去就行,模型自动判断语种,不用预先指定 lang="fr"

中文方言支持尤其贴心 ——text="今朝天气老好额,侬讲对伐?"(吴语)也能用。给做有声书、播客、本地化配音的团队省了一大笔方言数据采集的钱。

3. Voice Design:用文字「造」一个新声音

不需要参考音频,直接在文本里加一段自然语言描述:

1
text = "(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!"

年龄、性别、情绪、语速 —— 文字描述什么声音就给什么声音。这对游戏 NPC、AI 客服、有声书角色这种「需要 100 个不同声音但又不想录 100 个人的」场景是杀手级功能。

4. Controllable Cloning:可调控的音色克隆

这是 VoxCPM2 才有的能力。给定一段参考音频(几秒就够),模型克隆出音色,但允许你叠加一层风格控制

1
text = "(slightly faster, cheerful tone)This is a cloned voice with style control."

意思是:声音是「我」的,但情绪可以是「明天的我」的。可控性拉满,避免克隆出「冷冰冰的本人」。

5. Ultimate Cloning:极致相似度

需要更保真?同时传参考音频 + 参考音频的字幕,模型做音频续接式克隆,能保留每一个语气词、每一次停顿。配合 reference_wav_path 同传还能进一步提分。

6. 实时流式 + 高吞吐服务

  • 标准 PyTorch 推理:RTF ~0.30(4090)
  • Nano-vLLM-VoxCPM:RTF ~0.13,支持并发 + FastAPI
  • vLLM-Omni:多租户 + PagedAttention + OpenAI 兼容的 /v1/audio/speech 接口

也就是说,直接拿现成 vLLM 部署栈就能上线,不用自己写推理服务。

实战示例:5 分钟跑起来

安装

1
pip install voxcpm

要求:Python ≥ 3.10(<3.13)、PyTorch ≥ 2.5、CUDA ≥ 12.0。Apple Silicon Mac 会自动用 MPS(--device auto)。

基础 TTS

1
2
3
4
5
6
7
8
9
10
11
from voxcpm import VoxCPM
import soundfile as sf

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

wav = model.generate(
text="VoxCPM2 是当前推荐的多语种语音合成版本。",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("demo.wav", wav, model.tts_model.sample_rate)

输出默认就是 48kHz。

用声音设计造一个「年轻女声」

1
2
3
4
5
6
wav = model.generate(
text="(A young woman, gentle and sweet voice)您好,欢迎收听本期节目。",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("npc_greeting.wav", wav, model.tts_model.sample_rate)

括号里的描述词可以是:年龄、性别、情绪、语速、口音、特殊效果(whispering、excited、calm)…… 全靠 prompt 工程。

给克隆的音色加情绪

1
2
3
4
5
6
7
wav = model.generate(
text="(slightly faster, cheerful tone)哥,今儿天气真不错,出来走走吧!",
reference_wav_path="path/to/my_voice.wav",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("cloned_happy.wav", wav, model.tts_model.sample_rate)

流式输出(适合实时对话)

1
2
3
4
5
6
7
import numpy as np

chunks = []
for chunk in model.generate_streaming(text="流式语音合成,就是这么简单。"):
chunks.append(chunk)
wav = np.concatenate(chunks)
sf.write("streaming.wav", wav, model.tts_model.sample_rate)

CLI 一行启动

1
voxcpm --text "今天天气真好" --output out.wav --device cuda

Apple Silicon Mac 用户把 --device cuda 改成 --device mps 就行。

适用场景和限制

适合用 VoxCPM 的场景

  • 有声书 / 播客:30 语种 + 9 种中文方言,本地化成本极低
  • 游戏 NPC / 互动剧情:Voice Design 一天造 50 个不重样的声音
  • AI 数字人 / 智能客服:可控克隆 + 流式输出,实时对话自然
  • 短视频 / 营销内容批量生产:一个主播音色 + 多种情绪,1 个工作流搞定
  • 企业内训 / 教学课件:克隆讲师音色,多语种版本同步输出

当前限制

  • 显存门槛:2B 版本要~8GB 显存,老黄卡或没独显的笔记本要量力而行
  • 极端情感还在追赶:悲伤到颤抖、愤怒到哽咽这种「情绪爆点」仍然不如真人播音员
  • 多说话人 / 长对话还没原生支持,需要切片处理
  • 某些小语种质量差异较大:训练数据 200 万小时是平均值,部分小语种可能只有几小时数据

和同类项目的差异

项目 核心特点 局限
VoxCPM2 无分词器、30 语种、Voice Design、Apache-2.0 显存需求中等、社区较新
CosyVoice 2 阿里达摩院、流式优秀 商用授权有限制
ChatTTS 轻量、对中文友好 多语种支持弱、情感控制粗糙
GPT-SoVITS 少样本克隆强、开源 音质天花板不高、需要微调
ElevenLabs 商业 SOTA、API 友好 闭源、贵、隐私风险

简单说:VoxCPM 想做的事,是「开源 + 可商用 + 接近商业 SOTA」这个交集。在 2026 年这个时间点,它确实摸到了。

总结

VoxCPM 给我的最大启发是:「分词」这个在 LLM 里看起来天经地义的步骤,在 TTS 领域可能是错的。LLM 处理文字时,token 是语言的基本单元;但语音的本质是连续波形,强行离散化就是「用象素画油画」。

OpenBMB 这套无分词器方案的意义不止 TTS 本身 —— 它给所有「连续信号 + 大模型」的交叉领域(语音、音频、音乐、视频)提供了一个范式参考:与其把连续的东西变离散,不如让模型直接学连续

如果你正在做需要 30 语种 + 自然情感的语音产品,VoxCPM2 值得花一个下午跑跑 demo;如果你还在用商业 TTS API,可以拿它做个降本对比测试 ——Apache-2.0 + 本地部署 + 8GB 显存,这个组合在 2026 年的 TTS 开源生态里,已经是头部水准。

仓库地址https://github.com/OpenBMB/VoxCPM
HuggingFace 体验https://huggingface.co/spaces/OpenBMB/VoxCPM-Demo


戴老板,这是 2026-06-17 上午 10:00 的 GitHub Trending 选题。VoxCPM2 在当日 Python 趋势榜热度高、协议友好、技术差异化明显,写起来内容也扎实。如果觉得方向 OK 就这样发,要换主题告诉我,我明天再换。