VibeVoice 是微軟近期發布的一項尖端開源語音合成(Text-to-Speech, TTS)技術,它並非一款對一般消費者直接銷售的軟體,而是一個強大的底層模型,主要供給研究人員與開發者使用。其最引人注目的能力是能夠生成長達90分鐘、包含多達四位不同說話者的「超長篇」且富有情感的對話式音訊,為有聲書、Podcast製作、虛擬助理等應用場景帶來了新的可能性。
VibeVoice是什麼?
簡單來說,VibeVoice 是一個能將文字腳本轉換為極度逼真、自然的語音對話的AI模型。相較於傳統「逐字逐句」發音、語氣單調的TTS系統,VibeVoice 更擅長處理複雜的對話情境,能維持不同說話者音色的長期一致性,並在對話的節奏與情感上表現得更為自然。主要特點包括:
* 超長音訊合成: 一次可生成最長90分鐘的音訊,突破了許多傳統模型在處理長篇內容時,音色容易「漂移」或語氣變得不連貫的技術瓶頸。
* 多說話者支援: 能夠在同一段音訊中,區分並生成多達四位不同角色的聲音,且能自然地進行對話輪替。
* 開源研究性質: VibeVoice 以 MIT 授權條款開源,鼓勵學術界與開發社群在此基礎上進行研究與二次開發,但微軟也明確指出,此模型目前僅供研究用途,並限制了其在即時語音複製等敏感領域的應用。
* 語言支援: 目前主要針對英語和中文進行了訓練。
VibeVoice 的運作原理
VibeVoice 的核心是一套創新的架構,它結合了大型語言模型(LLM)的強大理解能力與先進的音訊生成技術。其原理可以拆解為以下幾個關鍵部分:
1. 雙權杖化器架構 (Dual-Tokenizer Architecture)
這是VibeVoice的技術核心之一。它不使用單一的方式來「理解」聲音,而是透過兩個協同工作的「權杖化器」(Tokenizer)以極低的效率(7.5 Hz)將聲音資訊轉換為數據,大幅提升了處理長篇音訊的效率。
* 聲學權杖化器 (Acoustic Tokenizer): 此部分基於一種稱為「變分自動編碼器」(Variational Autoencoder, VAE)的技術,負責將原始的音訊波形壓縮成精簡的數據表示。這個過程不僅保留了聲音的物理特徵(如音高、音量),更重要的是成功地捕捉了說話者獨特的「音色」(Voice Timbre)。
* 語義權杖化器 (Semantic Tokenizer): 這個權杖化器則專注於理解聲音中的「內容」與「情感」。它透過類似於語音辨識(ASR)的任務進行訓練,能夠從聲音訊號中提取出文字對應的語義資訊,確保生成的語音在情感和上下文方面是準確的。
2. 大型語言模型 (LLM) 作為大腦
VibeVoice 的骨幹是一個大型語言模型(目前版本為 Qwen2.5-1.5B)。這個LLM扮演著如同「導演」般的角色。它負責閱讀輸入的文字腳本,理解整個對話的結構、上下文邏輯以及不同說話者之間的互動關係。LLM的強大推理能力是VibeVoice能夠生成自然流暢對話的關鍵。
3. 「下一權杖擴散」框架 (Next-Token Diffusion Framework)
在生成最終的音訊時,VibeVoice 採用了先進的「擴散模型」(Diffusion Model)。傳統模型可能一次性生成整段聲音,而VibeVoice則是透過「下一權杖預測」的方式,一步步地生成音訊。
具體來說,LLM會先根據文本預測出下一個音訊「權杖」應該是什麼樣子。接著,一個被稱為「擴散頭」(Diffusion Head)的模組會接收這個預測,並透過一個「去噪」的過程,反覆修正與細化,最終生成極度清晰且細節豐富的高保真度聲音。這個過程確保了音訊的品質與自然感。
總結來說,VibeVoice 的運作流程可以概括為:
* 輸入: 提供一段包含不同說話者標記的文字腳本,以及每位說話者簡短的聲音樣本(用以參考音色)。
* 權杖化: 雙權杖化器將聲音樣本轉換為聲學與語義數據。
* LLM處理: 大型語言模型分析腳本,理解對話流程。
* 擴散生成: 模型逐一預測音訊權杖,並透過擴散過程精煉成最終的音訊波形。
透過這套精密的架構,VibeVoice 成功地解決了長篇、多人語音合成中的諸多挑戰,為AI語音技術的發展樹立了新的里程碑。
可至https://github.com/microsoft/VibeVoice/下載測試其效果。
---
1️⃣ 環境需求
Python 3.10+
PyTorch (最好有 GPU,例如 CUDA 11.8)
依賴套件:transformers, accelerate, datasets, soundfile
安裝:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers accelerate datasets soundfile
---
2️⃣ Hugging Face 模型下載
模型路徑: 👉 microsoft/VibeVoice-1.5B
可以用 transformers 直接加載:
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import soundfile as sf
# 載入 tokenizer 和模型
model_id = "microsoft/VibeVoice-1.5B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto"
)
# 測試文字
prompt = """<|speaker1|>: Hello, welcome to the VibeVoice demo!
<|speaker2|>: Wow, this sounds really natural!"""
# 編碼
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 生成音頻
with torch.no_grad():
output = model.generate(**inputs, max_new_tokens=8000)
# 解碼音頻
audio_array = model.decode_to_audio(output)
# 儲存為 wav
sf.write("demo.wav", audio_array, 24000)
> ⚠️ 注意:生成音頻長度會依 max_new_tokens 而變,太大會耗時。
---
3️⃣ Colab Demo(零環境配置)
微軟官方提供了 Colab Notebook,可以直接執行:
👉 VibeVoice Demo Notebook
打開後只要:
1. 點選 Open in Colab
2. 選 GPU runtime
3. 修改輸入文字,就能直接生成對話語音檔。
---
4️⃣ Web 簡易 Demo (Gradio UI)
你也可以用 Gradio 做一個簡單的網頁介面:
import gradio as gr
import soundfile as sf
import numpy as np
def tts_generate(text):
inputs = tokenizer(text, return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(**inputs, max_new_tokens=8000)
audio_array = model.decode_to_audio(output)
return (24000, audio_array)
demo = gr.Interface(
fn=tts_generate,
inputs=gr.Textbox(lines=5, placeholder="輸入要轉語音的文字..."),
outputs=gr.Audio(type="numpy", label="生成語音"),
title="🎙 Microsoft VibeVoice Demo"
)
demo.launch()