ChatTTS-ui 音色定制指南:预设音色、种子调音与 API 部署
2026/9/20 20:35:37 网站建设 项目流程

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 把文字合成为语音,支持中英文混排。音色定制帮你从“默认听起来就那样”,变成声音贴合内容气质:选一个合耳的预设,或自己定一个音色种子,再调三个采样参数把语气磨顺。

音色到底由哪几部分决定

把一次合成想成请一个人读稿:

  • 谁在说话,由voicecustom_voice决定;
  • 怎么说话,由 temperature、top_p、top_k 决定;
  • 带不带语气,由prompt里的标记决定。
参数默认值类比说明
voice2222点一个熟悉的播音员指定预设音色,内置 2222、7869、6653、4099、5099 等
custom_voice0自己捏一个声音大于 0 的整数作为种子值,填了它就忽略 voice
temperature0.3念稿手稳不稳越低越稳,越高越飘
top_p / top_k0.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

把声音调「像」的调音逻辑

采样三件套推荐区间:

参数推荐区间听感
temperature0.1 ~ 0.80.1~0.3 稳定但可能发干;0.5~0.8 更鲜活但可能翻车
top_p0.6 ~ 0.9与 temperature 同向收窄或放开候选
top_k5 ~ 20数值越小,候选越少、发音越收敛

手感比清单更重要,三条经验:

  1. 一次只动一个参数:固定文本和音色,只改 temperature,对比 0.3 和 0.6 的听感,再动下一个。
  2. 温度与候选范围配合:想要变化就同时放高 temperature 和 top_p;想要稳定就同时压低。只动一个容易听出“怪”而非“活”。
  3. 先定音色,再调语气:音色不对时,调参数是在给错的人化妆。先用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.csv7869.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:

  1. 建虚拟环境并激活:python3 -m venv venv && source venv/bin/activate
  2. 装依赖:pip install -r requirements.txt
  3. 装 PyTorch:无 CUDA 需求直接pip install torch==2.7.1 torchaudio==2.7.1;要 CUDA 加速则从 cu128 索引安装,另装 CUDA 12.8+ Toolkit
  4. 启动: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 相关报错打开.envcompile=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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询