標籤: vibevoice.cpp

  • 本地跑 Microsoft 級語音 AI:vibevoice.cpp 入門

    本地跑 Microsoft 級語音 AI:vibevoice.cpp 入門

    📌 本文重點

    • 全本地 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)
    • 用專案提供的轉換腳本,把你的聲音轉成 gguf voice 檔
    • 之後輸入文字,就能用你的聲線合成語音

    💡 關鍵: 約 30 秒乾淨錄音就能完成 voice clone,是進入個人化 TTS 的最低門檻之一

    實作步驟(voice clone 概念流程):

    1. 準備一段約 30 秒的個人口播,儘量在安靜環境錄製。
    2. 取得原始 VibeVoice 的 .pt 聲音權重(或官方樣例聲音)。
    3. 使用 vibevoice.cpp repo 裡的 scripts/convert_voice_to_gguf.py 將聲音轉成 .gguf 語音檔。
    4. 在 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. 公司會議錄音 → 自動逐字稿 + 誰講了什麼

    適合:產品經理、工程主管、專案管理。

    操作路線:

    1. 用任意錄音工具錄下整場會議(建議單軌錄音即可)。
    2. 丟給 vibevoice.cpp,輸出成文字 + 語者標註。
    3. 再加工:
    4. 手動整理重點;或
    5. 丟進本地 LLM(如 ollama 上的 Llama 3)做摘要。

    好處:不必把敏感會議內容丟上雲端,也不必自己搭一整套 ASR 服務。


    2. 內網客服錄音分析

    適合:客服主管、合規/法務、營運分析。

    做法:

    1. 將客服中心錄音批次輸出成檔案(常見為 WAV/MP3)。
    2. vibevoice.cpp 跑 ASR + 語者分離,取得客服與客戶逐字對話。
    3. 輸出文字再交給內網數據分析或 NLP 模組做:
    4. 關鍵字搜尋(是否有爭議用語、是否說明退款規則等)
    5. 投訴分析(常見問題、情緒偏負面段落)。

    3. 在自己產品裡內建語音輸入 / 語音輸出

    適合:SaaS 產品、內部工具、遊戲或交互式應用開發者。

    可行玩法:

    • 用 ASR 做語音輸入:
    • 使用者對麥克風說話 → 即時轉文字 → 傳給你原有的系統邏輯。
    • 用 TTS 做語音輸出:
    • 系統產生訊息 → 用 vibevoice.cpp 合成語音 → 播放給使用者聽。

    因為有 C ABI,你可以:

    • 在 C/C++ 專案直接連結
    • 在 Rust/Go 透過 FFI 呼叫
    • 在 Node.js 透過 node-ffi 或自寫 native addon 包一層

    4. 做一個完全離線的語音助手

    適合:喜歡 DIY 的工程師、Maker、隱私敏感場景。

    粗略架構:

    1. 麥克風輸入 → vibevoice.cpp ASR → 文字指令
    2. 文字指令 → 本地 LLM(例如 LocalAI / Ollama)→ 回覆文字
    3. 回覆文字 → vibevoice.cpp TTS(可用自建 voice clone)→ 喇叭播出

    整條鏈路都在本機或內網,沒有任何雲端依賴。


    怎麼開始:最短路徑從 0 到能跑

    官方 repo:https://github.com/mudler/vibevoice.cpp

    1. 下載二進位檔(最快上手)

    1. 打開 GitHub Releases:https://github.com/mudler/vibevoice.cpp/releases
    2. 依自己的平台下載對應壓縮檔,例如:
    3. vibevoice-darwin-arm64.zip(Apple Silicon)
    4. vibevoice-linux-x86_64.zip
    5. vibevoice-windows-x86_64.zip
    6. 解壓縮後,裡面會有:
    7. 主程式二進位,例如 vibevoice
    8. 範例模型 / 語音配置(依版本而定)

    在 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(概念流程)

    1. 錄一段約 30 秒的清晰朗讀(內容隨意,重點是發音自然、環境安靜)。
    2. 取得對應的 voice 訓練權重,依官方 README 指示執行:

    bash
    python scripts/convert_voice_to_gguf.py \
    --input your_voice.pt \
    --output your_voice.gguf

    1. 之後在 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", &params);
    
        // 在這裡處理 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 串成一個簡單語音流程