VibeVoice

Microsoft VibeVoice เป็นโมเดลข้อความเป็นเสียงพูดแบบยาวหลายผู้พูดสำหรับภาษาอังกฤษและจีน ต่างจาก TTS แบบประโยคสั้น โมเดลนี้ออกแบบมาเพื่อสร้างบทสนทนาความยาวระดับพอดแคสต์ การบรรยายหนังสือเสียง และฉากหลายผู้พูดในรอบเดียว — สูงสุด 90 นาที พร้อมเสียงที่แตกต่างกันถึง 4 เสียงและคงเอกลักษณ์ตลอดทั้งเรื่อง มีสองรุ่นย่อย: Realtime-0.5B สำหรับการสตรีมหน่วงต่ำ และ 1.5B สำหรับคุณภาพระดับเรือธงในรูปแบบยาว

คืออะไร

สถาปัตยกรรม

สี่ส่วนทำงานร่วมกันเพื่อสร้างเสียงทีละ 1 latent ที่ 7.5 Hz:

ส่วนประกอบคำอธิบาย
Split Qwen2 backbone24-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 tokenizerStreaming 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 headSmall 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 classifierPer-step binary classifier on the TTS LM's last hidden state. When sigmoid probability exceeds 0.5, generation stops.

ภาษา

ตามการ์ดโมเดลของ Microsoft: Realtime-0.5B รองรับเฉพาะภาษาอังกฤษ (เดโมต้นทางมาพร้อมกับ voice prompt ที่ไม่ใช่ภาษาอังกฤษ 9 ตัวสำหรับการสำรวจ คุณภาพไม่ได้รับการรับประกัน) 1.5B รองรับภาษาอังกฤษและจีน; ภาษาอื่นอาจสร้างเสียงที่ฟังดูสมเหตุสมผลแต่ไม่ตรงตามต้นฉบับและควรถือเป็นการทดลอง

เอกลักษณ์เสียง — สองเส้นทางที่แตกต่างกัน

สองรุ่นย่อยใช้วิธีการกำหนดเงื่อนไขผู้พูดที่ต่างกันมาก และแต่ละเส้นทางมีข้อจำกัดที่ควรทราบล่วงหน้า

Realtime-0.5B — voice cache สำเร็จรูป

เอกลักษณ์ผู้พูดมาจาก voice cache .safetensors ที่คำนวณไว้ล่วงหน้า ซึ่งประกอบด้วย KV cache สำหรับการกำหนดเงื่อนไขและสถานะซ่อนสำหรับผู้พูดเฉพาะ การโหลด cache เป็นไปอย่างทันที; โมเดลหนึ่งอินสแตนซ์สามารถสลับเสียงระหว่างการสร้างได้ในต้นทุนต่ำ

checkpoint Realtime-0.5B ถูกแจกจ่ายในโหมด inference เท่านั้น — Microsoft ไม่ได้แจกจ่าย acoustic encoder ดังนั้นจึงไม่สามารถสร้าง voice cache จากเสียงดิบสำหรับโมเดลนี้ได้ แหล่งที่รองรับคือหนึ่งใน .pt voice cache สำเร็จรูปของ Microsoft (Carter, Davis, Emma, Frank, Grace, Mike, Samuel สำหรับภาษาอังกฤษ บวกกับเสียง de/fr/it/jp/kr/nl/pl/pt เชิงสำรวจ) ที่ถูกแปลงเป็นรูปแบบ .safetensors ที่ loader นี้ต้องการ

1.5B long-form — การโคลนเสียงจากเสียงดิบ

checkpoint 1.5B มี acoustic encoder มาด้วย จึงสามารถโคลนผู้พูดใดก็ได้จากคลื่นเสียงอ้างอิง + บทถอดความในรอบเดียว การเข้ารหัสถูกทำแบบ inline ในการเรียกสังเคราะห์ทุกครั้ง — ไม่มีไฟล์ voice cache แยกที่ต้องจัดการ

FYI: speech vibevoice-encode-voice ถูกบล็อก

หน้าต่าง CLI สำหรับการสร้าง voice cache แบบออฟไลน์สำหรับ Realtime-0.5B จะล้มเหลวอย่างรวดเร็วพร้อมตัวชี้ไปยังเวิร์กโฟลว์เสียงดิบของ 1.5B เพราะน้ำหนัก encoder ไม่อยู่ใน checkpoint 0.5B จนกว่า Microsoft จะปล่อยออกมา นี่คือเส้นทาง end-to-end เดียวสำหรับการโคลนผู้พูดที่กำหนดเอง

โมเดล

BundleการลดความละเอียดขนาดHuggingFace
Realtime-0.5BBF16 (source)~1 GBmicrosoft/VibeVoice-Realtime-0.5B
Realtime-0.5B INT4Qwen2 INT4, tokenizer + diffusion FP16~350 MBaufklarer/VibeVoice-Realtime-0.5B-MLX-INT4
Realtime-0.5B INT8Qwen2 INT8~570 MBaufklarer/VibeVoice-Realtime-0.5B-MLX-INT8
1.5B long-formBF16 (source)~3 GBmicrosoft/VibeVoice-1.5B
1.5B INT4 (production)Qwen2 INT4 + dual encoders~1 GBaufklarer/VibeVoice-1.5B-MLX-INT4

การลดความละเอียดใช้ group-wise affine quant ของ MLX (กลุ่ม 32) Embedding, norm, convolution ของ acoustic tokenizer และ EOS classifier ยังคงเป็น 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

Long-form 1.5B (API ต่างกัน)

1.5B มีสถาปัตยกรรมที่ต่างกัน (Qwen2 LM แบบรวม dual encoder การสุ่มตัวอย่าง LM token) จึงถูกปล่อยออกมาเป็นคลาสแยก — 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
)

ไม่ต้องใช้ voice cache — โมเดลเข้ารหัสเสียงอ้างอิงผ่านทั้ง acoustic_tokenizer (64-dim) และ semantic_tokenizer (128-dim ฝึกแบบ ASR) แล้วรวมเข้าด้วยกันที่ตำแหน่ง audio prompt การสร้างทำการสุ่มตัวอย่าง LM token แตกแขนงตาม <speech_diffusion> / <speech_end> / ข้อความ — แพร่ acoustic latent เมื่อ LM ปล่อย speech token เท่านั้น

ตรวจสอบด้วย 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 พร้อม voice cache ของ Microsoft ที่แปลงแล้ว (ภาษาอังกฤษ):

speech vibevoice "Hello world." \
    --voice-cache voice_cache/en-Mike_man.safetensors \
    --output hello.wav

1.5B long-form พร้อมเสียงอ้างอิงดิบ + บทถอดความ (โคลนผู้พูดใดก็ได้ ภาษาอังกฤษหรือจีน):

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 (guidance), --model / --tokenizer เพื่อเขียนทับ ID ของ HuggingFace, --long-form เพื่อเปลี่ยนไปใช้ preset 1.5B, --verbose สำหรับดูเวลา

เลือกระหว่างโมดูล TTS ของ speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VibeVoice RealtimeVibeVoice 1.5B
พารามิเตอร์82M7B7B500M1.5B
BackendCoreML (ANE)MLXMLXMLXMLX
ภาษา810+10+EN เท่านั้นEN + ZH
การโคลนเสียงPreset คงที่ICL อ้างอิงอ้างอิงแบบ zero-shotเฉพาะ voice cache สำเร็จรูปเสียงดิบ + บทถอดความ
รูปแบบยาวสั้น/กลางStreamingStreamingStreamingสูงสุด 90 นาที / 4 ผู้พูด
เลือก VibeVoice เมื่อ…

…คุณต้องการเอาต์พุตแบบยาว หลายผู้พูด หรือพอดแคสต์/หนังสือเสียงในภาษาอังกฤษหรือจีน โดยมีเอกลักษณ์เสียงสม่ำเสมอตลอดเสียงหลายนาที สำหรับ TTS หลายภาษาแบบสั้น Qwen3-TTS หรือ CosyVoice3 เหมาะกว่า สำหรับประโยคสั้นแบบเนทีฟบน iOS Kokoro เป็นตัวเลือกที่เล็กที่สุด