更新日志
本项目遵循 语义化版本。 完整历史见 GitHub Releases。
v1.0.2
修复
服务端「一直生成失败」(控制台全是 504)。根因是
edge-tts库自身没有任何超时: 微软接口一旦「接了连接却不回音频」,await communicate.save()就永久挂住 —— 不抛异常、不返回、也不释放推理锁,于是后面每个请求都在等锁,全部排到超时 (实测出现过连续十几次请求 100% 超时)。现在:tts.edge_timeout(默认 60s):单次在线语音的超时,卡住立刻抛错 → 重试 → 仍失败转离线语音queue.hard_timeout(默认 100s):单次推理的硬上限,超过即判定卡死,主动退出进程- 推理锁被占用超过硬上限,同样判定卡死并重启
卡在 C 层网络等待上的线程无法从 Python 层面中断,重启是唯一干净的恢复方式; 所以请务必用 systemd(Linux)或
守护启动.bat(Windows)托管。
新增
deploy/linux/install-systemd.sh:给手工部署过的机器补装 systemd 服务, 修掉systemctl status tts-server→Unit tts-server.service could not be found.。 自动探测安装目录 / Python(含便携包的python/bin/python3)/ 端口,停掉手工起的进程。- Windows 整合包新增
守护启动.bat:进程退出 5 秒后自动重启,等价于 systemd 的Restart=always - 卡死保护回归测试(超时补丁幂等 / 硬超时必须小于请求超时 / 卡死必触发重启)
配置新增
yaml
tts:
edge_timeout: 60 # 单次在线语音的超时(秒)
queue:
hard_timeout: 100 # 单次库调用的硬上限(秒),超过判定卡死并重启服务修复(构建)
build_windows_bundle.ps1里循环变量$name覆盖了参数$Name, 导致VERSION.txt的bundle:字段写成某个 .bat 文件名
v1.0.1
修复
- 引擎在
rvc.enabled: false时会因为缺少edge-tts直接初始化失败 (整个服务ready=false)。现在改为记录警告继续启动 —— 这是个可选依赖,不该拖垮整个引擎。
构建
- 安卓配置 App 的成品(24 KB)纳入版本库,Release 工作流才能带上它
v1.0.0
首个正式版本。
服务端
- Edge TTS(
zh-CN-YunxiNeural)+ RVC 音色转换的 HTTP 合成服务 - 长文本自动分段:显存峰值只与单段长度有关,2 GB 显存的小卡也能处理长文本
- 离线语音兜底:在线语音失败时自动改用本地语音 (Windows SAPI / Linux espeak-ng)
- 在线语音瞬时故障自动重试(空音频、断连、超时)
- 显卡架构智能识别:兼容 Pascal(sm_61,P106-100 / P4 / P40 / GTX 10 系)等老卡
- 显存不足自动降级 CPU 重试,不会让请求失败
- 音频按文本缓存 + 过期自动清理(默认 10 分钟)
- 网页控制台:显卡状态 / 主机状态 / 在线试听 / 最近请求 / 一键清理
- 网页控制台支持密码登录(HMAC 签名会话 Cookie)
- 完全离线的资源查找:预置
hubert_base.pt/rmvpe.pt,不需要访问 HuggingFace
客户端
- AstrBot 插件:拦截 AI 文本 → 过滤括号内容 → 合成语音 → 发送语音消息,失败自动降级文字
- 命令行客户端
tts_client.py:health / say / batch / bench / filter - 单文件客户端库
voice_tts.py:零依赖,拖进任何 Python 项目即可调用 - 安卓配置 App
部署
- Windows 一键整合包(内置 Python 运行时、CUDA 版 PyTorch、ffmpeg)
- Linux 一键安装脚本(自动装 Python 3.12、PyTorch、systemd 服务)
- Docker / docker-compose
- Google Colab Notebook
- 安卓 Termux + chroot 部署
已知限制
- 在线语音(Edge TTS)依赖微软公开接口,偶发抖动;已加重试与离线兜底
- 服务端尚未内置鉴权以外的访问控制,暴露公网请自行套反向代理与 HTTPS
- 安卓端只能用 CPU 推理(没有可用的 PyTorch GPU 后端)