VoxCPM2

VoxCPM2 ist ein tokenizerfreies, diffusions-autoregressives TTS-Modell mit 2 Mrd. Parametern von OpenBMB. Es synthetisiert Audio in 48 kHz Studioqualität in 30 Sprachen mit drei produktiven Modi: Zero-Shot, Voice Cloning per Einzelreferenz und natursprachliches Voice Design ("a young female voice, warm and gentle"). Auf Apple Silicon läuft es nativ über MLX in bf16, int8 oder int4 — auf der 8-Sätze-Testharness erreicht das int8-Bundle 0 % WER beim Round-Trip durch Qwen3-ASR bei einem RTF ≈ 1,0.

Was es ist

Architektur

Fünf zusammenarbeitende Komponenten erzeugen die 48 kHz-Wellenform:

KomponenteBeschreibung
MiniCPM-4 base LMMiniCPM-4 mit 28 Schichten, LongRoPE, GQA (16 Q-/2 KV-Köpfe, Kopf-Dim 128) und SwiGLU MLP. Konditioniert auf Text-Tokens + Audio-Latents.
Residual LM8-Schicht-Variante von MiniCPM-4 ohne Rotary Embeddings. Verfeinert den Hidden State des Basis-LM für jeden generierten Audio-Patch.
FSQ + Local DiT estimatorSkalar-quantisierte Hidden States treiben einen 12-schichtigen Diffusion Transformer (V2), der auf 64-dim Audio-Latents in 4er-Patches arbeitet. CFG-zero-star Euler-Solver, standardmäßig 10 Zeitschritte.
AudioVAE V2Kausaler Convolution-Decoder. Liest 16 kHz-Referenzaudio ein und gibt 48 kHz-Wellenform aus (3× Upsampling integriert).
Stop-HeadPro-Schritt-Binärklassifikator auf dem Hidden State des LM. argmax = 1 beendet die Generierung nach minTokens Patches.

Bundles

Drei Quantisierungsvarianten, alle aus den Upstream-PyTorch-Checkpoints openbmb/VoxCPM2 konvertiert. Quantisierung greift bei den Linear-Schichten in LM / Residual LM / DiT-Estimator / Projection-Heads; der AudioVAE-Vocoder bleibt fp16/bf16, weil Quantisierung dort die Audioqualität verschlechtert.

BundleQuantisierungGrößeHuggingFace
bf16Keine (Referenz)~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

Round-Trip-ASR (Qwen3-ASR 0.6B, 8-Satz-Harness, Apple Silicon M-Serie):

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

int8 ist der empfohlene Standard — entspricht im LM-Pfad bitgenau der Upstream-Python-Pipeline, ist dabei schneller und 40 % kleiner als bf16. int4 ist das kleinste Bundle mit noch akzeptablem WER für Casual-Use.

Quickstart

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

Übergib eine explizite Model-ID, um int8 / int4 zu wählen:

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

Voice Design (per Instruktion)

Übergib eine natursprachliche Stilbeschreibung; das Modell wird darauf konditioniert, ganz ohne Referenzaudio:

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

Voice Cloning

Einzelreferenz-Cloning aus einem 16 kHz-Mono-Clip:

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 — übergib Referenzaudio und das passende Transkript gemeinsam, damit das LM auch auf den lexikalischen Kontext konditioniert wird und Prosodie/Akzent treuer erhalten bleiben:

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 für reproduzierbare Synthese.

Auswahl unter den TTS-Modulen von speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VoxCPM2VibeVoice 1.5B
Parameter82M0.6 / 1.7 B0.5B2B1.5B
Samplerate24 kHz24 kHz24 kHz48 kHz24 kHz
BackendCoreML (ANE)MLX, CoreMLMLXMLXMLX
Sprachen1010930EN + ZH
Voice DesignFeste PresetsInstruktionsbasiert
Voice CloningICL-ReferenzZero-Shot-ReferenzReferenz + UltimateAudio + Transkript
LangformKurz/MittelStreamingStreamingPatch-StreamingBis zu 90 Min.
Wähle VoxCPM2, wenn …

… 48 kHz-Ausgabe gefragt ist (Musik / Broadcast) oder natursprachliches Voice Design ohne Referenzclip nötig wird. Für maximale Qualität bei kurzem englischem TTS mit kleinerem Download sind CosyVoice3 oder Qwen3-TTS leichter. Für lange Podcasts/Hörbücher in EN/ZH ist VibeVoice 1.5B der Spezialist.

Verantwortungsvolle Nutzung

Voice Cloning ist enthalten. Hol dir vorab die Zustimmung für jede Stimme, die du klonst, und nutze das Modell nicht für Identitätsdiebstahl, Desinformation oder Betrug. Es gelten die vollständigen Sicherheitsempfehlungen von openbmb/VoxCPM2.