Improve: Variation of text-to-speech during testing

This commit is contained in:
tsukumi
2024-12-22 07:17:07 +09:00
parent 405c5deddd
commit 3c218c7087

View File

@@ -4,6 +4,7 @@ import pytest
from scipy.io import wavfile
from style_bert_vits2.constants import BASE_DIR, Languages
from style_bert_vits2.logging import logger
from style_bert_vits2.tts_model import TTSModelHolder
@@ -53,34 +54,42 @@ def synthesize(
# すべてのスタイルに対して音声合成を実行
for style in model_info.styles:
logger.info(f"Testing style: {style}")
# 音声合成を実行
sample_rate, audio_data = model.infer(
"あらゆる現実を、すべて自分のほうへねじ曲げたのだ。",
# 言語 (JP, EN, ZH / JP-Extra モデルの場合は JP のみ)
language=Languages.JP,
# 話者 ID (音声合成モデルに複数の話者が含まれる場合のみ必須、単一話者のみの場合は 0)
speaker_id=0,
# テンポの緩急 (0.0 〜 1.0)
sdp_ratio=0.4,
# スタイル (Neutral, Happy など)
style=style,
# スタイルの強さ (0.0 〜 100.0)
style_weight=2.0,
)
# テストに使用するサンプルテキスト
sample_texts = [
"こんにちは、初めまして。あなたの名前はなんていうの?",
"桜の樹の下には屍体が埋まっている!これは信じていいことなんだよ。",
"あなたがいなくなって、私は一人になっちゃって、泣いちゃいそうなほど悲しい。",
"音声合成は、機械学習を活用して、テキストから人の声を再現する技術です。この技術は、言語の構造を解析し、それに基づいて音声を生成します。",
]
# 音声データを保存
(BASE_DIR / f"tests/wavs/{model_info.name}").mkdir(
exist_ok=True, parents=True
)
wav_file_path = (
BASE_DIR / f"tests/wavs/{model_info.name}/{style}.wav"
)
with open(wav_file_path, "wb") as f:
wavfile.write(f, sample_rate, audio_data)
# 各サンプルテキストに対して音声合成を実行
for i, text in enumerate(sample_texts):
# 音声データが保存されたことを確認
assert wav_file_path.exists()
# 音声合成を実行
sample_rate, audio_data = model.infer(
text,
# 言語 (JP, EN, ZH / JP-Extra モデルの場合は JP のみ)
language=Languages.JP,
# 話者 ID (音声合成モデルに複数の話者が含まれる場合のみ必須、単一話者のみの場合は 0)
speaker_id=0,
# テンポの緩急 (0.0 〜 1.0)
sdp_ratio=0.4,
# スタイル (Neutral, Happy など)
style=style,
# スタイルの強さ (0.0 〜 100.0)
style_weight=2.0,
)
# 音声データを保存
(BASE_DIR / f"tests/wavs/{model_info.name}").mkdir(exist_ok=True, parents=True) # fmt: skip
wav_file_path = BASE_DIR / f"tests/wavs/{model_info.name}/{style}_{i+1:02d}.wav" # fmt: skip
with open(wav_file_path, "wb") as f:
wavfile.write(f, sample_rate, audio_data)
# 音声データが保存されたことを確認
assert wav_file_path.exists()
# モデルをアンロード
model.unload()