做TTS的开发者大概都有过这种体验:合成出来的语音,文本一个字没错,但听起来就是差点什么。换气节奏不对,句尾该上扬的地方是平的,情绪转折处像是机器人在念稿。
问题可能不在模型大小,不在训练数据量,而在一个被大多数TTS方案默认接受的前置步骤:把音频剁成离散token。
VoxCPM 是目前开源TTS里第一个把Tokenizer彻底扔掉、并在连续潜空间里跑扩散自回归的方案。不是“改进Tokenizer”,不是“用更好的codebook”,是直接把这一刀给去掉了。

https://github.com/OpenBMB/VoxCPM/
一、扔掉Tokenizer:TTS“没魂”的根源被切掉了
先说一个可能让人意外的事实:对于大多数标准朗读场景,传统TTS的离散token方案已经做得足够好,普通人确实很难一耳朵听出问题。
但“听不出问题”不等于“没有损失”。
传统TTS的流程是:音频 → 神经音频编解码器 → 离散token序列 → 语言模型预测token → 声码器还原波形。中间那个“离散化”步骤,本质上是有损压缩。一个连续音频信号被编码器压缩成每秒几十个token,每个token只能从有限的码本里选一个值。韵律的细微波动 —— 一句话结尾语气微微上扬的幅度,某个词上多停了50毫秒,换气时气流摩擦声的质感 —— 这些东西在离散化过程中被“四舍五入”掉了。
在标准朗读、情绪平稳的短句里,这些细节的缺失并不影响语义理解,听感上最多觉得“有点平”或“有点机械”。但当语音需要承载丰富的情感、复杂的韵律和强烈的风格时,离散化丢弃的那些细节,恰恰是“灵魂”所在:
-
有声书中的情绪转折:从平静叙述到激动质问,如果丢失了语气渐变过程中的细微声学线索,转换就会显得突兀生硬。
-
角色配音中的复杂表演:哭腔、笑意或疲惫感的台词,高度依赖连续声学信号,离散化可能将其“压平”成标准化的情绪标签。
-
长文本的连贯表达:离散token的误差会在长序列生成中累积,可能导致后半段音质下降、韵律漂移。
-
声音克隆的“传神” :离散方案能克隆音色,但很难复刻参考音频中独特的、连续变化的说话节奏和韵律习惯。
VoxCPM的解法是:不压缩了,直接建模连续表示。
VoxCPM2 采用连续音频表征、扩散自回归范式,模型在 AudioVAE 的连续隐空间中通过四阶段处理:LocEnc → TSLM → RALM → LocDiT,实现丰富的表现力语音合成和 48kHz 原生音频输出。

在VoxCPM 1.0、1.5与2上,系列共用同一条高层生成路径:文本 → 四阶段生成流水线 → AudioVAE解码器 → 波形。
生成主干分为四个阶段:
- Local Encoder:将输入音频分块编码为紧凑的局部表示,缩短语言模型需要处理的有效序列长度
- Text-Semantic LM:基于MiniCPM-4的因果语言模型,联合处理文本token与音频嵌入,负责“说什么”——规划韵律、节奏与重音
- Residual Acoustic LM:融合语义层与声学层信息,建模细粒度声学细节;在文本语义规划与最终音频生成之间起到衔接作用。
- Local DiT (CFM):以 LM 输出为条件的条件流匹配(CFM)扩散 Transformer,生成连续音频潜变量;在每个自回归步输出高保真语音 patch。
关键设计在 FSQ(有限标量量化)层,它位于 Text-Semantic LM 和 Residual Acoustic LM 之间。系统以MiniCPM-4为骨干,结合分层语言建模与FSQ约束的连续潜变量,将高层语义规划与低层声学渲染分离开来。FSQ的作用不是把表示“量化成离散token”,而是用FSQ对连续隐状态施加正则化约束——它作为可微瓶颈,将TSLM输出的连续隐向量投影到结构化格点空间,生成半离散表征,同时通过直通估计器保持端到端可微性。量化不是预测目标,而是约束隐状态空间的手段。
翻译成体感:语义部分该稳的稳,声学部分该活的活。
落到实际听感上,VoxCPM合成的语音在换气节奏、句尾拖音、情感转折这些“非文本”维度上,明显比离散方案自然。“AI味”更淡,“人味”更浓。
二、音色设计:不需要任何参考音频,用一句话“造”出一个声音
这是VoxCPM2最让人眼前一亮的能力。
你不需要任何参考音频,不需要去找配音演员,只需要用自然语言描述你想要的音色,模型就能凭空创造出一个全新的声音。
支持描述的维度包括性别、年龄、音调、语速、情绪基调、音色质感等。写法很简单——把控制指令写在目标文本前面的括号里,中英文都可以:
from voxcpm import VoxCPM
import soundfile as sf
model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)
# 用自然语言描述凭空创建音色
wav = model.generate(
text="(A young woman, gentle and sweet voice)你好,欢迎来到VoxCPM的世界。",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("voice_design.wav", wav, model.tts_model.sample_rate)
换个描述就是另一个声音:
# 沉稳的播音腔
wav = model.generate(
text="(中年男性,沉稳磁性,播报风格)今天是2026年9月30日,欢迎收看新闻。"
)
# 活泼的少女音
wav = model.generate(
text="(年轻女孩,活泼俏皮,语速偏快)哇!这个功能也太好用了吧!"
)
对做产品的人来说,这意味着你不需要提前准备音色素材库,不需要找配音,不需要录音。游戏NPC、有声书角色、动画配音、广告旁白——全都可以用自然语言“定制”。ElevenLabs也有类似功能,但那是付费的。VoxCPM开源免费,Apache-2.0许可,明确可商用。
三、可控克隆:克隆音色的同时,还能“指挥”情绪和语速
克隆声音这件事,现在很多TTS都能做。但VoxCPM2的克隆有一个关键区别:克隆出来之后,你还能继续控制它。
传统克隆方案通常是“给什么音频,出什么效果”——参考音频里是什么情绪、什么语速,克隆出来就跟着是什么风格。你没法在保留音色的同时,让它换一种情绪说话。
VoxCPM2把这两件事拆开了:参考音频负责“音色”,括号里的指令负责“风格” 。
# 克隆音色 + 控制情绪和语速
wav = model.generate(
text="(slightly faster, cheerful tone)这就是克隆出来的声音,但语气完全由我控制。",
reference_wav_path="speaker.wav",
cfg_value=2.0,
inference_timesteps=10,
)
sf.write("controllable_clone.wav", wav, model.tts_model.sample_rate)
格式: 在 text 开头用括号写入音色描述(如 "(音色描述)要合成的文本。"):
同一段参考音频,换一个风格指令,出来就是完全不同的表达:
# 同一个音色,沉稳播报风格
wav = model.generate(
text="(语速缓慢,沉稳严肃)这是一条重要通知。",
reference_wav_path="speaker.wav",
)
# 同一个音色,激动风格
wav = model.generate(
text="(语速快,情绪激动)我们成功了!",
reference_wav_path="speaker.wav",
)
而且,克隆时不需要提供参考音频的对应文字转写。VoxCPM2引入了隔离式参考音频通道,克隆时只需要音频本身。你拿到一段素材,不用先人工转写一遍才能用。
如果追求最高相似度,还可以使用高保真克隆模式,同时提供参考音频和逐字转写,模型用转写精确对齐prompt音频,克隆保真度最高。
wav = model.generate(
text="这是使用VoxCPM2的极致克隆演示。",
prompt_wav_path="path/to/voice.wav",
prompt_text="参考音频的文本转录。",
reference_wav_path="path/to/voice.wav", # 可选,提升相似度
)
sf.write("hifi_clone.wav", wav, model.tts_model.sample_rate)
为获得最高克隆相似度,将同一音频同时传给 reference_wav_path 和 prompt_wav_path:
四、30种语言 + 9种中文方言 + 原生48kHz
VoxCPM2在VoxCPM 1.x的中英双语基础上,扩展到30种语言、8个语系,训练数据约236万小时(180万小时中英基础 + 56万小时多语言)。
覆盖的语系包括东亚(中文、日语、韩语)、东南亚(缅甸语、印尼语、高棉语、老挝语、马来语、他加禄语、泰语、越南语)、南亚(印地语)、欧洲各语族、闪米特语族(阿拉伯语、希伯来语)以及非洲的斯瓦希里语。
中文侧还覆盖四川话、粤语、吴语、东北话、河南话、陕西话、山东话、天津话、闽南语9大方言。面壁智能官方演示过用VoxCPM2让《哆啦A梦》讲方言的效果——零人工配音,直接合成。
演示功能看:
https://openbmb.github.io/voxcpm2-demopage/
音质方面,VoxCPM2的AudioVAE V2做了非对称编解码:编码端接受16kHz参考音频,解码端直接输出48kHz,路径中不需要任何外部上采样器。你给一段手机录音当参考,出来的是录音棚采样率。48kHz能完整保留呼吸声、唇齿音、情感起伏的细微变化。
五、微调:5-10分钟音频数据,就能让模型“认识”你的声音
这是VoxCPM对技术人员最实用的能力之一。
VoxCPM支持两种微调方式:全参数微调(SFT) 和 LoRA微调。
LoRA在冻结基座的前提下,仅训练少量附加参数,多数微调任务建议从此入手。实测准备大约5-10分钟的纯净单人讲话音频即可适配特定说话人、语言或领域。
硬件门槛方面:VoxCPM 2的LoRA微调约需20GB显存,全量微调约40GB。这意味着单张RTX 4090可以完成微调。
数据格式就是一个JSONL文件,每行一条:
{"audio": "path/to/audio1.wav", "text": "对应转写"}
{"audio": "path/to/audio2.wav", "text": "对应转写", "ref_audio": "path/to/audio1.wav"}
具体参考微调文档
https://voxcpm.readthedocs.io/zh-cn/latest/finetuning/finetune.html
建议30%–50%的训练样本带ref_audio,这样模型不会丢掉零样本克隆能力。
什么场景下需要微调? 模型对某个特定说话人的音色还原不够像;某个小语种的发音不够标准;某个垂直领域(医疗、法律、游戏)的术语读法需要纠正;需要用特定的录音条件来适配。这些场景下,5-10分钟的音频就能看到明显改善。
总结

VoxCPM2把三件事放在了一起:开源可商用、连续潜空间架构带来的自然听感、以及让技术人员能在消费级硬件上完成微调和部署的工程效率。 对于需要集成TTS到产品里的开发者来说,这是一个值得认真评估的选项。
浙公网安备 33010602011771号