Automatische vertaling · Engels origineel
VoxCPM2 spraakklonen op Mac
Voer VoxCPM2 lokaal uit op Apple Silicon met MLX om een stem te klonen of er een te ontwerpen uit een tekstbeschrijving. Dit OpenBMB-model produceert 48 kHz spraak in 30 talen. Luister naar de voorbeelden en probeer de CLI met de referentieopname en het transcript.
Audiomonsters · Kloon een stem met de CLI · VoxCPM2 vs Qwen3-TTS
Voice klonen monsters
Deze Engelse clips komen van de gepubliceerde FLEURS vergelijking. De referentie en gegenereerde spraak gebruiken verschillende zinnen. Elke uitvoer is één representatief monster; de vergelijking met de gemiddelde meerdere clips.
Referentie transcript: Men kan zich alleen maar afvragen wat het toetsenbord zal worden als er iets nieuwser langskomt.
Gegenereerde tekst: Terwijl hij in het ziekenhuis werkte, begon Liggins vroegtijdige bevallingen te onderzoeken tijdens zijn vrije tijd.
Gegenereerde tekst: Terwijl hij in het ziekenhuis werkte, begon Liggins vroegtijdige bevallingen te onderzoeken tijdens zijn vrije tijd.
Kloon een stem met de CLI
Download Reference audio als referentie.wav. Het commando gebruikt het exacte transcript; vervang zowel de opname als het transcript bij het gebruik van uw eigen stemmonster.
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
Wat het is.
- 48 kHz uitgang › de enige on-device motor in deze stack met studio sample rate. Elke andere TTS module maxeert op 24 kHz.
- Voice design andere natuurlijke taal stijl controle:
--voxcpm2-instruct "young female voice, warm and gentle". Geen van de andere motoren stelt dit bloot. - Klonen van stemmen Klonen met één referentie van een 16 kHz-clip; "ultimate klonen" (referentie audio + transcript) voor prosody conservation.
- 30 talen . Engels, Chinees, Indonesisch, Japans, Koreaans, en meer. Automatisch gedetecteerd uit tekst.
- Apache 2.0 Modelgewichten erven upstream openbmb licentie; onze Swift poort is hetzelfde.
Architectuur
Vijf samenwerkende componenten produceren een 48 kHz golfvorm:
| Onderdeel | Omschrijving |
|---|---|
| MiniCPM-4 base LM | 28-layer MiniCPM-4 met LongRoPE, GQA (16 Q / 2 KV-koppen, 128 hoofddim), en SwiGLU MLP. Voorwaarden voor teksttekens + audio latenten. |
| Resterende LM | 8-laag MiniCPM-4 variant zonder roterende inbeddingen. Verfijnt de basis LM verborgen toestand per gegenereerde audio patch. |
| FSQ + Lokale DiT-schatting | Scalar-gequantiseerde verborgen toestanden sturen een 12-laags Diffusion Transformer (V2) die werkt op 64-dim audio latentes in patches van 4. CFG-zero-ster Euler-oplosser, 10 tijdstappen standaard. |
| AudioVAE V2 | Causale convolutionale decoder. Leest 16 kHz referentie audio + zendt 48 kHz golfvorm (3× upsample gebakken in). |
| Stopkop | Per-stap binaire classifier op de LM verborgen toestand. Argmax = 1 eindigt generatie na minTokens patches. |
Bundels
De huidige CLI ondersteunt bf16 en int8 bundels die zijn omgezet uit de upstream openbmb/VoxCPM2 controlepunt. Kwantisering is van toepassing op het taalmodel en de verspreidingsprojecties; de audio-decoder blijft bij volledige precisie.
| Bundel | Kwantisering | Grootte | HuggingFace |
|---|---|---|---|
| bf16 | Geen (referentie) | ~5,0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, groepsgrootte 64 | ~ 3,0 GB | aufklarer/VoxCPM2-MLX-int8 |
Ronde reis ASR (Qwen3-ASR 0.6B, 8-sentence harnas, M-serie Apple Silicon):
| Variant | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.00 % | 1.02 |
| int4 (gepensioneerd) | 4.08 % | 0.83 |
De CLI standaard naar bf16; kies int8 voor een kleinere download. int4 is gepensioneerd en verschijnt alleen in de tabel als historische meting.
Snel starten
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
Selecteer de int8 bundel expliciet:
let tts = try await VoxCPM2TTSModel.fromPretrained(
modelId: "aufklarer/VoxCPM2-MLX-int8"
)
Stemontwerp (instructiegestuurd)
Geef een beschrijving van de natuurlijke taalstijl; de synthese van de modelomstandigheden zonder referentie-audiomonster:
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)
Stemklonen
Klonen met één referentie van een 16 kHz-monoclip:
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
)
Ultieme klonen ..pas zowel referentie audio en het bijbehorende transcript, zodat de LM kan ook conditioneren op de lexicale context, behoud van prosody en accent meer trouw:
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
Vlaggen: --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 voor reproduceerbaare synthese.
VoxCPM2 vs Qwen3-TTS
Gepubliceerde Engelse resultaten voor tien FLEURS referentie/doelparen per model: gemiddelde WER en UTMOS, mediane RTF. Lagere WER and RTF zijn beter; UTMOS voorspelt natuurlijkheid en is geen menselijke rating. Deze resultaten niet het vaststellen van een universele rangschikking.
| Model | WER ↓ | RTF ↓ | UTMOS ↑ |
|---|---|---|---|
| VoxCPM2 bf16 | 1.8% | 1.11 | 2.97 |
| Qwen3-TTS Base 1.7B bf16 ICL | 2.4% | 1.70 | 3.50 |
Volledige vergelijking en methodologie van vijftalige spraakklonen.
Selectie tussen speech-swift TTS modules
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Params | 82M | 0,6 / 1,7 B | 0,5B | 2B | 1.5B |
| Monstersnelheid | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| Backend | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| Talen | 10 | 10 | 9 | 30 | NL + ZH |
| Stemontwerp | Vaste instellingen | — | — | Instructiegestuurd | — |
| Stemklonen | — | ICL-referentie | Referentie nulschot | Referentie + uiteindelijk | Raw audio + transcript |
| Lange vorm | Kort/middelgroot | Streaming | Streaming | Streaming patches | Omhoog tot 90 min |
...je hebt 48 kHz uitvoer (muziek / uitzending toepassingen) of natuurlijk-taal spraakontwerp nodig zonder referentie clip. Voor de maximale kwaliteit van het Engels TTS met kleinere download, CosyVoice3 of Qwen3-TTS zijn lichter. Voor de lange-vorm podcast / audioboek in EN/ZH, VibeVoice 1.5B is doelgebouwd.
Verantwoordelijk gebruik
Voice klonen is inbegrepen. Verkrijg toestemming voor elke stem die je kloont en gebruik het model niet om individuen te imiteren, desinformatie te genereren of fraude te plegen. De volledige veiligheidsbegeleiding van openbmb/VoxCPM2 is van toepassing.
Lokale lokale gevolgtrekking
VoxCPM2 ondersteunt gewichtPrecisie: .float16 voor een niet-gequantiseerd controlepunt. Zijn belangrijkste parameters gebruiken FP16; AudioVAE en sommige berekeningen blijven FP32. INT8 controlepunten worden voor deze modus afgewezen.
Expliciet tokenizerDirectory loading maakt gebruik van geënsceneerde tokenizer-bestanden zonder ze te wijzigen of een aparte cache nodig te hebben. Incrementele spraak decodeert begrensde causale vensters met behoud van de AudioVAE linkercontext.
Speech with stream: true returns NDJSON audio events at 48 kHz, followed by done or error. Annuleren op verzoekID at /v1/inferentie/ancel. GET /v1/invloed/capaciteiten en /v1