VibeVoice

Microsoft VibeVoice ist ein Langform-/Multi-Speaker-TTS-Modell für Englisch und Chinesisch. Anders als TTS für kurze Äußerungen ist es darauf ausgelegt, podcastlange Dialoge, Hörbuchnarration und Multi-Speaker-Szenen in einem einzigen Durchgang zu erzeugen — bis zu 90 Minuten mit bis zu 4 verschiedenen Stimmen und durchgängig konsistenter Identität. Zwei Varianten sind verfügbar: Realtime-0.5B für latenzarmes Streaming und 1.5B für Flaggschiff-Qualität in Langform.

Was es ist

Architektur

Vier zusammenarbeitende Komponenten erzeugen Audio jeweils ein 7,5-Hz-Latent zur Zeit:

KomponenteBeschreibung
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.

Stimmklonen über Voice-Cache

Die Sprecheridentität kommt zur Generierungszeit nicht aus einer Referenzwellenform. Stattdessen wird jede Stimme als vorberechneter .safetensors-Voice-Cache ausgeliefert, der die Konditionierungs-KV-Caches und Hidden-States für einen bestimmten Sprecher enthält — erzeugt durch Offline-Durchlauf des Referenzaudios durch den Encoder. Das Laden eines Voice-Cache ist zur Laufzeit instantan; eine Modellinstanz kann zwischen Generierungen kostengünstig die Stimme wechseln.

Beispiel-Voice-Caches (MIT-lizenziert): mzbac/vibevoice.swift/voice_cache — 7 englische Stimmen inklusive Carter, Davis, Emma, Frank, Grace, Mike und dem indisch akzentuierten Samuel.

Modell

BundleQuantisierungGrößeHuggingFace
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

Die Quantisierung erzeugt models/vibevoice/export/convert.py mit MLX-gruppenweiser affiner Quantisierung (32er-Gruppen). Embeddings, Normalisierungen, Acoustic-Tokenizer-Faltungen und der EOS-Klassifikator behalten ihren ursprünglichen Dtype.

Schnellstart

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

Langform-1.5B-Preset

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

Das Preset longForm1_5B hebt maxSpeechTokens auf 4000 und cfgScale auf 1.5 für höhere Klangtreue im Langform-Output an.

Stimmen zwischen Generierungen wechseln

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

# Langform 1.5B
audio vibevoice "Long paragraph ..." \
    --voice-cache voices/narrator.safetensors \
    --long-form \
    --max-tokens 4000 \
    --output episode.wav

Flags: --steps (DPM-Solver-Schritte), --cfg (Guidance), --model / --tokenizer zum Überschreiben der HuggingFace-IDs, --long-form für das 1.5B-Preset, --verbose für Zeitmessung.

Auswahl unter den TTS-Modulen von speech-swift

Kokoro-82MQwen3-TTSCosyVoice3VibeVoice RealtimeVibeVoice 1.5B
Parameter82M7B7B500M1.5B
BackendCoreML (ANE)MLXMLXMLXMLX
Sprachen810+10+EN/ZHEN/ZH
StimmklonenFeste PresetsICL-ReferenzZero-Shot-ReferenzVoice-CacheVoice-Cache
LangformKurz/MittelStreamingStreamingStreamingBis zu 90 Min. / 4 Sprecher
Wähle VibeVoice, wenn…

…du Langform-, Multi-Speaker- oder Podcast-/Hörbuch-Output in Englisch oder Chinesisch benötigst, mit konsistenter Stimmidentität über minutenlanges Audio. Für mehrsprachiges Kurzform-TTS passen Qwen3-TTS oder CosyVoice3 besser. Für iOS-native Kurzäußerungen ist Kokoro die kleinste Option.