iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
AI Engineering

30 天打造高齡智慧健康照護 AI Companion系列 第 3

Day 03|讓 AI 開口說話:從 Text-to-Speech 開始

  • 分享至 

  • xImage
  •  

昨天先完成了 Speech-to-Text,讓 AI 可以把使用者說的話轉成文字。

今天要做的事情剛好相反:

Text
↓
TTS
↓
Audio
↓
Playback

讓 AI 不只能「聽懂」,也能真正開口說話。

為什麼 AI Companion 需要 TTS?

如果要做一個高齡智慧健康陪伴系統,只透過文字回覆其實不太夠。

對部分高齡使用者來說,直接用語音互動會比一直閱讀螢幕上的文字更直覺。未來不論是日常陪伴、衛教內容,甚至提醒,都需要透過聲音自然傳達。

完整流程會逐漸變成:

使用者說話
↓
STT
↓
LLM
↓
TTS
↓
AI 說話

今天還沒有接上 LLM,所以先從 Terminal 手動輸入文字。

為什麼選 Kokoro 82M?

一開始我測試過 Qwen3-TTS 1.7B。

在目前這台 Mac 與測試設定下,Warm RTF 約為:

3.03

也就是生成 1 秒語音大約需要 3 秒,對即時對話來說還是偏慢。

因此這次改測:

mlx-community/Kokoro-82M-bf16

Kokoro 只有 82M,可以透過 MLX 在 Apple Silicon GPU 上本機執行,而且不需要額外提供參考音訊。

目前使用:

zf_xiaoxiao

作為預設中文聲線。

第一版 TTS Demo

執行:

.venv-kokoro/bin/python -m app.tts.kokoro_cli \
  --text "你好,今天過得怎麼樣?"

流程:

輸入文字
↓
Kokoro 82M
↓
產生 WAV
↓
自動播放

也可以調整語速:

.venv-kokoro/bin/python -m app.tts.kokoro_cli \
  --text "今天有記得吃飯嗎?" \
  --voice zf_xiaoxiao \
  --speed 0.9

實測生成速度

這次使用 RTF(Real-Time Factor)量測生成速度:

RTF = Inference Time / Audio Duration

RTF 小於 1,代表模型生成語音的速度比實際播放速度還快。

測試 推論時間 音訊長度 RTF
短句 0.095 s 2.30 s 0.041
一般句 0.113 s 2.85 s 0.040
中句 0.227 s 5.35 s 0.043
長句 0.437 s 9.10 s 0.048

平均:

RTF = 0.0464

模型載入時間約為:

0.286 秒

目前即使還沒有使用 Streaming TTS,整段語音生成完成後再播放,等待時間也已經很短。

中文語音測試

除了速度,也測試了一般中文、數字、長句、標點與不同語速。

生成結果再透過 MLX Whisper 回聽,純中文測試得到:

CER = 0

這代表這批測試句在語音內容的可辨識度上沒有出現錯字。

另外測試:

speed = 0.9
speed = 1.0
speed = 1.1

三種速度都能正常生成。

如果未來主要提供給高齡使用者,我目前比較傾向:

speed = 0.9

讓語速稍微慢一些。

目前比較明顯的問題是中英文混合時,部分英文詞的發音仍然不夠穩定,之後可能需要在送進 TTS 前加入文字正規化。

今天完成了什麼?

Day 03 完成:

Text
↓
Kokoro 82M
↓
Audio
↓
Playback

目前一般聊天會先使用 Kokoro,優先追求低延遲。

而需要特定家人聲線的情境,則會另外使用 Voice Cloning。

下一步要測試:

只提供一小段真人錄音,AI 能不能用相似的聲音說出新的內容?

Day 04 準備進入 Voice Cloning


上一篇
Day 02|先讓 AI 聽懂你:從 Speech-to-Text 開始
系列文
30 天打造高齡智慧健康照護 AI Companion3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言