Automatische vertaling · Engels origineel
VibeVoice
Microsoft VibeVoice is een lang-vorm, multi-luidspreker text-to-speech model voor Engels en Chinees. In tegenstelling tot korte-doorlating TTS, is het ontworpen om podcast-lengte dialoog, audioboekvertelling en multi-speaker scènes te genereren in een enkele pas . . tot 90 minuten met maximaal 4 verschillende stemmen en consistente identiteit doorheen. Twee varianten schip: Realtime-0.5B voor laag-latency streaming en 1,5B voor lang-form vlaggenschipkwaliteit.
Wat het is.
- Lange vorm in één pass tot 90 minuten audio met consistente stemmen over de gehele output; geen per-sententie overdracht
- Multi-sprekerdialoog 4 verschillende luidsprekers tegelijk, elk geconditioneerd door zijn eigen stem cache
- English + Chinees Getrainde audiogegevens zijn alleen EN/ZH; andere talen worden niet ondersteund (tokenizer accepteert ze maar de uitvoer is niet te begrijpen)
- 24 kHz mono uitgang Float32 PCM, inloop voor
AudioCommon.WAVWriterenStreamingAudioPlayer - MIT licentie andere modelgewichten en onze Swift poort zijn beide MIT; INT4 gequantiseerde derivaten zijn toegestaan
Architectuur
Vier samenwerkende componenten produceren audio een 7,5 Hz latent tegelijk:
| Onderdeel | Omschrijving |
|---|---|
| Splits Qwen2 ruggengraat | 24-layer Qwen2.5 decoder (896 verborgen, GQA 14/2 voor Realtime-0.5B). Het model is gesplitst: de onderste 4 lagen vormen een tekst LM, de bovenste 20 lagen draaien als TTS LM. Tekstvensters (5 tokens tegelijk) stromen door beide; gegenereerde spraak latenten stromen alleen door de TTS LM |
| σ-VAE akoestische tokenizer | Streaming conv stack die 24 kHz audio codeert naar een 64-dim latente op 7,5 Hz (3200× temporale downsample) en decodeert latentes terug naar golfvorm. Gebruikt voor zowel voice-cache creatie en uiteindelijk audio decoderen. |
| Verspreidingskop | Kleine 4-laags DDPM hoofd met adalN modulatie. Monsters elk spraak latent via 20-staps DPM-Solver met classifier-vrije begeleiding (cfg = 1,3 standaard voor Realtime-0.5B, 1,5 voor 1.5B). |
| EOS classifier | Per-stap binaire classifier op de laatst verborgen status van de TTS LM. Wanneer de sigmoid waarschijnlijkheid groter is dan 0.5, stopt de generatie. |
Talen
Per Microsoft's modelkaarten: Realtime-0.5B is alleen Engels (de upstream-demo verscheept negen niet-EN spraakprompts als verkennend; kwaliteit is niet gegarandeerd). 1,5B ondersteunt Engels en Chinees; andere talen kunnen plausibel klinkend maar ontrouw geluid produceren en moeten als experimenteel worden beschouwd.
Stemidentiteit Twee verschillende paden
De twee varianten nemen zeer verschillende benaderingen van de luidspreker conditionering, en elk pad heeft beperkingen de moeite waard te weten vooraf.
Realtime-0.5B
Speaker-identiteit komt van een voorberekende .safetensors voice cache met de conditioning KV caches en verborgen toestanden voor een specifieke speaker. Een cache laden is onmiddellijk; één model instantie kan stemmen goedkoop wisselen tussen generaties.
De Realtime-0.5B checkpoint wordt alleen met gevolg verspreid › Microsoft verstuurt de akoestische encoder niet, zodat stem caches niet kunnen worden geslagen van rauwe audio tegen dit model. De ondersteunde bron is één van Microsoft's voorgebouwde .pt spraak caches (Carter, Davis, Emma, Frank, Grace, Mike, Samuel voor Engels, plus verkennende de/fr/it/jp/kr/pl/pt stemmen), afgeplat in de .safetensors layout deze lader verwacht.
1.5B lange-vorm .. stem klonen van rauwe audio
Het 1.5B controlepunt verstuurt de akoestische encoder, zodat het een willekeurige speaker kan klonen vanuit een referentiegolfvorm + transcript in één shot. De codering wordt op elke synthesizeraanroep ingebonden .Er is geen apart voicecache bestand om te beheren.
speech vibevoice-encode-voice is gatedHet CLI-oppervlak voor het offline aanmaken van voice-cache tegen Realtime-0.5B zal snel falen met een pointer naar de 1.5B raw-audio workflow, aangezien de encodergewichten niet aanwezig zijn in het 0.5B-controlepunt. Totdat Microsoft ze verstuurt, is dit het enige end-to-end pad voor het klonen van een aangepaste luidspreker.
Model
| Bundel | Kwantisering | Grootte | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (bron) | ~1 GB | microsoft/VibeVoice-Realtime-0.5B |
| Realtime-0.5B INT4 | Qwen2 INT4, tokenmaker + diffusie FP16 | ~350 MB | aufklarer/VibeVoice-Realtime-0.5B-MLX-INT4 |
| Realtime-0.5B INT8 | Qwen2 INT8 | ~570 MB | aufklarer/VibeVoice-Realtime-0.5B-MLX-INT8 |
| 1.5B lange vorm | BF16 (bron) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1,5B INT4 (productie) | Qwen2 INT4 + dubbele encoders | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
Kwantisering maakt gebruik van MLX groepsgewijze affiene quant (32-groep). Inbeddingen, normen, akoestische-tokenizer convoluties en de EOS classifier blijven in hun bron dtype.
Snel starten
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 (verschillend API)
1.5B heeft een andere architectuur (geünificeerde Qwen2 LM, dubbele encoders, LM token sampling) dus het wordt geleverd als een aparte klasse, VibeVoice15BTTSModel. Referentie audio + tekst gaan in een enkele oproep:
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
)
Er is geen stemcache nodig om het model de referentieaudio te coderen via zowel acoustic_tokenizer (64-dim) als semantic_tokenizer (128-dim, ASR-getraind) en deze op audiopromptposities te berekenen. Generatie draait LM token sampling vertakte op <speech_diffusion> / <speech_end> / tekst . . diffuses een akoestische latente alleen wanneer de LM het spraakteken uitzendt.
ASR-geverifieerd op M2 Max INT4 (RTFx 1.48): voor invoer "Hallo wereld. Dit is de één punt vijf miljard VibeVoice variant van de Microsoft tekst naar spraak model.", Nemotron transcribeerde de uitvoer als "Hallo wereld, dit is het één punt vijf miljard via stemvariant van het microsoft texas spraakmodel" Elke inhoud woord overeenkomt, alleen akoestische substituties zijn VibeVoice → via stem en tekst naar → texas.
Stem wisselen tussen generaties
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 met een geconverteerde Microsoft voice cache (Engels):
speech vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
1.5B long-form met ruwe referentie audio + transcript (klonen van een willekeurige spreker, Engels of Chinees):
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
Vlaggen: --steps (DPM-Solver steps), --cfg (guidance), --model / --tokenizer om HuggingFace ID's over te slaan, --long-form om over te schakelen naar de 1,5B-preset, --verbose voor timing.
Selectie tussen speech-swift TTS modules
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice Realtime | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Params | 82M | 7B | 7B | 500M | 1.5B |
| Backend | CoreML (ANE) | MLX | MLX | MLX | MLX |
| Talen | 8 | 10+ | 10+ | Alleen NL | NL + ZH |
| Stemklonen | Vaste instellingen | ICL-referentie | Referentie nulschot | Uitsluitend voorgebouwde stemcaches | Raw audio + transcript |
| Lange vorm | Kort/middelgroot | Streaming | Streaming | Streaming | Tot 90 min / 4 speakers |
...je hebt lange-vorm, multi-luidspreker of podcast/audioboek uitvoer nodig in het Engels of Chinees, met consistente stemidentiteit over minuten audio. Voor korte-vorm meertalige TTS, Qwen3-TTS of CosyVoice3 zijn beter geschikt. Voor iOS-native korte uitingen, Kokoro is de kleinste optie.