Rumah >pembangunan bahagian belakang >Tutorial Python >Meneroka Kokoro TTS Voice Synthesis di Google Colab dengan T4

Meneroka Kokoro TTS Voice Synthesis di Google Colab dengan T4

DDD
DDDasal
2025-01-27 12:12:09475semak imbas

Exploring Kokoro TTS Voice Synthesis on Google Colab with T4

Kokoro-82M: Meneroka Model Teks-ke-Pertuturan (TTS) Berprestasi Tinggi

Kokoro-82M ialah model TTS berprestasi tinggi yang mampu menghasilkan audio berkualiti tinggi. Ia menyokong penukaran teks-ke-pertuturan yang mudah dan boleh melakukan sintesis pertuturan dengan mudah dengan menggunakan pemberat pada fail audio.

Kokoro-82M pada Muka Berpeluk

Bermula dari versi 0.23, Kokoro-82M turut menyokong bahasa Jepun. Anda boleh mencubanya dengan mudah melalui pautan berikut:

[Kokoro TTS pada Memeluk Face Spaces](Memeluk Face Spaces pautan hendaklah dimasukkan di sini)

Namun, intonasi Jepun masih agak tidak wajar.

Dalam tutorial ini kami akan menggunakan kokoro-onnx, pelaksanaan TTS yang memanfaatkan Kokoro dan masa jalan ONNX. Kami akan menggunakan versi 0.19 (versi stabil), yang hanya menyokong sintesis pertuturan untuk Bahasa Inggeris Amerika dan Inggeris Inggeris.

Seperti tajuknya, kod akan dilaksanakan dalam Google Colab.

Pasang 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>

Memuatkan pakej

<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>

Jalankan contoh

Sebelum menguji sintesis pertuturan, mari jalankan contoh rasmi. Menjalankan kod berikut akan menjana dan memainkan audio dalam beberapa saat.

<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>

Sintesis pertuturan

Sekarang, mari kita masuk ke topik dan menguji sintesis pertuturan.

Tentukan pakej suara

  • af: Suara wanita Inggeris Amerika
  • pagi: Suara lelaki Inggeris Amerika
  • bf: Suara perempuan Inggeris Inggeris
  • bm: Suara lelaki Inggeris Inggeris
  • Kami kini akan memuatkan semua pek suara yang tersedia.
<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>

Jana teks menggunakan pertuturan yang dipratentukan

Untuk mengkaji perbezaan antara pertuturan yang disintesis, mari jana audio menggunakan paket pertuturan yang berbeza. Kami akan menggunakan teks contoh yang sama, tetapi anda boleh menukar pembolehubah voicepack_ untuk menggunakan sebarang pek pertuturan yang diingini.

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

Sintesis Pertuturan: Pertuturan Campuran

Mula-mula, mari cipta suara biasa, menggabungkan dua suara wanita British (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>

Seterusnya, mari kita sintesiskan gabungan dua suara perempuan dan satu suara lelaki.

<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>

Akhir sekali, mari kita sintesiskan gabungan vokal lelaki Amerika dan British.

<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>

Saya juga menggunakan Gradio untuk menguji kesan campuran suara: (Pautan atau tangkapan skrin demo Gradio hendaklah dimasukkan di sini)

Menggabungkan ini dengan Ollama boleh membawa kepada beberapa percubaan yang menarik.

Output yang disemak ini mengekalkan makna dan struktur asal sambil meningkatkan aliran dan kejelasan blok kod berulang untuk menjana audio dengan pek suara yang berbeza telah diringkaskan untuk mengelakkan lebihan Pautan Spaces]" dan "(Pautan atau tangkapan skrin demo Gradio hendaklah dimasukkan di sini)" dengan pautan atau imej sebenar.

Atas ialah kandungan terperinci Meneroka Kokoro TTS Voice Synthesis di Google Colab dengan T4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn