OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Tortoise-TTS — 高质量语音合成与克隆项目

Tortoise-TTS — 高质量语音合成与克隆项目

 
  sharding ·  2026-04-20 11:00:21 · 9 次点击  · 0 条评论  

TorToiSe

Tortoise 是一个文本转语音程序,其设计遵循以下优先级:

  1. 强大的多语音能力。
  2. 高度逼真的韵律和语调。

此仓库包含了以推理模式运行 Tortoise TTS 所需的所有代码。

论文:https://arxiv.org/abs/2305.07243

Hugging Face 空间

Hugging Face Spaces 上托管了一个实时演示。如果您想避免排队,请复制该 Space 并添加 GPU。请注意,仅 CPU 的空间无法运行此演示。

https://huggingface.co/spaces/Manmay/tortoise-tts

通过 pip 安装

pip install tortoise-tts

如果您想安装最新的开发版本,也可以直接从 git 仓库安装:

pip install git+https://github.com/neonbjb/tortoise-tts

名字的由来?

我将与语音相关的仓库以莫哈韦沙漠的动植物命名。Tortoise(乌龟)有点自嘲的意味:这个模型非常慢。它同时利用了自回归解码器扩散解码器;两者都以低采样率著称。在 K80 上,生成一个中等长度的句子预计需要 2 分钟。

嗯……现在没那么慢了!我们可以在 4GB 显存上实现 0.25-0.3 的实时因子,并且通过流式处理,延迟可以低于 500 毫秒!!!

演示

查看此页面获取大量示例输出。

一个很酷的 Tortoise + GPT-3 应用(与此仓库无关):https://twitter.com/lexman_ai。遗憾的是,该项目似乎已不再活跃。

使用指南

本地安装

如果你想在自己的电脑上使用,必须有一块 NVIDIA GPU。

[!TIP]
在 Windows 上,我强烈推荐使用 Conda 安装方法。据我所知,如果不这样做,你将花费大量时间解决依赖问题。

首先,安装 miniconda:https://docs.conda.io/en/latest/miniconda.html

然后使用 anaconda prompt 作为终端(或任何其他配置为与 conda 配合使用的终端)运行以下命令。

这将:
1. 创建一个包含指定最小依赖项的 conda 环境。
2. 激活该环境。
3. 按照 https://pytorch.org/get-started/locally/ 提供的命令安装 pytorch。
4. 克隆 tortoise-tts 仓库。
5. 将当前目录切换到 tortoise-tts。
6. 运行 tortoise 的 python setup 安装脚本。

conda create --name tortoise python=3.9 numba inflect
conda activate tortoise
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
conda install transformers=4.29.2
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
python setup.py install

可选地,可以将 pytorch 安装在基础环境中,以便其他 conda 环境也能使用。为此,只需在激活 tortoise 环境之前执行 conda install pytorch... 这一行命令。

[!NOTE]
当你想要使用 tortoise-tts 时,必须确保 tortoise conda 环境已激活。

如果你在 Windows 上,可能还需要安装 pysoundfile:conda install -c conda-forge pysoundfile

Docker

这是一个快速上手的好方法,也是根据你的用例进行调整的良好起点。

git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts

docker build . -t tts

docker run --gpus all \
    -e TORTOISE_MODELS_DIR=/models \
    -v /mnt/user/data/tortoise_tts/models:/models \
    -v /mnt/user/data/tortoise_tts/results:/results \
    -v /mnt/user/data/.cache/huggingface:/root/.cache/huggingface \
    -v /root:/work \
    -it tts

这将为你提供一个交互式终端,环境已准备就绪,可以进行文本转语音。现在你可以探索 tortoise 为 TTS 提供的不同接口。

例如:

cd app
conda activate tortoise
time python tortoise/do_tts.py \
    --output_path /results \
    --preset ultra_fast \
    --voice geralt \
    --text "Time flies like an arrow; fruit flies like a bananna."

Apple Silicon

在 macOS 13+ 且使用 M1/M2 芯片的电脑上,你需要安装 PyTorch 的 nightly 版本,正如官方页面所述,你可以这样做:

pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu

请确保在激活环境后执行此操作。如果你不使用 conda,命令将如下所示:

python3.10 -m venv .venv
source .venv/bin/activate
pip install numba inflect psutil
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
pip install transformers
git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
pip install .

请注意,DeepSpeed 在 Apple Silicon 上被禁用,因为它无法工作。标志 --use_deepspeed 将被忽略。
你可能需要在下面的命令前加上 PYTORCH_ENABLE_MPS_FALLBACK=1 才能使它们正常工作,因为 MPS 不支持 PyTorch 中的所有操作。

do_tts.py

此脚本允许你使用一个或多个语音说出一句话。

python tortoise/do_tts.py --text "I'm going to speak this" --voice random --preset fast

进行 socket 流式处理

```socket server
python tortoise/socket_server.py

将在端口 5000 监听

### 更快的推理 read.py

此脚本提供了朗读大量文本的工具。

```shell
python tortoise/read_fast.py --textfile <你的待朗读文本文件> --voice random

read.py

此脚本提供了朗读大量文本的工具。

python tortoise/read.py --textfile <你的待朗读文本文件> --voice random

这会将文本文件分解成句子,然后逐个转换为语音。它将在生成时输出一系列语音片段。所有片段生成后,它会将它们合并成一个单独的文件并输出。

有时 Tortoise 会搞砸输出。你可以通过使用 --regenerate 参数重新运行 read.py 来重新生成任何有问题的片段。

API

Tortoise 可以以编程方式使用,如下所示:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech()
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')

使用 deepspeed:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')

使用 kv 缓存:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(kv_cache=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')

以 float16 运行模型:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')

为了更快的运行速度,可以同时使用以下三项:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech(use_deepspeed=True, kv_cache=True, half=True)
pcm_audio = tts.tts_with_preset("your text here", voice_samples=reference_clips, preset='fast')

致谢

这个项目获得的赞誉超出了我的预期。然而,我是站在巨人的肩膀上,我想感谢社区中一些了不起的人,他们帮助实现了这一切:

  • Hugging Face,他们编写了 GPT 模型和 Tortoise 使用的生成 API,并托管了模型权重。
  • Ramesh 等人,他们是 DALLE 论文的作者,这为 Tortoise 提供了灵感。
  • Nichol 和 Dhariwal,他们编写了驱动扩散模型的代码(修订版)。
  • Jang 等人,他们开发并开源了 univnet,即本仓库使用的声码器。
  • Kim 和 Jung,他们实现了 univnet 的 PyTorch 模型。
  • lucidrains,他编写了许多出色的开源 PyTorch 模型,其中许多在这里被使用。
  • Patrick von Platen,他关于设置 wav2vec 的指南对于构建我的数据集至关重要。

声明

Tortoise 完全由作者(James Betker)使用其个人硬件构建。其雇主未参与 Tortoise 开发的任何方面。

许可证

Tortoise TTS 采用 Apache 2.0 许可证授权。

如果你在研究中使用此仓库或其思想,请引用它!bibtex 条目可以在 GitHub 的右侧面板中找到。

9 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 44 ms
Developed with Cursor