Un modèle de discours génératif pour le dialogue quotidien.
Anglais |简体中文|日本語| Russe | espagnol | Français | 한국어
Note
Ce dépôt contient l'infrastructure de l'algorithme et quelques exemples simples.
Conseil
Pour les produits d'utilisateur final étendus, veuillez vous référer au référentiel d'index Awesome-ChatTTS maintenu par la communauté.
ChatTTS est un modèle de synthèse vocale conçu spécifiquement pour les scénarios de dialogue tels que l'assistant LLM.
Vous pouvez vous référer à cette vidéo sur Bilibili pour la description détaillée.
Important
Le modèle publié est uniquement destiné à des fins académiques.
2noise
est le bienvenu) Le code est publié sous licence AGPLv3+
.
Le modèle est publié sous licence CC BY-NC 4.0
. Il est destiné à un usage éducatif et de recherche et ne doit pas être utilisé à des fins commerciales ou illégales. Les auteurs ne garantissent pas l'exactitude, l'exhaustivité ou la fiabilité des informations. Les informations et données utilisées dans ce référentiel sont uniquement destinées à des fins académiques et de recherche. Les données sont obtenues à partir de sources accessibles au public et les auteurs ne revendiquent aucun droit de propriété ou de droit d'auteur sur les données.
ChatTTS est un puissant système de synthèse vocale. Cependant, il est très important d’utiliser cette technologie de manière responsable et éthique. Pour limiter l'utilisation de ChatTTS, nous avons ajouté une petite quantité de bruit haute fréquence lors de la formation du modèle de 40 000 heures et compressé autant que possible la qualité audio en utilisant le format MP3, afin d'empêcher les acteurs malveillants de l'utiliser potentiellement à des fins criminelles. fins. Dans le même temps, nous avons formé en interne un modèle de détection et prévoyons de le rendre open source à l'avenir.
Les problèmes/RP GitHub sont toujours les bienvenus.
Pour toute demande formelle sur le modèle et la feuille de route, veuillez nous contacter à [email protected] .
Rejoignez-nous en cliquant ici.
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
Avertissement
NE PAS INSTALLER ! L'adaptation de TransformerEngine est actuellement en cours de développement et NE PEUT PAS fonctionner correctement pour le moment. Installez-le uniquement à des fins de développement. Voir plus de détails au #672 #676
Note
Le processus d'installation est très lent.
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
Avertissement
NE PAS INSTALLER ! Actuellement, FlashAttention-2 ralentira la vitesse de génération en fonction de ce problème. Installez-le uniquement à des fins de développement.
Note
Voir les appareils pris en charge sur le Hugging Face Doc.
pip install flash-attn --no-build-isolation
Assurez-vous que vous vous trouvez dans le répertoire racine du projet lorsque vous exécutez ces commandes ci-dessous.
python examples/web/webui.py
Il enregistrera l'audio dans
./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 )
locuteur masculin | enceinte féminine |
intro_fr_m.webm | intro_fr_f.webm |
Pour un clip audio de 30 secondes, au moins 4 Go de mémoire GPU sont requis. Pour le GPU 4090, il peut générer de l'audio correspondant à environ 7 jetons sémantiques par seconde. Le facteur temps réel (RTF) est d'environ 0,3.
Il s'agit d'un problème qui se produit généralement avec les modèles autorégressifs (pour l'écorce et la valle). C'est généralement difficile à éviter. On peut essayer plusieurs échantillons pour trouver un résultat approprié.
Dans le modèle actuellement publié, les seules unités de contrôle au niveau du jeton sont [laugh]
, [uv_break]
et [lbreak]
. Dans les versions futures, nous pourrons ouvrir des modèles open source avec des capacités supplémentaires de contrôle émotionnel.