Stimmen mit VoxCPM2 auf dem Mac klonen

Führe VoxCPM2 mit MLX lokal auf Apple Silicon aus, um eine Stimme zu klonen oder per Textbeschreibung zu gestalten. Das OpenBMB-Modell erzeugt Sprache in 30 Sprachen mit 48 kHz. Höre dir die Beispiele an und teste die CLI mit der Referenzaufnahme und ihrem genauen Transkript.

Hörproben · Eine Stimme mit der CLI klonen · VoxCPM2 im Vergleich zu Qwen3-TTS

Hörproben zum Klonen von Stimmen

Diese englischen Aufnahmen stammen aus dem veröffentlichten FLEURS-Vergleich. Referenz und erzeugte Sprache enthalten unterschiedliche Sätze. Jede Ausgabe ist eine repräsentative Hörprobe; die Vergleichswerte fassen mehrere Clips zusammen.

ReferenzaufnahmeEnglisch · 16 kHz

Referenztranskript: One can only wonder what the keyboard will become when something newer comes along.

VoxCPM2 bf16Englisch · 48 kHz

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

Qwen3-TTS Base 1.7B bf16 ICLEnglisch · 24 kHz

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

Eine Stimme mit der CLI klonen

Lade die Referenzaufnahme als reference.wav herunter. Der Befehl enthält ihr genaues Transkript. Ersetze Aufnahme und Transkript, wenn du eine eigene Stimmprobe verwendest.

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

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

Die aktuelle CLI unterstützt bf16- und int8-Bundles aus dem ursprünglichen Checkpoint openbmb/VoxCPM2. Die Projektionen im Sprach- und Diffusionsmodell werden quantisiert; der Audiodecoder behält die volle Präzision.

BundleQuantisierungGrößeHuggingFace
bf16Keine (Referenz)~5.0 GBaufklarer/VoxCPM2-MLX-bf16
int8MLX QuantizedLinear, group size 64~3.0 GBaufklarer/VoxCPM2-MLX-int8

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

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

Die CLI verwendet standardmäßig bf16. Wähle int8 für einen kleineren Download. int4 wurde eingestellt und steht nur als historische Messung in der Tabelle.

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

Das int8-Bundle ausdrücklich auswä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}, --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.

VoxCPM2 im Vergleich zu Qwen3-TTS

Veröffentlichte englische Ergebnisse mit zehn FLEURS-Paaren aus Referenz und Ziel pro Modell: Mittelwerte für WER und UTMOS, Median für RTF. Niedrigere WER und RTF sind besser. UTMOS schätzt Natürlichkeit und ist keine menschliche Bewertung. Die Werte ergeben keine allgemeingültige Rangliste.

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

Stimmenvergleich in fünf Sprachen mit Messmethode.

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 Presets——Instruktionsbasiert—
Voice Cloning—ICL-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.