From d49b150bd1b7ba06f81b9076b59bb8e07db1a550 Mon Sep 17 00:00:00 2001 From: Ryo Yamashita Date: Thu, 16 Nov 2023 00:45:28 +0900 Subject: [PATCH] =?UTF-8?q?Python=20API=E3=81=AB`NewType`=E3=82=92?= =?UTF-8?q?=E5=B0=8E=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/voicevox_core/__init__.py | 6 ++++ .../python/voicevox_core/_models.py | 33 +++++++++++++++++-- .../python/voicevox_core/_rust.pyi | 28 ++++++++-------- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/crates/voicevox_core_python_api/python/voicevox_core/__init__.py b/crates/voicevox_core_python_api/python/voicevox_core/__init__.py index abcd763fe..fc09808bd 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/__init__.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/__init__.py @@ -7,9 +7,12 @@ AudioQuery, Mora, SpeakerMeta, + StyleId, + StyleVersion, SupportedDevices, UserDictWord, UserDictWordType, + VoiceModelId, ) from ._rust import ( # noqa: F401 ExtractFullContextLabelError, @@ -61,7 +64,9 @@ "SaveUserDictError", "SpeakerMeta", "StyleAlreadyLoadedError", + "StyleId", "StyleNotFoundError", + "StyleVersion", "SupportedDevices", "Synthesizer", "VoiceModel", @@ -70,5 +75,6 @@ "UserDict", "UserDictWord", "UserDictWordType", + "VoiceModelId", "WordNotFoundError", ] diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_models.py b/crates/voicevox_core_python_api/python/voicevox_core/_models.py index c1cd9ccca..f93119b43 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -1,11 +1,38 @@ import dataclasses from enum import Enum -from typing import List, Optional +from typing import List, NewType, Optional import pydantic from ._rust import _to_zenkaku, _validate_pronunciation +StyleId = NewType("StyleId", int) +""" +スタイルID。 + +Parameters +---------- +x : int +""" + +StyleVersion = NewType("StyleVersion", str) +""" +スタイルのバージョン。 + +Parameters +---------- +x : str +""" + +VoiceModelId = NewType("VoiceModelId", str) +""" +音声モデルID。 + +Parameters +---------- +x : str +""" + @pydantic.dataclasses.dataclass class StyleMeta: @@ -14,7 +41,7 @@ class StyleMeta: name: str """スタイル名。""" - id: int + id: StyleId """スタイルID。""" @@ -31,7 +58,7 @@ class SpeakerMeta: speaker_uuid: str """話者のバージョン。""" - version: str + version: StyleVersion """話者のUUID。""" diff --git a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi index 1560a5cde..5288fcbde 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -8,9 +8,11 @@ if TYPE_CHECKING: AccentPhrase, AudioQuery, SpeakerMeta, + StyleId, SupportedDevices, UserDict, UserDictWord, + VoiceModelId, ) __version__: str @@ -43,7 +45,7 @@ class VoiceModel: """ ... @property - def id(self) -> str: + def id(self) -> VoiceModelId: """ID。""" ... @property @@ -118,7 +120,7 @@ class Synthesizer: 読み込むモデルのスタイルID。 """ ... - def unload_voice_model(self, voice_model_id: str) -> None: + def unload_voice_model(self, voice_model_id: Union[VoiceModelId, str]) -> None: """ 音声モデルの読み込みを解除する。 @@ -128,7 +130,7 @@ class Synthesizer: 音声モデルID。 """ ... - def is_loaded_voice_model(self, voice_model_id: str) -> bool: + def is_loaded_voice_model(self, voice_model_id: Union[VoiceModelId, str]) -> bool: """ 指定したvoice_model_idのモデルが読み込まれているか判定する。 @@ -145,7 +147,7 @@ class Synthesizer: async def audio_query_from_kana( self, kana: str, - style_id: int, + style_id: Union[StyleId, int], ) -> AudioQuery: """ AquesTalk風記法から :class:`AudioQuery` を生成する。 @@ -165,7 +167,7 @@ class Synthesizer: async def audio_query( self, text: str, - style_id: int, + style_id: Union[StyleId, int], ) -> AudioQuery: """ 日本語のテキストから :class:`AudioQuery` を生成する。 @@ -185,7 +187,7 @@ class Synthesizer: async def create_accent_phrases_from_kana( self, kana: str, - style_id: int, + style_id: Union[StyleId, int], ) -> List[AccentPhrase]: """ AquesTalk風記法からAccentPhrase(アクセント句)の配列を生成する。 @@ -205,7 +207,7 @@ class Synthesizer: async def create_accent_phrases( self, text: str, - style_id: int, + style_id: Union[StyleId, int], ) -> List[AccentPhrase]: """ 日本語のテキストからAccentPhrase(アクセント句)の配列を生成する。 @@ -225,7 +227,7 @@ class Synthesizer: async def replace_mora_data( self, accent_phrases: List[AccentPhrase], - style_id: int, + style_id: Union[StyleId, int], ) -> List[AccentPhrase]: """ アクセント句の音高・音素長を変更した新しいアクセント句の配列を生成する。 @@ -247,7 +249,7 @@ class Synthesizer: async def replace_phoneme_length( self, accent_phrases: List[AccentPhrase], - style_id: int, + style_id: Union[StyleId, int], ) -> List[AccentPhrase]: """ アクセント句の音素長を変更した新しいアクセント句の配列を生成する。 @@ -265,7 +267,7 @@ class Synthesizer: async def replace_mora_pitch( self, accent_phrases: List[AccentPhrase], - style_id: int, + style_id: Union[StyleId, int], ) -> List[AccentPhrase]: """ アクセント句の音高を変更した新しいアクセント句の配列を生成する。 @@ -283,7 +285,7 @@ class Synthesizer: async def synthesis( self, audio_query: AudioQuery, - style_id: int, + style_id: Union[StyleId, int], enable_interrogative_upspeak: bool = True, ) -> bytes: """ @@ -306,7 +308,7 @@ class Synthesizer: async def tts_from_kana( self, kana: str, - style_id: int, + style_id: Union[StyleId, int], enable_interrogative_upspeak: bool = True, ) -> bytes: """ @@ -325,7 +327,7 @@ class Synthesizer: async def tts( self, text: str, - style_id: int, + style_id: Union[StyleId, int], enable_interrogative_upspeak: bool = True, ) -> bytes: """