# Speech-AI-Forge **Repository Path**: ai-aigc/Speech-AI-Forge ## Basic Information - **Project Name**: Speech-AI-Forge - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: dev_tts_pipeline - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-14 - **Last Updated**: 2024-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [cn](./README.md) | [en](./README.en.md) | [Discord Server](https://discord.gg/9XnXUhAy3t) # 🍦 ChatTTS-Forge ChatTTS-Forge 是一个围绕 TTS 生成模型 ChatTTS 开发的项目,实现了 API Server 和 基于 Gradio 的 WebUI。 ![banner](./docs/banner.png) 你可以通过以下几种方式体验和部署 ChatTTS-Forge: | - | 描述 | 链接 | | ------------ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **在线体验** | 部署于 HuggingFace 中 | [HuggingFace Spaces](https://huggingface.co/spaces/lenML/ChatTTS-Forge) | | **一键启动** | 点击按钮,一键启动 Colab | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/lenML/ChatTTS-Forge/blob/main/colab.ipynb) | | **容器部署** | 查看 docker 部分 | [Docker](#docker) | | **本地部署** | 查看环境准备部分 | [本地部署](#InstallationandRunning) | ## 1. INDEX - 1. [INDEX](#INDEX) - 2. [GPU 显存要求](#GPU) - 2.1. [加载模型显存要求](#) - 2.2. [Batch Size 显存要求](#BatchSize) - 3. [ Installation and Running](#InstallationandRunning) - 3.1. [webui features](#webuifeatures) - 3.2. [`launch.py`: API Server](#launch.py:APIServer) - 3.2.1. [How to link to SillyTavern?](#HowtolinktoSillyTavern) - 4. [demo](#demo) - 4.1. [风格化控制](#-1) - 4.2. [长文本生成](#-1) - 5. [Docker](#Docker) - 5.1. [镜像](#-1) - 5.2. [手动 build](#build) - 6. [Roadmap](#Roadmap) - 7. [FAQ](#FAQ) - 7.1. [什么是 Prompt1 和 Prompt2?](#Prompt1Prompt2) - 7.2. [什么是 Prefix?](#Prefix) - 7.3. [Style 中 `_p` 的区别是什么?](#Style_p) - 7.4. [为什么开启了 `--compile` 很慢?](#--compile) - 7.5. [为什么 colab 里面非常慢只有 2 it/s ?](#colab2its) - 8. [离线整合包](#-1) ## 2. GPU 显存要求 ### 2.1. 模型加载显存需求 | 精度 | ChatTTS 模型 | Enhancer 模型 | | ------ | ------------ | ------------- | | 全精度 | 2GB | 3GB | | 半精度 | 1GB | 1.5GB | 注:半精度为默认设置,全精度可通过 `--no_half` 参数启用。 ### 2.2. 推理过程显存需求 | 精度 | Batch Size | 不使用 Enhancer | 使用 Enhancer | | ------ | ---------- | --------------- | ------------- | | 全精度 | ≤ 4 | 2GB | 4GB | | 全精度 | 8 | 4-10GB | 6-14GB | | 半精度 | ≤ 4 | 1GB | 2GB | | 半精度 | 8 | 2-6GB | 4-8GB | 注意事项: 1. 显存需求与上下文长度相关,因此呈现为一个范围。 2. 半精度(默认)的显存需求约为全精度的一半。 3. 对于 Batch Size ≤ 4,4GB 显存通常足够进行推理。 4. Batch Size 为 8 时,可能需要 6-14GB 显存,具体取决于精度和是否使用 Enhancer。 ## 3. Installation and Running 1. 确保 [相关依赖](./docs/dependencies.md) 已经正确安装, 2. 根据你的需求启动需要的服务。 - webui: `python webui.py` - api: `python launch.py` ### 3.1. webui features [点我看详细图文介绍](./docs/webui_features.md) - ChatTTS 模型原生功能 Refiner/Generate - 原生 Batch 合成,高效合成超长文本 - Style control - SSML - Editor: 简单的 SSML 编辑,配合其他功能使用 - Spliter:超长文本分割预处理 - Podcast: 支持创建编辑播客脚本 - Speaker - 内置音色:内置众多 speaker 可以使用 - speaker creator: 支持试音抽卡,创建 speaker - embdding: 支持 speaker embdding 上传,可以复用保存下来的 speaker - speaker merge: 支持合并说话人,微调 speaker - Prompt Slot - Text Normalize - 音质增强: - enhance: 音质增强提高输出质量 - denoise: 去除噪音 - Experimental 实验功能 - fintune - speaker embedding - [WIP] GPT lora - [WIP] AE - [WIP] ASR - [WIP] Inpainting ### 3.2. `launch.py`: API Server 某些情况,你并不需要 webui,那么可以使用这个脚本启动单纯的 api 服务。 launch.py 脚本启动成功后,你可以在 `/docs` 下检查 api 是否开启。 [详细 API 文档](./docs/api.md) #### 3.2.1. How to link to SillyTavern? 通过 `/v1/xtts_v2` 系列 api,你可以方便的将 ChatTTS-Forge 连接到你的 SillyTavern 中。 下面是一个简单的配置指南: 1. 点开 插件拓展 2. 点开 `TTS` 插件配置部分 3. 切换 `TTS Provider` 为 `XTTSv2` 4. 勾选 `Enabled` 5. 选择/配置 `Voice` 6. **[关键]** 设置 `Provider Endpoint` 到 `http://localhost:7870/v1/xtts_v2` ![sillytavern_tts](./docs/sillytavern_tts.png) ## 4. demo ### 4.1. 风格化控制
input ```xml 下面是一个 ChatTTS 用于合成多角色多情感的有声书示例[lbreak] 黛玉冷笑道:[lbreak] 我说呢 [uv_break] ,亏了绊住,不然,早就飞起来了[lbreak] 宝玉道:[lbreak] “只许和你玩 [uv_break] ,替你解闷。不过偶然到他那里,就说这些闲话。”[lbreak] “好没意思的话![uv_break] 去不去,关我什么事儿? 又没叫你替我解闷儿 [uv_break],还许你不理我呢” [lbreak] 说着,便赌气回房去了 [lbreak] ```
output [多角色.webm](https://github.com/lenML/ChatTTS-Forge/assets/37396659/82d91409-ad71-42ac-a4cd-d9c9340e3a07)
### 4.2. 长文本生成
input 中华美食,作为世界饮食文化的瑰宝,以其丰富的种类、独特的风味和精湛的烹饪技艺而闻名于世。中国地大物博,各地区的饮食习惯和烹饪方法各具特色,形成了独树一帜的美食体系。从北方的京鲁菜、东北菜,到南方的粤菜、闽菜,无不展现出中华美食的多样性。 在中华美食的世界里,五味调和,色香味俱全。无论是辣味浓郁的川菜,还是清淡鲜美的淮扬菜,都能够满足不同人的口味需求。除了味道上的独特,中华美食还注重色彩的搭配和形态的美感,让每一道菜品不仅是味觉的享受,更是一场视觉的盛宴。 中华美食不仅仅是食物,更是一种文化的传承。每一道菜背后都有着深厚的历史背景和文化故事。比如,北京的烤鸭,代表着皇家气派;而西安的羊肉泡馍,则体现了浓郁的地方风情。中华美食的精髓在于它追求的“天人合一”,讲究食材的自然性和烹饪过程中的和谐。 总之,中华美食博大精深,其丰富的口感和多样的烹饪技艺,构成了一个充满魅力和无限可能的美食世界。无论你来自哪里,都会被这独特的美食文化所吸引和感动。
output [long_text_demo.webm](https://github.com/lenML/ChatTTS-Forge/assets/37396659/fe18b0f1-a85f-4255-8e25-3c953480b881)
## 5. Docker ### 5.1. 镜像 WIP 开发中 ### 5.2. 手动 build 下载模型: `python -m scripts.download_models --source modelscope` - webui: `docker-compose -f ./docker-compose.webui.yml up -d` - api: `docker-compose -f ./docker-compose.api.yml up -d` 环境变量配置 - webui: [.env.webui](./.env.webui) - api: [.env.api](./.env.api) ## 6. Roadmap WIP ## 7. FAQ ### 7.1. 什么是 Prompt1 和 Prompt2? Prompt1 和 Prompt2 都是系统提示(system prompt),区别在于插入点不同。因为测试发现当前模型对第一个 [Stts] token 非常敏感,所以需要两个提示。 - Prompt1 插入到第一个 [Stts] 之前 - Prompt2 插入到第一个 [Stts] 之后 ### 7.2. 什么是 Prefix? Prefix 主要用于控制模型的生成能力,类似于官方示例中的 refine prompt。这个 prefix 中应该只包含特殊的非语素 token,如 `[laugh_0]`、`[oral_0]`、`[speed_0]`、`[break_0]` 等。 ### 7.3. Style 中 `_p` 的区别是什么? Style 中带有 `_p` 的使用了 prompt + prefix,而不带 `_p` 的则只使用 prefix。 ### 7.4. 为什么开启了 `--compile` 很慢? 由于还未实现推理 padding 所以如果每次推理 shape 改变都可能触发 torch 进行 compile > 暂时不建议开启 ### 7.5. 为什么 colab 里面非常慢只有 2 it/s ? 请确保使用 gpu 而非 cpu。 - 点击菜单栏 【修改】 - 点击 【笔记本设置】 - 选择 【硬件加速器】 => T4 GPU ## 8. 离线整合包 感谢 @Phrixus2023 提供的整合包: https://pan.baidu.com/s/1Q1vQV5Gs0VhU5J76dZBK4Q?pwd=d7xu 相关讨论: https://github.com/lenML/ChatTTS-Forge/discussions/65 # Documents 在这里可以找到 [更多文档](./docs/readme.md) # Contributing To contribute, clone the repository, make your changes, commit and push to your clone, and submit a pull request. # References - ChatTTS: https://github.com/2noise/ChatTTS - PaddleSpeech: https://github.com/PaddlePaddle/PaddleSpeech - resemble-enhance: https://github.com/resemble-ai/resemble-enhance - 默认说话人: https://github.com/2noise/ChatTTS/issues/238