Clonagem de voz com VoxCPM2 no Mac

Execute o VoxCPM2 localmente no Apple Silicon com MLX para clonar uma voz ou criá-la por descrição. Este modelo da OpenBMB gera fala a 48 kHz em 30 idiomas. Ouça os exemplos e experimente a CLI com a gravação de referência e sua transcrição exata.

Amostras de áudio · Clone uma voz com a CLI · VoxCPM2 versus Qwen3-TTS

Amostras de clonagem de voz

Estes clipes em inglês vêm da comparação FLEURS publicada. A referência e a fala gerada usam frases diferentes. Cada saída é uma amostra representativa; as métricas resumem vários clipes.

Áudio de referênciaInglês · 16 kHz

Transcrição da referência: One can only wonder what the keyboard will become when something newer comes along.

VoxCPM2 bf16Inglês · 48 kHz

Texto gerado: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Qwen3-TTS Base 1.7B bf16 ICLInglês · 24 kHz

Texto gerado: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Clone uma voz com a CLI

Baixe o Áudio de referência como reference.wav. O comando usa a transcrição exata; substitua tanto a gravação quanto a transcrição ao usar sua própria amostra.

speech speak "Hello from the cloned voice." \
    --engine voxcpm2 \
    --voxcpm2-variant bf16 \
    --voice-sample reference.wav \
    --voxcpm2-prompt-audio reference.wav \
    --voxcpm2-prompt-text "One can only wonder what the keyboard will become when something newer comes along." \
    --seed 42 \
    --output clone.wav

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

A CLI atual aceita os pacotes bf16 e int8 convertidos do checkpoint original openbmb/VoxCPM2. As projeções dos modelos de linguagem e difusão são quantizadas; o decodificador de áudio mantém a precisão completa.

PacoteQuantizaçãoTamanhoHuggingFace
bf16Nenhuma (referência)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8

ASR round-trip (Qwen3-ASR 0.6B, 8 frases, Apple Silicon série M):

VarianteWERRTF
bf162.04 %1.38
int80.00 %1.02
int4 (descontinuado)4.08 %0.83

A CLI usa bf16 por padrão; escolha int8 para reduzir o download. int4 foi descontinuado e aparece na tabela apenas como medição histórica.

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

Selecione explicitamente o pacote int8:

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}, --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.

VoxCPM2 versus Qwen3-TTS

Resultados publicados em inglês para dez pares FLEURS de referência e alvo por modelo: médias de WER e UTMOS, mediana de RTF. WER e RTF menores são melhores. UTMOS prevê a naturalidade e não é uma avaliação humana. Os resultados não estabelecem uma classificação universal.

ModeloWER ↓RTF ↓UTMOS ↑
VoxCPM2 bf161.8%1.112.97
Qwen3-TTS Base 1.7B bf16 ICL2.4%1.703.50

Comparação de clonagem em cinco idiomas e metodologia.

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 fixos——Por instrução—
Clonagem de voz—Referê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.