VibeVoice

Microsoft VibeVoice là một mô hình văn bản sang giọng nói định dạng dài, nhiều người nói cho tiếng Anh và tiếng Trung. Khác với TTS phát ngôn ngắn, mô hình được thiết kế để tạo ra hội thoại dài cỡ podcast, lồng tiếng sách nói và các cảnh nhiều người nói trong một lượt duy nhất — lên đến 90 phút với tối đa 4 giọng nói riêng biệt và bản sắc nhất quán xuyên suốt. Có hai biến thể: Realtime-0.5B cho streaming độ trễ thấp và 1.5B cho chất lượng đầu bảng ở định dạng dài.

Đặc điểm

Kiến trúc

Bốn thành phần phối hợp tạo ra âm thanh, mỗi lần một latent 7,5 Hz:

Thành phầnMô tả
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.

Ngôn ngữ

Theo thẻ mô hình của Microsoft: Realtime-0.5B chỉ hỗ trợ tiếng Anh (demo gốc đi kèm 9 voice prompt phi tiếng Anh mang tính thử nghiệm; chất lượng không được đảm bảo). 1.5B hỗ trợ tiếng Anh và tiếng Trung; các ngôn ngữ khác có thể tạo ra âm thanh nghe có vẻ hợp lý nhưng không trung thực và nên được coi là thử nghiệm.

Bản sắc giọng nói — hai con đường riêng biệt

Hai biến thể tiếp cận việc điều kiện hóa người nói theo cách rất khác nhau, và mỗi con đường có các ràng buộc đáng biết trước.

Realtime-0.5B — voice cache dựng sẵn

Bản sắc người nói đến từ một voice cache .safetensors tính trước, chứa các KV cache điều kiện và trạng thái ẩn cho một người nói cụ thể. Tải một cache là tức thì; một instance mô hình có thể đổi giọng nói với chi phí thấp giữa các lần tạo.

Checkpoint Realtime-0.5B được phân phối ở chế độ chỉ suy luận — Microsoft không cung cấp acoustic encoder, vì vậy voice cache không thể được tạo từ âm thanh thô đối với mô hình này. Nguồn được hỗ trợ là một trong các .pt voice cache dựng sẵn của Microsoft (Carter, Davis, Emma, Frank, Grace, Mike, Samuel cho tiếng Anh, cùng các giọng de/fr/it/jp/kr/nl/pl/pt mang tính thử nghiệm), được làm phẳng vào bố cục .safetensors mà loader này yêu cầu.

1.5B long-form — nhân bản giọng nói từ âm thanh thô

Checkpoint 1.5B đi kèm acoustic encoder, vì vậy nó có thể nhân bản một người nói tùy ý từ dạng sóng tham chiếu + bản chép lại trong một lượt duy nhất. Việc mã hóa được thực hiện inline trên mỗi lần gọi tổng hợp — không có tệp voice cache riêng để quản lý.

FYI: speech vibevoice-encode-voice bị chặn

Bề mặt CLI cho việc tạo voice cache offline đối với Realtime-0.5B sẽ thất bại nhanh kèm con trỏ dẫn đến quy trình âm thanh thô của 1.5B, vì trọng số encoder không có trong checkpoint 0.5B. Cho đến khi Microsoft cung cấp chúng, đây là con đường end-to-end duy nhất để nhân bản một người nói tùy chỉnh.

Mô hình

BundleLượng tử hóaKích thướcHuggingFace
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

Lượng tử hóa sử dụng group-wise affine quant của MLX (nhóm 32). Embedding, norm, các convolution của acoustic tokenizer và EOS classifier giữ nguyên dtype gốc.

Bắt đầu nhanh

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 khác)

1.5B có kiến trúc khác (Qwen2 LM hợp nhất, hai encoder, lấy mẫu token LM) nên được phát hành dưới dạng một lớp riêng — VibeVoice15BTTSModel. Âm thanh tham chiếu + văn bản đi trong một lời gọi duy nhất:

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
)

Không cần voice cache — mô hình mã hóa âm thanh tham chiếu qua cả acoustic_tokenizer (64-dim) lẫn semantic_tokenizer (128-dim, huấn luyện ASR) rồi cộng chúng tại các vị trí audio prompt. Việc sinh chạy lấy mẫu token LM rẽ nhánh trên <speech_diffusion> / <speech_end> / văn bản — chỉ khuếch tán một latent acoustic khi LM phát ra token speech.

Đã kiểm chứng bằng ASR trên M2 Max INT4 (RTFx 1,48): với đầu vào "Hello world. This is the one point five billion VibeVoice variant of the Microsoft text to speech model.", Nemotron chép lại đầu ra thành "hello world, this is the one point five billion via voice variant of the microsoft texas speech model" — tất cả các từ nội dung khớp, chỉ có thay thế âm học là VibeVoice → via voicetext to → texas.

Đổi giọng nói giữa các lần tạo

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 với voice cache đã chuyển đổi của Microsoft (tiếng Anh):

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

1.5B long-form với âm thanh tham chiếu thô + bản chép lại (nhân bản một người nói tùy ý, tiếng Anh hoặc tiếng Trung):

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

Các cờ: --steps (số bước DPM-Solver), --cfg (guidance), --model / --tokenizer để ghi đè ID HuggingFace, --long-form để chuyển sang preset 1.5B, --verbose để xem thời gian.

Chọn giữa các module TTS của speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VibeVoice RealtimeVibeVoice 1.5B
Tham số82M7B7B500M1.5B
BackendCoreML (ANE)MLXMLXMLXMLX
Ngôn ngữ810+10+Chỉ ENEN + ZH
Nhân bản giọng nóiPreset cố địnhTham chiếu ICLTham chiếu zero-shotChỉ voice cache dựng sẵnÂm thanh thô + bản chép lại
Định dạng dàiNgắn/trung bìnhStreamingStreamingStreamingLên đến 90 phút / 4 người nói
Chọn VibeVoice khi…

…bạn cần đầu ra định dạng dài, nhiều người nói, hoặc podcast/sách nói bằng tiếng Anh hoặc tiếng Trung, với bản sắc giọng nói nhất quán xuyên suốt nhiều phút âm thanh. Đối với TTS đa ngôn ngữ định dạng ngắn, Qwen3-TTS hoặc CosyVoice3 phù hợp hơn. Đối với phát ngôn ngắn bản địa trên iOS, Kokoro là lựa chọn nhỏ nhất.