当克隆在本地运行时,四件事会改变。
在设备上运行克隆一次解锁四种属性——隐私、离线使用、每次调用零成本,以及对声音的完全所有权。每一种都开启了一类用其他方式难以构建的产品。
录下父母朗读的 30 秒。有声书应用随后用他们的声音朗读任意章节——同样的温暖、同样的口音,每次会话在本地生成。
YouTuber 和播客主在 30 种语言里保持一个一致的声音。用英语录一次,就能把同一集用日语、西班牙语和印地语发布,无需配音阵容。
面临失声的人可以把声音存进一个短片段,并通过听起来像他们本人(而非通用 TTS 引擎)的辅助技术继续说话。
描述你想要的声音——"年轻女性,温柔而温暖"——模型无需参考录音就能设计它。适用于游戏 NPC、自助终端提示或品牌声音的 A/B 测试。
VoxCPM2 与 ElevenLabs 的对比。
ElevenLabs 是显而易见的云 API 替代方案。取舍在于什么在哪里运行——以及之后声音归谁所有。
对于需要隐私保证、离线运行或每次调用零成本的产品,端侧克隆是唯一选择——每一次 ElevenLabs 调用都会把音频上传到他们的服务器。
| VoxCPM2(Soniqo) | ElevenLabs | |
|---|---|---|
| 在哪里运行 | 在用户设备上 | 托管 API |
| 音频离开设备 | 否 | 是(上传到 ElevenLabs) |
| 离线使用 | 是 | 否(需要联网) |
| 每次调用成本 | 无 | 按字符计费 |
| 模型许可 | Apache 2.0,开放权重 | 专有,仅 SaaS |
| 最高输出采样率 | 48 kHz 原生 | 48 kHz(Pro 及以上层级) |
| 语言 | 30 | 29(Multilingual v2)· 70+(Eleven v3) |
| 所需参考片段 | 5–30 秒 | 1 分钟(Instant)· 30 分钟(Professional) |
| 从文本设计声音 | 是 | 是 |
两个引擎都能达到 48 kHz;两者都支持相近的日常克隆语言范围;两者都提供从文本描述设计声音。真正的区别在于音频是否会离开设备。
一个模型,三种入口。
每次调用的模型都相同。改变的是你传入哪些参数——这决定了你是在从描述设计声音、复制一段录音,还是保留一种口音。
用自然语言描述声音。模型挑选一个匹配的声音,并在多次调用间保持一致。
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)传入任意 5–30 秒干净语音。模型复制音色与节奏,并用那个声音合成新文本。
let ref = try AudioFileLoader.load(
url: URL(fileURLWithPath: "speaker.wav"),
targetSampleRate: 16000
)
let audio = try await tts.generateVoxCPM2(
text: "This is a cloned voice.",
refAudio: ref
)同时传入片段及其转录。模型现在能将声学特征与音素对齐——口音与元音选择得以延续。
let audio = try await tts.generateVoxCPM2(
text: "Hello from the cloned voice.",
refAudio: ref,
promptText: "this is what the reference clip actually said",
promptAudio: ref
)同一个输入槽,填入不同的部件。模型从不看到标志位——它读取序列。
VoxCPM2 如何产生音频。
四个协作的模块。使用模型并不需要知道这些,但如果你好奇 48 kHz 从何而来——就在这里。
流水线以一个本地编码器(LocEnc)开始,它把文本 token 和(可选的)参考音频融合成一条向量流。这条流馈入 TSLM——一个 28 层的 MiniCPM-4 语言模型,它决定下一个音频“补丁”是什么,就像文本 LM 挑选下一个 token 一样。第二遍通过 RALM 精修每个补丁。
到这里为止一切都是 transformer。有趣的转折是 LocDiT:它不是从固定的离散音频 token 词表里选择,而是运行一个小型扩散过程,在每个槽里“绘制”音频潜变量。没有离散编解码器就没有量化瓶颈——这正是让最后一级 AudioVAE V2 能直接解码到 48 kHz 的原因。此栈中其他每个端侧引擎都止步于 24 kHz。
这个分工值得一提:自回归 LM 擅长决定接下来该是什么(内容、节奏、长度);扩散头擅长绘制声学细节(相位、频谱)。VoxCPM2 让各自做各自擅长的事。这就是为什么模型仅以 2B 参数也能站稳——赢得感知质量的是架构,而不是规模。
阅读原始研究。
三种大小。按你的磁盘预算来选。
三个打包运行相同的架构;它们只在语言模型量化的激进程度上不同。int8 打包是推荐的默认项——它在 8 句往返基准上与上游 Python 流水线持平,同时比 bf16 更快、体积小 40%。
| 打包 | 大小 | 适合 |
|---|---|---|
| bf16 | ~5.0 GB | 参考 / 调试。 |
| int8 默认 | ~3.0 GB | 日常克隆、有声书、播客。 |
| int4 | ~1.9 GB | 磁盘受限的部署。 |
从 CLI。
# Voice design — no reference clip
speech speak "Welcome to the show." \
--engine voxcpm2 \
--voxcpm2-instruct "A young woman, gentle and warm voice." \
--output design.wav
# Reference cloning — 5–30 s clean clip
speech speak "This is a cloned voice." \
--engine voxcpm2 \
--voxcpm2-variant int8 \
--voice-sample speaker.wav \
--output clone.wav