Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

追加: デフォルトプリセット機能を削除しプリセット保存先を指定する機能へ変更 #1323

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ COPY --from=download-onnxruntime-env /opt/onnxruntime /opt/onnxruntime
# Add local files
ADD ./voicevox_engine /opt/voicevox_engine/voicevox_engine
ADD ./docs /opt/voicevox_engine/docs
ADD ./run.py ./presets.yaml ./engine_manifest.json /opt/voicevox_engine/
ADD ./run.py ./engine_manifest.json /opt/voicevox_engine/
ADD ./resources /opt/voicevox_engine/resources
ADD ./build_util/generate_licenses.py /opt/voicevox_engine/build_util/
ADD ./build_util/licenses /opt/voicevox_engine/build_util/licenses
Expand Down
5 changes: 2 additions & 3 deletions build_util/make_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def generate_api_docs_html(schema: str) -> str:
core_manager.register_core(CoreAdapter(MockCoreWrapper()), "mock")
tts_engines = TTSEngineManager()
tts_engines.register_engine(MockTTSEngine(), "mock")
preset_path = engine_root() / "presets.yaml"
engine_manifest = load_manifest(engine_manifest_path())
library_manager = LibraryManager(
get_save_dir() / "installed_libraries",
Expand All @@ -61,9 +62,7 @@ def generate_api_docs_html(schema: str) -> str:
tts_engines=tts_engines,
core_manager=core_manager,
setting_loader=SettingHandler(USER_SETTING_PATH),
preset_manager=PresetManager( # FIXME: impl MockPresetManager
preset_path=engine_root() / "presets.yaml",
),
preset_manager=PresetManager(preset_path, make_file_if_not_exist=True),
user_dict=UserDictionary(),
engine_manifest=engine_manifest,
library_manager=library_manager,
Expand Down
12 changes: 0 additions & 12 deletions presets.yaml

This file was deleted.

12 changes: 6 additions & 6 deletions run.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,12 +316,12 @@ def main() -> None:
env_preset_path = Path(env_preset_path_str)
else:
env_preset_path = None
root_preset_path = engine_root() / "presets.yaml"
preset_path = select_first_not_none(
[arg_preset_path, env_preset_path, root_preset_path]
)
# ファイルの存在に関わらず指定されたパスをプリセットファイルとして使用する
preset_manager = PresetManager(preset_path)
preset_path = select_first_not_none_or_none([arg_preset_path, env_preset_path])
if preset_path is not None:
preset_manager = PresetManager(preset_path)
else:
default_preset_path = engine_root() / "presets.yaml"
preset_manager = PresetManager(default_preset_path, make_file_if_not_exist=True)

use_dict = UserDictionary()

Expand Down
1 change: 0 additions & 1 deletion run.spec
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ datas = [
('resources', 'resources'),
('engine_manifest.json', '.'),
('licenses.json', '.'),
('presets.yaml', '.'),
]
datas += collect_data_files('pyopenjtalk')

Expand Down
2 changes: 1 addition & 1 deletion test/benchmark/engine_preparation.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def _generate_engine_fake_server(root_dir: Path) -> TestClient:
)
tts_engines = make_tts_engines_from_cores(core_manager)
setting_loader = SettingHandler(Path("./not_exist.yaml"))
preset_manager = PresetManager(Path("./presets.yaml"))
preset_manager = PresetManager(Path("./presets.yaml"), make_file_if_not_exist=True)
user_dict = UserDictionary()
engine_manifest = load_manifest(engine_manifest_path())
library_manager = LibraryManager(
Expand Down
28 changes: 26 additions & 2 deletions test/e2e/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from typing import Any

import pytest
import yaml
from fastapi import FastAPI
from fastapi.testclient import TestClient

Expand Down Expand Up @@ -35,8 +36,9 @@ def app_params(tmp_path: Path) -> dict[str, Any]:
setting_loader = SettingHandler(tmp_path / "not_exist.yaml")

# テスト用に隔離されたプリセットを生成する
preset_path = Path("./presets.yaml")
preset_manager = PresetManager(_copy_under_dir(preset_path, tmp_path))
preset_path = tmp_path / "presets.yaml"
_generate_preset(preset_path)
preset_manager = PresetManager(preset_path)

# テスト用に隔離されたユーザー辞書を生成する
user_dict = UserDictionary(
Expand Down Expand Up @@ -75,6 +77,28 @@ def client(app: FastAPI) -> TestClient:
return TestClient(app)


def _generate_preset(preset_path: Path) -> None:
"""指定パス下にプリセットファイルを生成する。"""
contents = [
{
"id": 1,
"name": "サンプルプリセット",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 0,
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1,
}
]
with open(preset_path, mode="w", encoding="utf-8") as f:
yaml.safe_dump(contents, f, allow_unicode=True, sort_keys=False)


def _generate_user_dict(dir_path: Path) -> Path:
"""指定されたディレクトリ下にユーザー辞書ファイルを生成し、生成されたファイルのパスを返す。"""
contents = {
Expand Down
16 changes: 14 additions & 2 deletions voicevox_engine/preset/preset_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,24 @@ class PresetManager:
YAMLファイルをSSoTとする簡易データベース方式により、プリセットの管理をおこなう。
"""

def __init__(self, preset_path: Path):
"""プリセットの設定ファイルへのパスからプリセットマネージャーを生成する"""
def __init__(self, preset_path: Path, make_file_if_not_exist: bool = False):
"""
プリセットマネージャーを生成する。

Parameters
----------
preset_path :
プリセットの設定ファイルへのパス
make_file_if_not_exist :
パスが空のとき、プリセットファイルを自動生成するか否か
"""
self.presets: list[Preset] = [] # 全プリセットのキャッシュ
self.last_modified_time = 0.0
self.preset_path = preset_path

if not self.preset_path.exists() and make_file_if_not_exist:
self.preset_path.write_text("[]")

def _refresh_cache(self) -> None:
"""プリセットの設定ファイルの最新状態をキャッシュへ反映する"""

Expand Down