Um modelo de discurso generativo para o diálogo diário.
Inglês |简体中文|日本語| Russo | Espanhol | Français | 한국어
Observação
Este repositório contém a infraestrutura do algoritmo e alguns exemplos simples.
Dica
Para produtos estendidos para usuário final, consulte o repositório de índice Awesome-ChatTTS mantido pela comunidade.
ChatTTS é um modelo de conversão de texto em fala projetado especificamente para cenários de diálogo, como assistente LLM.
Você pode consultar este vídeo no Bilibili para uma descrição detalhada.
Importante
O modelo divulgado é apenas para fins acadêmicos.
2noise
org é bem-vindo) O código é publicado sob licença AGPLv3+
.
O modelo é publicado sob licença CC BY-NC 4.0
. Destina-se ao uso educacional e de pesquisa e não deve ser usado para fins comerciais ou ilegais. Os autores não garantem a exatidão, integridade ou confiabilidade das informações. As informações e dados utilizados neste repositório são apenas para fins acadêmicos e de pesquisa. Os dados são obtidos de fontes publicamente disponíveis e os autores não reivindicam qualquer propriedade ou direito autoral sobre os dados.
ChatTTS é um poderoso sistema de conversão de texto em fala. No entanto, é muito importante utilizar esta tecnologia de forma responsável e ética. Para limitar o uso do ChatTTS, adicionamos uma pequena quantidade de ruído de alta frequência durante o treinamento do modelo de 40.000 horas e comprimimos a qualidade do áudio tanto quanto possível usando o formato MP3, para evitar que agentes mal-intencionados possam usá-lo para fins criminosos. propósitos. Ao mesmo tempo, treinamos internamente um modelo de detecção e planejamos abri-lo no futuro.
Problemas/PRs do GitHub são sempre bem-vindos.
Para consultas formais sobre o modelo e roteiro, entre em contato conosco em [email protected] .
Participe clicando aqui.
git clone https://github.com/2noise/ChatTTS
cd ChatTTS
pip install --upgrade -r requirements.txt
conda create -n chattts python=3.11
conda activate chattts
pip install -r requirements.txt
pip install safetensors vllm==0.2.7 torchaudio
Aviso
NÃO INSTALE! A adaptação do TransformerEngine está atualmente em desenvolvimento e NÃO PODE funcionar corretamente agora. Instale-o apenas para fins de desenvolvimento. Veja mais detalhes em #672 #676
Observação
O processo de instalação é muito lento.
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
Aviso
NÃO INSTALE! Atualmente o FlashAttention-2 irá diminuir a velocidade de geração de acordo com este problema. Instale-o apenas para fins de desenvolvimento.
Observação
Veja os dispositivos suportados no Hugging Face Doc.
pip install flash-attn --no-build-isolation
Certifique-se de estar no diretório raiz do projeto ao executar os comandos abaixo.
python examples/web/webui.py
Ele salvará o áudio em
./output_audio_n.mp3
python examples/cmd/run.py " Your text 1. " " Your text 2. "
pip install ChatTTS
pip install git+https://github.com/2noise/ChatTTS
pip install -e .
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 )
###################################
# 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 )
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 )
palestrante masculino | palestrante feminina |
intro_en_m.webm | intro_en_f.webm |
Para um clipe de áudio de 30 segundos, são necessários pelo menos 4 GB de memória GPU. Para a GPU 4090, ela pode gerar áudio correspondente a aproximadamente 7 tokens semânticos por segundo. O Fator de Tempo Real (RTF) está em torno de 0,3.
Este é um problema que normalmente ocorre com modelos autorregressivos (para casca e vale). Geralmente é difícil evitar. Pode-se tentar várias amostras para encontrar um resultado adequado.
No modelo lançado atualmente, as únicas unidades de controle em nível de token são [laugh]
, [uv_break]
e [lbreak]
. Em versões futuras, poderemos abrir modelos de código aberto com recursos adicionais de controle emocional.