Note
이 문서는 최신 버전이 아닐 수 있습니다. 영어 문서를 기준으로 작업하는 것을 권장합니다.
Note
이 저장소에는 알고리즘 구조와 간단한 예시들이 포함되어 있습니다.
Tip
이 프로젝트에서 파생된 프로젝트는 커뮤니티가 유지 관리하는 커뮤니티Awesome-ChatTTS를 참조하시길 바랍니다.
ChatTTS는 대화 기반 작업(예: LLM 어시스턴트)을 위해 설계된 텍스트-음성 변환(TTS) 모델입니다.
- 영어
- 중국어
- 계속 추가 예정...
이 프로젝트의 내용은 **Bilibili**에서 제공되는 비디오를 참조하시길 바랍니다.
- 대화형 TTS: ChatTTS는 대화 기반 작업에 최적화되어 자연스럽고 표현력 있는 음성 합성을 구현합니다. 다중 화자를 지원하여 상호작용적인 대화를 가능하게 합니다.
- 세밀한 제어: 이 모델은 웃음, 일시 정지, 삽입어 등 세밀한 운율적 특징을 예측하고 제어할 수 있습니다.
- 향상된 운율: ChatTTS는 운율 측면에서 대부분의 오픈 소스 TTS 모델을 능가하며, 추가 연구와 개발을 지원하기 위해 사전 훈련된 모델을 제공합니다.
Important
공개된 모델은 학술 목적으로만 사용 가능합니다.
- 주요 모델은 100,000+ 시간의 중국어 및 영어 오디오 데이터를 사용하여 훈련되었습니다.
- **HuggingFace**에서 제공되는 오픈 소스 버전은 40,000시간의 사전 훈련된 모델로, SFT가 적용되지 않았습니다.
- 40,000시간 기반 모델과 spk_stats 파일 오픈 소스화.
- 스트리밍 오디오 생성.
- DVAE 인코더와 제로 샷 추론 코드 오픈 소스화.
- 다중 감정 제어 기능.
- ChatTTS.cpp (
2noise
조직 내의 새로운 저장소를 환영합니다.)
코드는 AGPLv3+
라이선스를 따릅니다.
모델은 CC BY-NC 4.0
라이선스로 공개되었습니다. 이 모델은 교육 및 연구 목적으로만 사용되며, 상업적 또는 불법적 목적으로 사용되어서는 안 됩니다. 저자들은 정보의 정확성, 완전성, 신뢰성을 보장하지 않습니다. 이 저장소에서 사용된 정보와 데이터는 학술 및 연구 목적으로만 사용되며, 공개적으로 이용 가능한 출처에서 얻은 데이터입니다. 저자들은 데이터에 대한 소유권 또는 저작권을 주장하지 않습니다.
ChatTTS는 강력한 텍스트-음성 변환 시스템입니다. 그렇기에 기술을 책임감 있고 윤리적으로 사용하는 것은 아주 중요합니다. ChatTTS의 악용을 방지하기 위해 40,000시간 모델의 훈련 중 소량의 고주파 노이즈를 추가하고, 오디오 품질을 최대한 압축하여 MP3 형식으로 제공했습니다. 또한, 우리는 내부적으로 탐지 모델을 훈련했으며, 추후 이를 오픈 소스화할 계획입니다.
GitHub 이슈/PR은 언제든지 환영합니다.
모델 및 로드맵에 대한 공식적인 문의는 [email protected]으로 연락해 주십시오.
- Group 1, 808364215
- Group 2, 230696694
- Group 3, 933639842
- Group 4, 608667975
이곳를 클릭하여 참여하십시오.
git clone https://github.com/2noise/ChatTTS
cd ChatTTS
pip install --upgrade -r requirements.txt
conda create -n chattts
conda activate chattts
pip install -r requirements.txt
pip install safetensors vllm==0.2.7 torchaudio
Warning
설치하지 마십시오! TransformerEngine의 적응 작업은 현재 개발 중이며, 아직 제대로 작동하지 않습니다. 개발 목적으로만 설치하십시오. 자세한 내용은 #672 및 #676에서 확인할 수 있습니다.
Note
설치 과정은 매우 느립니다.
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable
Warning
설치하지 마십시오! 현재 FlashAttention-2는 이 이슈에 따르면 생성 속도를 저하시킵니다. 개발 목적으로만 설치하십시오.
Note
지원되는 장치는 Hugging Face 문서에서 확인할 수 있습니다.
pip install flash-attn --no-build-isolation
아래 명령어를 실행할 때 반드시 프로젝트 루트 디렉토리에서 실행하십시오.
python examples/web/webui.py
오디오는
./output_audio_n.mp3
에 저장됩니다.
python examples/cmd/run.py "Your text 1." "Your text 2."
- PyPI에서 안정 버전 설치
pip install ChatTTS
- GitHub에서 최신 버전 설치
pip install git+https://github.com/2noise/ChatTTS
- 로컬 디렉토리에서 개발 모드로 설치
pip install -e .
import ChatTTS
import torch
import torchaudio
chat = ChatTTS.Chat()
chat.load(compile=False) # 성능 향상을 위해 True로 설정 가능
texts = ["PUT YOUR 1st TEXT HERE", "PUT YOUR 2nd TEXT HERE"]
wavs = chat.infer(texts)
for i in range(len(wavs)):
"""
torchaudio의 버전에 따라 첫 번째 줄이 작동할 수 있고, 다른 버전에서는 두 번째 줄이 작동할 수 있습니다.
"""
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)
male speaker |
female speaker |
intro_en_m.webm |
intro_en_f.webm |
30초 길이의 오디오 클립을 생성하려면 최소 4GB의 GPU 메모리가 필요합니다. 4090 GPU의 경우 초당 약 7개의 의미 토큰에 해당하는 오디오를 생성할 수 있습니다. 실시간 인자(RTF)는 약 0.3입니다.
이는 일반적으로 autoregressive 모델(bark 및 valle 등)에서 발생하는 불가피한 문제입니다. 현재로선 여러 번 샘플링하여 적절한 결과를 찾는 것이 최선입니다.
현재 공개된 모델에서는 제어 가능한 토큰은 [laugh]
, [uv_break]
, [lbreak]
입니다. 향후 버전의 모델에서는 추가적인 감정 제어 기능 포함하여 오픈 소스로 제공할 계획입니다.
- bark, XTTSv2, valle는 autoregressive 방식의 시스템으로 뛰어난 TTS 성능을 보여주었습니다.
- fish-speech는 LLM 모델링을 위한 오디오 토크나이저로서 GVQ의 능력을 보여주었습니다.
- vocos는 사전 훈련된 vocoder로 사용되었습니다.
- 초기 알고리즘 실험을 위한 wlu-audio lab에 감사의 말씀을 전합니다.