From c5a3551bc23f52d215917aa9c7780baa6d19caf0 Mon Sep 17 00:00:00 2001 From: sabonerune <102559104+sabonerune@users.noreply.github.com> Date: Wed, 26 Jun 2024 19:55:13 +0900 Subject: [PATCH 1/2] =?UTF-8?q?ENH:=20OpenAPI=E3=81=AE=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E6=94=B9=E8=89=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\343\202\222\347\242\272\350\252\215.json" | 440 +++++++++++------- voicevox_engine/app/routers/engine_info.py | 6 +- voicevox_engine/app/routers/tts_pipeline.py | 8 +- voicevox_engine/engine_manifest.py | 66 +-- voicevox_engine/library/model.py | 34 +- voicevox_engine/metas/Metas.py | 38 +- voicevox_engine/model.py | 24 +- voicevox_engine/morphing/model.py | 4 +- voicevox_engine/preset/model.py | 26 +- voicevox_engine/tts_pipeline/model.py | 46 +- voicevox_engine/user_dict/model.py | 30 +- 11 files changed, 431 insertions(+), 291 deletions(-) diff --git "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" index affde042e..53a41ca53 100644 --- "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" +++ "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" @@ -5,19 +5,22 @@ "description": "アクセント句ごとの情報", "properties": { "accent": { - "title": "アクセント箇所", + "description": "アクセント箇所", + "title": "Accent", "type": "integer" }, "is_interrogative": { "default": false, - "title": "疑問系かどうか", + "description": "疑問系かどうか", + "title": "Is Interrogative", "type": "boolean" }, "moras": { + "description": "モーラのリスト", "items": { "$ref": "#/components/schemas/Mora" }, - "title": "モーラのリスト", + "title": "Moras", "type": "array" }, "pause_mora": { @@ -26,7 +29,8 @@ "$ref": "#/components/schemas/Mora" } ], - "title": "後ろに無音を付けるかどうか" + "description": "後ろに無音を付けるかどうか", + "title": "Pause Mora" } }, "required": [ @@ -40,26 +44,31 @@ "description": "音声合成用のクエリ", "properties": { "accent_phrases": { + "description": "アクセント句のリスト", "items": { "$ref": "#/components/schemas/AccentPhrase" }, - "title": "アクセント句のリスト", + "title": "Accent Phrases", "type": "array" }, "intonationScale": { - "title": "全体の抑揚", + "description": "全体の抑揚", + "title": "Intonationscale", "type": "number" }, "kana": { - "title": "[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される", + "description": "[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される", + "title": "Kana", "type": "string" }, "outputSamplingRate": { - "title": "音声データの出力サンプリングレート", + "description": "音声データの出力サンプリングレート", + "title": "Outputsamplingrate", "type": "integer" }, "outputStereo": { - "title": "音声データをステレオ出力するか否か", + "description": "音声データをステレオ出力するか否か", + "title": "Outputstereo", "type": "boolean" }, "pauseLength": { @@ -71,31 +80,38 @@ "type": "null" } ], - "title": "句読点などの無音時間。nullのときは無視される。デフォルト値はnull" + "description": "句読点などの無音時間。nullのときは無視される。デフォルト値はnull", + "title": "Pauselength" }, "pauseLengthScale": { "default": 1, - "title": "句読点などの無音時間(倍率)。デフォルト値は1", + "description": "句読点などの無音時間(倍率)。デフォルト値は1", + "title": "Pauselengthscale", "type": "number" }, "pitchScale": { - "title": "全体の音高", + "description": "全体の音高", + "title": "Pitchscale", "type": "number" }, "postPhonemeLength": { - "title": "音声の後の無音時間", + "description": "音声の後の無音時間", + "title": "Postphonemelength", "type": "number" }, "prePhonemeLength": { - "title": "音声の前の無音時間", + "description": "音声の前の無音時間", + "title": "Prephonemelength", "type": "number" }, "speedScale": { - "title": "全体の話速", + "description": "全体の話速", + "title": "Speedscale", "type": "number" }, "volumeScale": { - "title": "全体の音量", + "description": "全体の音量", + "title": "Volumescale", "type": "number" } }, @@ -117,30 +133,36 @@ "description": "音声ライブラリの情報", "properties": { "bytes": { - "title": "音声ライブラリのバイト数", + "description": "音声ライブラリのバイト数", + "title": "Bytes", "type": "integer" }, "download_url": { - "title": "音声ライブラリのダウンロードURL", + "description": "音声ライブラリのダウンロードURL", + "title": "Download Url", "type": "string" }, "name": { - "title": "音声ライブラリの名前", + "description": "音声ライブラリの名前", + "title": "Name", "type": "string" }, "speakers": { + "description": "音声ライブラリに含まれる話者のリスト", "items": { "$ref": "#/components/schemas/LibrarySpeaker" }, - "title": "音声ライブラリに含まれる話者のリスト", + "title": "Speakers", "type": "array" }, "uuid": { - "title": "音声ライブラリのUUID", + "description": "音声ライブラリのUUID", + "title": "Uuid", "type": "string" }, "version": { - "title": "音声ライブラリのバージョン", + "description": "音声ライブラリのバージョン", + "title": "Version", "type": "string" } }, @@ -200,30 +222,36 @@ "description": "ダウンロード可能な音声ライブラリの情報", "properties": { "bytes": { - "title": "音声ライブラリのバイト数", + "description": "音声ライブラリのバイト数", + "title": "Bytes", "type": "integer" }, "download_url": { - "title": "音声ライブラリのダウンロードURL", + "description": "音声ライブラリのダウンロードURL", + "title": "Download Url", "type": "string" }, "name": { - "title": "音声ライブラリの名前", + "description": "音声ライブラリの名前", + "title": "Name", "type": "string" }, "speakers": { + "description": "音声ライブラリに含まれる話者のリスト", "items": { "$ref": "#/components/schemas/LibrarySpeaker" }, - "title": "音声ライブラリに含まれる話者のリスト", + "title": "Speakers", "type": "array" }, "uuid": { - "title": "音声ライブラリのUUID", + "description": "音声ライブラリのUUID", + "title": "Uuid", "type": "string" }, "version": { - "title": "音声ライブラリのバージョン", + "description": "音声ライブラリのバージョン", + "title": "Version", "type": "string" } }, @@ -242,34 +270,41 @@ "description": "エンジン自体に関する情報", "properties": { "brand_name": { - "title": "ブランド名", + "description": "ブランド名", + "title": "Brand Name", "type": "string" }, "default_sampling_rate": { - "title": "デフォルトのサンプリング周波数", + "description": "デフォルトのサンプリング周波数", + "title": "Default Sampling Rate", "type": "integer" }, "dependency_licenses": { + "description": "依存関係のライセンス情報", "items": { "$ref": "#/components/schemas/LicenseInfo" }, - "title": "依存関係のライセンス情報", + "title": "Dependency Licenses", "type": "array" }, "frame_rate": { - "title": "エンジンのフレームレート", + "description": "エンジンのフレームレート", + "title": "Frame Rate", "type": "number" }, "icon": { - "title": "エンジンのアイコンをBASE64エンコードしたもの", + "description": "エンジンのアイコンをBASE64エンコードしたもの", + "title": "Icon", "type": "string" }, "manifest_version": { - "title": "マニフェストのバージョン", + "description": "マニフェストのバージョン", + "title": "Manifest Version", "type": "string" }, "name": { - "title": "エンジン名", + "description": "エンジン名", + "title": "Name", "type": "string" }, "supported_features": { @@ -278,29 +313,34 @@ "$ref": "#/components/schemas/SupportedFeatures" } ], - "title": "エンジンが持つ機能" + "description": "エンジンが持つ機能" }, "supported_vvlib_manifest_version": { - "title": "エンジンが対応するvvlibのバージョン", + "description": "エンジンが対応するvvlibのバージョン", + "title": "Supported Vvlib Manifest Version", "type": "string" }, "terms_of_service": { - "title": "エンジンの利用規約", + "description": "エンジンの利用規約", + "title": "Terms Of Service", "type": "string" }, "update_infos": { + "description": "エンジンのアップデート情報", "items": { "$ref": "#/components/schemas/UpdateInfo" }, - "title": "エンジンのアップデート情報", + "title": "Update Infos", "type": "array" }, "url": { - "title": "エンジンのURL", + "description": "エンジンのURL", + "title": "Url", "type": "string" }, "uuid": { - "title": "エンジンのUUID", + "description": "エンジンのUUID", + "title": "Uuid", "type": "string" } }, @@ -325,36 +365,42 @@ "description": "フレームごとの音声合成用のクエリ", "properties": { "f0": { + "description": "フレームごとの基本周波数", "items": { "type": "number" }, - "title": "フレームごとの基本周波数", + "title": "F0", "type": "array" }, "outputSamplingRate": { - "title": "音声データの出力サンプリングレート", + "description": "音声データの出力サンプリングレート", + "title": "Outputsamplingrate", "type": "integer" }, "outputStereo": { - "title": "音声データをステレオ出力するか否か", + "description": "音声データをステレオ出力するか否か", + "title": "Outputstereo", "type": "boolean" }, "phonemes": { + "description": "音素のリスト", "items": { "$ref": "#/components/schemas/FramePhoneme" }, - "title": "音素のリスト", + "title": "Phonemes", "type": "array" }, "volume": { + "description": "フレームごとの音量", "items": { "type": "number" }, - "title": "フレームごとの音量", + "title": "Volume", "type": "array" }, "volumeScale": { - "title": "全体の音量", + "description": "全体の音量", + "title": "Volumescale", "type": "number" } }, @@ -373,11 +419,13 @@ "description": "音素の情報", "properties": { "frame_length": { - "title": "音素のフレーム長", + "description": "音素のフレーム長", + "title": "Frame Length", "type": "integer" }, "phoneme": { - "title": "音素", + "description": "音素", + "title": "Phoneme", "type": "string" } }, @@ -405,34 +453,41 @@ "description": "インストール済み音声ライブラリの情報", "properties": { "bytes": { - "title": "音声ライブラリのバイト数", + "description": "音声ライブラリのバイト数", + "title": "Bytes", "type": "integer" }, "download_url": { - "title": "音声ライブラリのダウンロードURL", + "description": "音声ライブラリのダウンロードURL", + "title": "Download Url", "type": "string" }, "name": { - "title": "音声ライブラリの名前", + "description": "音声ライブラリの名前", + "title": "Name", "type": "string" }, "speakers": { + "description": "音声ライブラリに含まれる話者のリスト", "items": { "$ref": "#/components/schemas/LibrarySpeaker" }, - "title": "音声ライブラリに含まれる話者のリスト", + "title": "Speakers", "type": "array" }, "uninstallable": { - "title": "アンインストール可能かどうか", + "description": "アンインストール可能かどうか", + "title": "Uninstallable", "type": "boolean" }, "uuid": { - "title": "音声ライブラリのUUID", + "description": "音声ライブラリのUUID", + "title": "Uuid", "type": "string" }, "version": { - "title": "音声ライブラリのバージョン", + "description": "音声ライブラリのバージョン", + "title": "Version", "type": "string" } }, @@ -452,20 +507,10 @@ "description": "音声ライブラリに含まれる話者の情報", "properties": { "speaker": { - "allOf": [ - { - "$ref": "#/components/schemas/Speaker" - } - ], - "title": "話者情報" + "$ref": "#/components/schemas/Speaker" }, "speaker_info": { - "allOf": [ - { - "$ref": "#/components/schemas/SpeakerInfo" - } - ], - "title": "話者の追加情報" + "$ref": "#/components/schemas/SpeakerInfo" } }, "required": [ @@ -479,19 +524,23 @@ "description": "依存ライブラリのライセンス情報", "properties": { "license": { - "title": "依存ライブラリのライセンス名", + "description": "依存ライブラリのライセンス名", + "title": "License", "type": "string" }, "name": { - "title": "依存ライブラリ名", + "description": "依存ライブラリ名", + "title": "Name", "type": "string" }, "text": { - "title": "依存ライブラリのライセンス本文", + "description": "依存ライブラリのライセンス本文", + "title": "Text", "type": "string" }, "version": { - "title": "依存ライブラリのバージョン", + "description": "依存ライブラリのバージョン", + "title": "Version", "type": "string" } }, @@ -506,27 +555,33 @@ "description": "モーラ(子音+母音)ごとの情報", "properties": { "consonant": { - "title": "子音の音素", + "description": "子音の音素", + "title": "Consonant", "type": "string" }, "consonant_length": { - "title": "子音の音長", + "description": "子音の音長", + "title": "Consonant Length", "type": "number" }, "pitch": { - "title": "音高", + "description": "音高", + "title": "Pitch", "type": "number" }, "text": { - "title": "文字", + "description": "文字", + "title": "Text", "type": "string" }, "vowel": { - "title": "母音の音素", + "description": "母音の音素", + "title": "Vowel", "type": "string" }, "vowel_length": { - "title": "母音の音長", + "description": "母音の音長", + "title": "Vowel Length", "type": "number" } }, @@ -542,7 +597,8 @@ "MorphableTargetInfo": { "properties": { "is_morphable": { - "title": "指定した話者に対してモーフィングの可否", + "description": "指定した話者に対してモーフィングの可否", + "title": "Is Morphable", "type": "boolean" } }, @@ -556,15 +612,18 @@ "description": "音符ごとの情報", "properties": { "frame_length": { - "title": "音符のフレーム長", + "description": "音符のフレーム長", + "title": "Frame Length", "type": "integer" }, "key": { - "title": "音階", + "description": "音階", + "title": "Key", "type": "integer" }, "lyric": { - "title": "音符の歌詞", + "description": "音符の歌詞", + "title": "Lyric", "type": "string" } }, @@ -581,16 +640,18 @@ "additionalProperties": { "type": "string" }, - "title": "エラーを起こした箇所", + "description": "エラーを起こした箇所", + "title": "Error Args", "type": "object" }, "error_name": { - "description": "|name|description|\n|---|---|\n| UNKNOWN_TEXT | 判別できない読み仮名があります: {text} |\n| ACCENT_TOP | 句頭にアクセントは置けません: {text} |\n| ACCENT_TWICE | 1つのアクセント句に二つ以上のアクセントは置けません: {text} |\n| ACCENT_NOTFOUND | アクセントを指定していないアクセント句があります: {text} |\n| EMPTY_PHRASE | {position}番目のアクセント句が空白です |\n| INTERROGATION_MARK_NOT_AT_END | アクセント句末以外に「?」は置けません: {text} |\n| INFINITE_LOOP | 処理時に無限ループになってしまいました...バグ報告をお願いします。 |", - "title": "エラー名", + "description": "エラー名\n\n|name|description|\n|---|---|\n| UNKNOWN_TEXT | 判別できない読み仮名があります: {text} |\n| ACCENT_TOP | 句頭にアクセントは置けません: {text} |\n| ACCENT_TWICE | 1つのアクセント句に二つ以上のアクセントは置けません: {text} |\n| ACCENT_NOTFOUND | アクセントを指定していないアクセント句があります: {text} |\n| EMPTY_PHRASE | {position}番目のアクセント句が空白です |\n| INTERROGATION_MARK_NOT_AT_END | アクセント句末以外に「?」は置けません: {text} |\n| INFINITE_LOOP | 処理時に無限ループになってしまいました...バグ報告をお願いします。 |", + "title": "Error Name", "type": "string" }, "text": { - "title": "エラーメッセージ", + "description": "エラーメッセージ", + "title": "Text", "type": "string" } }, @@ -606,52 +667,64 @@ "description": "プリセット情報", "properties": { "id": { - "title": "プリセットID", + "description": "プリセットID", + "title": "Id", "type": "integer" }, "intonationScale": { - "title": "全体の抑揚", + "description": "全体の抑揚", + "title": "Intonationscale", "type": "number" }, "name": { - "title": "プリセット名", + "description": "プリセット名", + "title": "Name", "type": "string" }, "pauseLength": { - "title": "句読点などの無音時間", + "description": "句読点などの無音時間", + "title": "Pauselength", "type": "number" }, "pauseLengthScale": { "default": 1, - "title": "句読点などの無音時間(倍率)", + "description": "句読点などの無音時間(倍率)", + "title": "Pauselengthscale", "type": "number" }, "pitchScale": { - "title": "全体の音高", + "description": "全体の音高", + "title": "Pitchscale", "type": "number" }, "postPhonemeLength": { - "title": "音声の後の無音時間", + "description": "音声の後の無音時間", + "title": "Postphonemelength", "type": "number" }, "prePhonemeLength": { - "title": "音声の前の無音時間", + "description": "音声の前の無音時間", + "title": "Prephonemelength", "type": "number" }, "speaker_uuid": { - "title": "話者のUUID", + "description": "話者のUUID", + "title": "Speaker Uuid", "type": "string" }, "speedScale": { - "title": "全体の話速", + "description": "全体の話速", + "title": "Speedscale", "type": "number" }, "style_id": { - "title": "スタイルID", + "description": "スタイルID", + "title": "Style Id", "type": "integer" }, "volumeScale": { - "title": "全体の音量", + "description": "全体の音量", + "title": "Volumescale", "type": "number" } }, @@ -674,10 +747,11 @@ "description": "楽譜情報", "properties": { "notes": { + "description": "音符のリスト", "items": { "$ref": "#/components/schemas/Note" }, - "title": "音符のリスト", + "title": "Notes", "type": "array" } }, @@ -691,18 +765,21 @@ "description": "話者情報", "properties": { "name": { - "title": "名前", + "description": "名前", + "title": "Name", "type": "string" }, "speaker_uuid": { - "title": "話者のUUID", + "description": "話者のUUID", + "title": "Speaker Uuid", "type": "string" }, "styles": { + "description": "スタイルの一覧", "items": { "$ref": "#/components/schemas/SpeakerStyle" }, - "title": "スタイルの一覧", + "title": "Styles", "type": "array" }, "supported_features": { @@ -711,10 +788,11 @@ "$ref": "#/components/schemas/SpeakerSupportedFeatures" } ], - "title": "話者の対応機能" + "description": "話者の対応機能" }, "version": { - "title": "話者のバージョン", + "description": "話者のバージョン", + "title": "Version", "type": "string" } }, @@ -731,18 +809,21 @@ "description": "話者の追加情報", "properties": { "policy": { - "title": "policy.md", + "description": "policy.md", + "title": "Policy", "type": "string" }, "portrait": { - "title": "立ち絵画像をbase64エンコードしたもの、あるいはURL", + "description": "立ち絵画像をbase64エンコードしたもの、あるいはURL", + "title": "Portrait", "type": "string" }, "style_infos": { + "description": "スタイルの追加情報", "items": { "$ref": "#/components/schemas/StyleInfo" }, - "title": "スタイルの追加情報", + "title": "Style Infos", "type": "array" } }, @@ -758,22 +839,25 @@ "description": "話者のスタイル情報", "properties": { "id": { - "title": "スタイルID", + "description": "スタイルID", + "title": "Id", "type": "integer" }, "name": { - "title": "スタイル名", + "description": "スタイル名", + "title": "Name", "type": "string" }, "type": { "default": "talk", + "description": "スタイルの種類。talk:音声合成クエリの作成と音声合成が可能。singing_teacher:歌唱音声合成用のクエリの作成が可能。frame_decode:歌唱音声合成が可能。sing:歌唱音声合成用のクエリの作成と歌唱音声合成が可能。", "enum": [ "talk", "singing_teacher", "frame_decode", "sing" ], - "title": "スタイルの種類。talk:音声合成クエリの作成と音声合成が可能。singing_teacher:歌唱音声合成用のクエリの作成が可能。frame_decode:歌唱音声合成が可能。sing:歌唱音声合成用のクエリの作成と歌唱音声合成が可能。", + "title": "Type", "type": "string" } }, @@ -789,13 +873,13 @@ "properties": { "permitted_synthesis_morphing": { "default": "ALL", - "description": "'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」", + "description": "モーフィング機能への対応\n\n'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」", "enum": [ "ALL", "SELF_ONLY", "NOTHING" ], - "title": "モーフィング機能への対応", + "title": "Permitted Synthesis Morphing", "type": "string" } }, @@ -806,22 +890,26 @@ "description": "スタイルの追加情報", "properties": { "icon": { - "title": "このスタイルのアイコンをbase64エンコードしたもの、あるいはURL", + "description": "このスタイルのアイコンをbase64エンコードしたもの、あるいはURL", + "title": "Icon", "type": "string" }, "id": { - "title": "スタイルID", + "description": "スタイルID", + "title": "Id", "type": "integer" }, "portrait": { - "title": "このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL", + "description": "このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL", + "title": "Portrait", "type": "string" }, "voice_samples": { + "description": "サンプル音声をbase64エンコードしたもの、あるいはURL", "items": { "type": "string" }, - "title": "サンプル音声をbase64エンコードしたもの、あるいはURL", + "title": "Voice Samples", "type": "array" } }, @@ -837,15 +925,18 @@ "description": "対応しているデバイスの情報", "properties": { "cpu": { - "title": "CPUに対応しているか", + "description": "CPUに対応しているか", + "title": "Cpu", "type": "boolean" }, "cuda": { - "title": "CUDA(Nvidia GPU)に対応しているか", + "description": "CUDA(Nvidia GPU)に対応しているか", + "title": "Cuda", "type": "boolean" }, "dml": { - "title": "DirectML(Nvidia GPU/Radeon GPU等)に対応しているか", + "description": "DirectML(Nvidia GPU/Radeon GPU等)に対応しているか", + "title": "Dml", "type": "boolean" } }, @@ -861,51 +952,63 @@ "description": "エンジンが持つ機能の一覧", "properties": { "adjust_intonation_scale": { - "title": "全体の抑揚の調整", + "description": "全体の抑揚の調整", + "title": "Adjust Intonation Scale", "type": "boolean" }, "adjust_mora_pitch": { - "title": "モーラごとの音高の調整", + "description": "モーラごとの音高の調整", + "title": "Adjust Mora Pitch", "type": "boolean" }, "adjust_pause_length": { - "title": "句読点などの無音時間の調整", + "description": "句読点などの無音時間の調整", + "title": "Adjust Pause Length", "type": "boolean" }, "adjust_phoneme_length": { - "title": "音素ごとの長さの調整", + "description": "音素ごとの長さの調整", + "title": "Adjust Phoneme Length", "type": "boolean" }, "adjust_pitch_scale": { - "title": "全体の音高の調整", + "description": "全体の音高の調整", + "title": "Adjust Pitch Scale", "type": "boolean" }, "adjust_speed_scale": { - "title": "全体の話速の調整", + "description": "全体の話速の調整", + "title": "Adjust Speed Scale", "type": "boolean" }, "adjust_volume_scale": { - "title": "全体の音量の調整", + "description": "全体の音量の調整", + "title": "Adjust Volume Scale", "type": "boolean" }, "interrogative_upspeak": { - "title": "疑問文の自動調整", + "description": "疑問文の自動調整", + "title": "Interrogative Upspeak", "type": "boolean" }, "manage_library": { - "title": "音声ライブラリのインストール・アンインストール", + "description": "音声ライブラリのインストール・アンインストール", + "title": "Manage Library", "type": "boolean" }, "return_resource_url": { - "title": "speaker_info・singer_infoのリソースをURLで返送", + "description": "speaker_info・singer_infoのリソースをURLで返送", + "title": "Return Resource Url", "type": "boolean" }, "sing": { - "title": "歌唱音声合成", + "description": "歌唱音声合成", + "title": "Sing", "type": "boolean" }, "synthesis_morphing": { - "title": "2種類のスタイルでモーフィングした音声を合成", + "description": "2種類のスタイルでモーフィングした音声を合成", + "title": "Synthesis Morphing", "type": "boolean" } }, @@ -926,21 +1029,24 @@ "description": "エンジンのアップデート情報", "properties": { "contributors": { + "description": "貢献者名", "items": { "type": "string" }, - "title": "貢献者名", + "title": "Contributors", "type": "array" }, "descriptions": { + "description": "アップデートの詳細についての説明", "items": { "type": "string" }, - "title": "アップデートの詳細についての説明", + "title": "Descriptions", "type": "array" }, "version": { - "title": "エンジンのバージョン名", + "description": "エンジンのバージョン名", + "title": "Version", "type": "string" } }, @@ -955,66 +1061,81 @@ "description": "辞書のコンパイルに使われる情報", "properties": { "accent_associative_rule": { - "title": "アクセント結合規則", + "description": "アクセント結合規則", + "title": "Accent Associative Rule", "type": "string" }, "accent_type": { - "title": "アクセント型", + "description": "アクセント型", + "title": "Accent Type", "type": "integer" }, "context_id": { "default": 1348, - "title": "文脈ID", + "description": "文脈ID", + "title": "Context Id", "type": "integer" }, "inflectional_form": { - "title": "活用形", + "description": "活用形", + "title": "Inflectional Form", "type": "string" }, "inflectional_type": { - "title": "活用型", + "description": "活用型", + "title": "Inflectional Type", "type": "string" }, "mora_count": { - "title": "モーラ数", + "description": "モーラ数", + "title": "Mora Count", "type": "integer" }, "part_of_speech": { - "title": "品詞", + "description": "品詞", + "title": "Part Of Speech", "type": "string" }, "part_of_speech_detail_1": { - "title": "品詞細分類1", + "description": "品詞細分類1", + "title": "Part Of Speech Detail 1", "type": "string" }, "part_of_speech_detail_2": { - "title": "品詞細分類2", + "description": "品詞細分類2", + "title": "Part Of Speech Detail 2", "type": "string" }, "part_of_speech_detail_3": { - "title": "品詞細分類3", + "description": "品詞細分類3", + "title": "Part Of Speech Detail 3", "type": "string" }, "priority": { + "description": "優先度", "maximum": 10.0, "minimum": 0.0, - "title": "優先度", + "title": "Priority", "type": "integer" }, "pronunciation": { - "title": "発音", + "description": "発音", + "title": "Pronunciation", "type": "string" }, "stem": { - "title": "原形", + "description": "原形", + "title": "Stem", "type": "string" }, "surface": { - "title": "表層形", + "description": "表層形", + "title": "Surface", "type": "string" }, "yomi": { - "title": "読み", + "description": "読み", + "title": "Yomi", "type": "string" } }, @@ -1073,31 +1194,38 @@ "description": "vvlib(VOICEVOX Library)に関する情報", "properties": { "brand_name": { - "title": "エンジンのブランド名", + "description": "エンジンのブランド名", + "title": "Brand Name", "type": "string" }, "engine_name": { - "title": "エンジン名", + "description": "エンジン名", + "title": "Engine Name", "type": "string" }, "engine_uuid": { - "title": "エンジンのUUID", + "description": "エンジンのUUID", + "title": "Engine Uuid", "type": "string" }, "manifest_version": { - "title": "マニフェストバージョン", + "description": "マニフェストバージョン", + "title": "Manifest Version", "type": "string" }, "name": { - "title": "音声ライブラリ名", + "description": "音声ライブラリ名", + "title": "Name", "type": "string" }, "uuid": { - "title": "音声ライブラリのUUID", + "description": "音声ライブラリのUUID", + "title": "Uuid", "type": "string" }, "version": { - "title": "音声ライブラリバージョン", + "description": "音声ライブラリバージョン", + "title": "Version", "type": "string" } }, diff --git a/voicevox_engine/app/routers/engine_info.py b/voicevox_engine/app/routers/engine_info.py index 5d4ca5b44..cfd4a52c6 100644 --- a/voicevox_engine/app/routers/engine_info.py +++ b/voicevox_engine/app/routers/engine_info.py @@ -18,9 +18,9 @@ class SupportedDevicesInfo(BaseModel): 対応しているデバイスの情報 """ - cpu: bool = Field(title="CPUに対応しているか") - cuda: bool = Field(title="CUDA(Nvidia GPU)に対応しているか") - dml: bool = Field(title="DirectML(Nvidia GPU/Radeon GPU等)に対応しているか") + cpu: bool = Field(description="CPUに対応しているか") + cuda: bool = Field(description="CUDA(Nvidia GPU)に対応しているか") + dml: bool = Field(description="DirectML(Nvidia GPU/Radeon GPU等)に対応しているか") @classmethod def generate_from(cls, device_support: DeviceSupport) -> Self: diff --git a/voicevox_engine/app/routers/tts_pipeline.py b/voicevox_engine/app/routers/tts_pipeline.py index b9b67617e..7b113eb39 100644 --- a/voicevox_engine/app/routers/tts_pipeline.py +++ b/voicevox_engine/app/routers/tts_pipeline.py @@ -46,10 +46,10 @@ class ParseKanaBadRequest(BaseModel): - text: str = Field(title="エラーメッセージ") + text: str = Field(description="エラーメッセージ") error_name: str = Field( - title="エラー名", - description="|name|description|\n|---|---|\n" + description="エラー名\n\n" + "|name|description|\n|---|---|\n" + "\n".join( [ "| {} | {} |".format(err.name, err.value) @@ -57,7 +57,7 @@ class ParseKanaBadRequest(BaseModel): ] ), ) - error_args: dict[str, str] = Field(title="エラーを起こした箇所") + error_args: dict[str, str] = Field(description="エラーを起こした箇所") def __init__(self, err: ParseKanaError): super().__init__(text=err.text, error_name=err.errname, error_args=err.kwargs) diff --git a/voicevox_engine/engine_manifest.py b/voicevox_engine/engine_manifest.py index 05677ed7a..f3a298a9d 100644 --- a/voicevox_engine/engine_manifest.py +++ b/voicevox_engine/engine_manifest.py @@ -71,10 +71,10 @@ class UpdateInfo(BaseModel): エンジンのアップデート情報 """ - version: str = Field(title="エンジンのバージョン名") - descriptions: list[str] = Field(title="アップデートの詳細についての説明") + version: str = Field(description="エンジンのバージョン名") + descriptions: list[str] = Field(description="アップデートの詳細についての説明") contributors: list[str] | SkipJsonSchema[None] = Field( - default=None, title="貢献者名" + default=None, description="貢献者名" ) @@ -83,14 +83,14 @@ class LicenseInfo(BaseModel): 依存ライブラリのライセンス情報 """ - name: str = Field(title="依存ライブラリ名") + name: str = Field(description="依存ライブラリ名") version: str | SkipJsonSchema[None] = Field( - default=None, title="依存ライブラリのバージョン" + default=None, description="依存ライブラリのバージョン" ) license: str | SkipJsonSchema[None] = Field( - default=None, title="依存ライブラリのライセンス名" + default=None, description="依存ライブラリのライセンス名" ) - text: str = Field(title="依存ライブラリのライセンス本文") + text: str = Field(description="依存ライブラリのライセンス本文") class SupportedFeatures(BaseModel): @@ -98,25 +98,25 @@ class SupportedFeatures(BaseModel): エンジンが持つ機能の一覧 """ - adjust_mora_pitch: bool = Field(title="モーラごとの音高の調整") - adjust_phoneme_length: bool = Field(title="音素ごとの長さの調整") - adjust_speed_scale: bool = Field(title="全体の話速の調整") - adjust_pitch_scale: bool = Field(title="全体の音高の調整") - adjust_intonation_scale: bool = Field(title="全体の抑揚の調整") - adjust_volume_scale: bool = Field(title="全体の音量の調整") + adjust_mora_pitch: bool = Field(description="モーラごとの音高の調整") + adjust_phoneme_length: bool = Field(description="音素ごとの長さの調整") + adjust_speed_scale: bool = Field(description="全体の話速の調整") + adjust_pitch_scale: bool = Field(description="全体の音高の調整") + adjust_intonation_scale: bool = Field(description="全体の抑揚の調整") + adjust_volume_scale: bool = Field(description="全体の音量の調整") adjust_pause_length: bool | SkipJsonSchema[None] = Field( - default=None, title="句読点などの無音時間の調整" + default=None, description="句読点などの無音時間の調整" ) - interrogative_upspeak: bool = Field(title="疑問文の自動調整") + interrogative_upspeak: bool = Field(description="疑問文の自動調整") synthesis_morphing: bool = Field( - title="2種類のスタイルでモーフィングした音声を合成" + description="2種類のスタイルでモーフィングした音声を合成" ) - sing: bool | SkipJsonSchema[None] = Field(default=None, title="歌唱音声合成") + sing: bool | SkipJsonSchema[None] = Field(default=None, description="歌唱音声合成") manage_library: bool | SkipJsonSchema[None] = Field( - default=None, title="音声ライブラリのインストール・アンインストール" + default=None, description="音声ライブラリのインストール・アンインストール" ) return_resource_url: bool | SkipJsonSchema[None] = Field( - default=None, title="speaker_info・singer_infoのリソースをURLで返送" + default=None, description="speaker_info・singer_infoのリソースをURLで返送" ) @@ -129,21 +129,23 @@ class EngineManifest(BaseModel): エンジン自体に関する情報 """ - manifest_version: str = Field(title="マニフェストのバージョン") - name: EngineName = Field(title="エンジン名") - brand_name: BrandName = Field(title="ブランド名") - uuid: str = Field(title="エンジンのUUID") - url: str = Field(title="エンジンのURL") - icon: str = Field(title="エンジンのアイコンをBASE64エンコードしたもの") - default_sampling_rate: int = Field(title="デフォルトのサンプリング周波数") - frame_rate: float = Field(title="エンジンのフレームレート") - terms_of_service: str = Field(title="エンジンの利用規約") - update_infos: list[UpdateInfo] = Field(title="エンジンのアップデート情報") - dependency_licenses: list[LicenseInfo] = Field(title="依存関係のライセンス情報") + manifest_version: str = Field(description="マニフェストのバージョン") + name: EngineName = Field(description="エンジン名") + brand_name: BrandName = Field(description="ブランド名") + uuid: str = Field(description="エンジンのUUID") + url: str = Field(description="エンジンのURL") + icon: str = Field(description="エンジンのアイコンをBASE64エンコードしたもの") + default_sampling_rate: int = Field(description="デフォルトのサンプリング周波数") + frame_rate: float = Field(description="エンジンのフレームレート") + terms_of_service: str = Field(description="エンジンの利用規約") + update_infos: list[UpdateInfo] = Field(description="エンジンのアップデート情報") + dependency_licenses: list[LicenseInfo] = Field( + description="依存関係のライセンス情報" + ) supported_vvlib_manifest_version: str | SkipJsonSchema[None] = Field( - default=None, title="エンジンが対応するvvlibのバージョン" + default=None, description="エンジンが対応するvvlibのバージョン" ) - supported_features: SupportedFeatures = Field(title="エンジンが持つ機能") + supported_features: SupportedFeatures = Field(description="エンジンが持つ機能") def load_manifest(manifest_path: Path) -> EngineManifest: diff --git a/voicevox_engine/library/model.py b/voicevox_engine/library/model.py index eccf3c58d..8477a0e51 100644 --- a/voicevox_engine/library/model.py +++ b/voicevox_engine/library/model.py @@ -14,8 +14,8 @@ class LibrarySpeaker(BaseModel): 音声ライブラリに含まれる話者の情報 """ - speaker: Speaker = Field(title="話者情報") - speaker_info: SpeakerInfo = Field(title="話者の追加情報") + speaker: Speaker = Field(description="話者情報") + speaker_info: SpeakerInfo = Field(description="話者の追加情報") class BaseLibraryInfo(BaseModel): @@ -23,12 +23,14 @@ class BaseLibraryInfo(BaseModel): 音声ライブラリの情報 """ - name: str = Field(title="音声ライブラリの名前") - uuid: str = Field(title="音声ライブラリのUUID") - version: str = Field(title="音声ライブラリのバージョン") - download_url: str = Field(title="音声ライブラリのダウンロードURL") - bytes: int = Field(title="音声ライブラリのバイト数") - speakers: list[LibrarySpeaker] = Field(title="音声ライブラリに含まれる話者のリスト") + name: str = Field(description="音声ライブラリの名前") + uuid: str = Field(description="音声ライブラリのUUID") + version: str = Field(description="音声ライブラリのバージョン") + download_url: str = Field(description="音声ライブラリのダウンロードURL") + bytes: int = Field(description="音声ライブラリのバイト数") + speakers: list[LibrarySpeaker] = Field( + description="音声ライブラリに含まれる話者のリスト" + ) # 今後InstalledLibraryInfo同様に拡張する可能性を考え、モデルを分けている @@ -45,7 +47,7 @@ class InstalledLibraryInfo(BaseLibraryInfo): インストール済み音声ライブラリの情報 """ - uninstallable: bool = Field(title="アンインストール可能かどうか") + uninstallable: bool = Field(description="アンインストール可能かどうか") class VvlibManifest(BaseModel): @@ -53,10 +55,10 @@ class VvlibManifest(BaseModel): vvlib(VOICEVOX Library)に関する情報 """ - manifest_version: StrictStr = Field(title="マニフェストバージョン") - name: StrictStr = Field(title="音声ライブラリ名") - version: StrictStr = Field(title="音声ライブラリバージョン") - uuid: StrictStr = Field(title="音声ライブラリのUUID") - brand_name: StrictStr = Field(title="エンジンのブランド名") - engine_name: StrictStr = Field(title="エンジン名") - engine_uuid: StrictStr = Field(title="エンジンのUUID") + manifest_version: StrictStr = Field(description="マニフェストバージョン") + name: StrictStr = Field(description="音声ライブラリ名") + version: StrictStr = Field(description="音声ライブラリバージョン") + uuid: StrictStr = Field(description="音声ライブラリのUUID") + brand_name: StrictStr = Field(description="エンジンのブランド名") + engine_name: StrictStr = Field(description="エンジン名") + engine_uuid: StrictStr = Field(description="エンジンのUUID") diff --git a/voicevox_engine/metas/Metas.py b/voicevox_engine/metas/Metas.py index b71a35c1b..82df91074 100644 --- a/voicevox_engine/metas/Metas.py +++ b/voicevox_engine/metas/Metas.py @@ -16,11 +16,11 @@ class SpeakerStyle(BaseModel): 話者のスタイル情報 """ - name: str = Field(title="スタイル名") - id: StyleId = Field(title="スタイルID") + name: str = Field(description="スタイル名") + id: StyleId = Field(description="スタイルID") type: StyleType = Field( default="talk", - title=( + description=( "スタイルの種類。" "talk:音声合成クエリの作成と音声合成が可能。" "singing_teacher:歌唱音声合成用のクエリの作成が可能。" @@ -36,8 +36,10 @@ class SpeakerSupportedFeatures(BaseModel): """ permitted_synthesis_morphing: Literal["ALL", "SELF_ONLY", "NOTHING"] = Field( - title="モーフィング機能への対応", - description="'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」", + description=( + "モーフィング機能への対応\n\n" + "'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」" + ), default="ALL", ) @@ -47,12 +49,12 @@ class Speaker(BaseModel): 話者情報 """ - name: str = Field(title="名前") - speaker_uuid: str = Field(title="話者のUUID") - styles: list[SpeakerStyle] = Field(title="スタイルの一覧") - version: str = Field(title="話者のバージョン") + name: str = Field(description="名前") + speaker_uuid: str = Field(description="話者のUUID") + styles: list[SpeakerStyle] = Field(description="スタイルの一覧") + version: str = Field(description="話者のバージョン") supported_features: SpeakerSupportedFeatures = Field( - title="話者の対応機能", default_factory=SpeakerSupportedFeatures + description="話者の対応機能", default_factory=SpeakerSupportedFeatures ) @@ -61,16 +63,16 @@ class StyleInfo(BaseModel): スタイルの追加情報 """ - id: StyleId = Field(title="スタイルID") + id: StyleId = Field(description="スタイルID") icon: str = Field( - title="このスタイルのアイコンをbase64エンコードしたもの、あるいはURL" + description="このスタイルのアイコンをbase64エンコードしたもの、あるいはURL" ) portrait: str | SkipJsonSchema[None] = Field( default=None, - title="このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL", + description="このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL", ) voice_samples: list[str] = Field( - title="サンプル音声をbase64エンコードしたもの、あるいはURL" + description="サンプル音声をbase64エンコードしたもの、あるいはURL" ) @@ -79,6 +81,8 @@ class SpeakerInfo(BaseModel): 話者の追加情報 """ - policy: str = Field(title="policy.md") - portrait: str = Field(title="立ち絵画像をbase64エンコードしたもの、あるいはURL") - style_infos: list[StyleInfo] = Field(title="スタイルの追加情報") + policy: str = Field(description="policy.md") + portrait: str = Field( + description="立ち絵画像をbase64エンコードしたもの、あるいはURL" + ) + style_infos: list[StyleInfo] = Field(description="スタイルの追加情報") diff --git a/voicevox_engine/model.py b/voicevox_engine/model.py index 02574f5e1..ffbd45a86 100644 --- a/voicevox_engine/model.py +++ b/voicevox_engine/model.py @@ -18,25 +18,25 @@ class AudioQuery(BaseModel): 音声合成用のクエリ """ - accent_phrases: list[AccentPhrase] = Field(title="アクセント句のリスト") - speedScale: float = Field(title="全体の話速") - pitchScale: float = Field(title="全体の音高") - intonationScale: float = Field(title="全体の抑揚") - volumeScale: float = Field(title="全体の音量") - prePhonemeLength: float = Field(title="音声の前の無音時間") - postPhonemeLength: float = Field(title="音声の後の無音時間") + accent_phrases: list[AccentPhrase] = Field(description="アクセント句のリスト") + speedScale: float = Field(description="全体の話速") + pitchScale: float = Field(description="全体の音高") + intonationScale: float = Field(description="全体の抑揚") + volumeScale: float = Field(description="全体の音量") + prePhonemeLength: float = Field(description="音声の前の無音時間") + postPhonemeLength: float = Field(description="音声の後の無音時間") pauseLength: float | None = Field( default=None, - title="句読点などの無音時間。nullのときは無視される。デフォルト値はnull", + description="句読点などの無音時間。nullのときは無視される。デフォルト値はnull", ) pauseLengthScale: float = Field( - default=1, title="句読点などの無音時間(倍率)。デフォルト値は1" + default=1, description="句読点などの無音時間(倍率)。デフォルト値は1" ) - outputSamplingRate: int = Field(title="音声データの出力サンプリングレート") - outputStereo: bool = Field(title="音声データをステレオ出力するか否か") + outputSamplingRate: int = Field(description="音声データの出力サンプリングレート") + outputStereo: bool = Field(description="音声データをステレオ出力するか否か") kana: str | SkipJsonSchema[None] = Field( default=None, - title="[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される", + description="[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される", ) def __hash__(self) -> int: diff --git a/voicevox_engine/morphing/model.py b/voicevox_engine/morphing/model.py index e05c35a0a..09cc63103 100644 --- a/voicevox_engine/morphing/model.py +++ b/voicevox_engine/morphing/model.py @@ -8,6 +8,6 @@ class MorphableTargetInfo(BaseModel): - is_morphable: bool = Field(title="指定した話者に対してモーフィングの可否") + is_morphable: bool = Field(description="指定した話者に対してモーフィングの可否") # FIXME: add reason property - # reason: str | None = Field(title="is_morphableがfalseである場合、その理由") + # reason: str | None = Field(description="is_morphableがfalseである場合、その理由") diff --git a/voicevox_engine/preset/model.py b/voicevox_engine/preset/model.py index d9c2d4754..01f4b66f0 100644 --- a/voicevox_engine/preset/model.py +++ b/voicevox_engine/preset/model.py @@ -15,17 +15,19 @@ class Preset(BaseModel): プリセット情報 """ - id: int = Field(title="プリセットID") - name: str = Field(title="プリセット名") - speaker_uuid: str = Field(title="話者のUUID") - style_id: StyleId = Field(title="スタイルID") - speedScale: float = Field(title="全体の話速") - pitchScale: float = Field(title="全体の音高") - intonationScale: float = Field(title="全体の抑揚") - volumeScale: float = Field(title="全体の音量") - prePhonemeLength: float = Field(title="音声の前の無音時間") - postPhonemeLength: float = Field(title="音声の後の無音時間") + id: int = Field(description="プリセットID") + name: str = Field(description="プリセット名") + speaker_uuid: str = Field(description="話者のUUID") + style_id: StyleId = Field(description="スタイルID") + speedScale: float = Field(description="全体の話速") + pitchScale: float = Field(description="全体の音高") + intonationScale: float = Field(description="全体の抑揚") + volumeScale: float = Field(description="全体の音量") + prePhonemeLength: float = Field(description="音声の前の無音時間") + postPhonemeLength: float = Field(description="音声の後の無音時間") pauseLength: float | SkipJsonSchema[None] = Field( - default=None, title="句読点などの無音時間" + default=None, description="句読点などの無音時間" + ) + pauseLengthScale: float = Field( + default=1, description="句読点などの無音時間(倍率)" ) - pauseLengthScale: float = Field(default=1, title="句読点などの無音時間(倍率)") diff --git a/voicevox_engine/tts_pipeline/model.py b/voicevox_engine/tts_pipeline/model.py index 7f3a17713..dde8b7631 100644 --- a/voicevox_engine/tts_pipeline/model.py +++ b/voicevox_engine/tts_pipeline/model.py @@ -17,15 +17,17 @@ class Mora(BaseModel): model_config = ConfigDict(validate_assignment=True) - text: str = Field(title="文字") - consonant: str | SkipJsonSchema[None] = Field(default=None, title="子音の音素") + text: str = Field(description="文字") + consonant: str | SkipJsonSchema[None] = Field( + default=None, description="子音の音素" + ) consonant_length: float | SkipJsonSchema[None] = Field( - default=None, title="子音の音長" + default=None, description="子音の音長" ) - vowel: str = Field(title="母音の音素") - vowel_length: float = Field(title="母音の音長") + vowel: str = Field(description="母音の音素") + vowel_length: float = Field(description="母音の音長") pitch: float = Field( - title="音高" + description="音高" ) # デフォルト値をつけるとts側のOpenAPIで生成されたコードの型がOptionalになる def __hash__(self) -> int: @@ -41,12 +43,12 @@ class AccentPhrase(BaseModel): アクセント句ごとの情報 """ - moras: list[Mora] = Field(title="モーラのリスト") - accent: int = Field(title="アクセント箇所") + moras: list[Mora] = Field(description="モーラのリスト") + accent: int = Field(description="アクセント箇所") pause_mora: Mora | SkipJsonSchema[None] = Field( - default=None, title="後ろに無音を付けるかどうか" + default=None, description="後ろに無音を付けるかどうか" ) - is_interrogative: bool = Field(default=False, title="疑問系かどうか") + is_interrogative: bool = Field(default=False, description="疑問系かどうか") def __hash__(self) -> int: items = [ @@ -61,9 +63,9 @@ class Note(BaseModel): 音符ごとの情報 """ - key: int | SkipJsonSchema[None] = Field(default=None, title="音階") - frame_length: int = Field(title="音符のフレーム長") - lyric: str = Field(title="音符の歌詞") + key: int | SkipJsonSchema[None] = Field(default=None, description="音階") + frame_length: int = Field(description="音符のフレーム長") + lyric: str = Field(description="音符の歌詞") class Score(BaseModel): @@ -71,7 +73,7 @@ class Score(BaseModel): 楽譜情報 """ - notes: list[Note] = Field(title="音符のリスト") + notes: list[Note] = Field(description="音符のリスト") class FramePhoneme(BaseModel): @@ -79,8 +81,8 @@ class FramePhoneme(BaseModel): 音素の情報 """ - phoneme: str = Field(title="音素") - frame_length: int = Field(title="音素のフレーム長") + phoneme: str = Field(description="音素") + frame_length: int = Field(description="音素のフレーム長") class FrameAudioQuery(BaseModel): @@ -88,12 +90,12 @@ class FrameAudioQuery(BaseModel): フレームごとの音声合成用のクエリ """ - f0: list[float] = Field(title="フレームごとの基本周波数") - volume: list[float] = Field(title="フレームごとの音量") - phonemes: list[FramePhoneme] = Field(title="音素のリスト") - volumeScale: float = Field(title="全体の音量") - outputSamplingRate: int = Field(title="音声データの出力サンプリングレート") - outputStereo: bool = Field(title="音声データをステレオ出力するか否か") + f0: list[float] = Field(description="フレームごとの基本周波数") + volume: list[float] = Field(description="フレームごとの音量") + phonemes: list[FramePhoneme] = Field(description="音素のリスト") + volumeScale: float = Field(description="全体の音量") + outputSamplingRate: int = Field(description="音声データの出力サンプリングレート") + outputStereo: bool = Field(description="音声データをステレオ出力するか否か") class ParseKanaErrorCode(Enum): diff --git a/voicevox_engine/user_dict/model.py b/voicevox_engine/user_dict/model.py index 0e05031cf..355564f3e 100644 --- a/voicevox_engine/user_dict/model.py +++ b/voicevox_engine/user_dict/model.py @@ -33,23 +33,23 @@ class UserDictWord(BaseModel): model_config = ConfigDict(validate_assignment=True) - surface: str = Field(title="表層形") + surface: str = Field(description="表層形") priority: int = Field( - title="優先度", ge=USER_DICT_MIN_PRIORITY, le=USER_DICT_MAX_PRIORITY + description="優先度", ge=USER_DICT_MIN_PRIORITY, le=USER_DICT_MAX_PRIORITY ) - context_id: int = Field(title="文脈ID", default=1348) - part_of_speech: str = Field(title="品詞") - part_of_speech_detail_1: str = Field(title="品詞細分類1") - part_of_speech_detail_2: str = Field(title="品詞細分類2") - part_of_speech_detail_3: str = Field(title="品詞細分類3") - inflectional_type: str = Field(title="活用型") - inflectional_form: str = Field(title="活用形") - stem: str = Field(title="原形") - yomi: str = Field(title="読み") - pronunciation: str = Field(title="発音") - accent_type: int = Field(title="アクセント型") - mora_count: int | SkipJsonSchema[None] = Field(default=None, title="モーラ数") - accent_associative_rule: str = Field(title="アクセント結合規則") + context_id: int = Field(description="文脈ID", default=1348) + part_of_speech: str = Field(description="品詞") + part_of_speech_detail_1: str = Field(description="品詞細分類1") + part_of_speech_detail_2: str = Field(description="品詞細分類2") + part_of_speech_detail_3: str = Field(description="品詞細分類3") + inflectional_type: str = Field(description="活用型") + inflectional_form: str = Field(description="活用形") + stem: str = Field(description="原形") + yomi: str = Field(description="読み") + pronunciation: str = Field(description="発音") + accent_type: int = Field(description="アクセント型") + mora_count: int | SkipJsonSchema[None] = Field(default=None, description="モーラ数") + accent_associative_rule: str = Field(description="アクセント結合規則") @field_validator("surface") @classmethod From 59dfd00b8c9977b5eb93a5d352bc32e21a5d9f9a Mon Sep 17 00:00:00 2001 From: sabonerune <102559104+sabonerune@users.noreply.github.com> Date: Thu, 27 Jun 2024 01:03:49 +0900 Subject: [PATCH 2/2] =?UTF-8?q?FIX:=20=E6=94=B9=E8=A1=8C=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...01\223\343\201\250\343\202\222\347\242\272\350\252\215.json" | 2 +- voicevox_engine/metas/Metas.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" index 53a41ca53..627213d98 100644 --- "a/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" +++ "b/test/e2e/__snapshots__/test_openapi/test_OpenAPI\343\201\256\345\275\242\343\201\214\345\244\211\343\202\217\343\201\243\343\201\246\343\201\204\343\201\252\343\201\204\343\201\223\343\201\250\343\202\222\347\242\272\350\252\215.json" @@ -873,7 +873,7 @@ "properties": { "permitted_synthesis_morphing": { "default": "ALL", - "description": "モーフィング機能への対応\n\n'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」", + "description": "モーフィング機能への対応。'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」", "enum": [ "ALL", "SELF_ONLY", diff --git a/voicevox_engine/metas/Metas.py b/voicevox_engine/metas/Metas.py index 82df91074..79898df1c 100644 --- a/voicevox_engine/metas/Metas.py +++ b/voicevox_engine/metas/Metas.py @@ -37,7 +37,7 @@ class SpeakerSupportedFeatures(BaseModel): permitted_synthesis_morphing: Literal["ALL", "SELF_ONLY", "NOTHING"] = Field( description=( - "モーフィング機能への対応\n\n" + "モーフィング機能への対応。" "'ALL' は「全て許可」、'SELF_ONLY' は「同じ話者内でのみ許可」、'NOTHING' は「全て禁止」" ), default="ALL",