Add: test code for style-bert-vits2 as a library
By executing "hatch run test:test", you can check whether the test passes in all Python 3.9 to 3.12 environments.
This commit is contained in:
@@ -52,24 +52,28 @@ Source = "https://github.com/litagin02/Style-Bert-VITS2"
|
|||||||
[tool.hatch.version]
|
[tool.hatch.version]
|
||||||
path = "style_bert_vits2/constants.py"
|
path = "style_bert_vits2/constants.py"
|
||||||
|
|
||||||
[tool.hatch.envs.default]
|
[tool.hatch.envs.test]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"coverage[toml]>=6.5",
|
"coverage[toml]>=6.5",
|
||||||
"pytest",
|
"pytest",
|
||||||
]
|
]
|
||||||
[tool.hatch.envs.default.scripts]
|
[tool.hatch.envs.test.scripts]
|
||||||
|
# Usage: `hatch run test:test`
|
||||||
test = "pytest {args:tests}"
|
test = "pytest {args:tests}"
|
||||||
|
# Usage: `hatch run test:coverage`
|
||||||
test-cov = "coverage run -m pytest {args:tests}"
|
test-cov = "coverage run -m pytest {args:tests}"
|
||||||
|
# Usage: `hatch run test:cov-report`
|
||||||
cov-report = [
|
cov-report = [
|
||||||
"- coverage combine",
|
"- coverage combine",
|
||||||
"coverage report",
|
"coverage report",
|
||||||
]
|
]
|
||||||
|
# Usage: `hatch run test:cov`
|
||||||
cov = [
|
cov = [
|
||||||
"test-cov",
|
"test-cov",
|
||||||
"cov-report",
|
"cov-report",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[tool.hatch.envs.all.matrix]]
|
[[tool.hatch.envs.test.matrix]]
|
||||||
python = ["3.9", "3.10", "3.11", "3.12"]
|
python = ["3.9", "3.10", "3.11", "3.12"]
|
||||||
|
|
||||||
[tool.coverage.run]
|
[tool.coverage.run]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import warnings
|
import warnings
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Optional, Union
|
from typing import Any, Optional, Union, TypedDict
|
||||||
|
|
||||||
import gradio as gr
|
import gradio as gr
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@@ -263,6 +263,13 @@ class TTSModel:
|
|||||||
return (self.hyper_parameters.data.sampling_rate, audio)
|
return (self.hyper_parameters.data.sampling_rate, audio)
|
||||||
|
|
||||||
|
|
||||||
|
class TTSModelInfo(TypedDict):
|
||||||
|
name: str
|
||||||
|
files: list[str]
|
||||||
|
styles: list[str]
|
||||||
|
speakers: list[str]
|
||||||
|
|
||||||
|
|
||||||
class TTSModelHolder:
|
class TTSModelHolder:
|
||||||
"""
|
"""
|
||||||
Style-Bert-Vits2 の音声合成モデルを管理するクラス。
|
Style-Bert-Vits2 の音声合成モデルを管理するクラス。
|
||||||
@@ -297,8 +304,7 @@ class TTSModelHolder:
|
|||||||
self.model_files_dict: dict[str, list[Path]] = {}
|
self.model_files_dict: dict[str, list[Path]] = {}
|
||||||
self.current_model: Optional[TTSModel] = None
|
self.current_model: Optional[TTSModel] = None
|
||||||
self.model_names: list[str] = []
|
self.model_names: list[str] = []
|
||||||
self.models: list[TTSModel] = []
|
self.models_info: list[TTSModelInfo] = []
|
||||||
self.models_info: list[dict[str, Union[str, list[str]]]] = []
|
|
||||||
self.refresh()
|
self.refresh()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
1
tests/.gitignore
vendored
Normal file
1
tests/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.wav
|
||||||
39
tests/test_main.py
Normal file
39
tests/test_main.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import pytest
|
||||||
|
from scipy.io import wavfile
|
||||||
|
|
||||||
|
from style_bert_vits2.constants import BASE_DIR
|
||||||
|
from style_bert_vits2.tts_model import TTSModelHolder
|
||||||
|
|
||||||
|
|
||||||
|
def synthesize(device: str = 'cpu'):
|
||||||
|
|
||||||
|
# モデル一覧を取得
|
||||||
|
model_holder = TTSModelHolder(BASE_DIR / 'model_assets', device)
|
||||||
|
|
||||||
|
# モデルが存在する場合、音声合成を実行
|
||||||
|
if len(model_holder.models_info) > 0:
|
||||||
|
|
||||||
|
# jvnv-F1-jp モデルを探す
|
||||||
|
for model_info in model_holder.models_info:
|
||||||
|
if model_info['name'] == 'jvnv-F1-jp':
|
||||||
|
|
||||||
|
# 音声合成を実行
|
||||||
|
model = model_holder.get_model(model_info['name'], model_info['files'][0])
|
||||||
|
model.load()
|
||||||
|
sample_rate, audio_data = model.infer("あらゆる現実を、すべて自分のほうへねじ曲げたのだ。")
|
||||||
|
|
||||||
|
# 音声データを保存
|
||||||
|
with open(BASE_DIR / 'tests/test.wav', mode='wb') as f:
|
||||||
|
wavfile.write(f, sample_rate, audio_data)
|
||||||
|
else:
|
||||||
|
pytest.skip("音声合成モデルが見つかりませんでした。")
|
||||||
|
|
||||||
|
|
||||||
|
def test_synthesize_cpu():
|
||||||
|
synthesize(device='cpu')
|
||||||
|
assert (BASE_DIR / 'tests/test.wav').exists()
|
||||||
|
|
||||||
|
|
||||||
|
def test_synthesize_cuda():
|
||||||
|
synthesize(device='cuda')
|
||||||
|
assert (BASE_DIR / 'tests/test.wav').exists()
|
||||||
Reference in New Issue
Block a user