ChatTTS-ui 音色定制实战指南:3 步拿到可复用的自定义声音
【免费下载链接】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,本文带你走通"挑预设音色种子 → 自定义种子生成新音色 → 转换 pt 音色文件 → 用采样参数锁住声音"的完整链路,全部可在自己机器上直接复现。
最短路径:4 行命令拿到第一段合成音频
- 克隆仓库并装依赖:
git clone https://gitcode.com/GitHub_Trending/ch/ChatTTS-ui,然后pip3 install -r requirements.txt(需 Python 3.9–3.11) - 执行
python3 app.py,首次启动会自动下载模型并打开http://127.0.0.1:9966 - 页面里选择默认音色 2222,输入一段文字,点击"立即合成声音"
- 想要专属音色:在"音色值"框填入任意大于 0 的整数,合成一次,该音色会自动保存为 csv 到 speaker 目录
用预设音色库挑一个现成声音
仓库自带十几个音色,全部以 csv 文件形式放在 speaker 目录,即选即用。
- 打开
http://127.0.0.1:9966,"选择音色"下拉框里列出的就是 speaker 目录下的文件名,如 2222、7869、6653、4099、5099 - 用不同音色合成同一段文字,逐一试听并记下喜欢的编号
- 后续合成或 API 调用直接引用该编号即可
关键参数与注意事项:
- 默认音色是 2222;传入一个不存在的数字时,系统也会当场随机生成一个音色并顺手保存下来
- 音色文件支持
.csv与.pt两种格式,都放在speaker/目录下生效
用自定义种子值生成一个全新音色
在 custom_voice 填入大于 0 的整数,ChatTTS-ui 会以它为种子抽取新音色并自动存档。
- 在 WebUI 的"音色值"输入框填一个数字(如 3000),左侧下拉框保持默认
- 点击合成后,app.py 会按该数字做 torch 种子,生成 768 维音色向量,同时写出
speaker/3000.csv - 下次选择 3000 时直接读取这份 csv,不会重新抽取
关键参数与注意事项:
- custom_voice 与 voice 同时存在时,custom_voice 优先,voice 被忽略
- 建议围绕 1000–10000 区间逐个试种子值,每次生成后先试听再决定去留
- 官方 faq.md 提醒:同一种子值在不同设备上音色可能不同,找到满意的音色后请依赖保存下来的 csv 文件,而不是只记数字
把下载来的 pt 音色文件转成可用格式
0.96+ 内核版本下,外部下载的 pt 文件需要先用 cover-pt.py 转一次编码。
- 把形如
seed_2155_restored_emb.pt的下载文件放入 speaker 目录 - 在项目根目录执行
python cover-pt.py - 脚本会把以
seed_开头、_emb.pt结尾的文件逐个转换,结果改名为-covert.pt结尾
关键参数与注意事项:
- 转换完成后原
_emb.pt文件可以删除,只保留-covert.pt结尾的文件 - 该脚本只处理 pt 文件,csv 音色无需转换
- 若提示"没有可转换的pt文件",说明文件命名不符合
seed_开头要求
用 3 个采样参数锁住音色稳定性
temperature、top_p、top_k 决定合成有多"稳",默认组合 0.3 / 0.7 / 20 可以先不动。
- WebUI 底部有 temperature、top_p、top_k 三个滑杆,拖动即时生效
- 用同一段文字连合两次做 A/B 对比,一次只动一个参数
- 确定参数组合后,在 API 调用里固定下来
关键参数与注意事项:
- temperature 控制采样随机性,调低后每次输出更贴近上一次
- top_p 页面可调范围 0.1–0.9,top_k 可调范围 1–20
speed滑杆(1–9,默认 5)对应语速控制符;text_seed(默认 42)固定文本预处理结果,便于批量对比
合成参数速查
| 参数 | 作用 | 推荐范围/建议 |
|---|---|---|
| voice | 音色编号,引用 speaker 目录下已有 csv/pt 文件 | 默认 2222;7869、6653、4099、5099 可直接试用 |
| custom_voice | 新音色的种子值,须为大于 0 的整数 | 1000–10000 任选;填写后忽略 voice |
| temperature | 采样温度,越小音色越稳定 | 默认 0.3,求稳可再调低 |
| top_p | 采样累计概率截断 | 默认 0.7,可调 0.1–0.9 |
| top_k | 采样候选 token 数 | 默认 20,可调 1–20 |
| speed | 语速,对应[speed_x]控制符 | 1–9,默认 5 |
| text_seed | 文本预处理种子 | 默认 42,固定后每批文本处理方式一致 |
| prompt | 情绪与停顿控制符 | 示例[oral_2][laugh_0][break_6] |
| skip_refine | 1=跳过 refine_text 阶段 | 默认 0;控制符不生效时可试 1 |
API 调用示例(只保留必要参数):
import requests res = requests.post('http://127.0.0.1:9966/tts', data={ "text": "这是一段自定义音色测试", "custom_voice": 3000, "temperature": 0.3, "top_p": 0.7, "top_k": 20, }) print(res.json()) # code 为 0 时,audio_files 内含 wav 路径与下载地址上线前检查清单
✅ 音色本体
- 先用 2222、7869 等预设音色确认整条链路正常
- 自定义音色生成后,确认
speaker/下已出现同名 csv 文件
✅ 参数与效果
- temperature / top_p / top_k 先保持默认,出现音色漂移再微调
- 需要情绪、停顿时放入 prompt,不要写进正文
✅ 集成与访问
- 调一次
/tts接口,确认返回code:0且audio_files带 wav 地址 - 需要局域网访问时,把
.env里的WEB_ADDRESS改为实际 IP,默认127.0.0.1:9966
进阶:3 种音色组合玩法
- 场景分声:旁白、教学、对话各固定一个种子值写进配置,切换场景只改音色编号
- 控制符叠加:prompt 里组合
[oral_2][laugh_0][break_6]调节口语度、笑声与停顿,效果不佳时勾选"跳过 refine text" - 自建音色库:把满意的 csv 在
speaker/下改名为业务名(如narrator.csv),下拉框直接选名,比记数字直观
收尾
ChatTTS-ui 的音色定制本质上就三步:选号、存文件、锁参数。从预设 2222 起步,需要变化时换成自己的种子值,再把采样参数固定下来,你就拥有了一个可长期使用、可随时通过 API 调用的专属声音。
温馨提示:参数不确定时可以不填,API 会自动使用与页面一致的默认值(temperature 0.3、top_p 0.7、top_k 20)。遇到报错先查 常见问题文档,大部分下载与设备类问题都有现成答案。
【免费下载链接】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),仅供参考