博客·
语音克隆
May 17, 2026

以 48 kHz 克隆一个声音
用 VoxCPM2。

Soniqo 刚刚加入了一个新的 TTS 模型。它在你的笔记本上运行,输出录音棚级的 48 kHz 音频,并能从单个短片段克隆声音。本文将走一遍你能用它构建什么、它让你克隆声音的三种方式,以及对模型内部工作方式的一次友好观察。

你能构建什么

当克隆在本地运行时,四件事会改变。

在设备上运行克隆一次解锁四种属性——隐私、离线使用、每次调用零成本,以及对声音的完全所有权。每一种都开启了一类用其他方式难以构建的产品。

个人有声书旁白

录下父母朗读的 30 秒。有声书应用随后用他们的声音朗读任意章节——同样的温暖、同样的口音,每次会话在本地生成。

多语言创作者内容

YouTuber 和播客主在 30 种语言里保持一个一致的声音。用英语录一次,就能把同一集用日语、西班牙语和印地语发布,无需配音阵容。

无障碍与声音存储

面临失声的人可以把声音存进一个短片段,并通过听起来像他们本人(而非通用 TTS 引擎)的辅助技术继续说话。

按需的产品声音

描述你想要的声音——"年轻女性,温柔而温暖"——模型无需参考录音就能设计它。适用于游戏 NPC、自助终端提示或品牌声音的 A/B 测试。

端侧 vs 托管

VoxCPM2 与 ElevenLabs 的对比。

ElevenLabs 是显而易见的云 API 替代方案。取舍在于什么在哪里运行——以及之后声音归谁所有。

对于需要隐私保证、离线运行或每次调用零成本的产品,端侧克隆是唯一选择——每一次 ElevenLabs 调用都会把音频上传到他们的服务器。

VoxCPM2(Soniqo)ElevenLabs
在哪里运行在用户设备上托管 API
音频离开设备是(上传到 ElevenLabs)
离线使用否(需要联网)
每次调用成本按字符计费
模型许可Apache 2.0,开放权重专有,仅 SaaS
最高输出采样率48 kHz 原生48 kHz(Pro 及以上层级)
语言3029(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
)
Three cloning modes, same modelEach mode arranges different pieces in the input sequence before the model. Voice design adds a written description, reference cloning adds an audio prefix, and ultimate cloning adds a paired audio-and-transcript example.Voice design(description)text to sayReference cloningreference audiotext to sayUltimate cloningreference audiotranscripttext to sayprompt audioaudio framestext conditiontext to synthesise

同一个输入槽,填入不同的部件。模型从不看到标志位——它读取序列。

幕后

VoxCPM2 如何产生音频。

四个协作的模块。使用模型并不需要知道这些,但如果你好奇 48 kHz 从何而来——就在这里。

VoxCPM2 architectureText and optional voice prompts feed an autoregressive language model and a residual refiner. A local diffusion transformer produces audio latents which the AudioVAE V2 decodes to a 48 kHz waveform.TextVoice prompt audioVoice instructionPrompt transcriptLocEncaudio + text fused into one streamTSLM · MiniCPM-4 backbone28-layer autoregressive LMdecides what audio patch comes nextRALMrefines each patch for prosodic detailLocDiT · diffusion estimatorpaints the audio latent in each slotAudioVAE V2 → 48 kHz waveform

流水线以一个本地编码器(LocEnc)开始,它把文本 token 和(可选的)参考音频融合成一条向量流。这条流馈入 TSLM——一个 28 层的 MiniCPM-4 语言模型,它决定下一个音频“补丁”是什么,就像文本 LM 挑选下一个 token 一样。第二遍通过 RALM 精修每个补丁。

到这里为止一切都是 transformer。有趣的转折是 LocDiT:它不是从固定的离散音频 token 词表里选择,而是运行一个小型扩散过程,在每个槽里“绘制”音频潜变量。没有离散编解码器就没有量化瓶颈——这正是让最后一级 AudioVAE V2 能直接解码到 48 kHz 的原因。此栈中其他每个端侧引擎都止步于 24 kHz。

这个分工值得一提:自回归 LM 擅长决定接下来该是什么(内容、节奏、长度);扩散头擅长绘制声学细节(相位、频谱)。VoxCPM2 让各自做各自擅长的事。这就是为什么模型仅以 2B 参数也能站稳——赢得感知质量的是架构,而不是规模。

论文

阅读原始研究。

VoxCPM: Tokenizer-Free TTS for Context-Aware Speech Generation and True-to-Life Voice Cloning
OpenBMB · arXiv:2509.24650 · Sept 2025
在 arXiv 查看
打包

三种大小。按你的磁盘预算来选。

三个打包运行相同的架构;它们只在语言模型量化的激进程度上不同。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
接下来

继续阅读。