VibeVoice

⚠ Übersetzung veraltet

Die englische Version wurde am 2026-05-10 mit Sprachunterstützung und Voice-Cloning-Workflows aktualisiert; die Übersetzung folgt. Aktuelle Inhalte siehe englische Version.

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 INT4 (production)Qwen2 INT4 + dual encoders~1 GBaufklarer/VibeVoice-1.5B-MLX-INT4

Die Quantisierung verwendet MLX-gruppenweise affine 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

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.

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

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

# Langform 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

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.