Maskinoversettelse · Engelsk original
VibeVoice
Microsoft VibeVoice er en langformet, flerspråklig tekst-til-speech-modell for engelsk og kinesisk. I motsetning til kortspilling TTS, er det designet for å generere podcast-lengde dialog, audiobook-narrasjon og multi-speaker scener i et enkelt pass - opp til 90 minutter med opptil 4 forskjellige stemmer og konsistent identitet i hele. To varianter skip: Realtime-0.5B for lav-latens streaming og 1,5B for langformet flaggskipskvalitet.
Hva det er
- Long-form i ett pass - opp til 90 minutters lyd med konsistente stemmer på tvers av hele utgangen; ingen per-sentence-avlevering
- Multi-speaker dialog - 4 forskjellige høyttalere på én gang, som hver betinges av sin egen stemmecache
- Engelsk + kinesisk - utdannet lyddata er EN/ZH kun; andre språk støttes ikke (tokenizer aksepterer dem, men utgangen er uforståelig)
- 24 kHz monoutgang — Float32 PCM, drop-in for
AudioCommon.WAVWriterogStreamingAudioPlayer - MIT lisens - modellvekter og vår Swift port er begge MIT; INT4 kvantiserte derivater er tillatt
Arkitektur
Fire samarbeidskomponenter produserer lyd en 7,5 Hz latent om gangen:
| Komponent | Beskrivelse |
|---|---|
| Splitt Qwen2 ryggrad | 24-lag Qwen2.5 dekoder (896 skjult, GQA 14/2 for Realtime-0.5B). Modellen er delt: de nedre 4 lagene danner en tekst LM, de øvre 20 lagene kjører som TTS LM. Tekstvinduer (5 polletter om gangen) strømmer gjennom begge; generert tale latenter flyter bare gjennom TTS LM |
| CAS-VAE akustisk tokenizer | Streaming konv stabel som koder 24 kHz-lyd til en 64-dim latent ved 7,5 Hz (3200× timelig downsample) og dekoder latenter tilbake til bølgeform. Brukes for både tale-kache opprettelse og sluttlyddekode. |
| Diffusionshode | Liten 4-lags DDPM-hode med adaLN-modulasjon. Prøver hver tale latent via 20-trinns DPM-Solver med klassefri veiledning (jf. = 1,3 standard for Realtime-0.5B, 1,5 for 1,5B). |
| EOS-klassifisering | Per-trinn binærklassifisering på TTS LMs siste skjulte tilstand. Når sigmoid sannsynlighet overstiger 0,5, stopper generasjonen. |
Språk
Per Microsofts modellkort: Realtime-0.5B er engelsk bare (de oppstrøms demoskip ni ikke-EN taleprompter som utforskende; kvalitet er ikke garantert). 1.5B støtter engelsk og kinesisk; andre språk kan produsere potensiell lyd, men utro lyd og bør anses som eksperimentell.
Stemmeidentitet - to forskjellige stier
De to variantene tar svært forskjellige tilnærminger til høyttalerkondisjonering, og hver bane har begrensninger verdt å vite foran.
Realtime-0.5B - forhåndsbygde stemmebuffere
Høyttalersidentitet kommer fra en forhåndskomputert .safetensors stemmebuffer som inneholder konditionerende KV-buffere og skjulte tilstander for en bestemt høyttaler. Laster en buffer er umiddelbart; en modellinstans kan bytte stemmer billig mellom generasjoner.
The Realtime-0.5B kontrollpunkt er distribuert inferens-beskyttet - Microsoft sender ikke den akustiske koderen, så stemmebuffere kan ikke mintes fra rå lyd mot denne modellen. Den støttede kilden er en av Microsofts forhåndsbygde .pt stemmebuffere (Carter, Davis, Emma, Grace, Grace, Mike, Samuel for engelsk, pluss utforske de/fr/it/jp/kr/nl/p/pt stemmer), flatt inn i .safetensors layouten denne lasteren forventer.
1.5B langformet — stemmekloning fra rålyd
1.5B sjekkpunkt gjør skip den akustiske koderen, slik at det kan klone en vilkårlig høyttaler fra en referansebølgeform + transkripsjon i ett skudd. Kodingen er inlined på hvert syntesesamtale - det er ingen separat tale-kache-fil å administrere.
speech vibevoice-encode-voice er portetCLI-overflaten for offline tale-cache opprettelse mot Realtime-0.5B vil mislykkes raskt med en peker til 1,5B rå-audio arbeidsflyten, siden kodervektene ikke er til stede i 0,5B-kontrollpunktet. Inntil Microsoft skiper dem, er dette den eneste slutt-til-ende-stien for å klone en egendefinert høyttaler.
Modell
| Bundle | Kvantisering | Størrelse | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (kilde) | ~1 GB | mikrosoft/VibeVoice-Realtime-0.5B |
| Realtime-0.5B INT4 | Qwen2 INT4, tokenizer + diffusjon 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 langformet | BF16 (kilde) | ~3 GB | mikrosoft/VibeVoice-1.5B |
| 1.5B INT4 (produksjon) | Qwen2 INT4 + dobbel kodere | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
Quantisation bruker MLX gruppevis affine quant (32-gruppe). Innbyggere, normer, akustisk-tokenizer konvolusjoner, og EOS-klassifieren forblir i sin kilde dtype.
Rask start
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 (forskjellige API)
1.5B har en annen arkitektur (unified Qwen2 LM, dobbel kodere, LM-token-prøvetaking) slik at det sendes som en separat klasse — VibeVoice15BTTSModel. Referanselyd + tekst går i et enkelt anrop:
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 talecache nødvendig — modellen koder referanselyden gjennom både acoustic_tokenizer (64-dim) og semantic_tokenizer (128-dim, ASR-trening) og summerer dem på lydprompturposisjoner. Generasjon kjører LM token sampling forgrenet på <speech_diffusion> / <speech_end> / tekst — diffuserer en akustisk latent bare når LM avgir taletoken.
ASR-verifisert på M2 Max INT4 (RTFx 1.48): for inngang - Hei verden. Dette er ett poeng fem milliarder VibeVoice variant av Microsoft-tekst til talemodell -, Nemotron transkribert utgangen som -Hello verden, dette er det ett poeng fem milliarder via stemmevarianten av mikrosoft texas talemodell - - hvert innholdsord som matches, er bare akustiske substitusjoner VibeVoice → via stemme og Tekst til → texas.
Bytt stemmer mellom generasjoner
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 konvertert Microsoft stemmebuffer (engelsk):
speech vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
1.5B langformet med rå referanselyd + transkripsjon (kloning av en vilkårlig høyttaler, engelsk eller kinesisk):
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
Flagg: --steps (DPM-Solver trinn), --cfg (guidance), --model / --tokenizer til å overstyre HuggingFace IDs, --long-form for å bytte til 1,5B forhåndsinnstillingen, --verbose for timing.
Velg blant speech-swift TTS moduler
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice Realtime | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| Params | 82M | 7B | 7B | 500M | 1,5B |
| Motor | CoreML (ANE) | MLX | MLX | MLX | MLX |
| Språk | 8 | 10+ | 10+ | Bare EN | EN + ZH |
| Stemmekloning | Faste forvalg | ICL referanse | Zero-shot referanse | Kun forhåndsbygde stemmebuffere | Rå lyd + transkripsjon |
| Langform | Kort/medium | Streaming | Streaming | Streaming | Opp til 90 min / 4 høyttalere |
... du trenger langformet, multi-speaker eller podcast/audiobook-utgang på engelsk eller kinesisk, med konsekvent stemmeidentitet på tvers av minutter med lyd. For kortformet flerspråklig TTS, Qwen3-TTS eller CosyVoice3 er bedre passform. For iOS-native korte uttalelser, Kokoro Det minste alternativet.