VibeVoice
Microsoft VibeVoice نموذج تركيب كلام طويل المدى متعدّد المتحدّثين للإنجليزية والصينية. على خلاف وحدات تركيب الكلام للجُمل القصيرة، صُمِّم لتوليد حوارات بطول البودكاست، وسرد الكتب الصوتية، ومشاهد متعدّدة المتحدّثين في تمرير واحد — حتى 90 دقيقة بأربعة أصوات متمايزة وهويّة ثابتة طوال الإخراج. يصدر بصيغتين: Realtime-0.5B للبثّ بزمن استجابة منخفض، و1.5B لجودة قمّة طويلة المدى.
ما هو
- طويل المدى في تمرير واحد — حتى 90 دقيقة من الصوت بأصوات ثابتة عبر كامل المخرَج؛ بلا تسليم لكلّ جملة
- حوار متعدّد المتحدّثين — أربعة متحدّثين متمايزين في آن واحد، كلٌّ مُشترَط بذاكرة صوته الخاصّة
- الإنجليزية + الصينية — بيانات التدريب الصوتية بالإنجليزية/الصينية حصرًا؛ اللغات الأخرى غير مدعومة (يقبلها المُرمِّز لكنّ الإخراج غير مفهوم)
- إخراج أحاديّ بـ 24 kHz — PCM بصيغة Float32، يندمج مباشرة مع
AudioCommon.WAVWriterوStreamingAudioPlayer - رخصة MIT — أوزان النموذج ومنفذنا بلغة Swift كلاهما تحت MIT؛ والمُشتقّات المُكمَّمة بـ INT4 مسموحة
البنية
أربعة مكوّنات متعاونة تُنتج الصوت كُمونًا تلو الآخر بمعدّل 7.5 Hz:
| المكوِّن | الوصف |
|---|---|
| Split Qwen2 backbone | مفكِّك Qwen2.5 من 24 طبقة (896 مخفيًّا، GQA 14/2 لـ Realtime-0.5B). النموذج مقسوم: الطبقات الأربع السفلى تُكوِّن LM نصّيًّا، والطبقات العشرون العليا تعمل بوصفها LM لتركيب الكلام. تتدفّق نوافذ النصّ (5 رموز كلّ مرّة) عبر الاثنين؛ بينما تتدفّق كُمونات الكلام المُولَّدة عبر LM تركيب الكلام فقط. |
| σ-VAE acoustic tokenizer | مكدِّس تلافيفيّ بثّيّ يُرمِّز صوتًا بـ 24 kHz إلى كُمون 64 بُعدًا عند 7.5 Hz (تقليص زمنيّ 3200×) ويُفكِّك الكُمونات إلى موجة. يُستخدم في إنشاء ذاكرة الصوت وفي فكّ ترميز الصوت النهائيّ. |
| Diffusion head | رأس DDPM صغير من 4 طبقات مع تعديل adaLN. يُعاين كلّ كُمون كلام عبر DPM-Solver بـ 20 خطوة مع توجيه دون مُصنِّف (cfg = 1.3 افتراضًا لـ Realtime-0.5B، و1.5 لـ 1.5B). |
| EOS classifier | مُصنِّف ثنائيّ لكلّ خطوة على آخر حالة مخفيّة لـ LM تركيب الكلام. عند تجاوز احتمال السيجمويد 0.5، يتوقّف التوليد. |
اللغات
وفق بطاقات نماذج Microsoft: Realtime-0.5B بالإنجليزية فقط (يُقدّم العرض من المنبع تسعة موجِّهات صوتية غير إنجليزية على سبيل الاستكشاف؛ الجودة غير مضمونة). 1.5B يدعم الإنجليزية والصينية؛ وقد تُنتج اللغات الأخرى صوتًا يبدو معقولًا لكنّه غير أمين، ويجب اعتباره تجريبيًّا.
هويّة الصوت — مسلكان متمايزان
تتّبع الصيغتان نهجين مختلفين تمامًا في اشتراط المتحدّث، ولكلّ مسلك قيود يحسن معرفتها مسبقًا.
Realtime-0.5B — ذواكر صوت مُعدّة مسبقًا
تأتي هويّة المتحدّث من ذاكرة صوت .safetensors مسبقة الحساب تحتوي على ذواكر KV الاشتراطية والحالات المخفيّة لمتحدّث محدّد. تحميل الذاكرة فوريّ؛ وتستطيع نسخة واحدة من النموذج تبديل الأصوات بكلفة زهيدة بين عمليات التوليد.
تُوزَّع نقطة مرجع Realtime-0.5B بصيغة استدلال فقط — لا تشحن Microsoft المُرمِّز الصوتيّ، فلا يمكن صكّ ذواكر الصوت من صوت خامّ في مواجهة هذا النموذج. المصدر المدعوم هو إحدى ذواكر .pt الصوتية المُعدّة مسبقًا من Microsoft (Carter وDavis وEmma وFrank وGrace وMike وSamuel للإنجليزية، إضافة إلى أصوات استكشافية بالألمانية والفرنسية والإيطالية واليابانية والكورية والهولندية والبولندية والبرتغالية)، مع تسطيحها إلى تخطيط .safetensors الذي يتوقّعه هذا اللودر.
1.5B طويل المدى — استنساخ صوت من صوت خامّ
نقطة مرجع 1.5B تشحن المُرمِّز الصوتيّ، فتستطيع استنساخ متحدّث اعتباطيّ من موجة مرجعية + تفريغها في خطوة واحدة. الترميز يتمّ ضمنيًّا في كلّ استدعاء تركيب — لا توجد ذاكرة صوت منفصلة لإدارتها.
speech vibevoice-encode-voice محظورستفشل واجهة CLI لإنشاء ذواكر الصوت خارج الاتصال في مواجهة Realtime-0.5B بسرعة مع إشارة إلى مسار العمل بصوت خامّ في 1.5B، لأن أوزان المُرمِّز غير موجودة في نقطة مرجع 0.5B. حتى تشحنها Microsoft، فهذا هو المسار الوحيد من البداية إلى النهاية لاستنساخ متحدّث مخصّص.
النموذج
| الحزمة | الكَمَّنة | الحجم | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (المصدر) | ~1 GB | microsoft/VibeVoice-Realtime-0.5B |
| Realtime-0.5B INT4 | Qwen2 INT4، المُرمِّز + الانتشار 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 طويل المدى | BF16 (المصدر) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1.5B INT4 (للإنتاج) | Qwen2 INT4 + مُرمِّزان مزدوجان | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
تعتمد الكَمَّنة على كَمَّنة MLX الأفينية لكلّ مجموعة (مجموعة 32). تبقى التضمينات والـ norms وتلافيفات المُرمِّز الصوتيّ ومُصنِّف 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 طويل المدى (API مختلفة)
تختلف بنية 1.5B (LM موحَّد بـ Qwen2، مُرمِّزان مزدوجان، معاينة رموز LM)، فيُشحن بوصفه فئة منفصلة — VibeVoice15BTTSModel. يدخل الصوت المرجعيّ + النصّ في استدعاء واحد:
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
)
لا حاجة إلى ذاكرة صوت — يُرمِّز النموذج الصوت المرجعيّ عبر كلٍّ من acoustic_tokenizer (64 بُعدًا) وsemantic_tokenizer (128 بُعدًا، مُدرَّب على ASR) ويجمعهما في مواضع موجِّه الصوت. ويُشغِّل التوليد معاينة رموز LM متفرِّعة عند <speech_diffusion> / <speech_end> / النصّ — ويُحدث انتشار كُمون صوتيّ فقط حين يُصدر LM رمز الكلام.
تمّ التحقّق بـ ASR على M2 Max INT4 (RTFx 1.48): لدى إدخال "Hello world. This is the one point five billion VibeVoice variant of the Microsoft text to speech model."، فرَّغ Nemotron الإخراج بوصفه "hello world, this is the one point five billion via voice variant of the microsoft texas speech model" — كلّ كلمة محتوى متطابقة، والاستبدالات الصوتية الوحيدة هي VibeVoice → via voice وtext to → texas.
تبديل الأصوات بين عمليات التوليد
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 مع ذاكرة صوت Microsoft مُحوَّلة (الإنجليزية):
speech vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
1.5B طويل المدى مع صوت مرجعيّ خامّ + تفريغ (استنساخ متحدّث اعتباطيّ، الإنجليزية أو الصينية):
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
الرايات: --steps (خطوات DPM-Solver)، --cfg (التوجيه)، --model / --tokenizer لتجاوز مُعرِّفات HuggingFace، --long-form للانتقال إلى إعداد 1.5B، --verbose للتوقيتات.
كيف تختار بين وحدات تركيب الكلام في speech-swift
| 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 |
| استنساخ الصوت | إعدادات مسبقة ثابتة | مرجع ICL | مرجع zero-shot | ذواكر صوت مُعدّة مسبقًا فقط | صوت خامّ + تفريغ |
| طويل المدى | قصير / متوسّط | بثّ | بثّ | بثّ | حتى 90 دقيقة / 4 متحدّثين |
…تحتاج إلى إخراج طويل المدى أو متعدّد المتحدّثين أو بصيغة بودكاست/كتاب صوتي بالإنجليزية أو الصينية، مع هويّة صوت ثابتة عبر دقائق من الصوت. لتركيب كلام قصير متعدّد اللغات، فإنّ Qwen3-TTS أو CosyVoice3 أنسب. ولجُمل قصيرة أصلية على iOS، فإنّ Kokoro هو الخيار الأصغر.