logo
0
0
WeChat Login
docs: 更新 README 为最新项目状态

Voco TTS

基于 QuickJS 引擎的 Android 文本转语音应用

CNB Build

项目介绍

VocoTTS 是一个现代化的 Android TTS 应用,使用 QuickJS 替代传统的 Rhino 引擎,提供更高效的 JavaScript 执行性能和更好的 Java 互操作性。

核心特性

  • QuickJS 引擎 - 高性能 JavaScript 运行时(单引擎方案,移除 Rhino)
  • Java 桥接 - JS 代码可直接调用 Android API
  • Material 3 设计 - 现代化的用户界面,遵循 MD3 规范
  • 脚本编辑器 - 内置代码编辑器和控制台
  • HTTP 转发服务 - 基于 Ktor 的 HTTP 服务器
  • 数据库支持 - Room 数据库持久化
  • 插件兼容 - 支持多种 TTS 插件(文心一言、千问等)

技术栈

技术版本用途
Kotlin2.0.21开发语言
Android Gradle Plugin8.7.3构建工具
Gradle8.10.2构建系统
Compose BOM2026.01.01UI 框架
Material 31.4.0UI 设计系统
QuickJS-Android1.3.0JavaScript 引擎
Ktor3.0.3HTTP 服务器
Room2.6.1数据库
Media31.5.1音频播放
OkHttp4.12.0HTTP 客户端
SDK 配置
minSdk24 (Android 7.0)
targetSdk35 (Android 15)
compileSdk35

快速开始

1. 环境要求

  • CNB 云原生开发(推荐):

    • Fork 本仓库到你的 CNB 账号
    • 点击「开发」按钮 - 自动创建云端开发环境
    • 浏览器中打开 WebIDE
  • 本地开发

    • JDK 17+
    • Android SDK 34/35
    • Gradle 8.10.2

2. 构建项目

# Debug 构建 ./gradlew assembleDebug # Release 构建 ./gradlew assembleRelease # 运行测试 ./gradlew test # 代码检查 ./gradlew lint

3. 安装 APK

Debug APK 位置:

app/build/outputs/apk/debug/app-debug.apk

QuickJS 桥接接口

标准对象

1. console 对象(日志输出)

console.log(...args) // 输出普通日志 console.error(...args) // 输出错误日志

2. http 对象(HTTP 请求)

// HTTP GET 请求 http.get(url, headers?) => Promise<Response> // HTTP POST 请求 http.post(url, body, headers?) => Promise<Response> // Response 包含: { status: number, // HTTP 状态码 data: string, // 响应数据 success: boolean // 是否成功 (200-299) }

3. fs 对象(文件系统)

fs.readText(path) => string | null // 读取文本文件 fs.writeText(path, content) => boolean // 写入文本文件 fs.exists(path) => boolean // 检查文件是否存在

4. base64 对象(编解码)

base64.encode(data) => string // Base64 编码 base64.decode(encoded) => string // Base64 解码

5. java 对象(Java 桥接)

java.call(method, ...args) => any // 调用 Java 方法

使用示例

// 获取输入文本并朗读 function main() { var text = java.call("getInputText"); if (text && text.length > 0) { java.call("speak", text); console.log("朗读: " + text); } } main(); // HTTP 请求示例 http.post("https://api.example.com/tts", JSON.stringify({ text: "Hello World" }), { "Content-Type": "application/json" }).then(function(response) { if (response.success) { console.log("TTS 合成成功"); // 处理音频数据 var audioData = base64.decode(response.data); fs.writeText("/cache/audio.mp3", audioData); } else { console.error("TTS 合成失败: " + response.data); } });

项目结构

Voco/ ├── app/ # 主应用模块 │ ├── src/main/java/cool/cnb/ktouls/vocotts/ │ │ ├── MainActivity.kt # 主界面 │ │ ├── VocoApplication.kt # 应用入口 │ │ ├── engine/ │ │ │ └── QuickJSManager.kt # QuickJS 引擎管理 │ │ ├── tts/ # TTS 核心模块 │ │ │ ├── model/ # 数据模型 │ │ │ ├── synthesizer/ # TTS 合成器 │ │ │ └── VocoTTSService.kt # TTS 服务 │ │ ├── server/ # HTTP 服务器 │ │ │ └── TtsForwardServer.kt # 转发服务器 │ │ ├── database/ # Room 数据库 │ │ │ ├── VocoDatabase.kt # 数据库配置 │ │ │ ├── dao/ # 数据访问层 │ │ │ └── entity/ # 数据实体 │ │ ├── script/ # 脚本引擎 │ │ │ └── QuickJSEngine.kt # QuickJS 引擎包装 │ │ ├── service/ │ │ │ └── VocoService.kt # 核心服务 │ │ └── ui/ │ │ ├── screens/ # 页面 │ │ │ ├── HomeScreen.kt # 首页 │ │ │ ├── EditorScreen.kt # 脚本编辑器 │ │ │ ├── SettingsScreen.kt # 设置页 │ │ │ └── TTSServiceScreen.kt # TTS 服务页 │ │ ├── theme/ # 主题 │ │ │ ├── Color.kt # 配色方案 │ │ │ ├── Theme.kt # 主题定义 │ │ │ ├── Type.kt # 字体样式 │ │ │ └── Shape.kt # 形状规范 │ │ └── viewmodel/ # ViewModel │ │ └── VocoViewModel.kt │ └── src/main/assets/ # 资源文件 │ └── example_scripts/ # 示例脚本 ├── docs/ # 文档 │ ├── api/ # API 文档 │ └── design/ # 设计文档 ├── .cnb.yml # CNB 构建配置 ├── .ide/ # 云原生开发环境 │ └── Dockerfile ├── build.gradle.kts # 项目构建配置 └── settings.gradle.kts # 项目设置

构建流水线

本项目的 CI/CD 流水线包含:

触发方式任务
Push知识库构建 + Debug APK + Lint 检查 + 单元测试
PR代码质量检查
TagRelease 构建 + 上传制品库
定时每周一凌晨更新知识库
手动Web 端手动触发 Release 构建

已完成功能

核心模块 ✅

  • QuickJS 引擎管理器
  • Java 桥接接口
  • TTS 核心模块(数据模型、合成器)
  • HTTP 转发服务器(Ktor Netty)
  • Room 数据库
  • 脚本引擎包装

UI 框架 ✅

  • Material 3 设计系统
  • 主界面框架(Navigation Drawer + BottomAppBar)
  • 4 个功能页面(声音、日志、试听、设置)
  • 转发开关(播放/停止)
  • 应用图标和主题色

开发环境 ✅

  • 云原生开发环境配置
  • 构建流水线配置
  • 知识库配置
  • README 文档

待完成功能

功能页面 🔄

  • 声音列表页面(顶部选项标签 + 分组展示)
  • 日志页面(日志查看器、过滤、清空)
  • 试听页面(文本输入、TTS 参数配置、播放控制)
  • 设置页面(TTS 引擎、网络、主题)

功能集成 ⏳

  • 插件系统集成
  • TTS 源管理(CRUD)
  • 转发器控制
  • 音频播放控制
  • 参数调节(语速、音调、音量)

插件兼容性

本项目支持以下 TTS 插件:

  • 文心一言 (Baidu Wenxin) - 百度文心一言 TTS
  • 通义千问 (Ali Tongyi) - 阿里通义千问 TTS
  • 更多插件 - 参考 软件资料/ttsrv-plugins.json

插件开发规范

所有插件必须遵循以下桥接接口规范:

  • 使用 console.log/error 输出日志
  • 使用 http.get/post 调用 TTS API
  • 使用 fs.readText/writeText/exists 处理文件
  • 使用 base64.encode/decode 处理音频数据
  • 使用 java.call(method, ...args) 调用原生功能

详见:docs/api/js-bridge.md

开发进度

  • 项目初始化:✅ 已完成
  • QuickJS 引擎集成:✅ 已完成
  • 核心模块移植:✅ 已完成(TTS、Server、Database、Script)
  • UI 框架:✅ 已完成
  • 应用图标:✅ 已完成
  • 功能页面:🔄 进行中
  • 插件集成:⏳ 待开始

参考资料

许可证

MIT License


Made with ❤️ on CNB