Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

zuoban/tts

Repository files navigation

TTS 服务

一个现代化的文本转语音 (TTS) 服务,基于 Microsoft Azure 语音服务,采用前后端分离架构,提供高质量的语音合成能力。

✨ 功能特点

  • 🌍 多语言支持 - 支持多种语言和声音
  • 高性能 - 异步处理,支持高并发
  • 🎛️ 可调节 - 支持语速、语调和情感风格调节
  • 🎵 多格式 - 支持多种输出音频格式
  • 🔌 兼容性 - 完全兼容 OpenAI TTS API
  • ✂️ 智能分割 - 支持长文本自动分割与合并
  • 🖥️ 现代界面 - 基于 React 的现代化 Web UI
  • 🔧 RESTful API - 提供完整的 REST API 接口
  • 📦 多部署方式 - 支持 Docker、Cloudflare Worker 等多种部署方式
  • 收藏功能 - 支持收藏喜欢的声音,快速选择和管理
  • 🎯 声音库 - 完整的声音浏览和试听功能

🏗️ 架构概览

项目采用前后端分离的现代化架构:

后端服务 (Go)

  • 技术栈: Go + Gin 框架
  • 功能: 提供 TTS 核心功能和 RESTful API
  • 特点: 高性能、低延迟、易于扩展

前端应用 (React)

  • 技术栈: React 19 + TypeScript + Vite + Tailwind CSS
  • 功能: 提供现代化的 Web 用户界面
  • 特点: 响应式设计、组件化开发、类型安全

🚀 快速开始

方式一:Docker 部署(推荐)

# 拉取并运行完整服务(前端 + 后端)
docker run -d -p 8080:8080 --name=tts zuoban/zb-tts

部署完成后:

  • 前端界面: 访问 http://localhost:8080
  • API 接口: http://localhost:8080/api/v1/*

方式二:本地开发

后端开发

# 构建应用程序
go build -o tts ./cmd/api
# 运行应用程序
./tts
# 或使用配置文件运行
./tts -config ./configs/config.yaml

前端开发

# 进入前端目录
cd frontend
# 安装依赖
npm install
# 启动开发服务器(默认端口 3000)
npm run dev
# 构建生产版本
npm run build

Docker Compose 开发

# 启动完整开发环境(前端 + 后端)
docker-compose -f docker-compose.dev.yml up --build

方式三:Cloudflare Worker 部署

适用于轻量级无服务器部署:

  1. 创建一个新的 Cloudflare Worker
  2. 复制以下脚本内容到 Worker worker.js
  3. 添加环境变量 API_KEY
    • Workers & Pages -> Your Worker -> Settings -> Variables and Secrets -> Add
    • Type: Secret, Name: API_KEY, Value: YOUR_API_KEY

📚 API 文档

v1 API(推荐使用)

健康检查

curl "http://localhost:8080/api/v1/health"

获取配置信息

curl "http://localhost:8080/api/v1/config"

获取语音列表

# 方式 1:Bearer Token 认证(推荐)
curl -H "Authorization: Bearer YOUR_TTS_API_KEY" \
 "http://localhost:8080/api/v1/voices"
# 方式 2:Query 参数认证
curl "http://localhost:8080/api/v1/voices?api_key=YOUR_TTS_API_KEY"

文本转语音

# 方式 1:GET 请求 + Query 参数认证
curl "http://localhost:8080/api/v1/tts?text=你好,世界&voice=zh-CN-XiaoxiaoNeural&api_key=YOUR_TTS_API_KEY" \
 -o output.mp3
# 方式 2:POST 请求 + Bearer Token 认证(推荐)
curl -X POST "http://localhost:8080/api/v1/tts" \
 -H "Authorization: Bearer YOUR_TTS_API_KEY" \
 -H "Content-Type: application/json" \
 -d '{
 "text": "你好,世界",
 "voice": "zh-CN-XiaoxiaoNeural",
 "rate": 20,
 "pitch": 10,
 "style": "cheerful"
 }' -o output.mp3
# 方式 3:POST 请求 + 请求体中的 api_key
curl -X POST "http://localhost:8080/api/v1/tts" \
 -H "Content-Type: application/json" \
 -d '{
 "text": "你好,世界",
 "voice": "zh-CN-XiaoxiaoNeural",
 "rate": 20,
 "pitch": 10,
 "style": "cheerful",
 "api_key": "YOUR_TTS_API_KEY"
 }' -o output.mp3

参数说明:

  • text: 文本内容
  • voice: 语音风格
  • rate: 语速,范围 -100 到 100
  • pitch: 语调,范围 -100 到 100
  • style: 情感风格,可选值为 sad, angry, cheerful, neutral

认证说明: 所有 TTS 相关接口支持以下三种认证方式:

  1. Bearer Token (推荐): Authorization: Bearer YOUR_TTS_API_KEY
  2. Query 参数: ?api_key=YOUR_TTS_API_KEY
  3. 请求体参数: JSON 中包含 "api_key": "YOUR_TTS_API_KEY"

兼容性 API

原版 TTS API

# 无认证(如果配置了 API Key 则需要认证)
curl "http://localhost:8080/tts?t=你好,世界&v=zh-CN-XiaoxiaoNeural" -o output.mp3
# 使用 Query 参数认证
curl "http://localhost:8080/tts?t=你好,世界&v=zh-CN-XiaoxiaoNeural&api_key=YOUR_TTS_API_KEY" -o output.mp3

OpenAI 兼容 API

# 方式 1:Bearer Token 认证(推荐)
curl -X POST "http://localhost:8080/v1/audio/speech" \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer YOUR_TTS_API_KEY" \
 -d '{
 "model": "tts-1",
 "input": "你好,世界!",
 "voice": "zh-CN-XiaoxiaoNeural",
 "speed": 0.5
 }' -o output.mp3
# 方式 2:请求体中包含 api_key
curl -X POST "http://localhost:8080/v1/audio/speech" \
 -H "Content-Type: application/json" \
 -d '{
 "model": "tts-1",
 "input": "你好,世界!",
 "voice": "zh-CN-XiaoxiaoNeural",
 "speed": 0.5,
 "api_key": "YOUR_TTS_API_KEY"
 }' -o output.mp3

参数说明:

  • model: 模型名称,对应情感风格
  • input: 文本内容
  • voice: 语音风格
  • speed: 语速,0.0 到 2.0
  • api_key: API 密钥(可选,也可通过 Bearer Token 或 Query 参数提供)

认证说明: 支持 Bearer Token、Query 参数或请求体中的 api_key 参数进行认证

📱 阅读集成

本服务支持在阅读应用中使用。

网络导入步骤

  1. 复制服务链接

    • 复制你的导入链接,例如:https://t.leftsite.cn/api/v1/reader.json?n=%E6%99%93%E8%BE%B0&voice=zh-CN-XiaochenNeural&rate=0&pitch=0
  2. 打开朗读设置

    • 在朗读应用中进入「朗读引擎」页面
  3. 网络导入

    • 点击右上角的 (三个点)菜单
    • 选择 「网络导入」 选项
    • 粘贴刚才复制的服务链接
    • 点击 「确认」 完成导入

⚙️ 配置选项

环境变量配置

优先级: 环境变量 > 配置文件 > 默认值

后端环境变量

# 服务配置
SERVER_PORT=8080 # 服务端口
CORS_ALLOWED_ORIGINS=* # 允许的 CORS 源
# TTS 服务配置
TTS_API_KEY=your_api_key # 统一的 API 密钥(TTS 和 OpenAI 兼容接口)
TTS_REGION=eastasia # Azure 区域
TTS_MAX_CONCURRENT=20 # 最大并发数

前端环境变量

# 在 frontend 目录下设置
VITE_API_BASE_URL=http://localhost:8080 # API 基础 URL
VITE_APP_TITLE="TTS 服务" # 应用标题
VITE_NODE_ENV=development # 环境标识

配置文件详解

后端服务使用 YAML 格式的配置文件,默认查找位置:

  • ./configs/config.yaml
  • ./config.yaml
  • /etc/tts/config.yaml

示例配置文件 (configs/config.yaml):

server:
 port: 8080 # 服务监听端口
 read_timeout: 60 # HTTP 读取超时时间(秒)
 write_timeout: 60 # HTTP 写入超时时间(秒)
 base_path: "" # API 基础路径前缀
tts:
 region: "eastasia" # Azure 语音服务区域
 default_voice: "zh-CN-XiaoxiaoNeural" # 默认语音
 default_rate: "0" # 默认语速,范围 -100 到 100
 default_pitch: "0" # 默认语调,范围 -100 到 100
 default_format: "audio-24khz-48kbitrate-mono-mp3" # 默认音频格式
 max_text_length: 65535 # 最大文本长度
 request_timeout: 30 # 请求 Azure 服务的超时时间(秒)
 max_concurrent: 20 # 最大并发请求数
 segment_threshold: 300 # 文本分段阈值
 min_sentence_length: 200 # 最小句子长度
 max_sentence_length: 300 # 最大句子长度
 api_key: 'your_api_key' # TTS API 密钥
 # OpenAI 到微软 TTS 中文语音的映射
 voice_mapping:
 alloy: "zh-CN-XiaoyiNeural" # 中性女声
 echo: "zh-CN-YunxiNeural" # 年轻男声
 fable: "zh-CN-XiaochenNeural" # 儿童声
 onyx: "zh-CN-YunjianNeural" # 成熟男声
 nova: "zh-CN-XiaohanNeural" # 活力女声
 shimmer: "zh-CN-XiaomoNeural" # 温柔女声
# 注意:OpenAI 兼容接口使用 tts.api_key,不需要单独配置
ssml:
 preserve_tags: # SSML 标签保留配置
 - name: break
 pattern: <break\s+[^>]*/>
 - name: speak
 pattern: <speak>|</speak>
 - name: prosody
 pattern: <prosody\s+[^>]*>|</prosody>
 # ... 更多 SSML 标签配置

Docker 配置示例

# 使用自定义端口
docker run -d -p 9000:9000 -e SERVER_PORT=9000 --name=tts zuoban/zb-tts
# 使用配置文件
docker run -d -p 8080:8080 \
 -v /path/to/config.yaml:/configs/config.yaml \
 --name=tts zuoban/zb-tts
# 设置环境变量
docker run -d -p 8080:8080 \
 -e TTS_API_KEY=your_key \
 -e TTS_REGION=eastasia \
 --name=tts zuoban/zb-tts

🛠️ 本地构建与运行

系统要求

  • Go: 1.19 或更高版本
  • Node.js: 18.0 或更高版本(前端开发)
  • Docker: 20.0 或更高版本(可选)

从源码构建

# 克隆仓库
git clone https://github.com/zuoban/tts.git
cd tts
# 后端构建
go mod download
go build -o tts ./cmd/api
# 前端构建
cd frontend
npm install
npm run build
cd ..
# 运行后端服务
./tts

开发脚本

后端开发

# 运行测试
go test ./...
# 整理依赖
go mod tidy
# 验证依赖
go mod verify
# 多平台构建(需要 Docker Buildx)
./script/build.sh

前端开发

cd frontend
# 启动开发服务器(默认端口 3000)
npm run dev
# 代码检查
npm run lint
# 自动修复 linting 问题
npm run lint:fix
# TypeScript 类型检查
npm run type-check
# 清理构建文件
npm run clean
# 预览构建结果
npm run preview

🧪 故障排除

常见问题

1. CORS 错误

  • 检查后端 CORS 配置:CORS_ALLOWED_ORIGINS=*
  • 确认前端 API 基础 URL 正确:VITE_API_BASE_URL

2. API 请求失败

  • 验证 API Key 设置:TTS_API_KEY(统一用于所有接口)
  • 检查后端服务是否正常运行
  • 查看后端日志输出:./tts -v

3. 前端构建失败

cd frontend
npm install # 更新依赖
# 检查 Node.js 版本(需要 18+)
node --version

4. 配置文件找不到

  • 检查配置文件路径:./configs/config.yaml
  • 使用绝对路径:./tts -config /absolute/path/config.yaml
  • 查看启动日志中的配置文件路径

调试工具

  • 前端调试: 浏览器开发者工具 + React DevTools
  • 后端调试: 日志输出 + 健康检查接口 GET /api/v1/health
  • API 测试: 使用 curl 或 Postman 测试 API 接口

📄 项目结构

tts/
├── cmd/api/ # 后端应用程序入口点
├── internal/ # 私有应用程序代码
│ ├── config/ # 配置管理
│ ├── http/ # HTTP 层
│ │ ├── handlers/ # HTTP 请求处理器
│ │ ├── middleware/ # 中间件
│ │ ├── routes/ # 路由配置
│ │ └── server/ # HTTP 服务器实现
│ ├── models/ # 数据模型定义
│ ├── tts/ # TTS 服务层
│ └── utils/ # 工具函数
├── frontend/ # React 前端应用
│ ├── src/
│ │ ├── components/ # React 组件
│ │ │ ├── ui/ # 通用 UI 组件
│ │ │ ├── audio/ # 音频相关组件
│ │ │ │ ├── FavoriteVoices.tsx # 收藏声音组件
│ │ │ │ ├── HistoryList.tsx # 历史记录组件
│ │ │ │ └── AudioPlayer.tsx # 音频播放器组件
│ │ │ └── layout/ # 布局组件
│ │ ├── pages/ # 页面组件
│ │ │ ├── Home.tsx # 首页(包含收藏功能)
│ │ │ └── VoiceLibrary.tsx # 声音库页面
│ │ ├── hooks/ # 自定义 Hooks
│ │ ├── services/ # API 服务层
│ │ │ ├── api.ts # TTS API 服务
│ │ │ └── favorites.ts # 收藏功能服务
│ │ ├── types/ # TypeScript 类型定义
│ │ │ ├── index.ts # 核心类型(包含收藏相关类型)
│ │ └── utils/ # 工具函数
│ └── dist/ # 构建输出目录
├── configs/ # 配置文件
├── script/ # 构建脚本
├── workers/ # Cloudflare Worker 代码
└── docs/ # 文档

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License - 详见 LICENSE 文件

About

tts 服务

Topics

Resources

License

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /