ChatTTS README

The project's README from github.com/2noise/ChatTTS. As one markdown file: README.md.

2noise%2FChatTTS | Trendshift

ChatTTS

A generative speech model for daily dialogue.

Licence PyPI

Huggingface Open In Colab Discord

English | 简体中文 | 日本語 | Русский | Español | Français | 한국어

Introduction

[!Note] This repo contains the algorithm infrastructure and some simple examples.

[!Tip] For the extended end-user products, please refer to the index repo Awesome-ChatTTS maintained by the community.
You can find a diagram visualization of the codebase here.

ChatTTS is a text-to-speech model designed specifically for dialogue scenarios such as LLM assistant.

Supported Languages

Highlights

You can refer to this video on Bilibili for the detailed description.

  1. Conversational TTS: ChatTTS is optimized for dialogue-based tasks, enabling natural and expressive speech synthesis. It supports multiple speakers, facilitating interactive conversations.
  2. Fine-grained Control: The model could predict and control fine-grained prosodic features, including laughter, pauses, and interjections.
  3. Better Prosody: ChatTTS surpasses most of open-source TTS models in terms of prosody. We provide pretrained models to support further research and development.

Dataset & Model

[!Important] The released model is for academic purposes only.

Roadmap

Licenses

The Code

The code is published under AGPLv3+ license.

The model

The model is published under CC BY-NC 4.0 license. It is intended for educational and research use, and should not be used for any commercial or illegal purposes. The authors do not guarantee the accuracy, completeness, or reliability of the information. The information and data used in this repo, are for academic and research purposes only. The data obtained from publicly available sources, and the authors do not claim any ownership or copyright over the data.

Disclaimer

ChatTTS is a powerful text-to-speech system. However, it is very important to utilize this technology responsibly and ethically. To limit the use of ChatTTS, we added a small amount of high-frequency noise during the training of the 40,000-hour model, and compressed the audio quality as much as possible using MP3 format, to prevent malicious actors from potentially using it for criminal purposes. At the same time, we have internally trained a detection model and plan to open-source it in the future.

Contact

GitHub issues/PRs are always welcomed.

Formal Inquiries

For formal inquiries about the model and roadmap, please contact us at [email protected].

Online Chat

1. QQ Group (Chinese Social APP)
2. Discord Server

Join by clicking here.

Get Started

Clone Repo

git clone https://github.com/2noise/ChatTTS
cd ChatTTS

Install requirements

1. Install Directly

pip install --upgrade -r requirements.txt

2. Install from conda

conda create -n chattts python=3.11
conda activate chattts
pip install -r requirements.txt

Optional: Install vLLM (Linux only)

pip install safetensors vllm==0.2.7 torchaudio

Unrecommended Optional: Install TransformerEngine if using NVIDIA GPU (Linux only)

[!Warning] DO NOT INSTALL! The adaptation of TransformerEngine is currently under development and CANNOT run properly now. Only install it on developing purpose. See more details on at #672 #676

[!Note] The installation process is very slow.

pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable

Unrecommended Optional: Install FlashAttention-2 (mainly NVIDIA GPU)

[!Warning] DO NOT INSTALL! Currently the FlashAttention-2 will slow down the generating speed according to this issue. Only install it on developing purpose.

[!Note] See supported devices at the Hugging Face Doc.

pip install flash-attn --no-build-isolation

Quick Start

Make sure you are under the project root directory when you execute these commands below.

1. Launch WebUI

python examples/web/webui.py

2. Infer by Command Line

It will save audio to ./output_audio_n.mp3

python examples/cmd/run.py "Your text 1." "Your text 2."

Installation

  1. Install the stable version from PyPI
pip install ChatTTS
  1. Install the latest version from GitHub
pip install git+https://github.com/2noise/ChatTTS
  1. Install from local directory in dev mode
pip install -e .

Basic Usage

import ChatTTS
import torch
import torchaudio

chat = ChatTTS.Chat()
chat.load(compile=False) # Set to True for better performance

texts = ["PUT YOUR 1st TEXT HERE", "PUT YOUR 2nd TEXT HERE"]

wavs = chat.infer(texts)

for i in range(len(wavs)):
    """
    In some versions of torchaudio, the first line works but in other versions, so does the second line.
    """
    try:
        torchaudio.save(f"basic_output{i}.wav", torch.from_numpy(wavs[i]).unsqueeze(0), 24000)
    except:
        torchaudio.save(f"basic_output{i}.wav", torch.from_numpy(wavs[i]), 24000)

Advanced Usage

###################################
# Sample a speaker from Gaussian.

rand_spk = chat.sample_random_speaker()
print(rand_spk) # save it for later timbre recovery

params_infer_code = ChatTTS.Chat.InferCodeParams(
    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 = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_6]',
)

wavs = chat.infer(
    texts,
    params_refine_text=params_refine_text,
    params_infer_code=params_infer_code,
)

###################################
# For word level manual control.

text = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wavs = chat.infer(text, skip_refine_text=True, params_refine_text=params_refine_text,  params_infer_code=params_infer_code)
"""
In some versions of torchaudio, the first line works but in other versions, so does the second line.
"""
try:
    torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]).unsqueeze(0), 24000)
except:
    torchaudio.save("word_level_output.wav", torch.from_numpy(wavs[0]), 24000)

Example: self introduction

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 like 
[uv_break]laughter[uv_break][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 = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_4]',
)

audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text)
torchaudio.save("self_introduction_output.wav", torch.from_numpy(audio_array_en[0]), 24000)

male speaker

female speaker

male speaker

female speaker

FAQ

1. How much VRAM do I need? How about infer speed?

For a 30-second audio clip, at least 4GB of GPU memory is required. For the 4090 GPU, it can generate audio corresponding to approximately 7 semantic tokens per second. The Real-Time Factor (RTF) is around 0.3.

2. Model stability is not good enough, with issues such as multi speakers or poor audio quality.

This is a problem that typically occurs with autoregressive models (for bark and valle). It's generally difficult to avoid. One can try multiple samples to find a suitable result.

3. Besides laughter, can we control anything else? Can we control other emotions?

In the current released model, the only token-level control units are [laugh], [uv_break], and [lbreak]. In future versions, we may open-source models with additional emotional control capabilities.

Acknowledgements

Special Appreciation

Thanks to all contributors for their efforts

contributors

counter

ChatTTS (2noise/ChatTTS)

Searching Database…

39.9K ·GitHub
这是什么?ChatTTS 是一个开源的文本转语音模型,专为对话式语音打造,可作为大语言模型助手等应用的拟真语音层,支持英语和中文。
那这是一个做好的应用,还是给我拿来开发的?首先是开发者素材:一个可以通过 pip 安装的 Python 包,封装了预训练权重,还附带一个 WebUI 和命令行工具,方便快速生成。这个仓库本身是带简单示例的算法基础设施;面向最终用户的产品放在社区的 Awesome-ChatTTS 索引里。
我怎么让它开始生成语音?先用 pip 安装(稳定版来自 PyPI,最新版来自 GitHub,也可以本地开发模式安装;文档里也有 conda 的安装方式),然后在项目根目录启动 WebUI 或运行命令行推理——输出会保存为 MP3。
音质方面有什么问题吗?有,而且是故意的:为了防止被不法分子滥用,作者在训练时加入了高频噪声,并把输出压缩到 MP3 音质。检测模型计划推出,但目前还没有发布。
我能把它用在商业产品里吗?不行。代码采用 AGPLv3+ 协议,模型权重采用 CC BY-NC 4.0 协议——仅限教育和研究用途,明确禁止商用。
生成的语音里我能控制什么?可以精细控制韵律——笑声、停顿和语气词。在已发布的模型里,token 级别的控制单元是 [laugh]、[uvbreak] 和 [lbreak];更宽泛的多情感控制还在计划中。
为什么有些生成结果听起来不对劲,或者说话人变了?这是自回归模型的典型不稳定问题,和 'bark'、'valle' 属于同一类,很难完全避免——README 的建议是多生成几段样本,挑一段好的保留。
有基于它做好的成品应用吗?这个仓库里没有——它只提供模型和简单示例。现成的终端用户产品收录在社区维护的 Awesome-ChatTTS 索引里,另外还有 QQ 群和 Discord 服务器。
目前已经开源了什么,还有什么在路上?已完成:带 spkstats 的 4 万小时基础模型、流式音频生成,以及带零样本推理代码的 DVAE 编码器。待完成:多情感控制和 ChatTTS.cpp 这个 C++ 移植版。
What are similar projects?csm, CosyVoice, dia, AudioGPT, bark, Speech, fish-speech, SoulX-Podcast
Creator
2noise
Size
10.5 MB
Stars
39.9K
Age
2y
Commits · 90 Days