From 27aa8402e10a84ffa64aeb05013f1a365b1b1248 Mon Sep 17 00:00:00 2001 From: Nanashi Date: Thu, 24 Aug 2023 00:39:24 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20Python=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E5=91=A8=E3=82=8A=E3=81=AE=E8=89=B2?= =?UTF-8?q?=E3=80=85=E3=82=92=E4=BF=AE=E6=AD=A3=20(#570)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ryo Yamashita --- .../python/voicevox_core/_models.py | 40 +++- .../python/voicevox_core/_rust.pyi | 212 ++++++++++++------ docs/apis/python_api/conf.py | 6 +- 3 files changed, 188 insertions(+), 70 deletions(-) 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 6dfd1aa37..b559100be 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_models.py +++ b/crates/voicevox_core_python_api/python/voicevox_core/_models.py @@ -166,28 +166,64 @@ class AudioQuery: class UserDictWordType(str, Enum): + """ユーザー辞書の単語の品詞。""" + PROPER_NOUN = "PROPER_NOUN" + """固有名詞。""" + COMMON_NOUN = "COMMON_NOUN" + """一般名詞。""" + VERB = "VERB" + """動詞。""" + ADJECTIVE = "ADJECTIVE" + """形容詞。""" + SUFFIX = "SUFFIX" + """語尾。""" @pydantic.dataclasses.dataclass class UserDictWord: + """ユーザー辞書の単語。""" + surface: str + """言葉の表層形。""" + pronunciation: str + """ + 言葉の発音。 + + カタカナで表記する。 + """ + accent_type: int = dataclasses.field(default=0) + """ + アクセント型。 + + 音が下がる場所を指す。 + """ + word_type: UserDictWordType = dataclasses.field( default=UserDictWordType.COMMON_NOUN ) + """品詞。""" + priority: int = dataclasses.field(default=5) + """ + 単語の優先度。 + + 0から10までの整数。 + 数字が大きいほど優先度が高くなる。 + 1から9までの値を指定することを推奨する。 + """ @pydantic.validator("pronunciation") - def validate_pronunciation(cls, v): + def _validate_pronunciation(cls, v): _validate_pronunciation(v) return v @pydantic.validator("surface") - def validate_surface(cls, v): + def _validate_surface(cls, v): return _to_zenkaku(v) 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 66625d230..fcc726b25 100644 --- a/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi +++ b/crates/voicevox_core_python_api/python/voicevox_core/_rust.pyi @@ -1,18 +1,20 @@ from pathlib import Path -from typing import Dict, Final, List, Literal, Union +from typing import Dict, Final, List, Literal, Union, TYPE_CHECKING from uuid import UUID import numpy as np from numpy.typing import NDArray -from voicevox_core import ( - AccelerationMode, - AccentPhrase, - AudioQuery, - SpeakerMeta, - SupportedDevices, - UserDict, - UserDictWord, -) + +if TYPE_CHECKING: + from voicevox_core import ( + AccelerationMode, + AccentPhrase, + AudioQuery, + SpeakerMeta, + SupportedDevices, + UserDict, + UserDictWord, + ) __version__: str @@ -29,14 +31,18 @@ def supported_devices() -> SupportedDevices: ... class VoiceModel: - """音声モデル。""" + """ + 音声モデル。""" @staticmethod - async def from_path(path: Union[Path, str]) -> "VoiceModel": + async def from_path(path: Union[Path, str]) -> VoiceModel: """ VVMファイルから ``VoiceModel`` を生成する。 - :param path: VVMファイルへのパス。 + Parameters + ---------- + path + VVMファイルへのパス。 """ ... @property @@ -52,12 +58,16 @@ class OpenJtalk: """ テキスト解析器としてのOpen JTalk。 - :param open_jtalk_dict_dir: open_jtalkの辞書ディレクトリ。 + Parameters + ---------- + open_jtalk_dict_dir + Open JTalkの辞書ディレクトリ。 """ def __init__(self, open_jtalk_dict_dir: Union[Path, str]) -> None: ... def use_user_dict(self, user_dict: UserDict) -> None: - """ユーザー辞書を設定する。 + """ + ユーザー辞書を設定する。 この関数を呼び出した後にユーザー辞書を変更した場合は、再度この関数を呼ぶ必要がある。 @@ -83,10 +93,16 @@ class Synthesizer: """ :class:`Synthesizer` を生成する。 - :param open_jtalk: Open JTalk。 - :param acceleration_mode: ハードウェアアクセラレーションモード。 - :param cpu_num_threads: CPU利用数を指定。0を指定すると環境に合わせたCPUが利用される。 - :param load_all_models: 全てのモデルを読み込む。 + Parameters + ---------- + open_jtalk + Open JTalk。 + acceleration_mode + ハードウェアアクセラレーションモード。 + cpu_num_threads + CPU利用数を指定。0を指定すると環境に合わせたCPUが利用される。 + load_all_models + 全てのモデルを読み込む。 """ ... def __repr__(self) -> str: ... @@ -104,20 +120,34 @@ class Synthesizer: """ モデルを読み込む。 - :param style_id: 読み込むモデルのスタイルID。 + Parameters + ---------- + style_id + 読み込むモデルのスタイルID。 """ ... def unload_voice_model(self, voice_model_id: str) -> None: - """音声モデルの読み込みを解除する。 + """ + 音声モデルの読み込みを解除する。 - :param voice_model_id: 音声モデルID。 + Parameters + ---------- + voice_model_id + 音声モデルID。 """ ... def is_loaded_voice_model(self, voice_model_id: str) -> bool: """ 指定したvoice_model_idのモデルが読み込まれているか判定する。 - :returns: モデルが読み込まれているかどうか。 + Parameters + ---------- + voice_model_id + 音声モデルID。 + + Returns + ------- + モデルが読み込まれているかどうか。 """ ... async def audio_query( @@ -129,11 +159,18 @@ class Synthesizer: """ :class:`AudioQuery` を生成する。 - :param text: テキスト。文字コードはUTF-8。 - :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk風記法として解釈する。 + Parameters + ---------- + text + テキスト。文字コードはUTF-8。 + style_id + スタイルID。 + kana + ``text`` をAquesTalk風記法として解釈するかどうか。 - :returns: 話者とテキストから生成された :class:`AudioQuery` 。 + Returns + ------- + 話者とテキストから生成された :class:`AudioQuery` 。 """ ... async def create_accent_phrases( @@ -143,13 +180,20 @@ class Synthesizer: kana: bool = False, ) -> List[AccentPhrase]: """ - AccentPhrase (アクセント句)の配列を生成する。 + AccentPhrase(アクセント句)の配列を生成する。 - :param text: UTF-8の日本語テキストまたはAquesTalk風記法。 - :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk風記法として解釈する。 + Parameters + ---------- + text + UTF-8の日本語テキストまたはAquesTalk風記法。 + style_id + スタイルID。 + kana + ``text`` をAquesTalk風記法として解釈するかどうか。 - :returns: :class:`AccentPhrase` の配列。 + Returns + ------- + :class:`AccentPhrase` の配列。 """ ... async def replace_mora_data( @@ -157,10 +201,21 @@ class Synthesizer: accent_phrases: List[AccentPhrase], style_id: int, ) -> List[AccentPhrase]: - """アクセント句の音高・音素長を変更する。 + """ + アクセント句の音高・音素長を変更した新しいアクセント句の配列を生成する。 + + 元のアクセント句の音高・音素長は変更されない。 - :param accent_phrases: 変更元のアクセント句。 - :param style_id: スタイルID。 + Parameters + ---------- + accent_phrases: + 変更元のアクセント句。 + style_id: + スタイルID。 + + Returns + ------- + 新しいアクセント句の配列。 """ ... async def replace_phoneme_length( @@ -169,10 +224,16 @@ class Synthesizer: style_id: int, ) -> List[AccentPhrase]: """ - アクセント句の音素長を変更する。 + アクセント句の音素長を変更した新しいアクセント句の配列を生成する。 + + 元のアクセント句の音素長は変更されない。 - :param accent_phrases: 変更元のアクセント句。 - :param style_id: スタイルID。 + Parameters + ---------- + accent_phrases + 変更元のアクセント句。 + style_id + スタイルID。 """ ... async def replace_mora_pitch( @@ -181,10 +242,16 @@ class Synthesizer: style_id: int, ) -> List[AccentPhrase]: """ - アクセント句の音高を変更する。 + アクセント句の音高を変更した新しいアクセント句の配列を生成する。 + + 元のアクセント句の音高は変更されない。 - :param accent_phrases: 変更元のアクセント句。 - :param style_id: スタイルID。 + Parameters + ---------- + accent_phrases + 変更元のアクセント句。 + style_id + スタイルID。 """ ... async def synthesis( @@ -196,11 +263,18 @@ class Synthesizer: """ :class:`AudioQuery` から音声合成する。 - :param audio_query: :class:`AudioQuery` 。 - :param style_id: スタイルID。 - :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 + Parameters + ---------- + audio_query + :class:`AudioQuery` 。 + style_id + スタイルID。 + enable_interrogative_upspeak + 疑問文の調整を有効にするかどうか。 - :returns: WAVデータ。 + Returns + ------- + WAVデータ。 """ ... async def tts( @@ -213,29 +287,32 @@ class Synthesizer: """ テキスト音声合成を実行する。 - :param text: UTF-8の日本語テキストまたはAquesTalk風記法。 - :param style_id: スタイルID。 - :param kana: ``text`` をAquesTalk風記法として解釈する。 - :param enable_interrogative_upspeak: 疑問文の調整を有効にする。 + Parameters + ---------- + text + UTF-8の日本語テキストまたはAquesTalk風記法。 + style_id + スタイルID。 + kana + ``text`` をAquesTalk風記法として解釈するかどうか。 + enable_interrogative_upspeak + 疑問文の調整を有効にするかどうか。 - :returns: WAVデータ。 + Returns + ------- + WAVデータ。 """ ... def close(self) -> None: ... class UserDict: - """ユーザー辞書。 - - Attributes - ---------- - words - エントリーのリスト。 - """ + """ユーザー辞書。""" - words: Dict[UUID, UserDictWord] - def __init__(self) -> None: - """ユーザー辞書をまたは新規作成する。""" + @property + def words(self) -> Dict[UUID, UserDictWord]: + """このオプジェクトの :class:`dict` としての表現。""" ... + def __init__(self) -> None: ... def load(self, path: str) -> None: """ファイルに保存されたユーザー辞書を読み込む。 @@ -246,7 +323,8 @@ class UserDict: """ ... def save(self, path: str) -> None: - """ユーザー辞書をファイルに保存する。 + """ + ユーザー辞書をファイルに保存する。 Parameters ---------- @@ -255,7 +333,8 @@ class UserDict: """ ... def add_word(self, word: UserDictWord) -> UUID: - """単語を追加する。 + """ + 単語を追加する。 Parameters ---------- @@ -268,7 +347,8 @@ class UserDict: """ ... def update_word(self, word_uuid: UUID, word: UserDictWord) -> None: - """単語を更新する。 + """ + 単語を更新する。 Parameters ---------- @@ -279,7 +359,8 @@ class UserDict: """ ... def remove_word(self, word_uuid: UUID) -> None: - """単語を削除する。 + """ + 単語を削除する。 Parameters ---------- @@ -288,7 +369,8 @@ class UserDict: """ ... def import_dict(self, other: UserDict) -> None: - """ユーザー辞書をインポートする。 + """ + ユーザー辞書をインポートする。 Parameters ---------- diff --git a/docs/apis/python_api/conf.py b/docs/apis/python_api/conf.py index a426edf64..39f7f8177 100644 --- a/docs/apis/python_api/conf.py +++ b/docs/apis/python_api/conf.py @@ -6,7 +6,7 @@ # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -project = 'voicevox_core_python_api' +project = "voicevox_core_python_api" # copyright = '2022, _' # author = '_' # release = '_' @@ -16,10 +16,11 @@ autodoc_docstring_signature = True -extensions = ["autoapi.extension"] +extensions = ["autoapi.extension", "sphinx.ext.napoleon"] autoapi_type = "python" autoapi_dirs = ["../../../crates/voicevox_core_python_api/python"] +autoapi_ignore = ["*test*"] autoapi_options = [ "members", "undoc-members", @@ -33,7 +34,6 @@ exclude_patterns = [] - # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output