📌 本文重點
- 全本地 TTS + 長語音 ASR + 語者分離,無需雲端
- 約 30 秒錄音即可 voice clone 自己聲線
- C++ 實作、支援多後端,推論階段完全不用 Python
- 很適合會議逐字稿、客服分析與離線語音助手
一句話先說清楚:vibevoice.cpp 是一套「全本地」的 TTS + 長語音 ASR + 語者分離工具,不用 Python、不上雲,就能在自己機器裡跑出接近 Microsoft VibeVoice 等級的語音 AI。
原始專案與說明:https://github.com/mudler/vibevoice.cpp(C++ 移植自 Microsoft VibeVoice: https://github.com/microsoft/VibeVoice)
核心功能:你能馬上用來做什麼
1. 24kHz 高品質 TTS + 30 秒聲音就能 voice clone
vibevoice.cpp 內建 TTS 引擎,支援 24kHz 輸出,適合旁白、影片解說、產品語音回應等場景。最大的亮點是:
- 約 30 秒的語音樣本(
.wav/.mp3都可,建議乾淨無 BGM) - 用專案提供的轉換腳本,把你的聲音轉成
ggufvoice 檔 - 之後輸入文字,就能用你的聲線合成語音
💡 關鍵: 約 30 秒乾淨錄音就能完成 voice clone,是進入個人化 TTS 的最低門檻之一
實作步驟(voice clone 概念流程):
- 準備一段約 30 秒的個人口播,儘量在安靜環境錄製。
- 取得原始 VibeVoice 的
.pt聲音權重(或官方樣例聲音)。 - 使用 vibevoice.cpp repo 裡的
scripts/convert_voice_to_gguf.py將聲音轉成.gguf語音檔。 - 在 TTS 命令中指定這個 voice 檔,就能生成你的聲線。
提示:沒有 Python 推論,但轉換
.pt→.gguf這一步需要一次性使用 Python。轉好後推論階段完全不用 Python。
2. 長語音 ASR + 語者分離,一次處理十幾分鐘錄音
vibevoice.cpp 背後是約 7 億參數的模型,實測可以處理長達十幾分鐘的錄音(作者在 Reddit 提到測到約 17 分鐘),並做到:
- 自動逐字稿(ASR)
- 自動切段(按時間區段)
- 自動標註不同說話者(Diarization)
💡 關鍵: 7 億參數模型可穩定處理約 17 分鐘長錄音,適合會議與客服等實際業務場景
也就是:丟一整段會議錄音進去,輸出就會像這樣:
[00:00.0 - 00:12.3] Speaker 1: 大家好,今天會議主要討論 Q3 產品排程…
[00:12.3 - 00:25.7] Speaker 2: 我先更新一下研發這邊的進度…
...
快速實作想法:
- 會議錄音 → 丟給 vibevoice.cpp → 拿回文字 + 誰在說話 → 直接貼進 Notion、Confluence 或公司內網系統。
- 客服錄音 → 一批檔案跑 ASR + 語者分離 → 拿到客服與客戶對話文字,後續再用本地 LLM 做情緒分析或關鍵字統計。
3. 跨平台、本地推論、無 Python 推論依賴
vibevoice.cpp 用 C++ + ggml 實作,支援多種硬體後端:
CPU(x86 / ARM)CUDA(NVIDIA GPU)Metal(Apple Silicon / macOS)Vulkan(支援 Vulkan 的 GPU 平台)
這幾件事對實際部署很關鍵:
- 不需要在伺服器上裝一大堆 Python/conda,推論階段就是一個二進位 +
gguf模型檔。 - 更容易嵌入既有系統:C ABI 讓你在 C/C++、Rust、Go、甚至 Node.js(透過 FFI)裡都能呼叫。
- 適合沒有外網、或對資料保密要求高的內網環境。
💡 關鍵: 推論只靠一個二進位加模型檔,無 Python 依賴,讓部署與嵌入式整合簡化許多
適合誰用:4 個具體場景
1. 公司會議錄音 → 自動逐字稿 + 誰講了什麼
適合:產品經理、工程主管、專案管理。
操作路線:
- 用任意錄音工具錄下整場會議(建議單軌錄音即可)。
- 丟給
vibevoice.cpp,輸出成文字 + 語者標註。 - 再加工:
- 手動整理重點;或
- 丟進本地 LLM(如 ollama 上的
Llama 3)做摘要。
好處:不必把敏感會議內容丟上雲端,也不必自己搭一整套 ASR 服務。
2. 內網客服錄音分析
適合:客服主管、合規/法務、營運分析。
做法:
- 將客服中心錄音批次輸出成檔案(常見為
WAV/MP3)。 - 用
vibevoice.cpp跑 ASR + 語者分離,取得客服與客戶逐字對話。 - 輸出文字再交給內網數據分析或 NLP 模組做:
- 關鍵字搜尋(是否有爭議用語、是否說明退款規則等)
- 投訴分析(常見問題、情緒偏負面段落)。
3. 在自己產品裡內建語音輸入 / 語音輸出
適合:SaaS 產品、內部工具、遊戲或交互式應用開發者。
可行玩法:
- 用 ASR 做語音輸入:
- 使用者對麥克風說話 → 即時轉文字 → 傳給你原有的系統邏輯。
- 用 TTS 做語音輸出:
- 系統產生訊息 → 用
vibevoice.cpp合成語音 → 播放給使用者聽。
因為有 C ABI,你可以:
- 在 C/C++ 專案直接連結
- 在 Rust/Go 透過 FFI 呼叫
- 在 Node.js 透過
node-ffi或自寫 native addon 包一層
4. 做一個完全離線的語音助手
適合:喜歡 DIY 的工程師、Maker、隱私敏感場景。
粗略架構:
- 麥克風輸入 →
vibevoice.cppASR → 文字指令 - 文字指令 → 本地 LLM(例如
LocalAI/Ollama)→ 回覆文字 - 回覆文字 →
vibevoice.cppTTS(可用自建 voice clone)→ 喇叭播出
整條鏈路都在本機或內網,沒有任何雲端依賴。
怎麼開始:最短路徑從 0 到能跑
官方 repo:https://github.com/mudler/vibevoice.cpp
1. 下載二進位檔(最快上手)
- 打開 GitHub Releases:https://github.com/mudler/vibevoice.cpp/releases
- 依自己的平台下載對應壓縮檔,例如:
vibevoice-darwin-arm64.zip(Apple Silicon)vibevoice-linux-x86_64.zipvibevoice-windows-x86_64.zip- 解壓縮後,裡面會有:
- 主程式二進位,例如
vibevoice - 範例模型 / 語音配置(依版本而定)
在 Linux/macOS,給執行權限:
chmod +x vibevoice
2. 用 CMake 自行編譯(需要客製或特定後端時)
環境需求:
CMake- C++17 編譯器(
gcc/clang/MSVC) - 選用:
CUDA/Vulkan/Metal SDK
基本編譯步驟(以 Linux/macOS 為例):
git clone https://github.com/mudler/vibevoice.cpp.git
cd vibevoice.cpp
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
完成後,build/ 底下會出現可執行檔(名稱以實際 repo 為準)。
3. 第一次跑 ASR:把一段錄音轉成逐字稿
假設你已經有:
- 主程式
vibevoice - 已下載好的 ASR 模型
model.gguf(官網會提供下載連結) - 一段錄音
meeting.wav
執行(命令格式可能會隨版本略有不同,請以 --help 為主,這裡示範典型用法):
./vibevoice \
--mode asr \
--model model.gguf \
--input meeting.wav \
--output transcript.txt \
--diarization
跑完後,你會拿到一個 transcript.txt,裡面包含時間戳與說話者標記。
4. 第一次跑 TTS:從文字合成語音
準備:
- TTS 模型
tts-model.gguf - 一個 voice 檔(可用官方 sample voice,例如
voice-en.gguf)
命令範例:
./vibevoice \
--mode tts \
--model tts-model.gguf \
--voice voice-en.gguf \
--text "你好,這是 vibevoice.cpp 的測試。" \
--output out.wav
成功後你會得到一個 out.wav,用任意播放器就能聽見合成結果。
5. 準備 30 秒聲音做 voice clone(概念流程)
- 錄一段約 30 秒的清晰朗讀(內容隨意,重點是發音自然、環境安靜)。
- 取得對應的 voice 訓練權重,依官方 README 指示執行:
bash
python scripts/convert_voice_to_gguf.py \
--input your_voice.pt \
--output your_voice.gguf
- 之後在 TTS 命令中改成:
bash
--voice your_voice.gguf
即可以你的聲音合成語音。
6. 怎麼嵌到自己的專案:用 C ABI 呼叫
vibevoice.cpp 提供 C 語言 ABI,因此只要能呼叫 C 函式的語言,都能整合。
簡化示意(實際函式名稱請以官方 include/ 中的 header 為準):
#include "vibevoice.h"
int main() {
vv_context *ctx = vv_init("model.gguf");
vv_asr_params params = {0};
params.diarization = 1;
vv_result result = vv_run_asr(ctx, "meeting.wav", ¶ms);
// 在這裡處理 result.text / result.segments
vv_free_result(&result);
vv_free(ctx);
return 0;
}
在其他語言(例如 Rust、Go)你可以:
- 透過
extern "C"聲明這些函式 - 用 FFI 封裝成 idiomatic 的 API
這樣你的應用程式就能直接呼叫 vibevoice.cpp,無需啟動額外的 HTTP 服務或 Python 進程。
小結:什麼時候該試試 vibevoice.cpp?
如果你符合以下任一條,很值得花一個下午跑起來:
- 想在本地處理會議、客服錄音,不想把資料丟到雲端
- 想做一個離線語音助手或內網語音介面
- 需要在產品裡嵌入 TTS / ASR,但又不想綁特定雲服務
- 想要一套 CPU/GPU 都能跑、無 Python 推論依賴的語音引擎
從 Releases 下載二進位、跑一次 ASR 和 TTS,大概半小時內就能完成。之後你就有一顆可嵌入任何系統的本地「語音核心」。
🚀 你現在可以做的事
- 打開 GitHub Releases,下載適合自己平台的
vibevoice.cpp二進位並跑一次 ASR 測試- 錄一段約 30 秒的個人聲音,照 README 用
convert_voice_to_gguf.py做一次 voice clone- 在你現有的工具(例如內部專案或腳本)中,嘗試用命令列或 C ABI 把
vibevoice.cpp串成一個簡單語音流程

