AI APPLICATION · LITAS
現成工具應用
我在本機訓練自己的聲音:聲音克隆真正難的是台灣腔、資料與驗收
從台灣腔、錄音資料、LoRA 訓練到推理驗收,說清楚聲音克隆真正困難與不能公開的部分。
個人本機研究與實作|本人錄音、模型權重與 reference audio 不公開|無贊助、無聯盟連結
聲音克隆最容易讓人產生的想像,是錄一小段聲音,之後所有旁白都能自動變成自己。
我真正想做的事情比較具體:影片、Podcast,甚至未來想留給家人的故事,如果每次都要重新找安靜環境錄音,製作很容易停在「等有空再說」。我希望建立一個本機可使用的 Litas 聲音,能先把內容做成可聽版本,也能進入影片的配音流程。
但「像我」不是唯一標準。如果模型說的是字正腔圓、卻不像我平常會用的台灣國語,那支聲音再清楚也不是我要的結果。
先看目的、成果與證據邊界
| 項目 | 目前結論 |
|---|---|
| 目的 | 建立能用於影片、Podcast 與家庭內容的本地 Litas 語音,降低反覆錄音的製作摩擦,同時把原始錄音、模型與推理留在自己控制的環境。 |
| 已驗證成果 | dots.tts LoRA 使用 62 段訓練與 20 段驗證資料,在 RTX 4060 上完成 500 steps;loss 由 1.2 降到 0.87。套用 LoRA 後,我確認輸出具有可接受的台灣腔。既有 VoxCPM 聲音也已實際用在影片旁白流程。 |
| 證據邊界 | 「台灣腔 OK」是我的人工聽感,不是正式聲學評測;它也不表示每一段文字都自然、能完全取代本人錄音。規劃中的 audio.cpp 統一服務層尚未安裝或驗收。 |
一開始不是模型問題,而是要先留下可用的聲音資料
VoiceClone 專案最初只有很簡單的東西:文稿、本人錄音與一個方向。
真正開始訓練後,我才更清楚資料不是「錄得越長越好」。一段連續錄音需要切成可管理的片段,文字要能和聲音對上,背景噪音、停頓、音量與錯字都會進到模型裡。錄音是素材,整理過的片段才是訓練資料。
本機後來保留了 GPT-SoVITS 的清理資料與已訓練權重,也嘗試 VoxCPM、dots.tts 與 XTTS 等不同路線。這看起來有些分散,但我沒有因為新模型出現,就直接刪掉舊成果。聲音訓練不只花運算時間,還包含很難重新取得的人工錄音與整理成本。
對我來說,模型可以重裝,自己的乾淨聲音資料才是最需要保護的資產。
我要的不是「會中文」,而是不要一開口就失去自己
中文 TTS 的選擇很多,但台灣使用者很快就會聽出語氣差異。某些模型吐字很清楚,節奏與語調卻偏標準普通話;拿來唸產品名稱也許沒問題,放進一篇第一人稱文章,就會產生一種內容是我寫的、說話的人卻不是我的距離感。
dots.tts 的這次 LoRA 實驗,就是針對這個問題。使用的資料來自既有 GPT-SoVITS Litas v5 資料集:
- 62 段 training。
- 20 段 validation。
- 2B SOAR checkpoint。
- LoRA rank 8,放在 q/k/v/o。
- RTX 4060,500 steps,約 10 分鐘。
訓練 loss 從 1.2 降到 0.87。這個數字只能說明優化過程有收斂,不能自己證明聲音好聽;最關鍵的比較仍然是實際輸出。
沒有 LoRA 的 Base SOAR,聽起來更像標準普通話。套用 LoRA 後,我確認它有比較接近台灣腔,結果是 OK 的。
我刻意把這句話寫成「我確認 OK」,而不是「模型已完美複製 Litas」。前者是實際發生的人工驗收,後者需要更完整的測試才有資格成立。
訓練成功,不代表推理會自動成功
這次實驗也踩到兩個很具體的坑。
第一個是參考音檔長度。當參考音檔超過約 3 秒,某些推理嘗試只生成一個約 0.16 秒的 patch。把參考音檔縮短之後,流程才回到可用狀態。
第二個是 LoRA 權重載入。一般 PEFT 的載入方法會多加一層 .default 後綴,checkpoint 的 key 又帶有 llm. prefix,和 fresh model 的命名不一致。最後需要手動對應並 assignment,才能真的讓訓練好的權重進入模型。
這兩個問題都提醒我,看到「訓練完成」的 checkpoint 還不是成果。必須真的用固定文字與固定參考聲音跑一次,才知道權重有沒有載入、聲音有沒有生成,以及生成的內容是不是完整的。
VoxCPM 讓聲音不只停在試聽檔
另一條主力路線是 VoxCPM。本機保留 VoxCPM2 的 Litas LoRA 與固定 reference audio;它後來不只用來做一段 demo,而是進入「兩分鐘法則」的影片製作。
旁白被拆成 10 段,生成後重新合併,再依每段真實長度調整 HTML 場景。這個過程讓我第一次把聲音克隆視為製作工具,而不是一個聲音很像的實驗。
當模型真的進入內容流程後,問題也會改變:
- 專有名詞能不能唸對?
- 每段語速是否一致?
- 分段後的音色與音量會不會跳動?
- 重生某一句時,能否只替換那一段?
- 最後合併的音檔長度,能不能可靠地驅動畫面?
這些問題不如「像不像本人」吸睛,卻更決定它能不能被長期使用。
為什麼要同時留著幾套模型?
本機盤點時,語音工作區包含 VoxCPM2、GPT-SoVITS、dots.tts 與 XTTS。理想上,我也希望只維護一套環境與一個 API,但現階段直接清掉其他模型,風險比看起來更大。
不同路線現在有不同角色:
| 路線 | 目前定位 |
|---|---|
| VoxCPM2 | 已進入影片旁白流程的主力聲音路線。 |
| GPT-SoVITS | 已驗證權重、既有資料集與重新訓練來源。 |
| dots.tts | 已完成台灣腔 LoRA 實驗,保留為可比較候選。 |
| XTTS | 實驗候選,尚無足夠證據取代主力。 |
曾經研究過用 audio.cpp 建立統一的本地 WebUI 與 OpenAI 相容 API,減少多套 Python/CUDA 環境互相干擾。但那份工作目前仍是評估提案:沒有安裝、沒有遷移,也沒有取得刪除既有模型的授權。
這個邊界很重要。盤點完成不等於整合完成;有新的候選方案,也不等於舊模型可以安全刪除。
如何判斷一個聲音真的可以用?
如果只聽一句「大家好」,很多問題都不會出現。我認為後續驗收至少要分成四層:
1. 內容正確
用固定繁中測試稿,檢查漏字、錯字、專有名詞與標點停頓;可以用語音辨識回轉文字協助比對,但不能只看一個分數。
2. 聲音像我
不是只比較音色,也要聽口音、節奏與句尾。這一層最後仍需要我本人判斷。
3. 長內容穩定
短句自然不代表一整篇旁白都穩定。需要檢查分段前後的音量、速度、情緒與呼吸感。
4. 能進入流程
模型必須能被重複呼叫、保留輸出、替換單一片段,並提供真實音檔長度給影片時間軸。否則它仍是 demo,不是工具。
聲音克隆同時也是一個隱私問題
聲音和一般文字素材不同。文字被看見,通常還需要本人帳號或身分才能產生影響;一個可用的聲音模型若被拿走,可以直接製造看似由本人說出的內容。
因此這個專案從一開始就應該遵守幾條界線:
- 原始錄音、切片資料與模型留在自己控制的環境。
- 公開文章只分享方法與結果,不提供可冒用本人聲音的模型下載。
- 外部服務若要上傳 reference audio,必須另外評估用途、保存與刪除方式。
- 對外作品需要清楚標示 AI 合成聲音,尤其不能用來冒充真實即時發言。
本地執行不會自動消除所有風險,但至少讓資料流向與刪除權仍掌握在自己手裡。
目前的成果,不是「我再也不用錄音」
聲音克隆已經完成幾個重要跨越:從本人錄音變成整理資料,從資料變成模型,再從模型進入實際影片旁白;dots.tts 的 LoRA 也證明,台灣腔不是只能接受模型預設,而是可以透過自己的資料往前調整。
但我現在不會說它已經完全取代本人錄音。
真正重要的內容、需要細緻情緒或公開代表本人立場的段落,真人錄音仍然有不可取代的價值。AI 聲音比較像是把製作門檻降下來:先讓內容能被聽見、能進入剪輯,也讓需要修改的段落不必整篇重錄。
這個差異,讓聲音克隆從「很像我的技術展示」,變成一個比較誠實、也比較可能長期留下的工具。
官方資料與延伸閱讀
倫理與授權說明:本文只討論以本人聲音進行的本地實驗。克隆他人聲音前,應先取得明確同意,並遵守內容平台、隱私、著作權與人格權相關規範。