给自制播客换音色:ChatTTS 音色定制从选声到排障
【免费下载链接】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 上完成一次完整的音色定制:选声线、调参数、固化文件、排查问题,全程可动手。
阶段一:锁定一条能用的声线
拿到声线有两条路。
- 直接用预设音色:仓库 speaker/ 目录内置了一批 csv 音色文件(如
5.csv、12.csv、5555.csv),网页端下拉框里都能看到,选中即试听。 - 自定义 seed 值:在界面"音色值"输入框或 API 里传入一个大于 0 的整数,ChatTTS 会按这个值初始化随机数,生成一条全新声线。
服务端的处理逻辑写在 app.py 的/tts接口里:首次用某个 seed 合成时,它按该值生成 768 维声纹向量,并自动落盘为speaker/{seed}.csv;之后再用同一个 seed,直接读这个 csv,声线不再漂移。
挑选方法:在 1000~10000 区间挑几个整数逐个试听(例如 3124、4780、9032),固定同一句合成文案做对比,听到合适的记下来即可。
阶段二:把三个采样参数拧到合适区间
声线定了,声音的"质感"由三个采样参数决定:temperature、top_p、top_k,界面和 API 都能改,默认值 0.3 / 0.7 / 20。
temperature:越低,发音越贴近 seed 基线,越稳。top_p:核采样概率,权衡自然度与发音清晰度。top_k:候选范围,过大会引入多余变化。
两组参考值:稳0.3 / 0.7 / 20,活0.5 / 0.8 / 30。固定 seed,每次只改一个参数,用同一句短文案反复试听,差异比一次改三个更容易定位。
阶段三:固化成可复用的音色文件
满意的 seed 值得固化下来,方法很简单。
- 用该 seed 合成一次:系统已自动生成
speaker/{seed}.csv,后续请求直接复用这个文件,声纹不再变动。 - 社区分享的 .pt 音色在 0.96 版本后不直接兼容(ChatTTS 内核升级过),需先执行
python cover-pt.py:脚本会扫描 speaker/ 下以seed_开头、_emb.pt结尾的文件,转换后保存为*_emb-covert.pt,原文件可以删掉。
外部程序调用时,核心就是这几行:
res = requests.post('http://127.0.0.1:9966/tts', data={ "text": "若不懂无需填写", "custom_voice": 3124, # 大于 0 的整数,设置后忽略 voice "temperature": 0.3, "top_p": 0.7, "top_k": 20 })阶段四:出问题时先看这几个位置
音色不稳定、时好时坏,按顺序查三处:
- 先查 speaker/ 目录:目标 seed 的 csv 是否已生成,或 .pt 文件名是否拼对(注意后缀是
covert)。 - 再看 logs/ 下当天的日志:模型是否加载成功、有没有异常堆栈(模型缺文件一类的问题见 官方 FAQ)。
- 最后考虑机制本身的波动:seed 生成的音色在同台机器多次运行间、换设备之间都可能变化(尤其音调)。要长期稳定,就用固化后的 csv 文件,而不是纯 seed。
跑一遍 seed=3124 的试听,把 seed 和三个参数值写进 notes.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),仅供参考