Traduzione automatica · Originale inglese

VibeVoice

Microsoft VibeVoice è un modello di testo-to-speech multi-speaker di lunga data per l'inglese e il cinese. TTS, è progettato per generare dialogo podcast-lunghezza, narrazione audiolibro, e scene multi-speaker in un unico passaggio — fino a 90 minuti fino a raggiungere 4 voci distinte e identità coerente in tutto. Due varianti nave: Realtime-0.5B per lo streaming a bassa latenza e 1.5 per la qualità del flagship di lunga data.

Che cosa è

Architettura

Quattro componenti cooperanti producono audio un 7,5 Hz latente alla volta:

ComponentiDesignazione
Spalato Qwen224- strato Qwen2.5 decodificatore (896 nascosto, GQA 14/2 per Realtime-0.5B). Il modello è diviso: il più basso 4 strati formano un testo LM, la parte superiore 20 gli strati funzionano come TTS LM. Finestre di testo (5 token alla volta) scorrere attraverso entrambi; i latticini generati del discorso fluiscono solo attraverso il TTS LM.
Tokenizzatore acustico σ-VAEStreaming conv stack che codifica audio 24 kHz ad un latente di 64-dim a 7,5 Hz (3200× downsample temporale) e decodifica latenti di nuovo alla forma d'onda.
Testa di diffusioneTesta DDPM a 4 strati con modulazione adaLN. Campioni ogni latente del discorso tramite DPM-Solver a 20 gradi con guida senza classificatori (cfg = 1.3 default per Realtime-0.5B, 1.5 for 1.5B).
Classificatore EOSClassificatore binario per passo sull'ultimo stato nascosto di TTS LM. Quando la probabilità sigmoide supera 0,5, la generazione si ferma.

Lingue

Per le schede di modello di Microsoft: Realtime-0.5B è l'inglese solo (la demo a monte invia nove prompt vocali non-EN come esplorativo; la qualità non è garantita). 1.5B supporta l'inglese e il cinese ; altre lingue possono produrre audio plausibile-suono ma infedele e devono essere considerate sperimentali.

Identità vocale — due percorsi distinti

Le due varianti prendono approcci molto diversi per il condizionamento dell'altoparlante, e ogni percorso ha vincoli che vale la pena conoscere in anticipo.

Realtime-0.5B — cache vocali pre-costruite

L'identità del diffusore proviene da una cache vocale precomputata .safetensors

Il checkpoint Realtime-0.5B è distribuito solo inferenza — Microsoft non spedisce l'encoder acustico, quindi le cache vocali non possono essere coniate dall'audio grezzo contro questo modello. Microsoft pre-costruito .pt cache vocali (Carter, Davis, Emma, Frank, Grace, Mike, Samuel for English, plus exploratory de/fr/it/jp/kr/nl/pl/pt voices), appiattito in .safetensors layout questo caricatore si aspetta.

1.5B lunga forma — clonazione vocale dall'audio grezzo

Il punto di controllo 1.5B does spedisce l'encoder acustico, in modo da poter clonare un altoparlante arbitrario da una forma d'onda di riferimento + trascrizione in un solo colpo. La codifica è inlineata su ogni chiamata di sintesi - non c'è nessun file vocale-cache separato da gestire.

FYI: speech vibevoice-encode-voice è gated

La superficie CLI per la creazione offline di voice-cache contro Realtime-0.5B fallirà velocemente con un puntatore al flusso di lavoro raw-audio 1.5B, poiché i pesi encoder non sono presenti nel checkpoint 0.5b. Fino a quando Microsoft non li spedirà, questo è l'unico percorso end-to-end per clonare un altoparlante personalizzato.

Modello

BundleQuantificazioneDimensioneHuggingFace
Realtime-0.5BBF16 (fonte)~ 1 GBmicrosoft/VibeVoice-Realtime-0.5B
Realtime-0.5B INT4Qwen2 INT4 tokenizer + diffusione FP16~ 350 MBaufklarer/VibeVoice-Realtime-0.5B-MLX-INT4
Realtime-0.5B INT8Qwen2 INT8~ 570 MBaufklarer/VibeVoice-Realtime-0.5B-MLX-INT8
Forma lunga 1,5BBF16 (fonte)~ 3 GBmicrosoft/VibeVoice-1.5B
1.5B INT4 (produzione)Qwen2 INT4 + doppio codificatore~ 1 GBaufklarer/VibeVoice-1.5B-MLX-INT4

La quantizzazione utilizza quantità MLX group-wise (32-group). Embeddings, norme, convoluzioni acustiche-tokenizer e il classifier EOS rimangono nel loro dtype sorgente.

Avvio rapido

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

Forma lunga 1,5B (diverso API)

1.5B ha un'architettura diversa (unificata Qwen2 LM, doppio codificatore, campionamento di token LM) in modo che navi come classe separata — VibeVoice15BTTSModel. audio di riferimento + testo vada in una sola chiamata:

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
)

Nessuna cache vocale necessaria — il modello codifica l'audio di riferimento attraverso entrambi acoustic_tokenizer (64-dim) e semantic_tokenizer (128-dim, ASR-trained) e li riassume in posizioni di messaggio audio. <speech_diffusion> / <speech_end> / testo — diffonde un latente acustico solo quando il LM emette il token del discorso.

ASR-verified su M2 Max INT4 (RTFx 1.48): per l'ingresso "Ciao mondo. Questo è il punto cinque miliardi VibeVoice variante del testo Microsoft al modello di parola.", Nemotron trascritto l'output come "Hello world, questo è l'unico punto cinque miliardi attraverso la variante vocale del modello di discorso di microsoft texas" — ogni parola di contenuto abbinata, solo sostituzioni acustiche sono VibeVoice → via voce e testo a → texas.

Voci tra le generazioni

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 con una cache vocale Microsoft convertita (inglese):

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

forma lunga 1,5B con audio di riferimento grezzo + trascrizione (chiusura di un altoparlante arbitrario, inglese o cinese):

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

Bandiere: --steps (passi di MPM-Solver), --cfg (guida) --model / --tokenizer override HuggingFace ID, --long-form per passare alla preimpostazione 1.5B, --verbose per tempismo.

Picking tra moduli speech-swift TTS

Kokoro-82MQwen3-TTSCosyVoice3VibeVoice RealtimeVibeVoice 1.5B
Params82M7B7B500M1.5B
IndietroCoreML (ANE)MLXMLXMLXMLX
Lingue810+10+EN soloEN + ZH
Clonazione vocalePreimpostazioni fisseRiferimento ICLRiferimento zero-shotSolo cache vocali pre-costruiteAudio crudo + trascrizione
Forma lungaBreve/medioStreamingStreamingStreamingFino a 90 min / 4 altoparlanti
Scegli VibeVoice quando...

...è necessario una forma lunga, multi-speaker, o podcast/audiobook in inglese o in cinese, con coerente identità vocale tra i minuti audio. TTS, Qwen3-TTS o CosyVoice3 sono meglio si adatta. Per i brevi proferimenti iOS-native, Kokoro è l'opzione più piccola.