VibeVoice

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 INT4Qwen2 INT4~1 GBaufklarer/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 (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.