ChatTTS-ui 音色定制指南:预设音色、种子调音与 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 提供本地网页界面和 API,用 ChatTTS 把文字合成为语音,支持中英文混排。音色定制帮你从“默认听起来就那样”,变成声音贴合内容气质:选一个合耳的预设,或自己定一个音色种子,再调三个采样参数把语气磨顺。
音色到底由哪几部分决定
把一次合成想成请一个人读稿:
- 谁在说话,由
voice或custom_voice决定; - 怎么说话,由 temperature、top_p、top_k 决定;
- 带不带语气,由
prompt里的标记决定。
| 参数 | 默认值 | 类比 | 说明 |
|---|---|---|---|
| voice | 2222 | 点一个熟悉的播音员 | 指定预设音色,内置 2222、7869、6653、4099、5099 等 |
| custom_voice | 0 | 自己捏一个声音 | 大于 0 的整数作为种子值,填了它就忽略 voice |
| temperature | 0.3 | 念稿手稳不稳 | 越低越稳,越高越飘 |
| top_p / top_k | 0.7 / 20 | 候选词的过滤范围 | 与 temperature 一起决定随机程度 |
| prompt | 空 | 台词里的表情提示 | 如[laugh_0][break_3],笑声、停顿 |
前两组互相独立:音色决定“谁”,采样三件套决定“怎么说”。
三个场景,各走最短路径
只想本地听听效果
启动后浏览器自动打开http://127.0.0.1:9966。在文本框粘贴几句话,音色下拉框挑一个预设,点「立即合成声音」即可。首次启动会自动下载模型,稍等片刻;界面里还有 1~9 档的语速滑条,想快听几遍就调高。
要批量产出配音内容
每个合成请求都是一次 POST。用脚本循环调用/tts接口,每轮换文本和音色值,把返回的音频 URL 存下来:
import requests res = requests.post('http://127.0.0.1:9966/tts', data={ "text": "第一章,故事从这里开始。", "voice": "2222", "temperature": 0.3, "top_p": 0.7, "top_k": 20 }).json() # res["audio_files"][0]["url"] 即可下载生成的 wav 存在服务端的static/wavs/目录,文件名里直接带着音色种子和三个采样参数(seed2222-te0.3-tp0.7-tk20),事后可按名字回溯是哪个配置。
要上线或接入现有系统
把.env里的WEB_ADDRESS改成局域网地址即可对外:
WEB_ADDRESS=192.168.0.10:9966容器部署默认就是0.0.0.0:9966,同网段直接访问http://服务器IP:9966。外部系统只需要记住一个地址:POST http://服务器IP:9966/tts。
把声音调「像」的调音逻辑
采样三件套推荐区间:
| 参数 | 推荐区间 | 听感 |
|---|---|---|
| temperature | 0.1 ~ 0.8 | 0.1~0.3 稳定但可能发干;0.5~0.8 更鲜活但可能翻车 |
| top_p | 0.6 ~ 0.9 | 与 temperature 同向收窄或放开候选 |
| top_k | 5 ~ 20 | 数值越小,候选越少、发音越收敛 |
手感比清单更重要,三条经验:
- 一次只动一个参数:固定文本和音色,只改 temperature,对比 0.3 和 0.6 的听感,再动下一个。
- 温度与候选范围配合:想要变化就同时放高 temperature 和 top_p;想要稳定就同时压低。只动一个容易听出“怪”而非“活”。
- 先定音色,再调语气:音色不对时,调参数是在给错的人化妆。先用
custom_voice多试几个种子值(比如 2000、5000、8000),锁定一个合耳的再打磨参数。
prompt是免费的风格增益:[laugh_0]加笑,[break_3]停 3 秒,oral_0~oral_2控制口语感强度。一段[laugh_0][break_1]开头,播报感立刻变聊天感。
音色文件格式与 0.96 版本的变化
0.92 版本起,ChatTTS-ui 支持 csv 或 pt 两种固定音色文件,放进根目录的 speaker/ 文件夹即可,下拉框里直接出现。仓库自带的2222.csv、7869.csv等就是这种预设,想试听哪个直接选。
0.96 版本后 ChatTTS 内核升级,从魔塔体验页或第三方站点下载的seed_开头、_emb.pt结尾的 pt 音色不能再直接使用。项目带了转换脚本 cover-pt.py:
python cover-pt.py它扫描speaker/目录,把符合条件的文件转成_emb-covert.pt结尾的新格式,转换完成后原文件可以删掉、只留新文件。在界面或 API 里用新文件名引用即可。
另外注意官方提醒:同一音色值在不同设备、甚至同一设备多次运行,合成出的声音都可能略有差异,音调尤其明显。所以“种子值”更像指纹的起点,不是精确还原。
部署与 API 接入
容器部署(最省事)
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui chat-tts-ui cd chat-tts-ui # 有 NVIDIA 显卡用 GPU 版,否则用 CPU 版 docker compose -f docker-compose.gpu.yaml up -d docker compose -f docker-compose.cpu.yaml up -d两条 compose 文件见 docker-compose.gpu.yaml、docker-compose.cpu.yaml,服务监听 9966 端口,起来后访问IP:9966。
源码部署
需要 Python 3.9~3.11:
- 建虚拟环境并激活:
python3 -m venv venv && source venv/bin/activate - 装依赖:
pip install -r requirements.txt - 装 PyTorch:无 CUDA 需求直接
pip install torch==2.7.1 torchaudio==2.7.1;要 CUDA 加速则从 cu128 索引安装,另装 CUDA 12.8+ Toolkit - 启动:
python app.py
API 最小调用
请求方式 POST,地址/tts,只有text必填:
import requests res = requests.post('http://127.0.0.1:9966/tts', data={ "text": "你好,这是音色定制测试", "voice": "2222", # 预设音色;填了 custom_voice 则被忽略 "custom_voice": 0, # 大于 0 的种子值 "prompt": "[laugh_0][break_3]", "temperature": 0.3, "top_p": 0.7, "top_k": 20, "skip_refine": 0 }) print(res.json()) # 成功:{"code":0,"msg":"ok","audio_files":[{"filename":"...","url":"..."}]} # 失败:{"code":1,"msg":"错误原因"}完整参数列表见 README.md 的「使用API请求」一节。
常见坑与进阶玩法
| 现象 | 处理 |
|---|---|
| 下载模型报 proxy 错误 | 默认从魔塔(modelscope)下载,该过程不能用代理,先关闭代理;国外 IP 连不上魔塔会自动转 HuggingFace |
报Dynamo is not supported on Python 3.12 | 换 Python 3.9~3.11,不要用 3.12+ |
| 有 N 卡却走了 CPU | 显存必须大于 4G;装了 CUDA 版 torch 仍走 CPU 时,卸载 torch 再重装,并确认 CUDA 12.8+ |
| Windows 源码部署合成异常 | 需要 FFmpeg(0.96 起必需),按 ffmpeg/ffmpeg下载.txt 把ffmpeg.exe放进ffmpeg/目录 |
报Missing spk_stat.pt | 魔塔模型缺该文件,从 HuggingFace 下载后放到models/pzc163/chatTTS/asset/ |
| triton 相关报错 | 打开.env把compile=true改成compile=false |
更多报错对照见 faq.md。
进阶玩法:
- 把音色沉淀成文件:
custom_voice填一个任意大于 0 的整数后,服务会按种子生成 768 维音色向量并自动存进speaker/目录,文件名就是这个种子数。下次直接把这个数字当voice传,就能反复用同一个声音。 - 控制符混排:文本里可以直接写
[laugh]、[break_2]这类标记混在句子中间;如果文本已带控制符或 refine 阶段改写不理想,可勾「跳过 refine text」(API 里skip_refine=1)。 - 接入 pyVideoTrans:pyVideoTrans 1.82+ 的「设置 - ChatTTS」里填请求地址
http://127.0.0.1:9966,主界面选 ChatTTS 引擎,就能用它给字幕批量配音。 - 排查看两个地方:日志在
logs/目录按天滚动;wav 文件名自带seed/te/tp/tk参数快照,拿到一段“不对劲”的音频就能反查当时的完整配置。
下一步
挑一段 30 秒左右的常用文本,先用预设音色 2222 合成一遍,再换两个不同的custom_voice(比如 3000、8000)各来一遍,三个文件并排听。锁定最合耳的那个后,把 temperature、top_p、top_k 固定下来写进脚本——这就是你以后批量任务要用的那组配置。
【免费下载链接】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),仅供参考