当前位置: 首页 > news >正文

开源的语音合成工具_ChatTTS_用法及资源

1 引言

5 月开源的 ChatTTS,最近文章十篇里有五篇以上都在讨论它。很多新的 TTS 模型也用它来做比较。感觉没用过 ChatTTS 都不敢评测其他的。

目前,ChatTTS 支持英文和中文。在 arxiv 上没找到相关论文,所以本文主要评测使用感受。

(下文仅代表个人观点)

2 主要资源

  • Github:  https://github.com/2noise/ChatTTS,目前 27.4K Star
  • HuggingFace: https://huggingface.co/2Noise/ChatTTS

3 使用方法

3.1 安装

为了避免影响现有环境,我在 Docker 镜像中进行安装,选择了 PyTorch 官方提供的镜像。由于软件依赖于 PyTorch 2.1.0,版本要求较高,所以我下载了重新的 Docker 镜像。

PLAINTEXT

1
2
3
4
5
6
7
8
$ git clone https://github.com/2noise/ChatTTS.git
$ docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
$ nvidia-docker run --name chattts --network host --rm -v /exports:/exports -it pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime bash
> apt-get update
> apt-get install gcc
> cd /exports/git/ChatTTS/
> pip install -r requirements.txt
> python examples/web/webui.py

在浏览器 8080 端口打开界面:http://ip:8080/

  • 制作完成的镜像大小为 9.77G。
  • 运行时下载约 860M 的 GPT 模型。
  • 在我的旧机器 (1080ti) 上,合成 60 个字需要 12 秒,速度约为 5 字/秒。
  • 使用 nvidia-smi 看资源占用,合成过程中 GPU 显存大约增加了 2G。
  • 虽然有时后台会出现错误信息,但前台仍能正常进行合成。

3.2 界面参数

  • refine_text:将文本转换成更口语化的形式。程序调用时,可以细化设置口语化程度、笑声频率和停顿次数。
  • top_P:控制模型在生成下一个词时考虑的词汇范围。如果设置为 0.7,模型将只考虑前 30% 的词汇。调大这个值有助于生成更多样化的文本。
  • top_K:限制生成词汇的数量,即模型在生成下一个词时只考虑概率最高的 K 个词汇。
  • Audio Temperature:控制生成文本时的随机性。设得过高,声音会严重变形。
  • Timbre:生成不同的 Seed 以选择音色。

3.3 运行过程

  • refine_text 转换文本
  • infer_code 生成语音编码
  • dvae/decoder 将语音编码转换成声学特征
  • vocos 将声学特征转换成音频

3.4 问题与解决

  • 太旧的 gpu 不能直接用,github issue 中有对应的报错及解决方法,请参见:
    • https://github.com/2noise/ChatTTS/issues/235

3.5 源码分析

  • 整体由 Python 实现,基于 Pytorch 模型,Python 代码约 3000 行左右。
  • 核心代码主要是:模型部分 gpt.py 和推理部分 core.py。
  • 我没有找到 train 和 fine-tune 部分的代码。
  • 更多原理解析请见参考部分。

3.6 使用示例

整个使用过程中,我个人觉得比较惊喜的是它对文本的理解能力、情感感受能力以及生成文本的自然度,示例如下:

  • 输入:笑不活了!美团这些神评价也太搞笑了,我要笑死在评论区!
  • refine 处理后文本:笑 不 活 了 。 然 后 [uv_break] 美 团 这 些 神 [uv_break] 评 价 也 太 [uv_break] 搞 笑 了 , 我 要 笑 死 在 评 论 区 [laugh] 。
  • 听起来最后一句都带着笑意,真的很传神。我个人认为这方面明显优于 GPT_SoVits。

4 用后感

4.1 优势

  • 将语义融入了声音生成
  • 提供多种声音选择,每种 seed 相对稳定,不需要 fine-tune,对非专业用户非常友好
  • 模型大小和生成速度都在可接受范围内
  • 界面和接口简单易用,学习成本低
  • 工具链设计完善,几乎是一键安装,不需要手动下载模型
  • README 内容恰到好处,满足多数用户的好奇心或直接使用需求

4.2 不足

  • 音色随机,虽然可以复用 seed,但需要逐个试验。不同 Seed 的声音效果参差不齐,可控性差。
  • 整体人声表现一般,多是普通话的平均水平,试了几个都不惊艳。
  • 初始版本不能生成超过 30 秒的音频。
  • 不能定制声音(后来的阿里模型在这方面更好一些)。

4.3 总结

  • ChatTTS 在情绪的可控性显著提升,但对说话人的控制相对较弱。

5 官方说明

官方说明引自 GitHub 项目的 README。为了确保知识的完整性,来看看官方是怎么说的。

5.1 亮点

  1. 对话式 TTS: ChatTTS 专为对话任务优化,能够生成自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。
  2. 精细控制: 该模型可以预测和控制精细的韵律特征,包括笑声、停顿和插入语。
  3. 更好的韵律: ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。

5.2 数据集和模型

  • 主模型使用了超过 100k 小时的中文和英文音频数据进行训练。
  • HuggingFace 上的开源版本是在 40k 小时数据上进行无监督微调的预训练模型。

6 参考

介绍文档比较同质化,下面列几个我认为比较实用的:

  • ChatTTS使用技巧:如何精细化控制语气、音色、语速 附一键整合包!
  • 相关资源总汇
  • 不同Seed声音列表
  • 揭秘最像真人的TTS:从方法看ChatTTS如何工作
  • 试用地址

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 农场驿站平台小程序的设计
  • 概率论原理精解【4】
  • 微信小程序数组绑定使用案例(一)
  • 会Excel就会sql?
  • 【操作系统】定时器(Timer)的实现
  • PY32F002B单片机 ISP 串口下载注意事项
  • 基于GTX的64B66B编码的自定义接收模块(高速收发器二十二)
  • 简化Android数据管理:深入探索SQLite数据库
  • esp8266模块(1)
  • 冒泡,选择,插入,希尔排序
  • 分布式锁的使用场景是什么?有哪些实现方法?
  • Qt创建列表,通过外部按钮控制列表的选中下移、上移以及左侧图标的显现
  • VSCODE 下 openocd Jlink 的配置笔记
  • huawei USG6001v1学习----NAT和智能选路
  • web学习笔记(八十二)uniapp
  • hexo+github搭建个人博客
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • JavaScript对象详解
  • Java精华积累:初学者都应该搞懂的问题
  • LeetCode18.四数之和 JavaScript
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python学习之路16-使用API
  • REST架构的思考
  • TCP拥塞控制
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何在GitHub上创建个人博客
  • 使用docker-compose进行多节点部署
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 正则表达式
  • 通过调用文摘列表API获取文摘
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # Panda3d 碰撞检测系统介绍
  • #1015 : KMP算法
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (层次遍历)104. 二叉树的最大深度
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)WCF的Binding模型
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (力扣)循环队列的实现与详解(C语言)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (算法)Travel Information Center
  • (一)插入排序
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Net 4.0并行库实用性演练
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET中 MVC 工厂模式浅析
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48