VoxCPM2

VoxCPM2 是 OpenBMB 发布的 20 亿参数、无 tokenizer 的扩散-自回归 TTS 模型。它能在 30 种语言下合成 48 kHz 录音棚级音频,提供三种生产模式:零样本合成、单参考语音克隆,以及自然语言驱动的声音设计(例如 "a young female voice, warm and gentle")。在 Apple Silicon 上通过 MLX 原生运行,支持 bf16、int8、int4 — 在 8 句测试集上,int8 版本经由 Qwen3-ASR 回采的 WER 为 0%,RTF ≈ 1.0。

概述

架构

由五个相互配合的组件合成 48 kHz 波形:

组件说明
MiniCPM-4 base LM28 层 MiniCPM-4,LongRoPE、GQA(16 Q / 2 KV 头,每头维度 128)、SwiGLU MLP。以文本 token + 音频 latent 作为条件。
Residual LM8 层 MiniCPM-4 变体,不使用旋转位置编码。每生成一个音频 patch 后细化基础 LM 的隐状态。
FSQ + Local DiT estimator标量量化的隐状态驱动一个 12 层 Diffusion Transformer(V2),在 64 维音频 latent 上以 patch=4 运算。默认使用 CFG-zero-star Euler 求解器,10 步时间。
AudioVAE V2因果卷积解码器。输入 16 kHz 参考音频,输出 48 kHz 波形(内置 3× 上采样)。
停止头对 LM 隐状态做逐步二分类。argmax = 1 表示在生成至少 minTokens 个 patch 后结束。

版本

三个量化版本,均从上游 PyTorch openbmb/VoxCPM2 检查点转换而来。量化作用于 LM / 残差 LM / DiT 估计器 / 投影头中的 Linear,AudioVAE 声码器保持 fp16/bf16 — 量化它会损害音质。

版本量化方式大小HuggingFace
bf16无(参考)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8
int4MLX QuantizedLinear, group size 64~1.9 GBaufklarer/VoxCPM2-MLX-int4

回采 ASR(Qwen3-ASR 0.6B,8 句测试集,M 系列 Apple Silicon):

版本WERRTF
bf162.04 %1.38
int80.00 %1.02
int44.08 %0.83

推荐使用 int8 — 在 LM 路径上与上游 Python 流水线逐位一致,速度更快,比 bf16 小 40%。int4 是 WER 仍可接受、体积最小的版本,适合休闲场景。

快速开始

import VoxCPM2TTS

let tts = try await VoxCPM2TTSModel.fromPretrained()  // defaults to bf16
let audio = try await tts.generate(text: "Hello from VoxCPM2.", language: "english")
// audio: [Float] at 48 kHz mono

传入显式 model ID 即可选择 int8 / int4:

let tts = try await VoxCPM2TTSModel.fromPretrained(
    modelId: "aufklarer/VoxCPM2-MLX-int8"
)

声音设计(指令驱动)

传入一段自然语言风格描述,模型即可无需参考音频按描述合成:

let audio = try await tts.generateVoxCPM2(
    text: "Welcome to the show.",
    instruct: "A young woman, gentle and warm voice."
)

声音克隆

从 16 kHz 单声道参考音频做单次克隆:

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
)

Ultimate cloning — 同时传入参考音频和与之匹配的转写文本,LM 还会条件于词汇上下文,更好地保留韵律和口音:

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
)

CLI

speech speak "Hello there." \
    --engine voxcpm2 \
    --voxcpm2-variant int8 \
    --output hello.wav

# Voice design
speech speak "Welcome to the show." \
    --engine voxcpm2 \
    --voxcpm2-instruct "A young woman, gentle and warm voice." \
    --output design.wav

# Voice cloning
speech speak "This is a cloned voice." \
    --engine voxcpm2 \
    --voice-sample speaker.wav \
    --output clone.wav

可用标志:--voxcpm2-variant {bf16,int8,int4}--voxcpm2-instruct--voxcpm2-ref-audio--voxcpm2-prompt-audio + --voxcpm2-prompt-text--voxcpm2-cfg-value--voxcpm2-timesteps--voxcpm2-max-tokens--voxcpm2-min-tokens--seed(可复现的合成)。

在 speech-swift TTS 模块中如何选择

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
参数量82M0.6 / 1.7 B0.5B2B1.5B
采样率24 kHz24 kHz24 kHz48 kHz24 kHz
后端CoreML (ANE)MLX, CoreMLMLXMLXMLX
语言数1010930EN + ZH
声音设计固定音色指令驱动
声音克隆ICL 参考零样本参考参考 + ultimate音频 + 转写
长文本短 / 中等流式流式Patch 流式最长 90 分钟
什么时候选 VoxCPM2

需要 48 kHz 输出(音乐 / 广播)或无需参考音频的自然语言声音设计时。如果需要最高质量的英语短文本 TTS 且包体更小,CosyVoice3Qwen3-TTS 更轻量;如果是英 / 中长篇播客或有声书,VibeVoice 1.5B 才是为此而生。

负责任使用

本模型包含声音克隆能力。请在克隆任何人声前取得本人同意,不要用模型冒充他人、生成假信息或实施欺诈。完整安全准则请参考 openbmb/VoxCPM2