用手機錄音,用您的聲音訓練專屬TTS語音引擎

用手機錄音,訓練專屬 Home Assistant Piper 語音

手機唸出畫面上的句子,電腦用 GPU 自動訓練,最後得到能放進 Home Assistant 的 .onnx 語音檔。全程雙擊一個檔案就能啟動,不需要手動安裝任何東西。

實測環境:Windows 11 ・ Intel 13600K ・ RTX 3070 8GB ・ piper-tts 1.8

📱手機開網頁
唸句子錄音
➜
💻電腦伺服器
接收錄音
➜
🧠GPU 訓練
Piper VITS
➜
📦匯出
.onnx + .json
➜
🏠放進 HA
語音助理使用

0準備

把下面 5 個檔案放進同一個資料夾(例如 TTS claude):

TTS claude/
├─ start.bat ← 雙擊這個
├─ start.py 自動安裝環境並啟動
├─ train_server.py 接收錄音、呼叫訓練與匯出
├─ monotonic_core.py 免編譯器的對齊模組
└─ piper_recorder.html 手機錄音網頁
  • 需要 Windows 11、NVIDIA 顯示卡(含驅動)、手機與電腦連同一個 Wi-Fi。
  • 沒有 Python 也沒關係,start.bat 會用 winget 自動安裝 Python 3.12。

1啟動伺服器

雙擊 start.bat。第一次會自動建環境、安裝 CUDA 版 PyTorch 與 piper(約 3GB,10~30 分鐘),之後秒開。

裝置:NVIDIA GeForce RTX 3070[1] 先確認連得上(不能錄音):http://192.168.x.x:8765[2] 要錄音請用:https://192.168.x.x:8766(瀏覽器警告憑證時,選「進階 → 繼續前往」)
啟動後黑色視窗會印出兩個網址
Windows 防火牆第一次會詢問,請按「允許」。手機瀏覽器必須用 https 才能使用麥克風。

2用手機錄音

手機開 https://電腦IP:8766。畫面會顯示一句話,按「錄音」唸完再按一次停止,可試聽、重錄,再按「下一句」。內建 30 句,也可在「自訂句子」貼上自己的稿(每行一句)。

🎙️ Piper 語音錄製器第 3 / 30 句 ・ 已錄 12 句 ✅客廳的燈已經打開了。◀ 上一句● 重錄下一句 ▶▶ 試聽📦 匯出 ZIP
錄音畫面:錄完的句子會打勾,進度自動保存在手機瀏覽器
  • 在安靜環境、固定的嘴巴與麥克風距離、固定音量下錄。
  • 錄音會在瀏覽器內轉成 22050Hz 單聲道 WAV,並產生 metadata.csv,跟 Piper 訓練格式一致。
  • 使用伺服器提供的網頁時不需要匯出 ZIP,訓練時會自動上傳;「匯出 ZIP」只用於備份。

3訓練

展開頁面下方「🧠 本機訓練」,設定保持預設,按「上傳並訓練」。

🧠 本機訓練(CPU+GPU)裝置:NVIDIA GeForce RTX 3070 ・ 狀態:trainingmyvoice2008pinyin基底模型:留空=自動下載中文模型上傳並訓練停止並匯出只匯出Epoch 199/199 val_mos: 1.286匯出 last.ckpt …
欄位依序:語音名稱 ・ epochs ・ batch size ・ 語言(中文請保持 pinyin)
設定說明
batch size 8RTX 3070 8GB 的安全值;若出現 out of memory 改成 4
epochs錄音越多,每個 epoch 步數越多。資料少時建議調高(例如 1000 以上)
基底模型留空會自動下載官方中文模型(約 850MB),只借用聲碼器部分;失敗時自動退回從零訓練
第一次會等比較久:除了 850MB 基底模型,還會下載約 392MB 的音質評分模型,網速慢可能要半小時。下載完會快取,之後不用再等。

4匯出 .onnx

訓練跑完會自動匯出。如果只想用現有的 checkpoint 重新匯出,按「只匯出」即可(不用重訓)。狀態變成 done 後,頁面下方出現下載連結,檔案也在電腦的 work\out\。

work/out/
├─ myvoice.onnx
└─ myvoice.onnx.json

5放進 Home Assistant

  1. 把兩個檔案改名為 zh_CN-myvoice-medium.onnx 與 zh_CN-myvoice-medium.onnx.json(兩者名稱必須對應)。
  2. 放進 HA 的 /share/piper/(可用 Samba 或 File editor;若你的 Piper add-on 提供上傳功能也可直接上傳)。
  3. 到「設定 → 裝置與服務」,找到 Wyoming 的 Piper 整合,按「重新載入」。
  4. 到「設定 → 語音助理」,編輯助理,在「文字轉語音」選擇你的語音。
/share/
└─ piper/
├─ zh_CN-myvoice-medium.onnx
└─ zh_CN-myvoice-medium.onnx.json
自訂語音通常不會出現在 add-on 設定頁的下拉選單,只要在語音助理裡選,或呼叫 TTS 服務時手動指定 voice: zh_CN-myvoice-medium 即可。

6讓聲音更好

30 句只能驗證流程(我們實測 val_mos 只有 1.286),聲音會含糊不清。要能用的聲音:

  • 錄到 200 句以上,句子涵蓋不同長度、數字、疑問句。
  • 把 epochs 提高(1000 以上),訓練中可隨時「停止並匯出」試聽。
  • 錄音品質一致:同一支麥克風、同一個房間、避免爆音。

7疑難排解

症狀原因與處理
手機打不開網頁先用 http 網址測試;防火牆允許 python.exe(私人網路);手機與電腦需同一個 Wi-Fi、非訪客網路
黑色視窗狂噴 CERTIFICATE_UNKNOWN手機拒絕自簽憑證的無害雜訊;換用最新版 train_server.py 會自動忽略
第一個 epoch 後當掉,提到 val_mos缺少 torchaudio;新版 start.py 會自動補裝
匯出:No module named onnxscript新版 PyTorch 匯出需要它;新版 start.py 會自動補裝
匯出:Could not guard on data-dependent…新匯出器不相容;新版 train_server.py 改用傳統匯出器
CUDA out of memorybatch size 改成 4
HA 看不到語音 / INVALID_PROTOBUF檢查兩個檔案同名、放在 /share/piper/,重新複製後重新載入整合

本流程基於 OHF-Voice/piper1-gpl 的訓練文件;中文使用 pinyin 音素模式。

留言

這個網誌中的熱門文章

江蕙-憨阿嬤(吉他和弦譜)

面試之路6-東生華製藥