Day 03 完成 TTS 後,AI 已經可以把文字轉成語音。
但一般 TTS 使用的是模型原本提供的聲線。如果希望 AI Companion 不只是「會說話」,而是能用指定的人聲說出新的內容,就需要進一步加入 Voice Cloning。
今天的目標很單純:
參考真人錄音
+
新的輸入文字
↓
Voice Cloning
↓
產生相似聲線的新語音
↓
Playback
一般 TTS 只需要輸入文字,就能使用預設聲線產生語音。
Voice Cloning 則會額外提供一段 Reference Audio,讓模型參考說話者的聲音特徵,再用相似的聲線說出原本沒有錄過的新句子。
這次我沿用 Day 03 測試過的 Qwen3-TTS,並透過 Voicebox 封裝 Voice Cloning 流程。
今天第一個想測的是:參考音訊越長,效果會不會越好?
我從同一段 18.02 秒的真人錄音中裁出三組:
接著固定輸入同一句:
今天天氣很好,我們一起出去走走吧。
另外還遇到一個實作上的問題。
Qwen3-TTS 除了 Reference Audio,也需要對應的 Reference Text。如果把 18 秒完整逐字稿直接配給 5 秒音檔,文字裡就會出現音訊根本沒有說到的內容。
所以最後的流程變成:
Reference Audio
↓
裁切不同長度
↓
Whisper 個別重新辨識
↓
取得對應 Reference Text
↓
Voice Cloning
正式測試前先進行一次 Warm-up,並把模型載入時間和推論時間分開計算。
模型載入:約 3.39 秒
Warm-up:約 3.25 秒
| Reference | 推論時間 | 產生音訊 | RTF |
|---|---|---|---|
| 5 秒 | 7.26s | 4.24s | 1.71 |
| 10 秒 | 8.87s | 4.80s | 1.85 |
| 18.02 秒 | 9.34s | 4.40s | 2.12 |
可以看到這次測試中,Reference 越長,推論時間也跟著增加。
從 5 秒到 18 秒,RTF 從 1.71 增加到 2.12,大約增加 24%。
Day 03 使用的 Kokoro 82M,平均 RTF 約為:
0.046
而今天 Qwen3-TTS Voice Cloning:
1.71~2.12
也就是大約慢了 37~46 倍。
這也讓我更確定目前採用雙 TTS 是比較合理的:
一般即時聊天
→ Kokoro 82M
需要指定/熟悉聲線
→ Qwen3-TTS Voice Cloning
而不是所有對話都使用 Voice Cloning。
實際聽 Voice Cloning 的結果時,我發現不能只用「好不好聽」來判斷效果。
有些語音聽起來很自然、發音也很順,但仔細聽會覺得聲音沒有那麼像原本的人;相反地,有些聲線很接近 Reference Audio,但說話的節奏或語氣可能沒有那麼自然。
所以這次我主要從兩個方向來比較:
至於 Reference Audio 越長是不是就一定越像本人,還是要把 5 秒、10 秒和 18 秒的結果實際聽過之後才能確定。
最後三組 Reference 都成功產生新語音,而且 ASR 回聽的新句子皆辨識正確。
今天最大的收穫是:Voice Cloning 成功,不代表它適合所有對話。
它可以提供指定聲線,但也需要付出更高的推論成本。因此在 AI Companion 中,一般聊天仍然以低延遲 TTS 為主,而 Voice Cloning 留給真正需要熟悉聲音的情境。
下一步 Day 05,就要第一次把:
STT → LLM → TTS
真正串成一條完整的語音對話 Pipeline。