项目背景与公开边界
本项目面向 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 小时稳定性、生产签名和客户音频链路,因此只能标记为客户测试候选。
在线咨询
电话咨询
微信咨询
回到顶部