Model pidato generatif untuk dialog sehari-hari.
Bahasa Inggris |简体中文|日本語| Русский | Spanyol | Perancis | 한국어
Catatan
Repo ini berisi infrastruktur algoritma dan beberapa contoh sederhana.
Tip
Untuk produk pengguna akhir yang diperluas, silakan merujuk ke repo indeks Awesome-ChatTTS yang dikelola oleh komunitas.
ChatTTS adalah model text-to-speech yang dirancang khusus untuk skenario dialog seperti asisten LLM.
Anda dapat merujuk ke video ini di Bilibili untuk penjelasan detailnya.
Penting
Model yang dirilis hanya untuk tujuan akademis.
2noise
org diterima) Kode ini diterbitkan di bawah lisensi AGPLv3+
.
Model ini diterbitkan di bawah lisensi CC BY-NC 4.0
. Hal ini dimaksudkan untuk penggunaan pendidikan dan penelitian, dan tidak boleh digunakan untuk tujuan komersial atau ilegal. Penulis tidak menjamin keakuratan, kelengkapan, atau keandalan informasi. Informasi dan data yang digunakan dalam repo ini, adalah untuk tujuan akademis dan penelitian saja. Data diperoleh dari sumber yang tersedia untuk umum, dan penulis tidak mengklaim kepemilikan atau hak cipta apa pun atas data tersebut.
ChatTTS adalah sistem text-to-speech yang kuat. Namun, sangat penting untuk memanfaatkan teknologi ini secara bertanggung jawab dan etis. Untuk membatasi penggunaan ChatTTS, kami menambahkan sedikit kebisingan frekuensi tinggi selama pelatihan model 40.000 jam, dan mengompresi kualitas audio sebanyak mungkin menggunakan format MP3, untuk mencegah kemungkinan pelaku kejahatan menggunakannya untuk tujuan kriminal. tujuan. Pada saat yang sama, kami telah melatih model deteksi secara internal dan berencana menjadikannya sebagai sumber terbuka di masa mendatang.
Masalah/PR GitHub selalu diterima.
Untuk pertanyaan formal tentang model dan peta jalan, silakan hubungi kami di [email protected] .
Bergabunglah dengan mengklik di sini.
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
Peringatan
JANGAN INSTAL! Adaptasi TransformerEngine saat ini sedang dalam pengembangan dan TIDAK BISA berjalan dengan baik saat ini. Instal hanya untuk tujuan pengembangan. Lihat lebih detail di #672 #676
Catatan
Proses instalasi sangat lambat.
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
Peringatan
JANGAN INSTAL! Saat ini FlashAttention-2 akan memperlambat kecepatan pembangkitan berdasarkan masalah ini. Instal hanya untuk tujuan pengembangan.
Catatan
Lihat perangkat yang didukung di Hugging Face Doc.
pip install flash-attn --no-build-isolation
Pastikan Anda berada di bawah direktori root proyek saat Anda menjalankan perintah di bawah ini.
python examples/web/webui.py
Ini akan menyimpan audio ke
./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 )
pembicara laki-laki | pembicara wanita |
intro_en_m.webm | intro_en_f.webm |
Untuk klip audio berdurasi 30 detik, diperlukan setidaknya 4 GB memori GPU. Untuk GPU 4090, dapat menghasilkan audio yang setara dengan sekitar 7 token semantik per detik. Faktor Real-Time (RTF) adalah sekitar 0,3.
Ini adalah masalah yang biasanya terjadi pada model autoregresif (untuk kulit kayu dan valle). Biasanya sulit untuk dihindari. Seseorang dapat mencoba beberapa sampel untuk menemukan hasil yang sesuai.
Dalam model yang dirilis saat ini, satu-satunya unit kontrol tingkat token adalah [laugh]
, [uv_break]
, dan [lbreak]
. Di versi mendatang, kami mungkin menggunakan model sumber terbuka dengan kemampuan kontrol emosi tambahan.