VibeVoice
Microsoft VibeVoice अंग्रेज़ी और चीनी के लिए एक लंबे-रूप, बहु-वक्ता टेक्स्ट-टू-स्पीच मॉडल है। छोटे उच्चारणों के TTS के विपरीत, यह एक ही पास में पॉडकास्ट-लंबाई के संवाद, ऑडियोबुक नैरेशन, और बहु-वक्ता दृश्य तैयार करने के लिए डिज़ाइन किया गया है — 90 मिनट तक, 4 अलग-अलग वॉयस तक, और पूरे आउटपुट में एक समान पहचान बनाए रखते हुए। दो वेरिएंट उपलब्ध हैं: कम-लेटेंसी स्ट्रीमिंग के लिए Realtime-0.5B, और लंबे-रूप फ्लैगशिप क्वालिटी के लिए 1.5B।
यह क्या है
- एक पास में लंबे-रूप — पूरे आउटपुट में एक समान वॉयस के साथ 90 मिनट तक का ऑडियो; कोई वाक्य-दर-वाक्य हैंडऑफ़ नहीं
- बहु-वक्ता संवाद — एक साथ 4 अलग-अलग वक्ता, प्रत्येक अपने voice cache से कंडीशन्ड
- अंग्रेज़ी + चीनी — प्रशिक्षण ऑडियो डेटा केवल EN/ZH है; अन्य भाषाएँ समर्थित नहीं हैं (टोकनाइज़र स्वीकार करता है लेकिन आउटपुट समझ में नहीं आता)
- 24 kHz मोनो आउटपुट — Float32 PCM,
AudioCommon.WAVWriterऔरस्ट्रीमिंगAudioPlayerके लिए सीधे उपयोग योग्य - MIT लाइसेंस — मॉडल वज़न और हमारा Swift पोर्ट दोनों MIT हैं; INT4 क्वांटाइज़्ड व्युत्पन्न अनुमत हैं
आर्किटेक्चर
चार सहयोगी घटक एक बार में एक 7.5 Hz लेटेंट के हिसाब से ऑडियो उत्पन्न करते हैं:
| घटक | विवरण |
|---|---|
| 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 | स्ट्रीमिंग 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. |
voice-cache के माध्यम से वॉयस क्लोनिंग
जनरेशन के समय वक्ता की पहचान संदर्भ वेवफ़ॉर्म से नहीं आती। बल्कि, प्रत्येक वॉयस एक पूर्व-गणना किए .safetensors voice cache के रूप में आती है जिसमें किसी विशेष वक्ता के लिए कंडीशनिंग KV कैश और हिडन स्टेट होते हैं — संदर्भ ऑडियो को एनकोडर पथ से ऑफ़लाइन गुज़ारकर बनाया जाता है। रनटाइम पर voice cache लोड करना तत्काल है; एक मॉडल इंस्टेंस जनरेशनों के बीच कम लागत में वॉयस बदल सकता है।
उदाहरण voice caches (MIT-लाइसेंसित): mzbac/vibevoice.swift/voice_cache — Carter, Davis, Emma, Frank, Grace, Mike और भारतीय एक्सेंट वाला Samuel सहित 7 अंग्रेज़ी वॉयस।
मॉडल
| बंडल | क्वांटाइज़ेशन | साइज़ | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (source) | ~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 (source) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1.5B INT4 | Qwen2 INT4 | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
क्वांटाइज़ेशन models/vibevoice/export/convert.py द्वारा MLX ग्रुप-वार एफ़ाइन क्वांट (32-ग्रुप) से उत्पन्न होता है। एम्बेडिंग्स, नॉर्म्स, acoustic-tokenizer कॉन्वोल्यूशन और EOS क्लासिफ़ायर अपने स्रोत dtype में रहते हैं।
त्वरित शुरुआत
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
लंबे-रूप 1.5B प्रीसेट
let config = VibeVoiceTTSModel.Configuration.longForm1_5B
let tts = try await VibeVoiceTTSModel.fromPretrained(configuration: config)
try tts.loadVoice(from: "voices/narrator.safetensors")
let pcm = try await tts.generate(text: longTranscript) // up to ~90 min
longForm1_5B प्रीसेट maxSpeechTokens को 4000 और cfgScale को 1.5 तक बढ़ाता है, ताकि लंबे-रूप का आउटपुट उच्च-फ़िडेलिटी का हो।
जनरेशन के बीच वॉयस बदलें
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
audio vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
# लंबे-रूप 1.5B
audio vibevoice "Long paragraph ..." \
--voice-cache voices/narrator.safetensors \
--long-form \
--max-tokens 4000 \
--output episode.wav
फ़्लैग: --steps (DPM-Solver स्टेप्स), --cfg (गाइडेंस), --model / --tokenizer HuggingFace IDs को ओवरराइड करने के लिए, --long-form 1.5B प्रीसेट पर स्विच के लिए, --verbose टाइमिंग के लिए।
speech-swift TTS मॉड्यूल्स में से चुनाव
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice Realtime | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| पैरामीटर | 82M | 7B | 7B | 500M | 1.5B |
| बैकएंड | CoreML (ANE) | MLX | MLX | MLX | MLX |
| भाषाएँ | 8 | 10+ | 10+ | EN/ZH | EN/ZH |
| वॉयस क्लोनिंग | तय प्रीसेट | ICL संदर्भ | ज़ीरो-शॉट संदर्भ | voice cache | voice cache |
| लंबे-रूप | छोटा/मध्यम | स्ट्रीमिंग | स्ट्रीमिंग | स्ट्रीमिंग | 90 मिनट तक / 4 वक्ता |
…आपको अंग्रेज़ी या चीनी में लंबे-रूप, बहु-वक्ता, या पॉडकास्ट / ऑडियोबुक आउटपुट चाहिए, और कई मिनटों के ऑडियो में एक समान वॉयस पहचान बनाए रखनी हो। छोटे-रूप बहुभाषी TTS के लिए Qwen3-TTS या CosyVoice3 बेहतर हैं। iOS-नेटिव छोटे उच्चारणों के लिए सबसे छोटा विकल्प Kokoro है।