VoxCPM2
VoxCPM2, OpenBMB tarafından geliştirilen 2B parametreli, tokenizer'sız diffusion-autoregressive bir konuşma sentezi modelidir. 48 kHz stüdyo kalitesinde sesi 30 dilde üç üretim moduyla sentezler: zero-shot, tek referanslı ses klonlama ve doğal dil ses tasarımı ("a young female voice, warm and gentle"). Apple Silicon üzerinde MLX aracılığıyla bf16, int8 veya int4 ile native çalışır — int8 paketi 8 cümlelik test koşusunda Qwen3-ASR üzerinden %0 WER ile round-trip yapar ve ~RTF 1,0 değerine ulaşır.
Nedir
- 48 kHz çıkış — bu yığındaki stüdyo örnekleme frekansına sahip tek cihaz üstü motor. Diğer tüm metinden konuşmaya modülleri 24 kHz'de tavanlanır.
- Ses tasarımı — doğal dilde stil kontrolü:
--voxcpm2-instruct "young female voice, warm and gentle". Diğer motorlar bunu sunmaz. - Ses klonlama — 16 kHz bir klipten tek referanslı klonlama; ezgi korunumu için "ultimate cloning" (referans ses + transkript).
- 30 dil — İngilizce, Çince, Endonezce, Japonca, Korece ve daha fazlası. Metinden otomatik algılanır.
- Apache 2.0 — model ağırlıkları upstream openbmb lisansını miras alır; Swift port'umuz da aynıdır.
Mimari
Beş işbirlikçi bileşen 48 kHz dalga formu üretir:
| Bileşen | Açıklama |
|---|---|
| MiniCPM-4 base LM | LongRoPE, GQA (16 Q / 2 KV başlığı, 128 başlık boyutu) ve SwiGLU MLP ile 28 katmanlı MiniCPM-4. Metin token'ları + ses latent'leri üzerinde koşullanır. |
| Residual LM | Rotary embedding'siz 8 katmanlı MiniCPM-4 varyantı. Üretilen her ses patch'i için base LM gizli durumunu rafine eder. |
| FSQ + Local DiT estimator | Skaler kuantize gizli durumlar, 4 patch boyutunda 64 boyutlu ses latent'leri üzerinde çalışan 12 katmanlı bir Diffusion Transformer (V2)'yi yönlendirir. CFG-zero-star Euler solver, varsayılan 10 zaman adımı. |
| AudioVAE V2 | Nedensel evrişimli kod çözücü. 16 kHz referans sesi okur ve 48 kHz dalga formu üretir (3× upsample dahili). |
| Stop head | LM gizli durumu üzerinde adım başına ikili sınıflandırıcı. Argmax = 1 olduğunda minTokens patch'ten sonra üretim biter. |
Paketler
Tümü openbmb/VoxCPM2 checkpoint'lerinden upstream PyTorch üzerinden dönüştürülmüş üç kuantizasyon varyantı. Kuantizasyon, LM / residual LM / DiT estimator / projeksiyon başlıkları içindeki Linear projeksiyonlara uygulanır; AudioVAE vocoder ise kuantize edilmesi ses kalitesini bozduğundan fp16/bf16'da kalır.
| Paket | Kuantizasyon | Boyut | HuggingFace |
|---|---|---|---|
| bf16 | Yok (referans) | ~5.0 GB | aufklarer/VoxCPM2-MLX-bf16 |
| int8 | MLX QuantizedLinear, group size 64 | ~3.0 GB | aufklarer/VoxCPM2-MLX-int8 |
| int4 | MLX QuantizedLinear, group size 64 | ~1.9 GB | aufklarer/VoxCPM2-MLX-int4 |
Round-trip ASR (Qwen3-ASR 0.6B, 8 cümlelik koşu, M serisi Apple Silicon):
| Varyant | WER | RTF |
|---|---|---|
| bf16 | 2.04 % | 1.38 |
| int8 | 0.00 % | 1.02 |
| int4 | 4.08 % | 0.83 |
int8 önerilen varsayılan değerdir — LM yolunda upstream Python pipeline'ıyla bit bit eşleşirken bf16'dan daha hızlı ve %40 daha küçüktür. int4, gündelik kullanım için kabul edilebilir WER ile en küçük pakettir.
Hızlı başlangıç
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
int8 / int4 paketini seçmek için açık bir model ID geçirin:
let tts = try await VoxCPM2TTSModel.fromPretrained(
modelId: "aufklarer/VoxCPM2-MLX-int8"
)
Ses tasarımı (talimat odaklı)
Doğal dilde bir stil açıklaması geçirin; model, referans ses örneği olmadan sentezi buna göre koşullandırır:
let audio = try await tts.generateVoxCPM2(
text: "Welcome to the show.",
instruct: "A young woman, gentle and warm voice."
)
Ses klonlama
16 kHz mono bir klipten tek referanslı klonlama:
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 — LM'nin sözcüksel bağlama da koşullanması, böylece prozodi ve aksanı daha sadık şekilde koruyabilmesi için hem referans sesi hem de eşleşen transkripti geçirin:
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
Flag'ler: --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, tekrarlanabilir sentez için --seed.
speech-swift TTS modülleri arasından seçim
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VoxCPM2 | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Parametreler | 82M | 0.6 / 1.7 B | 0.5B | 2B | 1.5B |
| Örnekleme frekansı | 24 kHz | 24 kHz | 24 kHz | 48 kHz | 24 kHz |
| Arka uç | CoreML (ANE) | MLX, CoreML | MLX | MLX | MLX |
| Diller | 10 | 10 | 9 | 30 | EN + ZH |
| Ses tasarımı | Sabit hazır ayarlar | — | — | Talimat odaklı | — |
| Ses klonlama | — | ICL referans | Zero-shot referans | Referans + ultimate | Ham ses + transkript |
| Uzun form | Kısa/orta | Streaming | Streaming | Streaming patch'ler | 90 dakikaya kadar |
…48 kHz çıktıya ihtiyaç duyduğunuzda (müzik / yayın uygulamaları) veya referans klip olmadan doğal dilde ses tasarımı istediğinizde. Daha küçük indirmeyle en yüksek kaliteli kısa form İngilizce TTS için CosyVoice3 veya Qwen3-TTS daha hafiftir. EN/ZH'de uzun form podcast / sesli kitap için VibeVoice 1.5B bu amaca özel tasarlanmıştır.
Sorumlu kullanım
Ses klonlama dahildir. Klonladığınız her ses için onay alın ve modeli kişileri taklit etmek, yanlış bilgi üretmek veya dolandırıcılık için kullanmayın. openbmb/VoxCPM2 kaynağındaki güvenlik kılavuzunun tamamı geçerlidir.