-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
146 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,56 +1,137 @@ | ||
<div align="center"> | ||
|
||
<a href="https://trendshift.io/repositories/10489" target="_blank"><img src="https://trendshift.io/api/badge/repositories/10489" alt="2noise%2FChatTTS | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a> | ||
|
||
# ChatTTS | ||
> [!NOTE] | ||
> 以下内容可能不是最新,一切请以英文版为准。 | ||
一款用于日常对话的生成式语音模型。 | ||
|
||
[![Licence](https://img.shields.io/badge/LICENSE-CC%20BY--NC%204.0-green.svg?style=for-the-badge)](https://github.com/2noise/ChatTTS/blob/main/LICENSE) | ||
|
||
[![Huggingface](https://img.shields.io/badge/🤗%20-Models-yellow.svg?style=for-the-badge)](https://huggingface.co/2Noise/ChatTTS) | ||
[![Open In Colab](https://img.shields.io/badge/Colab-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/2noise/ChatTTS/blob/main/examples/ipynb/colab.ipynb) | ||
|
||
[**English**](../../README.md) | **简体中文** | [**日本語**](../jp/README.md) | [**Русский**](../ru/README.md) | ||
[**English**](README.md) | **简体中文** | [**日本語**](docs/jp/README.md) | [**Русский**](docs/ru/README.md) | ||
|
||
ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本. | ||
</div> | ||
|
||
如需就模型进行正式商业咨询,请发送邮件至 **[email protected]**。对于中文用户,您可以加入我们的QQ群:~~808364215 (已满)~~ ~~230696694 (二群)~~ 933639842 (三群) 进行讨论。同时欢迎在GitHub上提出问题。如果遇到无法使用 **[HuggingFace](https://huggingface.co/2Noise/ChatTTS)** 的情况,可以在 [modelscope](https://www.modelscope.cn/models/pzc163/chatTTS) 上进行下载. | ||
## 简介 | ||
|
||
--- | ||
## 亮点 | ||
1. **对话式 TTS**: ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。 | ||
2. **细粒度控制**: 该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。 | ||
3. **更好的韵律**: ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。 | ||
ChatTTS 是一款专门为对话场景(例如 LLM 助手)设计的文本转语音模型。 | ||
|
||
对于模型的具体介绍, 可以参考B站的 **[宣传视频](https://www.bilibili.com/video/BV1zn4y1o7iV)** | ||
### 支持的语种 | ||
|
||
--- | ||
- [x] 英语 | ||
- [x] 中文 | ||
- [ ] 敬请期待... | ||
|
||
## 免责声明 | ||
本文件中的信息仅供学术交流使用。其目的是用于教育和研究,不得用于任何商业或法律目的。作者不保证信息的准确性、完整性或可靠性。本文件中使用的信息和数据,仅用于学术研究目的。这些数据来自公开可用的来源,作者不对数据的所有权或版权提出任何主张。 | ||
### 亮点 | ||
|
||
ChatTTS是一个强大的文本转语音系统。然而,负责任地和符合伦理地利用这项技术是非常重要的。为了限制ChatTTS的使用,我们在4w小时模型的训练过程中添加了少量额外的高频噪音,并用mp3格式尽可能压低了音质,以防不法分子用于潜在的犯罪可能。同时我们在内部训练了检测模型,并计划在未来开放。 | ||
> 你可以参考 **[Bilibili](https://www.bilibili.com/video/BV1zn4y1o7iV)** 上的这个视频了解详细的介绍. | ||
--- | ||
## 安装 | ||
1. **对话式 TTS**: ChatTTS 针对对话式任务进行了优化,能够实现自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。 | ||
2. **精细的控制**: 该模型可以预测和控制精细的韵律特征,包括笑声、停顿和插入语。 | ||
3. **更好的韵律**: ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。 | ||
|
||
``` | ||
### 数据集和模型 | ||
|
||
- 主要模型使用 100,000+ 小时的中文和英文音频数据进行训练。 | ||
- **[HuggingFace](https://huggingface.co/2Noise/ChatTTS)** 上的开源版本是一个在 40,000 小时数据上进行无监督微调的预训练模型。。 | ||
|
||
### 路线图 | ||
|
||
- [x] 开源 4 万小时基础模型和 spk_stats 文件 | ||
- [ ] 开源 VQ 编码器和 Lora 训练代码 | ||
- [ ] 无需细化文本即可进行流式音频生成 | ||
- [ ] 开源具有多情感控制功能的 4 万小时版本 | ||
- [ ] 也许会有 ChatTTS.cpp ?(欢迎 PR 或新建仓库) | ||
|
||
### 免责声明 | ||
|
||
> [!Important] | ||
> 此仓库仅供学术用途。 | ||
本项目旨在用于教育和研究目的,不应用于任何商业或法律目的。作者不保证信息的准确性、完整性或可靠性。此仓库中使用的信息和数据仅供学术和研究目的。数据来自公开来源,作者不声称对数据拥有任何所有权或版权。 | ||
|
||
ChatTTS 是一款强大的文本转语音系统。但是,负责任和道德地使用这项技术非常重要。为了限制 ChatTTS 的使用,我们在 40,000 小时模型的训练过程中添加了少量高频噪声,并使用 MP3 格式尽可能压缩音频质量,以防止恶意行为者将其用于犯罪目的。同时,我们内部训练了一个检测模型,并计划在未来开源它。 | ||
|
||
### 联系方式 | ||
|
||
> 欢迎随时提交 GitHub issues/PRs。 | ||
#### 合作洽谈 | ||
|
||
如就模型和路线图进行合作洽谈,请发送邮件至 **[email protected]**。 | ||
|
||
#### 线上讨论 | ||
|
||
##### 1. 官方 QQ 群 | ||
|
||
- **群 1**, 808364215 (已满) | ||
- **群 2**, 230696694 (已满) | ||
- **群 3**, 933639842 | ||
|
||
## 安装教程 (丰富中) | ||
|
||
> 将在近期上传至 pypi,详情请查看 https://github.com/2noise/ChatTTS/issues/269 上的讨论。 | ||
#### 1. 使用源代码安装 | ||
|
||
```bash | ||
pip install git+https://github.com/2noise/ChatTTS | ||
``` | ||
## 用法 | ||
|
||
<h4>基本用法</h4> | ||
#### 2. 使用 conda 安装 | ||
|
||
```bash | ||
git clone https://github.com/2noise/ChatTTS | ||
cd ChatTTS | ||
conda create -n chattts | ||
conda activate chattts | ||
pip install -r requirements.txt | ||
``` | ||
|
||
## 使用教程 | ||
|
||
### 安装依赖 | ||
|
||
```bash | ||
pip install --upgrade -r requirements.txt | ||
``` | ||
|
||
### 快速开始 | ||
|
||
#### 1. 启动 WebUI | ||
|
||
```bash | ||
python examples/web/webui.py | ||
``` | ||
|
||
#### 2. 使用命令行 | ||
|
||
> 生成的音频将保存至 `./output_audio_xxx.wav` | ||
```bash | ||
python examples/cmd/run.py "Please input your text." | ||
``` | ||
|
||
### 基础用法 | ||
|
||
```python | ||
import ChatTTS | ||
from IPython.display import Audio | ||
import torchaudio | ||
|
||
chat = ChatTTS.Chat() | ||
chat.load_models(compile=False) # 设置为True以获得更快速度 | ||
chat.load_models(compile=False) # Set to True for better performance | ||
|
||
texts = ["在这里输入你的文本",] | ||
texts = ["PUT YOUR TEXT HERE",] | ||
|
||
wavs = chat.infer(texts, use_decoder=True) | ||
wavs = chat.infer(texts, ) | ||
|
||
torchaudio.save("output1.wav", torch.from_numpy(wavs[0]), 24000) | ||
``` | ||
|
||
<h4>进阶用法</h4> | ||
### 高级用法 | ||
|
||
```python | ||
################################### | ||
|
@@ -78,74 +159,70 @@ wavs = chat.infer(texts, params_refine_text=params_refine_text, params_infer_cod | |
|
||
################################### | ||
# 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]' | ||
wavs = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code, use_decoder=False) | ||
|
||
wavs = chat.infer(text, skip_refine_text=True, params_refine_text=params_refine_text, params_infer_code=params_infer_code) | ||
torchaudio.save("output2.wav", torch.from_numpy(wavs[0]), 24000) | ||
``` | ||
|
||
<details open> | ||
<summary><h4>自我介绍样例</h4></summary> | ||
<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', '') | ||
inputs_en = """ | ||
chat T T S is a text to speech model designed for dialogue applications. | ||
[uv_break]it supports mixed language input [uv_break]and offers multi speaker | ||
capabilities with precise control over prosodic elements [laugh]like like | ||
[uv_break]laughter[laugh], [uv_break]pauses, [uv_break]and intonation. | ||
[uv_break]it delivers natural and expressive speech,[uv_break]so please | ||
[uv_break] use the project responsibly at your own risk.[uv_break] | ||
""".replace('\n', '') # English is still experimental. | ||
|
||
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) | ||
# 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_en[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> | ||
[男性音色](https://github.com/2noise/ChatTTS/assets/130631963/e0f51251-db7f-4d39-a0e9-3e095bb65de1) | ||
|
||
[女性音色](https://github.com/2noise/ChatTTS/assets/130631963/f5dcdd01-1091-47c5-8241-c4f6aaaa8bbd) | ||
|
||
--- | ||
## 计划路线 | ||
- [x] 开源4w小时基础模型和spk_stats文件 | ||
- [ ] 开源VQ encoder和Lora 训练代码 | ||
- [ ] 在非refine text情况下, 流式生成音频* | ||
- [ ] 开源多情感可控的4w小时版本 | ||
- [ ] ChatTTS.cpp maybe? (欢迎社区PR或独立的新repo) | ||
</details> | ||
|
||
--- | ||
## 常见问题 | ||
|
||
##### 连不上HuggingFace | ||
请使用[modelscope](https://www.modelscope.cn/models/pzc163/chatTTS)的版本. 并设置cache的位置: | ||
```python | ||
chat.load_models(source='local', local_path='你的下载位置') | ||
``` | ||
#### 1. 我需要多少 VRAM? 推理速度如何? | ||
|
||
##### 我要多少显存? Infer的速度是怎么样的? | ||
对于30s的音频, 至少需要4G的显存. 对于4090, 1s生成约7个字所对应的音频. RTF约0.3. | ||
对于 30 秒的音频片段,至少需要 4GB 的 GPU 内存。 对于 4090 GPU,它可以每秒生成大约 7 个语义 token 对应的音频。实时因子 (RTF) 约为 0.3。 | ||
|
||
##### 模型稳定性似乎不够好, 会出现其他说话人或音质很差的现象. | ||
这是自回归模型通常都会出现的问题. 说话人可能会在中间变化, 可能会采样到音质非常差的结果, 这通常难以避免. 可以多采样几次来找到合适的结果. | ||
#### 2. 模型稳定性不够好,存在多个说话者或音频质量差等问题。 | ||
|
||
##### 除了笑声还能控制什么吗? 还能控制其他情感吗? | ||
在现在放出的模型版本中, 只有[laugh]和[uv_break], [lbreak]作为字级别的控制单元. 在未来的版本中我们可能会开源其他情感控制的版本. | ||
这是一个通常发生在自回归模型(例如 bark 和 valle)中的问题,通常很难避免。可以尝试多个样本以找到合适的结果。 | ||
|
||
## Starchart | ||
#### 3. 除了笑声,我们还能控制其他东西吗?我们能控制其他情绪吗? | ||
|
||
[![Star History Chart](https://api.star-history.com/svg?repos=2noise/ChatTTS&type=Date)](https://star-history.com/#2noise/ChatTTS&Date) | ||
在当前发布的模型中,可用的 token 级控制单元是 `[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/)为我们提供了早期算法试验的支持. | ||
- [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) 揭示了 GVQ 作为 LLM 建模的音频分词器的能力。 | ||
- [vocos](https://github.com/gemelo-ai/vocos) vocos 被用作预训练声码器。 | ||
|
||
## 特别鸣谢 | ||
|
||
- [wlu-audio lab](https://audio.westlake.edu.cn/) 对于早期算法实验的支持。 | ||
|
||
## 相关资源 | ||
|
||
- [Awesome-ChatTTS](https://github.com/libukai/Awesome-ChatTTS) 一个 ChatTTS 的资源汇总列表。 | ||
|
||
## 感谢所有贡献者的付出 | ||
|
||
[![contributors](https://contrib.rocks/image?repo=2noise/ChatTTS)](https://github.com/2noise/ChatTTS/graphs/contributors) | ||
|
||
## Star 趋势 | ||
|
||
[![Star History Chart](https://api.star-history.com/svg?repos=2noise/ChatTTS&type=Date)](https://star-history.com/#2noise/ChatTTS&Date) |