logo
0
0
WeChat Login
Move Voco project files to root directory and remove Voco folder

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

About

Voco TTS是一款面向 Android 平台的多功能 TTS 应用,内置微软语音演示接口,支持自定义 HTTP 请求配置,可灵活接入第三方本地 TTS 引擎、本地朗读源与语音包,实现多引擎自由切换与扩展。应用支持基于中文双引号自动识别旁白与对话并智能朗读,同时提供文本替换、自动重试、备用配置等实用能力,兼顾稳定性、扩展性与自定义度,为测试与日常使用提供简洁可控的语音合成体验。

Language
Kotlin52.3%
Java43.9%
JavaScript2.8%
Dockerfile1%