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 的中文语音合成工具,跑起来之后换音色有三条路:预置音色编号、自定义种子值(seed)、下载音色文件;再叠加情感标签调语气,音色定制就算完成。
5 分钟出第一个声音
安装依赖后执行python3 app.py,浏览器会自动打开http://127.0.0.1:9966,输入文字、点合成,默认音色是 2222。不想用页面,也可以直接调 API,整个接口只认几个参数:
import requests res = requests.post('http://127.0.0.1:9966/tts', data={ "text": "音色定制测试", # 必填,要合成的文字 "voice": "2222", # 预置音色编号 "custom_voice": 0, # 大于 0 的整数=用该种子值取声,优先于 voice "prompt": "" # 情感标签,见下文 }) print(res.json())返回code:0时,audio_files里就有 wav 的本地路径和可下载 URL;加wav=1则直接返回音频流。
换音色的三条路
三条路都能用同一个接口触发,区别在于确定性和自由度:
| 方式 | 怎么指定 | 确定性 | 适合 |
|---|---|---|---|
| 预置音色 | voice填 2222 / 7869 / 6653 / 4099 / 5099 | 同 seed 跨设备会有差异 | 快速试听,不挑细节 |
| 自定义种子值 | custom_voice填任意大于 0 的整数 | 同上,但可无限枚举 | 批量筛"合眼缘"的声音 |
| 音色文件 | 文件名:speaker/ 下的xxx.csv或xxx.pt | 完全一致,跨机器不变 | 交付级稳定音色 |
种子值可以这样理解:把一个大范围随机数发生器拨到某个刻度,那个刻度对应一个声音。拨到 1357 就永远是 1357 这个声——但只在同一台设备上成立。
实用技巧:用custom_voice连续试几个数字,听到中意的,系统会把它自动存成 speaker/ 里的.csv文件(代码在 uilib/utils.py 的save_speaker)。之后直接用文件名指定,音色就固定下来了。页面左侧的音色下拉列表,就是 uilib/utils.py 里get_speakers()扫描 speaker/ 目录得到的全部.csv、.pt文件。
给声音加"情绪"
prompt参数接收方括号标签,控制语气细节:
| 标签 | 作用 | 取值感受 |
|---|---|---|
[oral_X] | 口语化程度 | 数字越大越"唠家常" |
[laugh_X] | 笑声 | 0 无,1 起会有笑点 |
[break_X] | 停顿感 | 越大停顿越明显 |
直接抄用的两个组合:
- 温和口语:
[oral_2][break_3] - 活泼带笑:
[oral_1][laugh_1][break_2]
另外语速走的是speed参数,界面里 1–9 的滑杆,对应代码里的[speed_X]提示词,别和情感标签混在一起填。
音色文件的坑:格式、命名、目录
社区下载的音色包最容易翻车,一次讲清:
- 目录:文件必须放进 speaker/,散落在别处不会被加载。
- 格式转换:0.96 版本起 ChatTTS 内核升级,老版内核的 pt 文件不能直接用。项目里的 cover-pt.py 就是干这个的,在项目根目录执行
python cover-pt.py,它只认"以seed_开头、以_emb.pt结尾"的文件,转换后改名为_emb-covert.pt结尾,然后删掉原文件。 - 命名即调用:合成时若
voice的值在 speaker/ 下能对上名字.csv或名字.pt,就按文件加载;对不上才回退到 seed 随机。所以文件名的后缀决定它能不能被认出来。 - 跨设备不一致:同一个 seed 在不同机器、甚至不同时间合成出来的音调都可能漂移,这是 README 明确提示过的。要保证多台服务器音色一致,唯一可靠的办法是分发
.csv文件,而不是分发种子值。
场景配方
按用途调参,一张表抄走:
| 场景 | 音色 | temperature | prompt | 备注 |
|---|---|---|---|---|
| 商务朗读 | 预置 2222 | 0.2 | [break_3] | 低随机性,少停顿修饰 |
| 儿童故事 | 筛选出的高custom_voice | 0.4 | [laugh_1][oral_1] | 多试几个 seed 找童声感 |
| 播客闲聊 | 试听后固定的.csv | 0.3 | [oral_2][break_2] | 口语感拉满 |
| 有声书旁白 | 试听后固定的.csv | 0.25 | [break_4] | 语速speed=4左右 |
硬件上只需记住一句:显存低于 4G 时程序会强制走 CPU,想上 GPU 用英伟达显卡装好 CUDA 12.8+,在.env里设device=cuda。
踩坑与排错
- 下载的音色文件没反应?先确认它在 speaker/ 里、文件名带
.pt/.csv后缀,再确认是 0.96 之后能用的格式(老内核的 pt 先跑一遍 cover-pt.py)。 - seed 填了个不存在的数字,会报错吗?不会。对不上文件就按种子随机生成,所以乱填也能出声——这正是批量筛声的用法。
- 为什么同样的 seed,换台机器音调变了?seed 只保证同设备可复现,跨设备请改发
.csv。 - 首次启动卡住?多半在从模型仓库下载模型,网络不通会失败,日志里能看到它正在连哪个源。
三条路径一句话收拢:预置号最省事,seed 用来大海捞针,.csv文件用来定版交付。延伸方向:用custom_voice写个循环批量试声存档,或把/tts接口接进字幕翻译流水线,音色定制才算真正用满。
【免费下载链接】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),仅供参考