Spaces:
Running
Running
# ChatTTS | |
[**English**](./README.md) | [**中文简体**](./README_CN.md) | |
ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本. | |
如需就模型进行正式商业咨询,请发送邮件至 **[email protected]**。对于中文用户,您可以加入我们的QQ群:808364215 进行讨论。同时欢迎在GitHub上提出问题。如果遇到无法使用 **[HuggingFace](https://huggingface.co/2Noise/ChatTTS)** 的情况,可以在 [modelscope](https://www.modelscope.cn/models/pzc163/chatTTS) 上进行下载. | |
--- | |
## 亮点 | |
1. **对话式 TTS**: ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。 | |
2. **细粒度控制**: 该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。 | |
3. **更好的韵律**: ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。 | |
对于模型的具体介绍, 可以参考B站的 **[宣传视频](https://www.bilibili.com/video/BV1zn4y1o7iV)** | |
--- | |
## 免责声明 | |
本文件中的信息仅供学术交流使用。其目的是用于教育和研究,不得用于任何商业或法律目的。作者不保证信息的准确性、完整性或可靠性。本文件中使用的信息和数据,仅用于学术研究目的。这些数据来自公开可用的来源,作者不对数据的所有权或版权提出任何主张。 | |
ChatTTS是一个强大的文本转语音系统。然而,负责任地和符合伦理地利用这项技术是非常重要的。为了限制ChatTTS的使用,我们在4w小时模型的训练过程中添加了少量额外的高频噪音,并用mp3格式尽可能压低了音质,以防不法分子用于潜在的犯罪可能。同时我们在内部训练了检测模型,并计划在未来开放。 | |
--- | |
## 用法 | |
<h4>基本用法</h4> | |
```python | |
import ChatTTS | |
from IPython.display import Audio | |
chat = ChatTTS.Chat() | |
chat.load_models(compile=False) # 设置为True以获得更快速度 | |
texts = ["在这里输入你的文本",] | |
wavs = chat.infer(texts, use_decoder=True) | |
torchaudio.save("output1.wav", torch.from_numpy(wavs[0]), 24000) | |
``` | |
<h4>进阶用法</h4> | |
```python | |
################################### | |
# Sample a speaker from Gaussian. | |
rand_spk = chat.sample_random_speaker() | |
params_infer_code = { | |
'spk_emb': rand_spk, # add sampled speaker | |
'temperature': .3, # using custom temperature | |
'top_P': 0.7, # top P decode | |
'top_K': 20, # top K decode | |
} | |
################################### | |
# For sentence level manual control. | |
# use oral_(0-9), laugh_(0-2), break_(0-7) | |
# to generate special token in text to synthesize. | |
params_refine_text = { | |
'prompt': '[oral_2][laugh_0][break_6]' | |
} | |
wav = chat.infer(texts, params_refine_text=params_refine_text, params_infer_code=params_infer_code) | |
################################### | |
# For word level manual control. | |
# use_decoder=False to infer faster with a bit worse quality | |
text = 'What is [uv_break]your favorite english food?[laugh][lbreak]' | |
wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code, use_decoder=False) | |
torchaudio.save("output2.wav", torch.from_numpy(wavs[0]), 24000) | |
``` | |
<details open> | |
<summary><h4>自我介绍样例</h4></summary> | |
```python | |
inputs_cn = """ | |
chat T T S 是一款强大的对话式文本转语音模型。它有中英混读和多说话人的能力。 | |
chat T T S 不仅能够生成自然流畅的语音,还能控制[laugh]笑声啊[laugh], | |
停顿啊[uv_break]语气词啊等副语言现象[uv_break]。这个韵律超越了许多开源模型[uv_break]。 | |
请注意,chat T T S 的使用应遵守法律和伦理准则,避免滥用的安全风险。[uv_break]' | |
""".replace('\n', '') | |
params_refine_text = { | |
'prompt': '[oral_2][laugh_0][break_4]' | |
} | |
audio_array_cn = chat.infer(inputs_cn, params_refine_text=params_refine_text) | |
# audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text) | |
torchaudio.save("output3.wav", torch.from_numpy(audio_array_cn[0]), 24000) | |
``` | |
[男说话人](https://github.com/2noise/ChatTTS/assets/130631963/bbfa3b83-2b67-4bb6-9315-64c992b63788) | |
[女说话人](https://github.com/2noise/ChatTTS/assets/130631963/e061f230-0e05-45e6-8e4e-0189f2d260c4) | |
</details> | |
--- | |
## 计划路线 | |
- [x] 开源4w小时基础模型和spk_stats文件 | |
- [ ] 开源VQ encoder和Lora 训练代码 | |
- [ ] 在非refine text情况下, 流式生成音频* | |
- [ ] 开源多情感可控的4w小时版本 | |
- [ ] ChatTTS.cpp maybe? (欢迎社区PR或独立的新repo) | |
--- | |
## 常见问题 | |
##### 连不上HuggingFace | |
请使用[modelscope](https://www.modelscope.cn/models/pzc163/chatTTS)的版本. 并设置cache的位置: | |
```python | |
chat.load_models(source='local', local_path='你的下载位置') | |
``` | |
##### 我要多少显存? Infer的速度是怎么样的? | |
对于30s的音频, 至少需要4G的显存. 对于4090, 1s生成约7个字所对应的音频. RTF约0.3. | |
##### 模型稳定性似乎不够好, 会出现其他说话人或音质很差的现象. | |
这是自回归模型通常都会出现的问题. 说话人可能会在中间变化, 可能会采样到音质非常差的结果, 这通常难以避免. 可以多采样几次来找到合适的结果. | |
##### 除了笑声还能控制什么吗? 还能控制其他情感吗? | |
在现在放出的模型版本中, 只有[laugh]和[uv_break], [lbreak]作为字级别的控制单元. 在未来的版本中我们可能会开源其他情感控制的版本. | |
--- | |
## 致谢 | |
- [bark](https://github.com/suno-ai/bark),[XTTSv2](https://github.com/coqui-ai/TTS)和[valle](https://arxiv.org/abs/2301.02111)展示了自回归任务用于TTS任务的可能性. | |
- [fish-speech](https://github.com/fishaudio/fish-speech)一个优秀的自回归TTS模型, 揭示了GVQ用于LLM任务的可能性. | |
- [vocos](https://github.com/gemelo-ai/vocos)作为模型中的vocoder. | |
--- | |
## 特别致谢 | |
- [wlu-audio lab](https://audio.westlake.edu.cn/)为我们提供了早期算法试验的支持. | |