ChatTTS-UI 本地语音合成:5 分钟跑通第一条语音,再搭好 API 服务
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
ChatTTS-UI 是一个跑在本地浏览器里的文字转语音工具,底层是 ChatTTS 模型,支持中英文和数字混合输入,同时带一套 /tts 接口,方便把语音能力接进自己的程序。适合想自己搭 TTS 服务、又不想碰云 API 的开发者。
5 分钟跑通第一条语音
最短路径分五步,全程在终端里敲命令:
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui cd ChatTTS-ui python3 -m venv venv && source venv/bin/activate # Windows 用 venv\Scripts\activate pip install -r requirements.txt pip install torch==2.7.1 torchaudio==2.7.1 python3 app.py最后一条命令跑起来后会自动打开浏览器,默认地址http://127.0.0.1:9966。首次启动会先下载模型(约 2GB):程序检测 huggingface.co 是否可达,可达就从那里拉,不可达就自动切到 modelscope。
几个直接决定成败的点:
- Python 版本锁在 3.9-3.11,推荐 3.10,3.12 会直接报错(见下文速查表);
- 走 modelscope 下载时必须关代理,开着会报 proxy 错误;
- 需要约 8GB 内存和 10GB 空闲磁盘;
- 想上 GPU 加速:N 卡显存大于 4GB 且装好 CUDA 12.8+ 即可,显存不足 4GB 会强制走 CPU。
进入页面后输入一段文字,点合成,等几秒就能试听。声音落盘在static/wavs/目录,页面里可直接下载。
按场景选部署路线
| 场景 | 推荐方式 | 环境要求 |
|---|---|---|
| 个人体验,不碰代码 | Windows 预打包版:解压后双击 app.exe | Win10/11;N 卡显存 >4GB 且 CUDA 12.8+ 才启用 GPU |
| 定制开发,Linux/macOS 服务器 | 源码部署:venv + pip 装依赖后运行 app.py | Python 3.9-3.11,约 8GB 内存 |
| 云服务器 / 微服务 | Docker:docker compose -f docker-compose.gpu.yaml up -d(CPU 机换 cpu 版) | Docker,GPU 机需 NVIDIA 驱动 |
compose 文件里已经配好WEB_ADDRESS: 0.0.0.0:9966和端口映射,容器起来后直接访问IP:9966。N 卡显存大于 4GB 但源码部署后仍走 CPU,多半是 torch 装成了 CPU 版,卸载重装 CUDA 版即可。
踩坑速查
| 现象 | 原因 | 处方 |
|---|---|---|
启动报Dynamo is not supported on Python 3.12 | torch.compile 不支持 3.12+ | 换 Python 3.10 重建虚拟环境 |
下载模型报ProxyError: ...modelscope.cn... | modelscope 与代理冲突 | 关闭代理重试 |
报Missing spk_stat.pt | 模型文件不完整 | 补下该文件放入models/pzc163/chatTTS/asset/ |
Windows 报Windows not yet supported for torch.compile | torch.compile 不支持 Windows | 在 .env 里设compile=false、device=cpu |
合成时报Normalizer pynini ... nemo_text_processing | 新版中文文本处理依赖装不上 | 在 ChatTTS/core.py 约 143 行起注释相关 7 行,或调用时传do_text_normalization=False |
把它变成能调用的语音服务
服务起来后,POST http://127.0.0.1:9966/tts就是完整的 REST 接口。一次最小调用:
import requests r = requests.post('http://127.0.0.1:9966/tts', data={'text': '你好,欢迎使用 ChatTTS', 'voice': '2222', 'temperature': 0.3, 'top_p': 0.7, 'top_k': 20, 'speed': 5, 'wav': 1}) print(r.headers['Content-Type']) # 加了 wav=1 直接返回音频响应是 JSON:code=0表示成功,audio_files里每个元素带filename(服务器上的绝对路径)和url(可直接下载的 wav 地址);失败则返回code=1加错误信息。参数一览:
| 参数 | 含义 | 建议值或范围 |
|---|---|---|
| text | 要合成的文字,必填,支持换行分段 | — |
| voice | 音色:2222/7869/6653/4099/5099等预置值,任意数字则按该种子随机生成 | 默认2222 |
| custom_voice | 自定义音色种子,大于 0 时优先于 voice | 默认 0(不启用) |
| prompt | 风格控制,笑声、停顿等 | 如[laugh_0][break_6] |
| temperature | 采样随机性,越小越稳、越自然越大 | 默认 0.3 |
| top_p | 核采样阈值 | 默认 0.7 |
| top_k | 采样候选词数量 | 默认 20 |
| speed | 语速档位 | 1-9,默认 5 |
| skip_refine | 是否跳过文本优化阶段 | 0/1,默认 0 |
| text_seed | 文本生成种子,固定结果可复现 | 默认 42 |
| is_stream | 流式返回 | 0/1,默认 0 |
| wav | 为 1 时接口直接吐 wav 文件而非 JSON | 默认 0 |
音色管理三件事:固定音色把 csv 或 pt 文件丢进 speaker/ 目录即可;想每次同一种声音就传固定custom_voice种子(注意同一设备同一种子也可能有细微差异,音调尤其明显);0.96 版本后下载的seed_开头 pt 文件要先跑一次python cover-pt.py转换,生成_emb-covert.pt结尾的新文件,然后删掉原始 pt。
批量场景直接循环调用接口即可,返回的推理时长和音频时长也在audio_files里,方便做统计。
上线前检查清单
models/pzc163/chatTTS/模型文件完整,asset/spk_stat.pt存在- GPU 机显存 >4GB 且 CUDA 12.8+;否则在 .env 显式写
device=cpu - 局域网访问需修改 .env 里的
WEB_ADDRESS(如0.0.0.0:9966)并重启 POST /tts实测返回code=0,浏览器打开返回的 url 能播放- 确认
static/wavs/磁盘空间够,必要时定期调用/clear_wavs清理
跑通后建议先拿默认音色 2222 反复调 temperature 和 speed 找喜欢的组合,锁定参数后把满意的音色存成 csv 放进 speaker 目录长期复用。再深一点可以看 app.py 里 /tts 接口的实现,以及 faq.md 的完整报错列表。
【免费下载链接】ChatTTS-ui一个简单的本地网页界面,使用ChatTTS将文字合成为语音,同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into speech, along with support for external API interfaces.项目地址: https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考