Skip to content

Repository files navigation

离线中文神经网络 TTS(sherpa-onnx + VITS)

完全离线运行的高精度中文文字转语音 Android 应用。使用 sherpa-onnx(ONNX Runtime)加载 VITS 神经网络模型,不依赖系统 TTS 引擎、不联网,可商用(Apache-2.0)。

特性

  • 完全离线:模型与词典内置在 APK 中,运行时零网络访问
  • 流式播放:基于 generateWithCallback + MODE_STREAM AudioTrack, 合成即播放(首音延迟 ~10ms),无音频长度上限
  • 174 个发音人(aishell3 多说话人模型)
  • 可调语速 / 音调、发音人选择、WAV 保存
  • Apache-2.0 许可证,可用于商业产品

架构

输入文本 → 规则 FST(数字/日期/电话/多音字)→ VITS 神经网络 → 浮点音频块
    → PCM16 转换 → AudioTrack (MODE_STREAM) 边合成边播放
组件 技术
推理引擎 sherpa-onnx 1.13.4(ONNX Runtime 封装)
声学模型 VITS aishell3(174 说话人,8kHz)
文本归一化 date.fst / number.fst / phone.fst / new_heteronym.fst
播放 AudioTrack MODE_STREAM,16-bit PCM

构建环境

重要:需要 JDK 17、Android SDK、Gradle 7.2。

# 关键:设置 ANDROID_SDK_HOME 指向可写的用户目录,否则 AGP 因 C:\.android 不可写而失败
$env:ANDROID_SDK_HOME = "C:\Users\Administrator"
$env:ANDROID_HOME = "D:\sdk"
$env:ANDROID_SDK_ROOT = "D:\sdk"
$env:JAVA_HOME = "F:\Program Files\Java\jdk-17.0.12"
$env:GRADLE_USER_HOME = "G:\AIProject\AndroidTTs\.gradle-home"
$gh = "C:\Users\Administrator\.gradle\wrapper\dists\gradle-7.2-bin\2dnblmf4td7x66yl1d74lt32g\gradle-7.2"
& (Join-Path $gh "bin\gradle.bat") assembleDebug --no-daemon

APK 输出:app/build/outputs/apk/debug/app-debug.apk

安装到设备

$adb = "D:\sdk\platform-tools\adb.exe"
& $adb install -r "app\build\outputs\apk\debug\app-debug.apk"
& $adb shell am start -n com.aiproject.androidtts/.MainActivity

⚠️ 当前 abiFilters 包含 x86(用于模拟器调试)。生产发布时请删除 x86,仅保留 arm64-v8a

切换高保真模型(提升音质)

当前 aishell3 输出 8000 Hz(电话级音质)。如需更高自然度的生产级音质, 可切换到 vits-zh-hf-doom(单发音人、更自然):

# 1. 下载高保真模型
powershell -ExecutionPolicy Bypass -File download-model.ps1 -Model hf-doom

然后修改 app/src/main/java/com/aiproject/androidtts/TtsController.java

private static final String MODEL_FILE = MODEL_DIR + "/vits-zh-hf-doom.onnx";
private static final String ENGINE_LABEL = "VITS 神经网络 (hf-doom)";

重新构建即可。

可选模型对比

模型 大小 采样率 发音人 音质 许可证
aishell3(默认) ~120 MB 8000 Hz 174 电话级 Apache-2.0
hf-doom(推荐) ~600 MB ~22050 Hz 1 高自然度 Apache-2.0
mms-zho ~280 MB 22050 Hz 1 中等 CC-BY-4.0

关键文件

文件 说明
app/src/main/java/.../TtsController.java sherpa-onnx 封装:流式合成 + 播放 + 保存
app/src/main/java/.../MainActivity.java UI:发音人选择、语速/音调、朗读/停止/保存
app/src/main/assets/vits-zh/ 模型文件(~124 MB,不随源码分发)
app/libs/sherpa-onnx-1.13.4.aar 推理引擎 AAR(48.8 MB)
app/build.gradle minSdk 24,本地 AAR 依赖,noCompress onnx
download-model.ps1 模型下载脚本(支持多模型)

许可证

  • 模型 aishell3:Apache-2.0(可商用)
  • 训练数据 AISHELL-3:Apache-2.0
  • sherpa-onnx 运行时:Apache-2.0
  • 本应用代码:可自由使用

About

离线中文神经网络 TTS(sherpa-onnx + VITS)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages