dsh-tts:把文字變成聲音,引擎留在插件之外

前言

在 DSH Host 的開發場景中,文字轉語音(TTS)通常需要綁定特定的引擎。dsh-tts 插件將這一邏輯拆分,專注於“合成”與“時間戳”的計算,將音頻引擎(如微軟 Edge 或本地命令行工具)留作外部依賴。它不負責決策哪條音頻好聽或如何拼接,只產出文件與數字,供調用方處理。

核心功能

插件提供三個主要工具,覆蓋從合成到檢查的全流程:

1、tts_speak:支持 speak(單段文字)和 dialogue(多人腳本)兩種模式。speak 輸出音頻與逐詞時間戳側車文件;dialogue 則生成 manifest 與全局詞級時間戳。
2、tts_setup:提供 status、voices、check 三個 action。用於檢查引擎可用性、枚舉音色列表以及合成一句自檢。
3、tts_guide:提供 overview、tool、action、rules 四個 action。用於讀取完整的參考文檔,包括參數說明、實測數據與邊界情況。

提供商與配置

插件支持兩種 provider,通過配置選擇:

1、edge(默認):基於微軟 Edge 朗讀端點。無需 Key,依賴網絡,且提供逐詞時間戳(服務端 WordBoundary)。本機實測包含 322 個音色,其中中文(zh)開頭的 14 個。
2、command:本地 TTS 命令行引擎。無需網絡,引擎換代無需修改插件。使用模板佔位符來傳遞參數,如 {out}、{text}、{timings} 等。

command 配置示例

command:
  path: 'C:/tools/piper/piper.exe'
  args: ['--model', 'C:/tools/piper/zh_CN-huayan-medium.onnx', '--output_file', '{out}']
  textMode: 'stdin'
  outFormat: 'wav'
  voices: ['zh_CN-huayan-medium']

安裝與啓用

安裝無需構建步驟,直接在 profile 中通過 link: 掛載即可。

- insert:
    - id: dsh-tts
      name: 'dsh-tts'
      config: { provider: null, outDir: null, ffprobePath: null, edge: { voice: null }, command: null }

默認情況下,edge provider 可用即用。如果未配置本地引擎,tts_setup 會如實報告。

典型用法

使用 Node.js 運行 src/bin/tts.mjs:

1、檢查環境與 ffprobe:

node src/bin/tts.mjs doctor

2、查看中文音色列表:

node src/bin/tts.mjs voices --locale zh

3、合成一段文字:

node src/bin/tts.mjs say "要念的話" --out a.mp3

4、檢查合成質量(含尾部靜音):

node src/bin/tts.mjs check

5、多人對話腳本合成:

node src/bin/tts.mjs dialogue --script s.txt --voices host-a=...,host-b=...

6、查看規則文檔:

node src/bin/tts.mjs rules

輸出與契約

一次合成會生成兩個文件:音頻文件與同名的 .words.json 側車文件。words 數組包含逐詞的文本、起止時間,可直接供下游字幕流程(如 video_narrate)讀取。

在 dialogue 模式下,除上述側車文件外,還會生成 dialogue.manifest(包含 clips 與 verification)和 dialogue.words.json。verification 用於校驗音頻片段是否在文件邊界內,其值爲 true(已測量且在文件內)、false(超出)或 null(未測量)。

注意事項

1、商用授權:edge provider 的商用授權未明確,建議僅用於草稿與個人內容;如需商用,請切換至 command provider 並使用明確授權的本地引擎。
2、本地引擎限制:純 Node 的本地引擎中文詞級時間戳暫無現成方案;本地引擎速度約爲 1.1x 實時,中文合成需要藉助 Python 側工具包。
3、集成依賴:video_narrate 對 dsh-video-audio 的集成依賴尚未重建(截至 2026-10-04),目前無法通過標準流程流轉。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜