VibeVoice

⚠ Перевод устарел

Английская версия обновлена 2026-05-10: уточнены языковая поддержка и сценарии клонирования голоса. Перевод будет обновлён позже. Актуальное содержимое — в английской версии.

Microsoft VibeVoice — это модель синтеза речи для длинных форм и многих голосов, поддерживающая английский и китайский. В отличие от TTS для коротких реплик, она спроектирована, чтобы за один проход создавать диалоги длиной с подкаст, нарративы аудиокниг и сцены с несколькими спикерами — до 90 минут, до 4 разных голосов, с сохранением единой идентичности на всём отрезке. Доступны две версии: Realtime-0.5B для потокового режима с низкой задержкой и 1.5B для флагманского качества длинных форм.

Что это

Архитектура

Четыре взаимодействующих компонента производят аудио по одному латенту 7,5 Гц за шаг:

КомпонентОписание
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 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 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.

Клонирование голоса через voice-cache

Личность спикера во время генерации не берётся из эталонной волны. Вместо этого каждый голос поставляется как заранее посчитанный .safetensors voice cache, содержащий условные KV-кэши и скрытые состояния для конкретного спикера — он создаётся офлайн, прогоняя эталонное аудио через энкодер. Загрузка voice cache в рантайме мгновенна; один экземпляр модели может дешево переключать голоса между генерациями.

Примеры voice cache (лицензия MIT): mzbac/vibevoice.swift/voice_cache — 7 английских голосов, включая Carter, Davis, Emma, Frank, Grace, Mike и Samuel с индийским акцентом.

Модель

БандлКвантизацияРазмер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

Квантизация производится групповой аффинной квантизацией 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

Long-form 1.5B (different API)

1.5B has a different architecture (unified Qwen2 LM, dual encoders, LM token sampling) so it ships as a separate class — VibeVoice15BTTSModel. Reference audio + text go in a single call:

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
)

No voice cache needed — the model encodes the reference audio through both acoustic_tokenizer (64-dim) and semantic_tokenizer (128-dim, ASR-trained) and sums them at audio prompt positions. Generation runs LM token sampling branched on <speech_diffusion> / <speech_end> / text — diffuses an acoustic latent only when the LM emits the speech token.

ASR-verified on M2 Max INT4 (RTFx 1.48): for input "Hello world. This is the one point five billion VibeVoice variant of the Microsoft text to speech model.", Nemotron transcribed the output as "hello world, this is the one point five billion via voice variant of the microsoft texas speech model" — every content word matched, only acoustic substitutions are VibeVoice → via voice and 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

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 reference_speech.wav \
    --reference-transcript "exact transcript of the reference" \
    --max-tokens 500 --steps 20 \
    --output episode.wav

Флаги: --steps (шаги DPM-Solver), --cfg (guidance), --model / --tokenizer для переопределения HuggingFace ID, --long-form для переключения на пресет 1.5B, --verbose — тайминги.

Выбор между TTS-модулями speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VibeVoice RealtimeVibeVoice 1.5B
Параметры82M7B7B500M1.5B
БэкендCoreML (ANE)MLXMLXMLXMLX
Языки810+10+EN/ZHEN/ZH
Клонирование голосаФиксированные пресетыICL-референсZero-shot референсVoice cacheVoice cache
Длинная формаКоротко/среднеСтримингСтримингСтримингДо 90 мин / 4 спикера
Выбирайте VibeVoice, когда…

…вам нужен длинный, многоголосый или подкаст/аудиокнижный вывод на английском или китайском, с согласованной голосовой идентичностью на протяжении минут аудио. Для коротких многоязычных TTS лучше подойдут Qwen3-TTS или CosyVoice3. Для нативных коротких реплик на iOS самый компактный вариант — Kokoro.