文本转语音ChatTTS开源工具

ChatTTS做为最近一款爆火的将文本转换为语音的开源工具,在语音合成方面有着诸多优势,目前有较多的网络视频以此在创作

开源地址:https://github.com/2noise/ChatTTS

目前该模型仅支持中文和英文对话,超过10万小时的数据训练,能够输出较高质量和多类型的语音,该模型从5月28日上线开源以来,目前在github上面已经收获25.3k Star;

ChatTTS的能够自然且富有表现力的合成语音,并且支持多个说话人进行互动对话;并且生成的语音自然流畅,能够控制停顿和笑声等动作;开发者介绍该模型进行了100,000+ 小时的中文和英文音频数据进行训练;

根据开发者提供的信息,目前是开源了4万小时基础模型和 spk_stats 文件,未来将做到开源 VQ 编码器和 Lora 训练代码,以及无需细化文本即可进行流式音频生成,开源具有多情感控制功能的 4 万小时版本,未来该团队可能会开源更多功能的ChatTTS模型;

并且已有社区成员基于此开源版本制作了便于使用的WEB UI界面和部署教程,不用繁琐的本地部署,降低了使用门槛,地址如下:https://huggingface.co/spaces/lenML/ChatTTS-Forge

大家可以尝试使用下

### 实现 Chatts 的流式输出 为了实现在 ChatTTS 中的流式输出功能,可以考虑分段处理音频合成过程。通过调整 `infer` 方法的应用方式以及优化数据传输机制来达到实时或近似实时的效果[^2]。 ```python import time from queue import Queue import threading import torch import torchaudio from scipy.io.wavfile import write as wavwrite class StreamChatTTS: def __init__(self, config_path, device='cuda'): self.chat = ChatTTS.Chat() self.chat.load(source='custom', custom_path=config_path, device=device) self.queue = Queue() def infer_and_stream(self, text_chunks): threads = [] for idx, chunk in enumerate(text_chunks): thread = threading.Thread(target=self._process_chunk, args=(idx, chunk)) threads.append(thread) thread.start() # 控制并发线程数量以保持流畅度 if len(threads) >= 3 or idx == len(text_chunks)-1: for t in threads: t.join() threads.clear() def _process_chunk(self, index, text_chunk): waveforms = self.chat.infer([text_chunk]) waveform = torch.from_numpy(waveforms[0]) # 将每一段音频存入队列等待播放或其他操作 self.queue.put((index, waveform)) while not self.queue.empty(): current_index, audio_data = self.queue.get_nowait() filename = f"streamed_output{current_index}.wav" wavwrite(filename, 24000, audio_data.numpy()) print(f"Processed and saved {filename}") ``` 上述代码展示了如何创建一个名为 `StreamChatTTS` 的类来进行流式文本语音换。该方法利用多线程技术并行化多个短语片段的推理计算,并通过 Python 内置模块 `queue.Queue()` 来管理这些片段之间的顺序关系。 值得注意的是,在实际应用中可能还需要进一步优化网络请求延迟、服务器响应时间等因素,从而确保整个系统的稳定性和用户体验的质量[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值