Maskinöversättning · Engelskt original
VibeVoice
Microsoft VibeVoice är en långformig, multi-talare text-till-tal-modell för engelska och kinesiska. TTS, det är utformat för att generera podcast-längddialog, ljudboksberättelse och multi-talare scener i ett enda pass - upp till 90 minuter med upp till 4 Särskilda röster och konsekvent identitet överallt. Två varianter fartyg: Realtime-0.5B för låg latens streaming och 1.5B För långformad flaggskeppskvalitet.
Vad det är
- Långform i ett pass - upp till 90-minuter av ljud med konsekventa röster över hela utgången; ingen per-sentence handoff
- Multi-talar dialog - 4 distinkta högtalare samtidigt, varje konditionerad av sin egen röst cache
- Engelska + kinesiska — utbildade ljuddata är EN/ZH endast; andra språk stöds inte (tokenizer accepterar dem men utgången är ointelligibel)
- 24 kHz mono utgång -- Float32 PCM, drop-in för
AudioCommon.WAVWriterochStreamingAudioPlayer - MIT Licens -- modellvikter och vår Swift port är båda MIT; INT4 kvantiserade derivat är tillåtna
Arkitektur
Fyra samarbetskomponenter producerar ljud en 7,5 Hz latent i taget:
| Komponent | Beskrivning |
|---|---|
| Split Qwen2 ryggrad | 24-skikt Qwen2.5 decoder (896 dold, GQA 14/2 för Realtime-0.5B) Modellen är uppdelad: de nedre 4 lagren bildar en text LM, de övre 20 lagren körs som TTS LM Text windows (5 tokens at a time) flöde genom båda; genererade tal latenta flödet endast genom TTS LM. |
| Akustisk tokenizer | Streaming konv stack som kodar 24 kHz ljud till en 64-dim latent vid 7,5 Hz (3200 × temporal downsample) och avkodar latenta tillbaka till vågform. Används för både röst-cache skapande och slutlig ljudavkodning. |
| Diffusion huvud | Små 4-skikts DDPM-huvud med adaLN-modulering. Prover varje tal latent via 20-stegs DPM-Solver med klassificeringsfri vägledning (cfg = 1,3 standard för Realtime-0.5B, 1,5 för 1,5B). |
| EOS klassificerare | Per-steg binär klassificerare på TTS LMs sista dolda tillstånd. När signmoid sannolikhet överstiger 0,5, generations stopp. |
Språk
Per Microsofts modellkort: Realtime-0.5B är endast engelska (uppströms demofartygen nio icke-EN-röstankar som utforskande; kvaliteten garanteras inte). 1.5B stöder engelska och kinesiska; andra språk kan producera plausibelt ljud men otroget ljud och bör betraktas som experimentellt.
Röstidentitet - två distinkta vägar
De två varianterna tar mycket olika tillvägagångssätt för högtalarkonditionering, och varje väg har begränsningar som är värda att känna sig framme.
Realtime-0.5B - förbyggd röst caches
Högtalaridentitet kommer från en precomputed .safetensors röst cache som innehåller den konditionerande KV caches och dolda stater för en specifik högtalare. Ladda en cache är omedelbar; en modell instans kan byta röster billigt mellan generationer.
Realtime-0.5B checkpoint distribueras endast inferens. – Microsoft skickar inte den akustiska kodaren, så röstcatcher kan inte brytas från rå ljud mot denna modell. Den stödda källan är en av Microsofts förbyggda .pt Röst Caches (Carter, Davis, Emma, Frank, Grace, Mike, Samuel för engelska, plus utforskande de/fr/it/jp/kr/nl/pl/pt-röster), plattat in i .safetensors layout denna lastare förväntar sig.
1.5B long-form - röst kloning från rå ljud
1.5B-kontrollpunkten does skickar den akustiska kodaren, så det kan klona en godtycklig högtalare från en referensvågform + transkript i ett skott. Kodningen är inriktad på varje syntessamtal - det finns ingen separat röst-cache-fil för att hantera.
speech vibevoice-encode-voice är gatedCLI-ytan för offline röstcache-skapande mot Realtime-0.5B kommer att misslyckas snabbt med en pekar på 1.5B-rå-audio-arbetsflödet, eftersom kodarens vikter inte finns i 0.5B-kontrollpunkten. Tills Microsoft skickar dem är detta den enda slut-to-end-vägen för att klona en anpassad högtalare.
Modell
| Bundle | Kvantisering | Storlek | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (källa) | 1 GB | microsoft/VibeVoice-Realtime-0.5B |
| Realtime-0.5B INT4 | Qwen2 INT4, tokenizer + diffusion 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 långformat | BF16 (källa) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1.5B INT4 (produktion) | Qwen2 INT4 + dubbla kodare | 1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
Quantization använder MLX gruppvis affin kvant (32-grupp). Inbäddningar, normer, akustik-tokenizer konvolutioner, och EOS-klassificeraren stannar i sin källa dtype.
Snabbstart
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
Långform 1,5B (annorlunda API)
1.5B har en annan arkitektur (enhetlig Qwen2 LM, dubbla kodare, LM-tokenprovtagning) så att den skickas som en separat klass - VibeVoice15BTTSModel. Referensljud + text går i ett enda samtal:
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
)
Ingen röst cache behövs - modellen kodar referensljudet genom både acoustic_tokenizer (64-dim) och semantic_tokenizer (128-dim, ASR-utbildad) och summerar dem på ljudprompt positioner. Generation driver LM-tokenprovtagning som förgrenas på <speech_diffusion> / <speech_end>
ASR-verifierad på M2 Max INT4 (RTFx 1.48): för inmatning "Hej världen. Detta är den ena punkten fem miljarder VibeVoice varianten av Microsoft texten till talmodellen."Nemotron transkriberade utgången som "Hej världen, det här är den ena punkten fem miljarder via röstvariant av den mikrosofta texas talmodellen." varje innehåll ord matchas, endast akustiska substitutioner är VibeVoice → via röst och Text till Texas.
Swap röster mellan generationer
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 med en konverterad Microsoft-röstcache (engelska):
speech vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
1.5B långform med rå referensljud + transkript (stängning av en godtycklig högtalare, engelska eller kinesiska):
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
Flaggor: --steps (DPM-Solver steg), --cfg (vägledning), --model / --tokenizer för att åsidosätta HuggingFace-ID, --long-form byta till 1.5B-förinställda, --verbose för timing.
Välja bland speech-swift TTS moduler
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice realtid | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Params | 82M | 7B | 7B | 500M | 1.5B |
| Backend | CoreML (ANE) | MLX | MLX | MLX | MLX |
| Språk | 8 | 10+ | 10+ | EN endast | EN + ZH |
| Röstkloning | Fasta förinställningar | ICL referens | Zero-Shot referens | Pre-byggd röst caches endast | Rå ljud + transkript |
| Långformig | Kort/medium | Streaming | Streaming | Streaming | Upp till 90 min/4 högtalare |
...du behöver långformig, multi-talare eller podcast/audiobook-utgång på engelska eller kinesiska, med konsekvent röstidentitet över ljudminuter. För kortformig flerspråkig TTS, Qwen3-TTS eller CosyVoice3 är bättre passformer. för iOS-inhemska korta uttalanden, Kokoro är det minsta alternativet.