>백엔드 개발 >파이썬 튜토리얼 >T4와 함께 Google Colab에서 Kokoro TTS 음성 합성 탐색

T4와 함께 Google Colab에서 Kokoro TTS 음성 합성 탐색

DDD
DDD원래의
2025-01-27 12:12:09504검색

Exploring Kokoro TTS Voice Synthesis on Google Colab with T4

Kokoro-82M: 고성능 TTS(텍스트 음성 변환) 모델 탐색

Kokoro-82M은 고음질 오디오 재생이 가능한 고성능 TTS 모델입니다. 간단한 텍스트-음성 변환을 지원하며 오디오 파일에 가중치를 적용하여 음성 합성을 쉽게 수행할 수 있습니다.

껴안는 얼굴의 코코로-82M

Kokoro-82M 버전 0.23부터 일본어도 지원합니다. 다음 링크를 통해 쉽게 시험해 볼 수 있습니다:

[Hugging Face Spaces의 Kokoro TTS](Hugging Face Spaces 링크가 여기에 삽입되어야 함)

그러나 일본어 억양은 아직 조금 부자연스럽습니다.

이 튜토리얼에서는 Kokoro와 ONNX 런타임을 활용하는 TTS 구현인 kokoro-onnx를 사용합니다. 우리는 미국 영어와 영국 영어의 음성 합성만 지원하는 버전 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>

다음으로 여성 목소리 2명과 남성 목소리 1명의 조합을 합성해 보겠습니다.

<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와 결합하면 흥미로운 실험으로 이어질 수 있습니다.

이 수정된 출력은 흐름과 명확성을 향상시키면서 중복을 피하기 위해 요약되었습니다. "[Hugging Face는 여기에 삽입되어야 합니다. 스페이스 링크]' 및 '(Gradio 데모의 링크 또는 스크린샷이 여기에 삽입되어야 함)'를 실제 링크나 이미지로 대체합니다.

위 내용은 T4와 함께 Google Colab에서 Kokoro TTS 음성 합성 탐색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.