ChatTTS[1] 是专为对话场景设计的语音生成模型,特别适用于大型语言模型(LLM)助手的对话任务,以及诸如对话式音频和视频介绍等应用。它支持中文和英文,通过使用大约 100,000 小时的中文和英文数据进行训练,ChatTTS 在语音合成中表现出高质量和自然度。
近期热文
当 AI 遇上爬虫:让数据提取变得前所未有的简单!
超强 OCR 新秀:支持 90 多种语言,性能超越云服务!
7.8K Star RAG 引擎:基于深度文档理解,最大程度降低幻觉、无限上下文快速完成 “大海捞针” 测试!
ChatTTS 主要特点
多语言支持:ChatTTS 支持英语和中文。这使其能够为广泛用户群提供服务,并克服语言障碍。
大规模数据训练:ChatTTS 使用了大约 10 万小时的中文和英文数据。这样的大规模训练使其声音合成质量高,听起来自然。
对话任务兼容性:ChatTTS 很适合处理对话任务。它可以为对话生成响应,并在集成到各种应用和服务时提供更自然流畅的互动体验。
开源计划:项目团队计划开源一个经过训练的基础模型。这将使学术研究人员和社区开发人员能够进一步研究和发展这项技术。
可控性和安全性:团队致力于提高模型的可控性,添加水印,并将其与 LLMs 集成。
易用性:ChatTTS 为用户提供了易于使用的体验。它只需要文本信息作为输入,就可以生成相应的语音文件。
ChatTTS 快速上手
1.克隆项目
git clone https://github.com/2noise/ChatTTS
2.安装依赖项
使用 pip 安装 torch 和 ChatTTS:
pip install torch ChatTTS
3.导入所需库
import torchimport ChatTTSfrom IPython.display import Audio
4.初始化 ChatTTS
创建 ChatTTS 类的实例并加载预训练模型。
chat = ChatTTS.Chat()chat.load_models()
5.准备文本
texts = ["你好,欢迎使用ChatTTS!"]
6.生成语音
使用 infer 方法从文本生成语音。设置 use_decoder=True 以启用解码器。
wavs = chat.infer(texts, use_decoder=True)
7.播放音频
使用 IPython.display 中的 Audio 类播放生成的音频。将采样率设置为 24,000 Hz并启用自动播放。
Audio(wavs[0], rate=24_000, autoplay=True)
8.完整代码
import torchimport ChatTTSfrom IPython.display import Audio# 初始化ChatTTSchat = ChatTTS.Chat()chat.load_models()# 定义要转换为语音的文本texts = ["你好,欢迎使用ChatTTS!"]# 生成语音wavs = chat.infer(texts, use_decoder=True)# 播放生成的音频Audio(wavs[0], rate=24_000, autoplay=True)
ChatTTS 用法
1.基本用法
import ChatTTSfrom IPython.display import Audiochat = ChatTTS.Chat()chat.load_models(compile=False) # 设置为True以获得更快速度texts = ["在这里输入你的文本",]wavs = chat.infer(texts, use_decoder=True)torchaudio.save("output1.wav", torch.from_numpy(wavs[0]), 24000)
2.进阶用法
#################################### Sample a speaker from Gaussian.rand_spk = chat.sample_random_speaker()params_infer_code = { '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 = { 'prompt': '[oral_2][laugh_0][break_6]'} wav = chat.infer(texts, params_refine_text=params_refine_text, params_infer_code=params_infer_code)#################################### For word level manual control.# use_decoder=False to infer faster with a bit worse qualitytext = 'What is [uv_break]your favorite english food?[laugh][lbreak]'wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code, use_decoder=False)torchaudio.save("output2.wav", torch.from_numpy(wavs[0]), 24000)
3.自我介绍示例
inputs_cn = """chat T T S 是一款强大的对话式文本转语音模型。它有中英混读和多说话人的能力。chat T T S 不仅能够生成自然流畅的语音,还能控制[laugh]笑声啊[laugh],停顿啊[uv_break]语气词啊等副语言现象[uv_break]。这个韵律超越了许多开源模型[uv_break]。请注意,chat T T S 的使用应遵守法律和伦理准则,避免滥用的安全风险。[uv_break]'""".replace('', '')params_refine_text = { 'prompt': '[oral_2][laugh_0][break_4]'} audio_array_cn = chat.infer(inputs_cn, params_refine_text=params_refine_text)# audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text)torchaudio.save("output3.wav", torch.from_numpy(audio_array_cn[0]), 24000)
ChatTTS 常见问题
1.链接不上 HuggingFace
对于这种情况,您可以使用 modelscope[2] 版本,并设置 cache 的位置:
chat.load_models(source='local', local_path='你的下载位置')
2.要多少显存? 推理的速度是怎么样?
对于 30s 的音频, 至少需要 4G 的显存。对于 4090, 1s 生成约 7 个字所对应的音频。RTF 约 0.3.
3.模型稳定性似乎不够好, 会出现其他说话人或音质很差的现象。
这是自回归模型通常都会出现的问题。说话人可能会在中间变化,可能会采样到音质非常差的结果,这通常难以避免。可以多采样几次来找到合适的结果。
4.除了笑声还能控制什么吗? 还能控制其他情感吗?
目前开源的模型版本中, 只有 [laugh] 和 [uv_break],[lbreak] 作为字级别的控制单元。在未来的版本中可能会开源其他情感控制的版本。
https://github.com/2noise/ChatTTS
往期文章
PDF 转 Markdown 神器,精准且快速:支持 90 多种语言 OCR,还支持提取表格、图片和公式!
自动化爬虫神器:把网页转成大模型所需数据,助力 AI 应用与大模型训练全面优化!
Text2SQL 效果不好?不要错过这个神器!自带 RAG、复杂数据集准确度高,还能自训练模型
3 款强大的开源低代码 LLM 编排工具,可视化定制专属 AI Agent 和 AI 工作流!
25.4K Star 低代码LLM编排工具:终于支持 Multi Agent,内置 5 大 Multi Agent 开箱即用!
Kimi 10 秒生成流程图,别再手动绘图了!
欢迎您与我交流 AI 技术/工具
关注 AI 真好玩,带你玩转各类 AI 工具,掌控数字未来!
如果这篇文章对您有所帮助,请点赞、关注,并分享给您的朋友。感谢您的支持!
参考资料
[1]
ChatTTS: https://github.com/2noise/ChatTTS[2]
modelscope: https://www.modelscope.cn/models/pzc163/chatTTS/summary