Clonación de voz con VoxCPM2 en Mac

Ejecuta VoxCPM2 localmente en Apple Silicon con MLX para clonar una voz o diseñarla mediante una descripción. Este modelo de OpenBMB genera voz a 48 kHz en 30 idiomas. Escucha los ejemplos y prueba la CLI con la grabación de referencia y su transcripción exacta.

Muestras de audio · Clona una voz con la CLI · VoxCPM2 frente a Qwen3-TTS

Muestras de clonación de voz

Estos clips en inglés proceden de la comparación FLEURS publicada. La referencia y la voz generada dicen frases distintas. Cada salida es una muestra representativa; las métricas resumen varios clips.

Audio de referenciaInglés · 16 kHz

Transcripción de referencia: One can only wonder what the keyboard will become when something newer comes along.

VoxCPM2 bf16Inglés · 48 kHz

Texto generado: 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 generado: While he was working at the hospital Liggins began to investigate premature labor during his spare time.

Clona una voz con la CLI

Descarga Audio de referencia como reference.wav. El comando usa su transcripción exacta; sustituye tanto la grabación como la transcripción si utilizas tu propia muestra.

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

Qué es

Arquitectura

Cinco componentes cooperan para producir la forma de onda a 48 kHz:

ComponenteDescripción
MiniCPM-4 base LMMiniCPM-4 de 28 capas con LongRoPE, GQA (16 cabezas Q / 2 KV, dim de cabeza 128) y MLP SwiGLU. Se condiciona sobre tokens de texto + latentes de audio.
Residual LMVariante MiniCPM-4 de 8 capas sin embeddings rotativos. Refina el estado oculto del LM base por cada patch de audio generado.
FSQ + Local DiT estimatorEstados ocultos cuantizados escalarmente alimentan un Diffusion Transformer (V2) de 12 capas que opera sobre latentes de audio de 64 dim en parches de 4. Solver Euler CFG-zero-star, 10 pasos por defecto.
AudioVAE V2Decoder convolucional causal. Lee audio de referencia a 16 kHz y emite la onda a 48 kHz (sobremuestreo 3× incorporado).
Cabezal StopClasificador binario por paso sobre el estado oculto del LM. argmax = 1 termina la generación tras minTokens patches.

Paquetes

La CLI actual admite paquetes bf16 e int8 convertidos desde el checkpoint original openbmb/VoxCPM2. Se cuantizan las proyecciones del modelo de lenguaje y de difusión; el decodificador de audio conserva la precisión completa.

PaqueteCuantizaciónTamañoHuggingFace
bf16Ninguna (referencia)~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 serie M):

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

La CLI usa bf16 por defecto; elige int8 para reducir la descarga. int4 está retirado y solo aparece en la tabla como medición histórica.

Inicio 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

Selecciona explícitamente el paquete int8:

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

Diseño de voz (por instrucción)

Pasa una descripción de estilo en lenguaje natural; el modelo se condiciona sobre ella sin necesidad de audio de referencia:

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

Clonación de voz

Clonación con una sola referencia desde un clip mono a 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 — pasa a la vez el audio de referencia y su transcripción para que el LM se condicione también sobre el contexto léxico y preserve mejor la prosodia y el acento:

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

Banderas: --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íntesis reproducible.

VoxCPM2 frente a Qwen3-TTS

Resultados publicados en inglés con diez pares de referencia y objetivo FLEURS por modelo: medias de WER y UTMOS, y mediana de RTF. WER y RTF más bajos son mejores; UTMOS predice la naturalidad, no es una valoración humana. Los resultados no establecen una clasificación universal.

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

Comparación de clonación en cinco idiomas y metodología.

Cómo elegir entre los módulos TTS de 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
Diseño de vozPresets fijos——Por instrucción—
Clonación de voz—Referencia ICLReferencia zero-shotReferencia + ultimateAudio + transcripción
Formato largoCorto / medioStreamingStreamingStreaming por patchesHasta 90 min
Elige VoxCPM2 cuando…

…necesites salida a 48 kHz (música / radiodifusión) o diseño de voz por lenguaje natural sin un clip de referencia. Para TTS de máxima calidad en inglés corto con menor descarga, CosyVoice3 o Qwen3-TTS son más ligeros. Para podcasts y audiolibros largos en EN/ZH, VibeVoice 1.5B está hecho para eso.

Uso responsable

Incluye clonación de voz. Obtén consentimiento para cualquier voz que clones y no uses el modelo para suplantar a personas, generar desinformación o cometer fraude. Aplica la guía completa de seguridad de openbmb/VoxCPM2.