VibeVoice
Microsoft VibeVoice는 영어와 중국어를 지원하는 장문·멀티 스피커 TTS 모델입니다. 짧은 발화용 TTS와 달리, 팟캐스트 분량의 대화, 오디오북 나레이션, 멀티 스피커 장면을 한 번에 생성하도록 설계되었으며, 최대 90분 길이에 최대 4명의 서로 다른 화자, 출력 전체에 걸친 일관된 아이덴티티를 유지합니다. 두 가지 변형이 제공됩니다: 저지연 스트리밍용 Realtime-0.5B, 장문 플래그십 품질의 1.5B.
개요
- 한 번에 장문 생성 — 최대 90분의 오디오를 출력 전체에 걸쳐 일관된 음성으로 생성하며, 문장별 인계 없음
- 멀티 스피커 대화 — 4명의 서로 다른 화자를 동시에 다루며, 각 화자는 자신의 voice cache로 조건화됨
- 영어 + 중국어 — 학습 오디오 데이터는 EN/ZH 전용이며, 다른 언어는 지원하지 않음 (토크나이저는 받아들이지만 출력은 알아들을 수 없음)
- 24 kHz 모노 출력 — Float32 PCM,
AudioCommon.WAVWriter와스트리밍AudioPlayer에 바로 사용 가능 - MIT 라이선스 — 모델 가중치와 Swift 포트 모두 MIT, INT4 양자화 파생물 허용
아키텍처
네 가지 협력 컴포넌트가 7.5 Hz 잠재 변수를 한 번에 하나씩 오디오로 생성합니다:
| 컴포넌트 | 설명 |
|---|---|
| Split Qwen2 backbone | 24-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 tokenizer | 스트리밍 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 head | Small 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 classifier | Per-step binary classifier on the TTS LM's last hidden state. When sigmoid probability exceeds 0.5, generation stops. |
voice-cache를 통한 음성 복제
화자 아이덴티티는 생성 시점에 참조 파형에서 오지 않습니다. 대신 각 음성은 사전 계산된 .safetensors voice cache로 제공되며, 특정 화자에 대한 조건화 KV 캐시와 히든 상태를 담고 있습니다. 이는 참조 오디오를 인코더 경로로 오프라인 처리해 생성됩니다. 런타임의 voice cache 로딩은 즉시 이루어지며, 한 모델 인스턴스가 생성 사이에 음성을 저렴하게 교체할 수 있습니다.
예시 voice cache (MIT 라이선스): mzbac/vibevoice.swift/voice_cache — Carter, Davis, Emma, Frank, Grace, Mike, 그리고 인도식 억양의 Samuel을 포함한 7가지 영어 음성.
모델
| 번들 | 양자화 | 크기 | HuggingFace |
|---|---|---|---|
| Realtime-0.5B | BF16 (source) | ~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 long-form | BF16 (source) | ~3 GB | microsoft/VibeVoice-1.5B |
| 1.5B INT4 | Qwen2 INT4 | ~1 GB | aufklarer/VibeVoice-1.5B-MLX-INT4 |
양자화는 models/vibevoice/export/convert.py가 MLX 그룹 단위 어파인 양자화(32 그룹)로 생성합니다. 임베딩, 정규화, acoustic-tokenizer 컨볼루션, EOS 분류기는 원본 dtype를 유지합니다.
빠른 시작
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
장문 1.5B 프리셋
let config = VibeVoiceTTSModel.Configuration.longForm1_5B
let tts = try await VibeVoiceTTSModel.fromPretrained(configuration: config)
try tts.loadVoice(from: "voices/narrator.safetensors")
let pcm = try await tts.generate(text: longTranscript) // up to ~90 min
longForm1_5B 프리셋은 maxSpeechTokens를 4000으로, cfgScale을 1.5로 상향해 장문 출력의 충실도를 높입니다.
생성 간 음성 교체
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
audio vibevoice "Hello world." \
--voice-cache voice_cache/en-Mike_man.safetensors \
--output hello.wav
# 장문 1.5B
audio vibevoice "Long paragraph ..." \
--voice-cache voices/narrator.safetensors \
--long-form \
--max-tokens 4000 \
--output episode.wav
플래그: --steps (DPM-Solver 스텝), --cfg (가이던스), --model / --tokenizer로 HuggingFace ID 오버라이드, --long-form으로 1.5B 프리셋 전환, --verbose로 시간 측정.
speech-swift TTS 모듈 선택 가이드
| Kokoro-82M | Qwen3-TTS | CosyVoice3 | VibeVoice Realtime | VibeVoice 1.5B | |
|---|---|---|---|---|---|
| 파라미터 | 82M | 7B | 7B | 500M | 1.5B |
| 백엔드 | CoreML (ANE) | MLX | MLX | MLX | MLX |
| 언어 | 8 | 10+ | 10+ | EN/ZH | EN/ZH |
| 음성 복제 | 고정 프리셋 | ICL 참조 | 제로샷 참조 | voice cache | voice cache |
| 장문 | 짧음/중간 | 스트리밍 | 스트리밍 | 스트리밍 | 최대 90분 / 4 화자 |
…영어 또는 중국어로 장문, 멀티 스피커, 또는 팟캐스트/오디오북 출력이 필요하고, 수 분 길이의 오디오 전반에 걸쳐 일관된 음성 아이덴티티가 필요할 때 선택하세요. 단문 다국어 TTS에는 Qwen3-TTS 또는 CosyVoice3가 더 적합합니다. iOS 네이티브 단문 발화에는 가장 작은 옵션인 Kokoro를 사용하세요.