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.
Referenztranskript: One can only wonder what the keyboard will become when something newer comes along.
Erzeugter Text: While he was working at the hospital Liggins began to investigate premature labor during his spare time.
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
- 48 kHz Ausgabe — die einzige On-Device-Engine im Stack mit Studio-Samplerate. Alle anderen TTS-Module enden bei 24 kHz.
- Voice Design — Stilsteuerung per natürlicher Sprache:
--voxcpm2-instruct "young female voice, warm and gentle". Keine andere Engine bietet das. - Voice Cloning — Einzelreferenz-Cloning aus einem 16 kHz-Clip; "Ultimate Cloning" (Referenzaudio + Transkript) für eine treuere Prosodie.
- 30 Sprachen — Englisch, Chinesisch, Indonesisch, Japanisch, Koreanisch und mehr. Automatische Erkennung aus dem Text.
- Apache 2.0 — die Modellgewichte erben die Upstream-Lizenz von openbmb; unser Swift-Port nutzt dieselbe Lizenz.
Architektur
Fünf zusammenarbeitende Komponenten erzeugen die 48 kHz-Wellenform:
| Komponente | Beschreibung |
|---|---|
| MiniCPM-4 base LM | MiniCPM-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 LM | 8-Schicht-Variante von MiniCPM-4 ohne Rotary Embeddings. Verfeinert den Hidden State des Basis-LM für jeden generierten Audio-Patch. |
| FSQ + Local DiT estimator | Skalar-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 V2 | Kausaler Convolution-Decoder. Liest 16 kHz-Referenzaudio ein und gibt 48 kHz-Wellenform aus (3× Upsampling integriert). |
| Stop-Head | Pro-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.
| Bundle | Quantisierung | Größe | HuggingFace |
|---|---|---|---|
| bf16 | Keine (Referenz) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, group size 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
Round-Trip-ASR (Qwen3-ASR 0.6B, 8-Satz-Harness, Apple Silicon M-Serie):
| Variante | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.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.
| Modell | WER ↓ | RTF ↓ | UTMOS ↑ |
|---|---|---|---|
| VoxCPM2 bf16 | 1.8% | 1.11 | 2.97 |
| Qwen3-TTS Base 1.7B bf16 ICL | 2.4% | 1.70 | 3.50 |
Stimmenvergleich in fünf Sprachen mit Messmethode.
Auswahl unter den TTS-Modulen von speech-swift
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Parameter | 82M | 0.6 / 1.7 B | 0.5B | 2B | 1.5B |
| Samplerate | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| Backend | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| Sprachen | 10 | 10 | 9 | 30 | EN + ZH |
| Voice Design | Feste Presets | — | — | Instruktionsbasiert | — |
| Voice Cloning | — | ICL-Referenz | Zero-Shot-Referenz | Referenz + Ultimate | Audio + Transkript |
| Langform | Kurz/Mittel | Streaming | Streaming | Patch-Streaming | Bis zu 90 Min. |
… 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.