專案背景與公開邊界
本專案面向 RK3588-S 智慧終端的離線文字轉語音需求。在 Android 12、arm64-v8a 和普通應用許可權下完成模型封裝、流式回撥、播放控制、男聲與多女聲配置、AAR 和 Demo APK 整合,並在真實裝置上匯出 WAV 和記錄效能資料。公開案例已去除客戶、裝置資產和業務文字,只保留可由程式碼、構建產物、日誌與音訊檔案複核的工程事實。
工程目標
- 網路不可用時仍能在裝置本地把文字轉換為語音。
- 以 Android AAR 暴露穩定的非同步流式 PCM 介面。
- 同時提供可選擇的中文男聲和多組中文女聲。
- 交付 Demo、接入說明、許可證材料、WAV 樣本和可追溯測試記錄。
端側處理鏈路
文字請求先進入任務排程層;最新文字可停止正在執行或排隊的舊請求。TTS 執行時在 SDK 建立階段載入 Kokoro 非量化模型,推理產生的浮點樣本轉換為 24 kHz、單聲道、PCM16 little-endian 分片,並透過回撥交給 AudioTrack 或業務側檔案封裝。整個合成鏈路不呼叫雲端 TTS 介面。
- 應用提交文字、voiceId、語速和音量。
- SDK 校驗引數並管理停止、替換與排隊狀態。
- Kokoro 在 RK3588-S CPU 上執行本地推理。
- onAudioChunk() 分片返回 PCM;onCompleted() 僅返回完成統計。
- 應用播放裸 PCM,或新增 WAV 頭後儲存檔案。
Android SDK 交付
獨立 TTS AAR 保留 EyeTtsSdk、TtsOptions、TtsStreamCallback 與 TtsAudioData 呼叫方式。replaceTextStreamAsync() 用於停止舊文字併合成最新文字,stopTts() 用於停止合成並清空舊任務。SDK 輸出的是裸 PCM,不是包含檔案頭的 WAV。
TtsOptions options = new TtsOptions("zm_009", 1.0f, 1.0f);
tts.replaceTextStreamAsync(text, options, callback);
// callback.onAudioChunk(... TtsAudioData audio)
男聲能力與真機驗證
男聲不是頁面佔位能力。當前公開驗證聲線為 zm_009、speaker ID 58。該聲線已在 RK3588-S 上分別以 0.8x、1.0x、1.4x 生成同一句測試文字,三份 WAV 均為 24 kHz、單聲道、PCM16,削波樣本數為 0。不同語速的音訊時長分別為 5.549、4.363 和 3.086 秒,可用於驗證語速引數實際生效;這些客觀資料不能代替人工音質評價。
Male zm_009 / 0.8x
Male zm_009 / 1.0x
Male zm_009 / 1.4x
多女聲能力
SDK 0.5.1 支援官方 55 箇中文女聲名稱對映,並保留 female 到 zf_001 的相容對映。Demo 共提供 12 個女聲候選,均已在 RK3588-S 上生成 WAV;公開表格僅列出作為基線的 zf_001。音訊時長、峰值與雜湊差異可以排除重複匯出同一聲線,但不能證明自然度、清晰度或業務適配性已經透過主觀驗收。
Female zf_001 / 1.0x
軟硬體環境
| 專案 | 實測值 |
|---|---|
| SoC | RK3588-S |
| OS | Android 12 |
| ABI | arm64-v8a |
| Model | Kokoro multi-lang v1.1, non-quantized |
| Runtime | sherpa-onnx 1.13.4, CPU, 4 threads |
| Output | 24000 Hz, mono, PCM16 little-endian |
RK3588-S 實測結果
| 聲線 / 語速 | 首段 PCM | 總耗時 | 音訊時長 | RTF | 削波 |
|---|---|---|---|---|---|
| Female zf_001 / 1.0x | 1572 ms | 4387 ms | 4.241 s | 1.034 | 0 |
| Male zm_009 / 0.8x | 1923 ms | 5534 ms | 5.549 s | 0.997 | 0 |
| Male zm_009 / 1.0x | 1545 ms | 4396 ms | 4.363 s | 1.008 | 0 |
| Male zm_009 / 1.4x | 1133 ms | 3201 ms | 3.086 s | 1.038 | 0 |
測試文字為“小睿小睿,這是原生流式文字轉音訊測試。”,執行緒數為 4,SDK 輸出音量引數設為 1.0。首段指第一次 PCM 回撥時間;RTF 為總生成耗時除以音訊時長。資料來源為 2026-08-05 穩格科技 RK3588-S 專案測試記錄;樣本量較小,不用於承諾所有文字或所有裝置的效能。
測試與交付物
- EyeAlgo TTS Android AAR 與配套 Core AAR。
- 支援文字輸入、男女聲、語速、音量、播放、暫停、停止與 WAV 匯出的 Demo APK。
- Kokoro 模型清單、檔案大小與 SHA-256 校驗記錄。
- 男女聲真機 WAV、生成日誌、構建測試和接入說明。
- sherpa-onnx、ONNX Runtime 與模型第三方許可證材料。
38 test suites / 185 test cases / 0 failures / 0 errors / 0 skipped. AAR and APK builds passed.
適用場景
該方案適用於智慧眼鏡輔助播報、離線 OCR 朗讀、工業手持終端、裝置告警播報、展陳終端和內網 Android 裝置。是否適合即時對話、長文連續朗讀或量產韌體,需要結合包體、記憶體、首段延遲、音訊鏈路、語言文字規範和穩定性目標單獨評估。
整合條件
- 目標裝置需為 Android 12、arm64-v8a 或另行完成相容性驗證的環境。
- 當前非量化 AAR 約 354 MiB,Demo APK 約 360 MiB,安裝空間和分發方式需預留。
- 客戶工程必須避免混入其他版本的 sherpa-onnx Java/JNI 或 ONNX Runtime。
- 播放端需按 24000 Hz、單聲道、PCM16 little-endian 配置 AudioTrack。
- 正式驗收前應凍結文字集、聲線、語速、播放裝置、延遲和穩定性指標。
限制與驗收邊界
- 當前狀態為 CUSTOMER_TEST / NOT_PRODUCTION。
- 未完成 100 條中文、英文、數字、標點和長文字清晰度測試。
- 未完成 8 小時持續轉換、停止、搶佔和播放穩定性測試。
- 未完成全部聲線的人工聽感排序,預設女聲仍需由業務方確認。
- 未完成 INT8 體積、延遲、記憶體和音質對比,也未完成生產簽名。
- 非量化模型的首段 P95 和 RTF 略高於原目標,不能寫為效能門檻透過。
公開技術依據
聲線編號、Android 配置和取樣率以 sherpa-onnx 的 Kokoro 多語言模型說明為技術依據;模型來源與許可證以 Kokoro-82M-v1.1-zh 頁面為準。網站案例只描述本專案採用的版本和實測結果,不把上游模型說明等同於本專案驗收結論。
常見問題
這個 SDK 是否完全離線?
當前合成鏈路在裝置本地載入模型並生成 PCM,不呼叫雲端 TTS。首次安裝模型、下載應用或業務資料同步是否需要網路,由實際分發方案決定。
男聲是否已經在 RK3588-S 真機測試?
是。zm_009、speaker ID 58 已完成 0.8x、1.0x、1.4x 三檔真機生成,記錄了首段、總耗時、時長、RTF 與削波檢查;尚未完成長文字和 8 小時穩定性驗收。
SDK 支援多少中文女聲?
當前 0.5.1 對映 55 個官方中文女聲名稱,Demo 展示 12 個候選。已對映不等於全部完成主觀音質驗收,正式專案應先選擇候選聲線再用業務文字複測。
流式回撥返回 WAV 檔案嗎?
不是。onAudioChunk() 返回 24 kHz、單聲道、PCM16 little-endian 裸資料。即時播放可直接寫入 AudioTrack,儲存檔案時需要增加標準 WAV 檔案頭。
為什麼不能直接標記為生產級?
現有證據覆蓋構建、單元測試、模型清單、短句真機生成和音訊格式,但未覆蓋長文字、全部聲線、8 小時穩定性、生產簽名和客戶音訊鏈路,因此只能標記為客戶測試候選。
線上諮詢
電話諮詢
微信諮詢
回到頂部