news 2026/9/20 22:38:56

ChatTTS-ui 音色定制 3 种方式实操:固定音色、种子值与 pt 文件转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ChatTTS-ui 音色定制 3 种方式实操:固定音色、种子值与 pt 文件转换

ChatTTS-ui 音色定制 3 种方式实操:固定音色、种子值与 pt 文件转换

【免费下载链接】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 的音色由 speaker 目录 下的文件和数字种子共同决定:csv 文件存固定音色、pt 文件存转换后的音色、纯数字则按种子现场生成。下面按"换音色 → API 指定音色 → 保存、转换与批量生成音色文件"三条任务线讲清楚具体操作。

先分清三种音色来源

网页上"音色"听着玄乎,落到代码里就是一组 768 维的浮点向量,有三种拿到它的方式:

  • csv / pt 文件:speaker 目录 里预置了 2222、7869、6653、4099、5099 等数十个 csv 文件,每个文件一行一个数,共 768 个,直接决定合成声音的特征。启动时 uilib/utils.py 的get_speakers()会扫描该目录下所有 csv 和 pt 文件,填进网页的下拉框。
  • 数字种子:填一个不存在的数字(如 3000、9000),app.py 会用torch.manual_seed(数字)加上模型自带统计量算出一个随机音色向量,并顺手存成speaker/数字.csv。也就是说,你在网页上随便填个数字合成一次,这个音色就被固化下来了。
  • 转换后的 pt 文件:0.96 内核升级后,外部下载的旧 pt 音色需要先转换才能使用,方法见下文。

网页端切换音色:下拉框与自定义音色值输入框

源码部署后默认访问http://127.0.0.1:9966(地址可在 .env 的WEB_ADDRESS中修改)。templates/index.html 页面上有两个入口:

  • "选择音色"下拉框:列出 speaker 目录下已保存的 csv / pt 文件,选中即使用该文件。
  • "自定义音色值"输入框:填写大于 0 的整数(如 2000、8000)。一旦填写,就会忽略左侧下拉框的选择,按该种子取值;网页端还会同时发送text_seed(控制文本润色的随机性,默认 42)。

想试听某个陌生数字,直接填进输入框合成一句即可,听感合适的话该数字对应的 csv 已经自动生成在 speaker 目录里了。

用 API 请求指定音色:voice、custom_voice 与 prompt

服务跑起来后,/tts接口接受 POST 请求,音色相关参数如下:

参数默认作用
voice2222音色文件名或种子数字
custom_voice0大于 0 时优先生效,忽略voice
prompt控制笑声、停顿等,如[oral_2][laugh_0][break_6]
temperature/top_p/top_k0.3 / 0.7 / 20采样随机性

最小调用示例,custom_voice传 8888 就是让服务按种子 8888 取(或生成)音色:

import requests res = requests.post("http://127.0.0.1:9966/tts", data={ "text": "自定义音色测试", "custom_voice": 8888, "prompt": "[oral_2][laugh_0][break_6]", "temperature": 0.3, "top_p": 0.7, "top_k": 20, }) print(res.json())

这一步做的事:发一段文字给合成服务,指定音色种子和语气控制符。成功后返回code:0audio_files里带 wav 文件的绝对路径与可下载 url;文件名中会内嵌seed、te、tp、tk等本次参数,方便回头对照。

固定一个满意的音色到 csv 文件

数字种子生成的音色满意后,它其实已经以 csv 形式躺在 speaker 目录里。如果想手动保存一个自己算出来的向量(768 维 torch 张量),用项目现成的工具函数即可:

import torch from uilib import utils # rand_spk: shape 为 (768,) 的 torch 张量 utils.save_speaker("my_voice", rand_spk)

这一步把张量逐行写成speaker/my_voice.csv,下次启动服务它就会出现在下拉框中。反向读取由同一文件里的load_speaker()完成,接口处理voice=2222时会先找speaker/2222.csv直接加载,而不重新随机。

一条命令转换旧版 pt 音色文件

ChatTTS 0.96 之后内核升级,从外部站点下载的旧格式 pt 音色(如seed_2155_restored_emb.pt)不能直接用了。项目自带的 cover-pt.py 就是干这件事的:

  1. 把下载到的文件放进 speaker 目录,保持seed_开头、_emb.pt结尾的默认命名;
  2. 在项目根目录执行:
python cover-pt.py

这一步会加载模型,把 speaker 目录下所有匹配命名的文件重新编码,输出以-covert.pt结尾的新文件(例如seed_2155_restored_emb-covert.pt),并提示你删掉原始_emb.pt。macOS 上脚本会自动设置 MPS 回退开关,直接运行即可;如果目录里没有可转换的文件,它会明确提示并结束。

批量生成候选音色做试听

想从种子空间里挑音色,可以写个小脚本按批量采样,再配合上面的转换脚本处理:

import torch import ChatTTS chat = ChatTTS.Chat() chat.load(source="custom", custom_path="./") for seed in (1111, 2222, 3333, 4444): torch.manual_seed(seed) spk = chat.sample_random_speaker() torch.save(spk, f"speaker/seed_{seed}_emb.pt")

这一步按固定种子各生成一个 768 维音色向量并落盘。生成后运行一次python cover-pt.py统一转成可用格式,再用网页或 API 逐个合成试听,保留听感好的那几个即可。

几个容易踩的坑

  • 同一种子换台机器声音会不同。项目 faq.md 开头就声明:不同机器用相同种子生成的音色可能不同,同一机器多次生成也可能漂移,尤其音调。所以跨机器迁移音色请携带 csv/pt 文件,而不是只记数字。
  • custom_voice会覆盖voice。两个都传时只有前者生效,写批量脚本时别指望二者叠加。
  • 显存低于 4G 会被强制走 CPU.envdevice可手动指定cpu | mps | cuda,默认按显存自动选择;跑在 CPU 上和 GPU 上同一文件音色本身一致,但生成新种子时的随机音色不受此影响。
  • 下拉框里没有数字音色。列表只来自磁盘上的文件,纯数字要填"自定义音色值"输入框,填一次后 csv 就会补进列表。

把听感合适的 csv 留在 speaker 目录,你的音色库就固定下来了。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 22:36:36

图像分割评估避坑指南:五折交叉验证与GroupKFold实战

1. 从一次翻车说起:为什么我的分割模型“看着很强,一用就废”做过图像分割的朋友大概率都经历过这种心情过山车:训练集上的mIoU一路飙到0.9,验证集看着也不错,兴冲冲把权重交给业务方,结果换一批真实数据一…

作者头像 李华
网站建设 2026/9/20 22:36:32

LibreChat:基于MCP协议的开源Agent编排平台

1. LibreChat 是什么?一个真正能落地的开源对话平台LibreChat 不是另一个“玩具级”聊天界面,它是一个面向真实生产场景设计的、可自托管的开源对话平台,核心目标是把大模型能力——尤其是多模型协同、工具调用、记忆管理、Agent 编排这些复杂…

作者头像 李华