VibeVoice
Microsoft VibeVoice, İngilizce ve Çince için uzun biçimli, çok konuşmacılı bir metinden konuşmaya modelidir. Kısa söyleyiş TTS modellerinden farklı olarak, podcast uzunluğunda diyaloglar, sesli kitap anlatımları ve çok konuşmacılı sahneleri tek bir geçişte üretmek için tasarlanmıştır — en fazla 4 farklı sesle ve tamamı boyunca tutarlı kimlikle 90 dakikaya kadar. İki varyantla geliyor: düşük gecikmeli streaming için Realtime-0.5B ve uzun biçimde amiral gemisi kalite için 1.5B.
Nedir
- Tek geçişte uzun biçim — tüm çıktı boyunca tutarlı seslerle 90 dakikaya kadar ses; cümle başına devir yok
- Çok konuşmacılı diyalog — aynı anda 4 farklı konuşmacı, her biri kendi voice cache'i ile koşullandırılır
- İngilizce + Çince — eğitim ses verisi yalnızca EN/ZH'dir; diğer diller desteklenmez (tokenizer kabul eder ama çıktı anlaşılmaz)
- 24 kHz mono çıktı — Float32 PCM,
AudioCommon.WAVWriterveStreamingAudioPlayeriçin doğrudan kullanıma uygun - MIT lisansı — model ağırlıkları ve Swift portumuzun her ikisi de MIT'dir; INT4 nicelenmiş türevlere izin verilir
Mimari
Dört iş birliği yapan bileşen, seferinde bir 7,5 Hz latent ile ses üretir:
| Bileşen | Açıklama |
|---|---|
| Split Qwen2 backbone | 24-layer Qwen2.5 decoder (896 hidden, GQA 14/2 for Realtime-0.5B). The model is split: the lower 4 layers form a text LM, the upper 20 layers run as the TTS LM. Text windows (5 tokens at a time) flow through both; generated speech latents flow only through the TTS LM. |
| σ-VAE acoustic tokenizer | Streaming conv stack that encodes 24 kHz audio to a 64-dim latent at 7.5 Hz (3200× temporal downsample) and decodes latents back to waveform. Used for both voice-cache creation and final audio decode. |
| Diffusion head | Small 4-layer DDPM head with adaLN modulation. Samples each speech latent via 20-step DPM-Solver with classifier-free guidance (cfg = 1.3 default for Realtime-0.5B, 1.5 for 1.5B). |
| EOS classifier | Per-step binary classifier on the TTS LM's last hidden state. When sigmoid probability exceeds 0.5, generation stops. |
Diller
Microsoft'un model kartlarına göre: Realtime-0.5B yalnızca İngilizcedir (üst akış demosu keşif amaçlı dokuz EN dışı voice prompt sunar; kalite garanti edilmez). 1.5B İngilizce ve Çinceyi destekler; diğer diller akla yakın ses çıkarabilir ama sadakatli olmayabilir ve deneysel olarak değerlendirilmelidir.
Ses kimliği — iki farklı yol
İki varyant konuşmacı koşullandırmasına çok farklı yaklaşımlar sergiler ve her yolun önceden bilinmeye değer kısıtlamaları vardır.
Realtime-0.5B — hazır voice cache'leri
Konuşmacı kimliği, belirli bir konuşmacı için koşullandırma KV cache'lerini ve gizli durumlarını içeren, önceden hesaplanmış bir .safetensors voice cache'inden gelir. Bir cache yüklemek anlıktır; tek bir model örneği üretimler arasında sesleri ucuza değiştirebilir.
Realtime-0.5B checkpoint'i yalnızca çıkarım amaçlı dağıtılır — Microsoft acoustic encoder'ı yayımlamaz; bu nedenle bu modele karşı ham sesten voice cache üretilemez. Desteklenen kaynak, Microsoft'un hazır .pt voice cache'lerinden (İngilizce için Carter, Davis, Emma, Frank, Grace, Mike, Samuel; ayrıca keşif amaçlı de/fr/it/jp/kr/nl/pl/pt sesleri) biridir; bu loader'ın beklediği .safetensors düzenine düzleştirilmiştir.
1.5B long-form — ham sesten ses klonlama
1.5B checkpoint'i acoustic encoder'ı içerir; bu nedenle bir referans dalga formu + transkriptten tek seferde rastgele bir konuşmacıyı klonlayabilir. Kodlama her sentez çağrısında satır içi yapılır — yönetilecek ayrı bir voice-cache dosyası yoktur.
speech vibevoice-encode-voice kapalıdırRealtime-0.5B'ye karşı çevrimdışı voice-cache üretimi için CLI yüzeyi, encoder ağırlıkları 0.5B checkpoint'inde bulunmadığından, hızla başarısız olur ve 1.5B ham ses iş akışına yönlendiren bir ipucu verir. Microsoft bunları yayımlayana kadar, özel bir konuşmacıyı klonlamak için uçtan uca tek yol budur.
Model
| Paket | Niceleme | Boyut | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (kaynak) | ~1 GB | microsoft/VibeVoice-Realtime-0.5B |
| Realtime-0.5B INT4 | Qwen2 INT4, tokenizer + diffusion FP16 | ~350 MB | aufklarer/VibeVoice-Realtime-0.5B-MLX-INT4 |
| Realtime-0.5B INT8 | Qwen2 INT8 | ~570 MB | aufklarer/VibeVoice-Realtime-0.5B-MLX-INT8 |
| 1.5B long-form | BF16 (kaynak) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1.5B INT4 (üretim) | Qwen2 INT4 + çift encoder | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
Niceleme, MLX grup tabanlı affine quant kullanır (32 grup). Embedding'ler, norm'lar, acoustic-tokenizer convolution'ları ve EOS classifier kendi kaynak dtype'larında kalır.
Hızlı başlangıç
import VibeVoiceTTS
let tts = try await VibeVoiceTTSModel.fromPretrained()
try tts.loadVoice(from: "/path/to/voice_cache/en-Mike_man.safetensors")
let pcm = try await tts.generate(text: "Hello world.")
// pcm: [Float] at 24 kHz mono
Long-form 1.5B (farklı API)
1.5B farklı bir mimariye sahiptir (birleşik Qwen2 LM, çift encoder, LM token örnekleme); bu nedenle ayrı bir sınıf olarak gelir — VibeVoice15BTTSModel. Referans ses + metin tek bir çağrıda gider:
let tts = try await VibeVoice15BTTSModel.fromPretrained()
let pcm = try await tts.generate(
text: "Long English script.",
referenceAudio: refSamples, // [Float] mono speech, any rate
referenceTranscript: "",
sampleRate: 24000
)
Voice cache gerekmez — model referans sesi hem acoustic_tokenizer (64-dim) hem de semantic_tokenizer (128-dim, ASR ile eğitilmiş) üzerinden kodlar ve audio prompt konumlarında bunları toplar. Üretim, <speech_diffusion> / <speech_end> / metin üzerinde dallandırılmış LM token örneklemesi yapar — yalnızca LM speech token'ı yaydığında bir akustik latent'i difüzyona uğratır.
M2 Max INT4 üzerinde ASR ile doğrulandı (RTFx 1,48): "Hello world. This is the one point five billion VibeVoice variant of the Microsoft text to speech model." girdisi için Nemotron çıktıyı "hello world, this is the one point five billion via voice variant of the microsoft texas speech model" olarak transkribe etti — tüm içerik kelimeleri eşleşti; yalnızca akustik ikameler VibeVoice → via voice ve text to → texas'tı.
Üretimler arasında sesleri değiştir
try tts.loadVoice(from: "en-Mike_man.safetensors")
let a = try await tts.generate(text: "First speaker line.")
try tts.loadVoice(from: "en-Emma_woman.safetensors")
let b = try await tts.generate(text: "Second speaker line.")
CLI
Realtime-0.5B, dönüştürülmüş bir Microsoft voice cache ile (İngilizce):
speech vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
1.5B long-form, ham referans ses + transkript ile (rastgele bir konuşmacıyı klonlamak, İngilizce veya Çince):
speech vibevoice "Long paragraph ..." \
--long-form \
--reference-audio voice.wav \
--reference-transcript "what was actually said in voice.wav" \
--max-tokens 4000 \
--output episode.wav
Bayraklar: --steps (DPM-Solver adımları), --cfg (guidance), HuggingFace ID'lerini geçersiz kılmak için --model / --tokenizer, 1.5B preset'ine geçmek için --long-form, zamanlama için --verbose.
speech-swift TTS modülleri arasından seçim
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice Realtime | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Parametreler | 82M | 7B | 7B | 500M | 1.5B |
| Backend | CoreML (ANE) | MLX | MLX | MLX | MLX |
| Diller | 8 | 10+ | 10+ | Yalnızca EN | EN + ZH |
| Ses klonlama | Sabit preset'ler | ICL referans | Zero-shot referans | Yalnızca hazır voice cache'leri | Ham ses + transkript |
| Uzun biçim | Kısa/orta | Streaming | Streaming | Streaming | 90 dakikaya / 4 konuşmacıya kadar |
…İngilizce veya Çincede uzun biçimli, çok konuşmacılı ya da podcast/sesli kitap çıktısına ihtiyacınız olduğunda — dakikalarca ses boyunca tutarlı ses kimliğiyle. Kısa biçimli çok dilli TTS için Qwen3-TTS veya CosyVoice3 daha uygundur. iOS-yerel kısa söyleyişler için Kokoro en küçük seçenektir.