VoxCPM2

VoxCPM2 é um modelo TTS de difusão-autoregressivo sem tokenizador, com 2 bilhões de parâmetros, publicado pela OpenBMB. Sintetiza áudio em 48 kHz com qualidade de estúdio em 30 idiomas e oferece três modos de produção: zero-shot, clonagem de voz por referência única e design de voz por instruções em linguagem natural ("a young female voice, warm and gentle"). Em Apple Silicon roda nativamente via MLX em bf16, int8 ou int4 — no harness de 8 frases, o pacote int8 atinge WER 0 % no round-trip via Qwen3-ASR e RTF ≈ 1,0.

Visão geral

Arquitetura

Cinco componentes cooperam para gerar a forma de onda em 48 kHz:

ComponenteDescrição
MiniCPM-4 base LMMiniCPM-4 de 28 camadas, LongRoPE, GQA (16 cabeças Q / 2 KV, dim de cabeça 128) e MLP SwiGLU. Condicionado em tokens de texto + latentes de áudio.
Residual LMVariante MiniCPM-4 de 8 camadas sem embeddings rotativos. Refina o hidden state do LM base a cada patch de áudio gerado.
FSQ + Local DiT estimatorHidden states quantizados escalarmente alimentam um Diffusion Transformer (V2) de 12 camadas que opera sobre latentes de áudio de 64 dim em patches de 4. Solver Euler CFG-zero-star, 10 timesteps por padrão.
AudioVAE V2Decoder convolucional causal. Lê áudio de referência em 16 kHz e emite a onda em 48 kHz (upsampling 3× embutido).
Cabeça StopClassificador binário por passo sobre o hidden state do LM. argmax = 1 encerra a geração após minTokens patches.

Pacotes

Três variantes quantizadas, todas convertidas a partir dos checkpoints PyTorch upstream openbmb/VoxCPM2. A quantização atinge as camadas Linear dentro do LM / LM residual / estimador DiT / cabeças de projeção; o vocoder AudioVAE fica em fp16/bf16 porque quantizá-lo prejudica a qualidade do áudio.

PacoteQuantizaçãoTamanhoHuggingFace
bf16Nenhuma (referência)~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 round-trip (Qwen3-ASR 0.6B, 8 frases, Apple Silicon série M):

VarianteWERRTF
bf162.04 %1.38
int80.00 %1.02
int44.08 %0.83

int8 é o padrão recomendado — equivalente bit a bit ao pipeline Python upstream no caminho do LM, sendo mais rápido e 40 % menor que bf16. int4 é o menor pacote com WER aceitável para uso casual.

Início rápido

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

Passe um model ID explícito para escolher o pacote int8 / int4:

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

Design de voz (por instrução)

Passe uma descrição de estilo em linguagem natural; o modelo se condiciona a ela sem áudio de referência:

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

Clonagem de voz

Clonagem com referência única a partir de um clipe mono 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 — passe ao mesmo tempo o áudio de referência e sua transcrição correspondente para que o LM se condicione também sobre o contexto lexical e preserve melhor prosódia e sotaque:

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

Flags: --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 para síntese reproduzível.

Escolhendo entre os módulos TTS do speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
Parâmetros82M0.6 / 1.7 B0.5B2B1.5B
Sample rate24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
Idiomas1010930EN + ZH
Design de vozPresets fixosPor instrução
Clonagem de vozReferência ICLReferência zero-shotReferência + ultimateÁudio + transcrição
Formato longoCurto / médioStreamingStreamingStreaming por patchesAté 90 min
Escolha VoxCPM2 quando…

…precisar de saída em 48 kHz (música / broadcast) ou de design de voz em linguagem natural sem clipe de referência. Para TTS curto em inglês com a maior qualidade e download menor, CosyVoice3 ou Qwen3-TTS são mais leves. Para podcasts e audiolivros longos em EN/ZH, VibeVoice 1.5B foi feito para isso.

Uso responsável

Inclui clonagem de voz. Obtenha consentimento para qualquer voz clonada e não use o modelo para se passar por alguém, gerar desinformação ou cometer fraude. Aplica-se o guia completo de segurança de openbmb/VoxCPM2.