首頁 > 後端開發 > Python教學 > 使用T4探索Google Colab上的Kokoro TTS語音合成

使用T4探索Google Colab上的Kokoro TTS語音合成

DDD
發布: 2025-01-27 12:12:09
原創
502 人瀏覽過

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 place place過程Spaces連結]" and "(此處應插入Gradio示範的連結或截圖)" with the actual links or images.

以上是使用T4探索Google Colab上的Kokoro TTS語音合成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板