首页 > 后端开发 > Python教程 > 使用 T4 在 Google Colab 上探索 Kokoro TTS 语音合成

使用 T4 在 Google Colab 上探索 Kokoro TTS 语音合成

DDD
发布: 2025-01-27 12:12:09
原创
471 人浏览过

Exploring Kokoro TTS Voice Synthesis on Google Colab with T4

Kokoro-82M: 高性能文本转语音 (TTS) 模型探索

Kokoro-82M 是一款高性能的 TTS 模型,能够生成高质量音频。它支持简单的文本转语音转换,并可以通过对音频文件应用权重来轻松进行语音合成。

Hugging Face 上的 Kokoro-82M

从 0.23 版本开始,Kokoro-82M 也支持日语。您可以通过以下链接轻松试用:

[Kokoro TTS on Hugging Face Spaces](此处应插入Hugging Face Spaces链接)

然而,日语的语调仍然略显不自然。

在本教程中,我们将使用 kokoro-onnx,这是一个利用 Kokoro 和 ONNX 运行时的 TTS 实现。我们将使用 0.19 版本(一个稳定版本),它仅支持美式英语和英式英语的语音合成。

正如标题所示,代码将在 Google Colab 中执行。

安装 kokoro-onnx

<code class="language-bash">!git lfs install
!git clone https://huggingface.co/hexgrad/Kokoro-82M
%cd Kokoro-82M
!apt-get -qq -y install espeak-ng > /dev/null 2>&1
!pip install -q phonemizer torch transformers scipy munch
!pip install -U kokoro-onnx</code>
登录后复制

加载包

<code class="language-python">import numpy as np
from scipy.io.wavfile import write
from IPython.display import display, Audio
from models import build_model
import torch
from models import build_model
from kokoro import generate</code>
登录后复制

运行示例

在测试语音合成之前,让我们运行官方示例。运行以下代码将在几秒钟内生成并播放音频。

<code class="language-python">device = 'cuda' if torch.cuda.is_available() else 'cpu'
MODEL = build_model('kokoro-v0_19.pth', device)
VOICE_NAME = [
    'af', # 默认语音是 Bella 和 Sarah 的 50-50 混合
    'af_bella', 'af_sarah', 'am_adam', 'am_michael',
    'bf_emma', 'bf_isabella', 'bm_george', 'bm_lewis',
    'af_nicole', 'af_sky',
][0]
VOICEPACK = torch.load(f'voices/{VOICE_NAME}.pt', weights_only=True).to(device)
print(f'Loaded voice: {VOICE_NAME}')

text = "How could I know? It's an unanswerable question. Like asking an unborn child if they'll lead a good life. They haven't even been born."
audio, out_ps = generate(MODEL, text, VOICEPACK, lang=VOICE_NAME[0])

display(Audio(data=audio, rate=24000, autoplay=True))
print(out_ps)</code>
登录后复制

语音合成

现在,让我们进入主题并测试语音合成。

定义语音包

  • af:美式英语女声
  • am:美式英语男声
  • bf:英式英语女声
  • bm:英式英语男声
  • 我们现在将加载所有可用的语音包。
<code class="language-python">voicepack_af = torch.load(f'voices/af.pt', weights_only=True).to(device)
voicepack_af_bella = torch.load(f'voices/af_bella.pt', weights_only=True).to(device)
voicepack_af_nicole = torch.load(f'voices/af_nicole.pt', weights_only=True).to(device)
voicepack_af_sarah = torch.load(f'voices/af_sarah.pt', weights_only=True).to(device)
voicepack_af_sky = torch.load(f'voices/af_sky.pt', weights_only=True).to(device)
voicepack_am_adam = torch.load(f'voices/am_adam.pt', weights_only=True).to(device)
voicepack_am_michael = torch.load(f'voices/am_michael.pt', weights_only=True).to(device)
voicepack_bf_emma = torch.load(f'voices/bf_emma.pt', weights_only=True).to(device)
voicepack_bf_isabella = torch.load(f'voices/bf_isabella.pt', weights_only=True).to(device)
voicepack_bm_george = torch.load(f'voices/bm_george.pt', weights_only=True).to(device)
voicepack_bm_lewis = torch.load(f'voices/bm_lewis.pt', weights_only=True).to(device)</code>
登录后复制

使用预定义语音生成文本

为了检查合成语音之间的差异,让我们使用不同的语音包生成音频。我们将使用相同的示例文本,但您可以更改 voicepack_ 变量以使用任何所需的语音包。

<code class="language-python">#  以下代码段与原文相同,只是重复了多次,为了简洁,这里省略了重复的代码块。
#  每个代码块都使用不同的语音包生成音频,并使用 display(Audio(...)) 播放。</code>
登录后复制

语音合成:混合语音

首先,让我们创建一个平均语音,结合两个英式女声 (bf)。

<code class="language-python">bf_average = (voicepack_bf_emma + voicepack_bf_isabella) / 2
audio, out_ps = generate(MODEL, text, bf_average, lang=VOICE_NAME[0])
display(Audio(data=audio, rate=24000, autoplay=True))
print(out_ps)</code>
登录后复制

接下来,让我们合成两个女声和一个男声的组合。

<code class="language-python">weight_1 = 0.25
weight_2 = 0.45
weight_3 = 0.3
weighted_voice = (voicepack_bf_emma * weight_1 +
                  voicepack_bf_isabella * weight_2 +
                  voicepack_bm_lewis * weight_3)
audio, out_ps = generate(MODEL, text, weighted_voice, lang=VOICE_NAME[0])
display(Audio(data=audio, rate=24000, autoplay=True))
print(out_ps)</code>
登录后复制

最后,让我们合成美式和英式男声的混合。

<code class="language-python">m_average = (voicepack_am_michael + voicepack_bm_george) / 2
audio, out_ps = generate(MODEL, text, m_average, lang=VOICE_NAME[0])
display(Audio(data=audio, rate=24000, autoplay=True))
print(out_ps)</code>
登录后复制

我还使用 Gradio 测试了混合语音的效果:(此处应插入Gradio演示的链接或截图)

将此与 Ollama 结合使用可能会产生一些有趣的实验。

This revised output maintains the original meaning and structure while improving the flow and clarity. The repeated code blocks for generating audio with different voice packs have been summarized to avoid redundancy. Remember to replace placeholders like "[此处应插入Hugging Face Spaces链接]" and "(此处应插入Gradio演示的链接或截图)" with the actual links or images.

以上是使用 T4 在 Google Colab 上探索 Kokoro TTS 语音合成的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板