diff --git a/openapi.json b/openapi.json
index 27bcbfb2aa..a0e1407908 100644
--- a/openapi.json
+++ b/openapi.json
@@ -1 +1 @@
-{"openapi":"3.1.0","info":{"title":"VOICEVOX ENGINE OSS","description":"VOICEVOX OSS の音声合成エンジンです。","version":"latest"},"paths":{"/audio_query":{"post":{"tags":["クエリ作成"],"summary":"音声合成用のクエリを作成する","description":"音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"audio_query","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audio_query_from_preset":{"post":{"tags":["クエリ作成"],"summary":"音声合成用のクエリをプリセットを用いて作成する","description":"音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"audio_query_from_preset","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"preset_id","in":"query","required":true,"schema":{"type":"integer","title":"Preset Id"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accent_phrases":{"post":{"tags":["クエリ編集"],"summary":"テキストからアクセント句を得る","description":"テキストからアクセント句を得ます。\n\nis_kanaが`true`のとき、テキストは次のAquesTalk 風記法で解釈されます。デフォルトは`false`です。\n* 全てのカナはカタカナで記述される\n* アクセント句は`/`または`、`で区切る。`、`で区切った場合に限り無音区間が挿入される。\n* カナの手前に`_`を入れるとそのカナは無声化される\n* アクセント位置を`'`で指定する。全てのアクセント句にはアクセント位置を1つ指定する必要がある。\n* アクセント句末に`?`(全角)を入れることにより疑問文の発音ができる。\nenable_katakana_englishが`true`のとき、テキスト中の読みが不明な英単語をカタカナ読みにします。デフォルトは`true`です。\nis_kanaが`true`のとき、enable_katakana_englishの値は無視されます。","operationId":"accent_phrases","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"is_kana","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Is Kana"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Accent Phrases Accent Phrases Post"}}}},"400":{"description":"読み仮名のパースに失敗","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseKanaBadRequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_data":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音素の長さと音高を得る","operationId":"mora_data","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Data Mora Data Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_length":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音素の長さを得る","operationId":"mora_length","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Length Mora Length Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_pitch":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音高を得る","operationId":"mora_pitch","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Pitch Mora Pitch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/synthesis":{"post":{"tags":["音声合成"],"summary":"音声合成する","operationId":"synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cancellable_synthesis":{"post":{"tags":["音声合成"],"summary":"音声合成する(キャンセル可能)","operationId":"cancellable_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Interrogative Upspeak"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/multi_synthesis":{"post":{"tags":["音声合成"],"summary":"複数まとめて音声合成する","operationId":"multi_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AudioQuery"},"title":"Queries"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_audio_query":{"post":{"tags":["クエリ作成"],"summary":"歌唱音声合成用のクエリを作成する","description":"歌唱音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま歌唱音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"sing_frame_audio_query","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Score"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameAudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_f0":{"post":{"tags":["クエリ編集"],"summary":"楽譜・歌唱音声合成用のクエリからフレームごとの基本周波数を得る","operationId":"sing_frame_f0","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sing_frame_f0_sing_frame_f0_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Response Sing Frame F0 Sing Frame F0 Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_volume":{"post":{"tags":["クエリ編集"],"summary":"楽譜・歌唱音声合成用のクエリからフレームごとの音量を得る","operationId":"sing_frame_volume","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sing_frame_volume_sing_frame_volume_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Response Sing Frame Volume Sing Frame Volume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/frame_synthesis":{"post":{"tags":["音声合成"],"summary":"Frame Synthesis","description":"歌唱音声合成を行います。","operationId":"frame_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameAudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connect_waves":{"post":{"tags":["その他"],"summary":"base64エンコードされた複数のwavデータを一つに結合する","description":"base64エンコードされたwavデータを一纏めにし、wavファイルで返します。","operationId":"connect_waves","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Waves"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/validate_kana":{"post":{"tags":["その他"],"summary":"テキストがAquesTalk 風記法に従っているか判定する","description":"テキストがAquesTalk 風記法に従っているかどうかを判定します。\n\n従っていない場合はエラーが返ります。","operationId":"validate_kana","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"判定する対象の文字列","title":"Text"},"description":"判定する対象の文字列"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Validate Kana Validate Kana Post"}}}},"400":{"description":"テキストが不正です","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseKanaBadRequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/initialize_speaker":{"post":{"tags":["その他"],"summary":"Initialize Speaker","description":"指定されたスタイルを初期化します。\n\n実行しなくても他のAPIは使用できますが、初回実行時に時間がかかることがあります。","operationId":"initialize_speaker","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"skip_reinit","in":"query","required":false,"schema":{"type":"boolean","description":"既に初期化済みのスタイルの再初期化をスキップするかどうか","default":false,"title":"Skip Reinit"},"description":"既に初期化済みのスタイルの再初期化をスキップするかどうか"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/is_initialized_speaker":{"get":{"tags":["その他"],"summary":"Is Initialized Speaker","description":"指定されたスタイルが初期化されているかどうかを返します。","operationId":"is_initialized_speaker","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Is Initialized Speaker Is Initialized Speaker Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/supported_devices":{"get":{"tags":["その他"],"summary":"Supported Devices","description":"対応デバイスの一覧を取得します。","operationId":"supported_devices","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportedDevicesInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/morphable_targets":{"post":{"tags":["音声合成"],"summary":"指定したスタイルに対してエンジン内のキャラクターがモーフィングが可能か判定する","description":"指定されたベーススタイルに対してエンジン内の各キャラクターがモーフィング機能を利用可能か返します。\n\nモーフィングの許可/禁止は`/speakers`の`speaker.supported_features.synthesis_morphing`に記載されています。\nプロパティが存在しない場合は、モーフィングが許可されているとみなします。\n返り値のスタイルIDはstring型なので注意。","operationId":"morphable_targets","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"integer"},"title":"Base Style Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MorphableTargetInfo"}},"title":"Response Morphable Targets Morphable Targets Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/synthesis_morphing":{"post":{"tags":["音声合成"],"summary":"2種類のスタイルでモーフィングした音声を合成する","description":"指定された2種類のスタイルで音声を合成、指定した割合でモーフィングした音声を得ます。\n\nモーフィングの割合は`morph_rate`で指定でき、0.0でベースのスタイル、1.0でターゲットのスタイルに近づきます。","operationId":"_synthesis_morphing","parameters":[{"name":"base_speaker","in":"query","required":true,"schema":{"type":"integer","title":"Base Speaker"}},{"name":"target_speaker","in":"query","required":true,"schema":{"type":"integer","title":"Target Speaker"}},{"name":"morph_rate","in":"query","required":true,"schema":{"type":"number","maximum":1,"minimum":0,"title":"Morph Rate"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/presets":{"get":{"tags":["その他"],"summary":"Get Presets","description":"エンジンが保持しているプリセットの設定を返します。","operationId":"get_presets","responses":{"200":{"description":"プリセットのリスト","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Preset"},"type":"array","title":"Response Get Presets Presets Get"}}}}}}},"/add_preset":{"post":{"tags":["その他"],"summary":"Add Preset","description":"新しいプリセットを追加します。","operationId":"add_preset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset","description":"新しいプリセット。プリセットIDが既存のものと重複している場合は、新規のプリセットIDが採番されます。"}}},"required":true},"responses":{"200":{"description":"追加したプリセットのプリセットID","content":{"application/json":{"schema":{"type":"integer","title":"Response Add Preset Add Preset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/update_preset":{"post":{"tags":["その他"],"summary":"Update Preset","description":"既存のプリセットを更新します。","operationId":"update_preset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset","description":"更新するプリセット。プリセットIDが更新対象と一致している必要があります。"}}},"required":true},"responses":{"200":{"description":"更新したプリセットのプリセットID","content":{"application/json":{"schema":{"type":"integer","title":"Response Update Preset Update Preset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/delete_preset":{"post":{"tags":["その他"],"summary":"Delete Preset","description":"既存のプリセットを削除します。","operationId":"delete_preset","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","description":"削除するプリセットのプリセットID","title":"Id"},"description":"削除するプリセットのプリセットID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speakers":{"get":{"tags":["その他"],"summary":"Speakers","description":"喋れるキャラクターの情報の一覧を返します。","operationId":"speakers","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"},"title":"Response Speakers Speakers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speaker_info":{"get":{"tags":["その他"],"summary":"Speaker Info","description":"UUID で指定された喋れるキャラクターの情報を返します。\n\n画像や音声はresource_formatで指定した形式で返されます。","operationId":"speaker_info","parameters":[{"name":"speaker_uuid","in":"query","required":true,"schema":{"type":"string","title":"Speaker Uuid"}},{"name":"resource_format","in":"query","required":false,"schema":{"enum":["base64","url"],"type":"string","default":"base64","title":"Resource Format"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/singers":{"get":{"tags":["その他"],"summary":"Singers","description":"歌えるキャラクターの情報の一覧を返します。","operationId":"singers","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"},"title":"Response Singers Singers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/singer_info":{"get":{"tags":["その他"],"summary":"Singer Info","description":"UUID で指定された歌えるキャラクターの情報を返します。\n\n画像や音声はresource_formatで指定した形式で返されます。","operationId":"singer_info","parameters":[{"name":"speaker_uuid","in":"query","required":true,"schema":{"type":"string","title":"Speaker Uuid"}},{"name":"resource_format","in":"query","required":false,"schema":{"enum":["base64","url"],"type":"string","default":"base64","title":"Resource Format"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/downloadable_libraries":{"get":{"tags":["音声ライブラリ管理"],"summary":"Downloadable Libraries","description":"ダウンロード可能な音声ライブラリの情報を返します。","operationId":"downloadable_libraries","responses":{"200":{"description":"ダウンロード可能な音声ライブラリの情報リスト","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DownloadableLibraryInfo"},"type":"array","title":"Response Downloadable Libraries Downloadable Libraries Get"}}}}}}},"/installed_libraries":{"get":{"tags":["音声ライブラリ管理"],"summary":"Installed Libraries","description":"インストールした音声ライブラリの情報を返します。","operationId":"installed_libraries","responses":{"200":{"description":"インストールした音声ライブラリの情報","content":{"application/json":{"schema":{"additionalProperties":{"$ref":"#/components/schemas/InstalledLibraryInfo"},"type":"object","title":"Response Installed Libraries Installed Libraries Get"}}}}}}},"/install_library/{library_uuid}":{"post":{"tags":["音声ライブラリ管理"],"summary":"Install Library","description":"音声ライブラリをインストールします。\n\n音声ライブラリのZIPファイルをリクエストボディとして送信してください。","operationId":"install_library","parameters":[{"name":"library_uuid","in":"path","required":true,"schema":{"type":"string","description":"音声ライブラリのID","title":"Library Uuid"},"description":"音声ライブラリのID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uninstall_library/{library_uuid}":{"post":{"tags":["音声ライブラリ管理"],"summary":"Uninstall Library","description":"音声ライブラリをアンインストールします。","operationId":"uninstall_library","parameters":[{"name":"library_uuid","in":"path","required":true,"schema":{"type":"string","description":"音声ライブラリのID","title":"Library Uuid"},"description":"音声ライブラリのID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user_dict":{"get":{"tags":["ユーザー辞書"],"summary":"Get User Dict Words","description":"ユーザー辞書に登録されている単語の一覧を返します。\n\n単語の表層形(surface)は正規化済みの物を返します。","operationId":"get_user_dict_words","responses":{"200":{"description":"単語のUUIDとその詳細","content":{"application/json":{"schema":{"additionalProperties":{"$ref":"#/components/schemas/UserDictWord"},"type":"object","title":"Response Get User Dict Words User Dict Get"}}}}}}},"/user_dict_word":{"post":{"tags":["ユーザー辞書"],"summary":"Add User Dict Word","description":"ユーザー辞書に言葉を追加します。","operationId":"add_user_dict_word","parameters":[{"name":"surface","in":"query","required":true,"schema":{"type":"string","description":"言葉の表層形","title":"Surface"},"description":"言葉の表層形"},{"name":"pronunciation","in":"query","required":true,"schema":{"type":"string","description":"言葉の発音(カタカナ)","title":"Pronunciation"},"description":"言葉の発音(カタカナ)"},{"name":"accent_type","in":"query","required":true,"schema":{"type":"integer","description":"アクセント型(音が下がる場所を指す)","title":"Accent Type"},"description":"アクセント型(音が下がる場所を指す)"},{"name":"word_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/WordTypes","description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},"description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},{"name":"priority","in":"query","required":false,"schema":{"type":"integer","description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨","maximum":10,"minimum":0,"title":"Priority"},"description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Add User Dict Word User Dict Word Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user_dict_word/{word_uuid}":{"put":{"tags":["ユーザー辞書"],"summary":"Rewrite User Dict Word","description":"ユーザー辞書に登録されている言葉を更新します。","operationId":"rewrite_user_dict_word","parameters":[{"name":"word_uuid","in":"path","required":true,"schema":{"type":"string","description":"更新する言葉のUUID","title":"Word Uuid"},"description":"更新する言葉のUUID"},{"name":"surface","in":"query","required":true,"schema":{"type":"string","description":"言葉の表層形","title":"Surface"},"description":"言葉の表層形"},{"name":"pronunciation","in":"query","required":true,"schema":{"type":"string","description":"言葉の発音(カタカナ)","title":"Pronunciation"},"description":"言葉の発音(カタカナ)"},{"name":"accent_type","in":"query","required":true,"schema":{"type":"integer","description":"アクセント型(音が下がる場所を指す)","title":"Accent Type"},"description":"アクセント型(音が下がる場所を指す)"},{"name":"word_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/WordTypes","description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},"description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},{"name":"priority","in":"query","required":false,"schema":{"type":"integer","description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨。","maximum":10,"minimum":0,"title":"Priority"},"description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨。"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ユーザー辞書"],"summary":"Delete User Dict Word","description":"ユーザー辞書に登録されている言葉を削除します。","operationId":"delete_user_dict_word","parameters":[{"name":"word_uuid","in":"path","required":true,"schema":{"type":"string","description":"削除する言葉のUUID","title":"Word Uuid"},"description":"削除する言葉のUUID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/import_user_dict":{"post":{"tags":["ユーザー辞書"],"summary":"Import User Dict Words","description":"他のユーザー辞書をインポートします。","operationId":"import_user_dict_words","parameters":[{"name":"override","in":"query","required":true,"schema":{"type":"boolean","description":"重複したエントリがあった場合、上書きするかどうか","title":"Override"},"description":"重複したエントリがあった場合、上書きするかどうか"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/UserDictWord"},"description":"インポートするユーザー辞書のデータ","title":"Import Dict Data"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/version":{"get":{"tags":["その他"],"summary":"Version","description":"エンジンのバージョンを取得します。","operationId":"version","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Version Version Get"}}}}}}},"/core_versions":{"get":{"tags":["その他"],"summary":"Core Versions","description":"利用可能なコアのバージョン一覧を取得します。","operationId":"core_versions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Core Versions Core Versions Get"}}}}}}},"/engine_manifest":{"get":{"tags":["その他"],"summary":"Engine Manifest","description":"エンジンマニフェストを取得します。","operationId":"engine_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngineManifest"}}}}}}},"/setting":{"get":{"tags":["設定"],"summary":"Setting Get","description":"設定ページを返します。","operationId":"setting_get","responses":{"200":{"description":"Successful Response"}}},"post":{"tags":["設定"],"summary":"Setting Post","description":"設定を更新します。","operationId":"setting_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_setting_post_setting_post"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"tags":["その他"],"summary":"Get Portal Page","description":"ポータルページを返します。","operationId":"get_portal_page","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AccentPhrase":{"properties":{"moras":{"items":{"$ref":"#/components/schemas/Mora"},"type":"array","title":"Moras","description":"モーラのリスト"},"accent":{"type":"integer","title":"Accent","description":"アクセント箇所"},"pause_mora":{"$ref":"#/components/schemas/Mora","title":"Pause Mora","description":"後ろに無音を付けるかどうか"},"is_interrogative":{"type":"boolean","title":"Is Interrogative","description":"疑問系かどうか","default":false}},"type":"object","required":["moras","accent"],"title":"AccentPhrase","description":"アクセント句ごとの情報。"},"AudioQuery":{"properties":{"accent_phrases":{"items":{"$ref":"#/components/schemas/AccentPhrase"},"type":"array","title":"Accent Phrases","description":"アクセント句のリスト"},"speedScale":{"type":"number","title":"Speedscale","description":"全体の話速"},"pitchScale":{"type":"number","title":"Pitchscale","description":"全体の音高"},"intonationScale":{"type":"number","title":"Intonationscale","description":"全体の抑揚"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"prePhonemeLength":{"type":"number","title":"Prephonemelength","description":"音声の前の無音時間"},"postPhonemeLength":{"type":"number","title":"Postphonemelength","description":"音声の後の無音時間"},"pauseLength":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pauselength","description":"句読点などの無音時間。nullのときは無視される。デフォルト値はnull"},"pauseLengthScale":{"type":"number","title":"Pauselengthscale","description":"句読点などの無音時間(倍率)。デフォルト値は1","default":1},"outputSamplingRate":{"type":"integer","title":"Outputsamplingrate","description":"音声データの出力サンプリングレート"},"outputStereo":{"type":"boolean","title":"Outputstereo","description":"音声データをステレオ出力するか否か"},"kana":{"type":"string","title":"Kana","description":"[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される"}},"type":"object","required":["accent_phrases","speedScale","pitchScale","intonationScale","volumeScale","prePhonemeLength","postPhonemeLength","outputSamplingRate","outputStereo"],"title":"AudioQuery","description":"音声合成用のクエリ。"},"Body_setting_post_setting_post":{"properties":{"cors_policy_mode":{"$ref":"#/components/schemas/CorsPolicyMode"},"allow_origin":{"type":"string","title":"Allow Origin"}},"type":"object","required":["cors_policy_mode"],"title":"Body_setting_post_setting_post"},"Body_sing_frame_f0_sing_frame_f0_post":{"properties":{"score":{"$ref":"#/components/schemas/Score"},"frame_audio_query":{"$ref":"#/components/schemas/FrameAudioQuery"}},"type":"object","required":["score","frame_audio_query"],"title":"Body_sing_frame_f0_sing_frame_f0_post"},"Body_sing_frame_volume_sing_frame_volume_post":{"properties":{"score":{"$ref":"#/components/schemas/Score"},"frame_audio_query":{"$ref":"#/components/schemas/FrameAudioQuery"}},"type":"object","required":["score","frame_audio_query"],"title":"Body_sing_frame_volume_sing_frame_volume_post"},"CorsPolicyMode":{"type":"string","enum":["all","localapps"],"title":"CorsPolicyMode","description":"CORSの許可モード。"},"DownloadableLibraryInfo":{"properties":{"name":{"type":"string","title":"Name","description":"音声ライブラリの名前"},"uuid":{"type":"string","title":"Uuid","description":"音声ライブラリのUUID"},"version":{"type":"string","title":"Version","description":"音声ライブラリのバージョン"},"download_url":{"type":"string","title":"Download Url","description":"音声ライブラリのダウンロードURL"},"bytes":{"type":"integer","title":"Bytes","description":"音声ライブラリのバイト数"},"speakers":{"items":{"$ref":"#/components/schemas/LibrarySpeaker"},"type":"array","title":"Speakers","description":"音声ライブラリに含まれるキャラクターのリスト"}},"type":"object","required":["name","uuid","version","download_url","bytes","speakers"],"title":"DownloadableLibraryInfo","description":"ダウンロード可能な音声ライブラリの情報。"},"EngineManifest":{"properties":{"manifest_version":{"type":"string","title":"Manifest Version","description":"マニフェストのバージョン"},"name":{"type":"string","title":"Name","description":"エンジン名"},"brand_name":{"type":"string","title":"Brand Name","description":"ブランド名"},"uuid":{"type":"string","title":"Uuid","description":"エンジンのUUID"},"url":{"type":"string","title":"Url","description":"エンジンのURL"},"icon":{"type":"string","title":"Icon","description":"エンジンのアイコンをBASE64エンコードしたもの"},"default_sampling_rate":{"type":"integer","title":"Default Sampling Rate","description":"デフォルトのサンプリング周波数"},"frame_rate":{"type":"number","title":"Frame Rate","description":"エンジンのフレームレート"},"terms_of_service":{"type":"string","title":"Terms Of Service","description":"エンジンの利用規約"},"update_infos":{"items":{"$ref":"#/components/schemas/UpdateInfo"},"type":"array","title":"Update Infos","description":"エンジンのアップデート情報"},"dependency_licenses":{"items":{"$ref":"#/components/schemas/LicenseInfo"},"type":"array","title":"Dependency Licenses","description":"依存関係のライセンス情報"},"supported_vvlib_manifest_version":{"type":"string","title":"Supported Vvlib Manifest Version","description":"エンジンが対応するvvlibのバージョン"},"supported_features":{"$ref":"#/components/schemas/SupportedFeatures","description":"エンジンが持つ機能"}},"type":"object","required":["manifest_version","name","brand_name","uuid","url","icon","default_sampling_rate","frame_rate","terms_of_service","update_infos","dependency_licenses","supported_features"],"title":"EngineManifest","description":"エンジン自体に関する情報。"},"FrameAudioQuery":{"properties":{"f0":{"items":{"type":"number"},"type":"array","title":"F0","description":"フレームごとの基本周波数"},"volume":{"items":{"type":"number"},"type":"array","title":"Volume","description":"フレームごとの音量"},"phonemes":{"items":{"$ref":"#/components/schemas/FramePhoneme"},"type":"array","title":"Phonemes","description":"音素のリスト"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"outputSamplingRate":{"type":"integer","title":"Outputsamplingrate","description":"音声データの出力サンプリングレート"},"outputStereo":{"type":"boolean","title":"Outputstereo","description":"音声データをステレオ出力するか否か"}},"type":"object","required":["f0","volume","phonemes","volumeScale","outputSamplingRate","outputStereo"],"title":"FrameAudioQuery","description":"フレームごとの音声合成用のクエリ。"},"FramePhoneme":{"properties":{"phoneme":{"type":"string","title":"Phoneme","description":"音素"},"frame_length":{"type":"integer","title":"Frame Length","description":"音素のフレーム長"},"note_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note Id","description":"音符のID"}},"type":"object","required":["phoneme","frame_length"],"title":"FramePhoneme","description":"音素の情報。"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InstalledLibraryInfo":{"properties":{"name":{"type":"string","title":"Name","description":"音声ライブラリの名前"},"uuid":{"type":"string","title":"Uuid","description":"音声ライブラリのUUID"},"version":{"type":"string","title":"Version","description":"音声ライブラリのバージョン"},"download_url":{"type":"string","title":"Download Url","description":"音声ライブラリのダウンロードURL"},"bytes":{"type":"integer","title":"Bytes","description":"音声ライブラリのバイト数"},"speakers":{"items":{"$ref":"#/components/schemas/LibrarySpeaker"},"type":"array","title":"Speakers","description":"音声ライブラリに含まれるキャラクターのリスト"},"uninstallable":{"type":"boolean","title":"Uninstallable","description":"アンインストール可能かどうか"}},"type":"object","required":["name","uuid","version","download_url","bytes","speakers","uninstallable"],"title":"InstalledLibraryInfo","description":"インストール済み音声ライブラリの情報。"},"LibrarySpeaker":{"properties":{"speaker":{"$ref":"#/components/schemas/Speaker"},"speaker_info":{"$ref":"#/components/schemas/SpeakerInfo"}},"type":"object","required":["speaker","speaker_info"],"title":"LibrarySpeaker","description":"音声ライブラリに含まれるキャラクターの情報。"},"LicenseInfo":{"properties":{"name":{"type":"string","title":"Name","description":"依存ライブラリ名"},"version":{"type":"string","title":"Version","description":"依存ライブラリのバージョン"},"license":{"type":"string","title":"License","description":"依存ライブラリのライセンス名"},"text":{"type":"string","title":"Text","description":"依存ライブラリのライセンス本文"}},"type":"object","required":["name","text"],"title":"LicenseInfo","description":"依存ライブラリのライセンス情報。"},"Mora":{"properties":{"text":{"type":"string","title":"Text","description":"文字"},"consonant":{"type":"string","title":"Consonant","description":"子音の音素"},"consonant_length":{"type":"number","title":"Consonant Length","description":"子音の長さ"},"vowel":{"type":"string","title":"Vowel","description":"母音の音素"},"vowel_length":{"type":"number","title":"Vowel Length","description":"母音の長さ"},"pitch":{"type":"number","title":"Pitch","description":"音高"}},"type":"object","required":["text","vowel","vowel_length","pitch"],"title":"Mora","description":"モーラ(子音+母音)ごとの情報。"},"MorphableTargetInfo":{"properties":{"is_morphable":{"type":"boolean","title":"Is Morphable","description":"指定したキャラクターに対してモーフィングの可否"}},"type":"object","required":["is_morphable"],"title":"MorphableTargetInfo","description":"モーフィング相手としての情報。"},"Note":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"ID"},"key":{"type":"integer","title":"Key","description":"音階"},"frame_length":{"type":"integer","title":"Frame Length","description":"音符のフレーム長"},"lyric":{"type":"string","title":"Lyric","description":"音符の歌詞"}},"type":"object","required":["frame_length","lyric"],"title":"Note","description":"音符ごとの情報。"},"ParseKanaBadRequest":{"properties":{"text":{"type":"string","title":"Text","description":"エラーメッセージ"},"error_name":{"type":"string","title":"Error Name","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 | 処理時に無限ループになってしまいました...バグ報告をお願いします。 |"},"error_args":{"additionalProperties":{"type":"string"},"type":"object","title":"Error Args","description":"エラーを起こした箇所"}},"type":"object","required":["text","error_name","error_args"],"title":"ParseKanaBadRequest","description":"読み仮名のパースに失敗した。"},"Preset":{"properties":{"id":{"type":"integer","title":"Id","description":"プリセットID"},"name":{"type":"string","title":"Name","description":"プリセット名"},"speaker_uuid":{"type":"string","title":"Speaker Uuid","description":"キャラクターのUUID"},"style_id":{"type":"integer","title":"Style Id","description":"スタイルID"},"speedScale":{"type":"number","title":"Speedscale","description":"全体の話速"},"pitchScale":{"type":"number","title":"Pitchscale","description":"全体の音高"},"intonationScale":{"type":"number","title":"Intonationscale","description":"全体の抑揚"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"prePhonemeLength":{"type":"number","title":"Prephonemelength","description":"音声の前の無音時間"},"postPhonemeLength":{"type":"number","title":"Postphonemelength","description":"音声の後の無音時間"},"pauseLength":{"type":"number","title":"Pauselength","description":"句読点などの無音時間"},"pauseLengthScale":{"type":"number","title":"Pauselengthscale","description":"句読点などの無音時間(倍率)","default":1}},"type":"object","required":["id","name","speaker_uuid","style_id","speedScale","pitchScale","intonationScale","volumeScale","prePhonemeLength","postPhonemeLength"],"title":"Preset","description":"プリセット情報。"},"Score":{"properties":{"notes":{"items":{"$ref":"#/components/schemas/Note"},"type":"array","title":"Notes","description":"音符のリスト"}},"type":"object","required":["notes"],"title":"Score","description":"楽譜情報。"},"Speaker":{"properties":{"name":{"type":"string","title":"Name","description":"名前"},"speaker_uuid":{"type":"string","title":"Speaker Uuid","description":"キャラクターのUUID"},"styles":{"items":{"$ref":"#/components/schemas/SpeakerStyle"},"type":"array","title":"Styles","description":"スタイルの一覧"},"version":{"type":"string","title":"Version","description":"キャラクターのバージョン"},"supported_features":{"$ref":"#/components/schemas/SpeakerSupportedFeatures","description":"キャラクターの対応機能"}},"type":"object","required":["name","speaker_uuid","styles","version"],"title":"Speaker","description":"キャラクター情報"},"SpeakerInfo":{"properties":{"policy":{"type":"string","title":"Policy","description":"policy.md"},"portrait":{"type":"string","title":"Portrait","description":"立ち絵画像をbase64エンコードしたもの、あるいはURL"},"style_infos":{"items":{"$ref":"#/components/schemas/StyleInfo"},"type":"array","title":"Style Infos","description":"スタイルの追加情報"}},"type":"object","required":["policy","portrait","style_infos"],"title":"SpeakerInfo","description":"キャラクターの追加情報"},"SpeakerStyle":{"properties":{"name":{"type":"string","title":"Name","description":"スタイル名"},"id":{"type":"integer","title":"Id","description":"スタイルID"},"type":{"type":"string","enum":["talk","singing_teacher","frame_decode","sing"],"title":"Type","description":"スタイルの種類。talk:音声合成クエリの作成と音声合成が可能。singing_teacher:歌唱音声合成用のクエリの作成が可能。frame_decode:歌唱音声合成が可能。sing:歌唱音声合成用のクエリの作成と歌唱音声合成が可能。","default":"talk"}},"type":"object","required":["name","id"],"title":"SpeakerStyle","description":"キャラクターのスタイル情報"},"SpeakerSupportedFeatures":{"properties":{"permitted_synthesis_morphing":{"type":"string","enum":["ALL","SELF_ONLY","NOTHING"],"title":"Permitted Synthesis Morphing","description":"モーフィング機能への対応。'ALL' は「全て許可」、'SELF_ONLY' は「同じキャラクター内でのみ許可」、'NOTHING' は「全て禁止」","default":"ALL"}},"type":"object","title":"SpeakerSupportedFeatures","description":"キャラクターの対応機能の情報"},"StyleInfo":{"properties":{"id":{"type":"integer","title":"Id","description":"スタイルID"},"icon":{"type":"string","title":"Icon","description":"このスタイルのアイコンをbase64エンコードしたもの、あるいはURL"},"portrait":{"type":"string","title":"Portrait","description":"このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL"},"voice_samples":{"items":{"type":"string"},"type":"array","title":"Voice Samples","description":"サンプル音声をbase64エンコードしたもの、あるいはURL"}},"type":"object","required":["id","icon","voice_samples"],"title":"StyleInfo","description":"スタイルの追加情報"},"SupportedDevicesInfo":{"properties":{"cpu":{"type":"boolean","title":"Cpu","description":"CPUに対応しているか"},"cuda":{"type":"boolean","title":"Cuda","description":"CUDA(Nvidia GPU)に対応しているか"},"dml":{"type":"boolean","title":"Dml","description":"DirectML(Nvidia GPU/Radeon GPU等)に対応しているか"}},"type":"object","required":["cpu","cuda","dml"],"title":"SupportedDevicesInfo","description":"対応しているデバイスの情報。"},"SupportedFeatures":{"properties":{"adjust_mora_pitch":{"type":"boolean","title":"Adjust Mora Pitch","description":"モーラごとの音高の調整"},"adjust_phoneme_length":{"type":"boolean","title":"Adjust Phoneme Length","description":"音素ごとの長さの調整"},"adjust_speed_scale":{"type":"boolean","title":"Adjust Speed Scale","description":"全体の話速の調整"},"adjust_pitch_scale":{"type":"boolean","title":"Adjust Pitch Scale","description":"全体の音高の調整"},"adjust_intonation_scale":{"type":"boolean","title":"Adjust Intonation Scale","description":"全体の抑揚の調整"},"adjust_volume_scale":{"type":"boolean","title":"Adjust Volume Scale","description":"全体の音量の調整"},"adjust_pause_length":{"type":"boolean","title":"Adjust Pause Length","description":"句読点などの無音時間の調整"},"interrogative_upspeak":{"type":"boolean","title":"Interrogative Upspeak","description":"疑問文の自動調整"},"synthesis_morphing":{"type":"boolean","title":"Synthesis Morphing","description":"2種類のスタイルでモーフィングした音声を合成"},"sing":{"type":"boolean","title":"Sing","description":"歌唱音声合成"},"manage_library":{"type":"boolean","title":"Manage Library","description":"音声ライブラリのインストール・アンインストール"},"return_resource_url":{"type":"boolean","title":"Return Resource Url","description":"キャラクター情報のリソースをURLで返送"},"apply_katakana_english":{"type":"boolean","title":"Apply Katakana English","description":"未知の英単語をカタカナ読みに変換"}},"type":"object","required":["adjust_mora_pitch","adjust_phoneme_length","adjust_speed_scale","adjust_pitch_scale","adjust_intonation_scale","adjust_volume_scale","interrogative_upspeak","synthesis_morphing"],"title":"SupportedFeatures","description":"エンジンが持つ機能の一覧。"},"UpdateInfo":{"properties":{"version":{"type":"string","title":"Version","description":"エンジンのバージョン名"},"descriptions":{"items":{"type":"string"},"type":"array","title":"Descriptions","description":"アップデートの詳細についての説明"},"contributors":{"items":{"type":"string"},"type":"array","title":"Contributors","description":"貢献者名"}},"type":"object","required":["version","descriptions"],"title":"UpdateInfo","description":"エンジンのアップデート情報。"},"UserDictWord":{"properties":{"surface":{"type":"string","title":"Surface","description":"表層形"},"priority":{"type":"integer","maximum":10,"minimum":0,"title":"Priority","description":"優先度"},"context_id":{"type":"integer","title":"Context Id","description":"文脈ID","default":1348},"part_of_speech":{"type":"string","title":"Part Of Speech","description":"品詞"},"part_of_speech_detail_1":{"type":"string","title":"Part Of Speech Detail 1","description":"品詞細分類1"},"part_of_speech_detail_2":{"type":"string","title":"Part Of Speech Detail 2","description":"品詞細分類2"},"part_of_speech_detail_3":{"type":"string","title":"Part Of Speech Detail 3","description":"品詞細分類3"},"inflectional_type":{"type":"string","title":"Inflectional Type","description":"活用型"},"inflectional_form":{"type":"string","title":"Inflectional Form","description":"活用形"},"stem":{"type":"string","title":"Stem","description":"原形"},"yomi":{"type":"string","title":"Yomi","description":"読み"},"pronunciation":{"type":"string","title":"Pronunciation","description":"発音"},"accent_type":{"type":"integer","title":"Accent Type","description":"アクセント型"},"mora_count":{"type":"integer","title":"Mora Count","description":"モーラ数"},"accent_associative_rule":{"type":"string","title":"Accent Associative Rule","description":"アクセント結合規則"}},"type":"object","required":["surface","priority","part_of_speech","part_of_speech_detail_1","part_of_speech_detail_2","part_of_speech_detail_3","inflectional_type","inflectional_form","stem","yomi","pronunciation","accent_type","accent_associative_rule"],"title":"UserDictWord","description":"辞書のコンパイルに使われる情報。"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WordTypes":{"type":"string","enum":["PROPER_NOUN","COMMON_NOUN","VERB","ADJECTIVE","SUFFIX"],"title":"WordTypes","description":"品詞"},"BaseLibraryInfo":{"description":"音声ライブラリの情報。","properties":{"name":{"description":"音声ライブラリの名前","title":"Name","type":"string"},"uuid":{"description":"音声ライブラリのUUID","title":"Uuid","type":"string"},"version":{"description":"音声ライブラリのバージョン","title":"Version","type":"string"},"download_url":{"description":"音声ライブラリのダウンロードURL","title":"Download Url","type":"string"},"bytes":{"description":"音声ライブラリのバイト数","title":"Bytes","type":"integer"},"speakers":{"description":"音声ライブラリに含まれるキャラクターのリスト","items":{"$ref":"#/components/schemas/LibrarySpeaker"},"title":"Speakers","type":"array"}},"required":["name","uuid","version","download_url","bytes","speakers"],"title":"BaseLibraryInfo","type":"object"},"VvlibManifest":{"description":"vvlib(VOICEVOX Library)に関する情報。","properties":{"manifest_version":{"description":"マニフェストバージョン","title":"Manifest Version","type":"string"},"name":{"description":"音声ライブラリ名","title":"Name","type":"string"},"version":{"description":"音声ライブラリバージョン","title":"Version","type":"string"},"uuid":{"description":"音声ライブラリのUUID","title":"Uuid","type":"string"},"brand_name":{"description":"エンジンのブランド名","title":"Brand Name","type":"string"},"engine_name":{"description":"エンジン名","title":"Engine Name","type":"string"},"engine_uuid":{"description":"エンジンのUUID","title":"Engine Uuid","type":"string"}},"required":["manifest_version","name","version","uuid","brand_name","engine_name","engine_uuid"],"title":"VvlibManifest","type":"object"}}}}
+{"openapi":"3.1.0","info":{"title":"VOICEVOX ENGINE OSS","description":"VOICEVOX OSS の音声合成エンジンです。","version":"latest"},"paths":{"/audio_query":{"post":{"tags":["クエリ作成"],"summary":"音声合成用のクエリを作成する","description":"音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"audio_query","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audio_query_from_preset":{"post":{"tags":["クエリ作成"],"summary":"音声合成用のクエリをプリセットを用いて作成する","description":"音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"audio_query_from_preset","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"preset_id","in":"query","required":true,"schema":{"type":"integer","title":"Preset Id"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accent_phrases":{"post":{"tags":["クエリ編集"],"summary":"テキストからアクセント句を得る","description":"テキストからアクセント句を得ます。\n\nis_kanaが`true`のとき、テキストは次のAquesTalk 風記法で解釈されます。デフォルトは`false`です。\n* 全てのカナはカタカナで記述される\n* アクセント句は`/`または`、`で区切る。`、`で区切った場合に限り無音区間が挿入される。\n* カナの手前に`_`を入れるとそのカナは無声化される\n* アクセント位置を`'`で指定する。全てのアクセント句にはアクセント位置を1つ指定する必要がある。\n* アクセント句末に`?`(全角)を入れることにより疑問文の発音ができる。\nenable_katakana_englishが`true`のとき、テキスト中の読みが不明な英単語をカタカナ読みにします。デフォルトは`true`です。\nis_kanaが`true`のとき、enable_katakana_englishの値は無視されます。","operationId":"accent_phrases","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","title":"Text"}},{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"is_kana","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Is Kana"}},{"name":"enable_katakana_english","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Katakana English"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Accent Phrases Accent Phrases Post"}}}},"400":{"description":"読み仮名のパースに失敗","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseKanaBadRequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_data":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音素の長さと音高を得る","operationId":"mora_data","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Data Mora Data Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_length":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音素の長さを得る","operationId":"mora_length","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Length Mora Length Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mora_pitch":{"post":{"tags":["クエリ編集"],"summary":"アクセント句から音高を得る","operationId":"mora_pitch","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Accent Phrases"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccentPhrase"},"title":"Response Mora Pitch Mora Pitch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/synthesis":{"post":{"tags":["音声合成"],"summary":"音声合成する","operationId":"synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cancellable_synthesis":{"post":{"tags":["音声合成"],"summary":"音声合成する(キャンセル可能)","operationId":"cancellable_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Enable Interrogative Upspeak"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/multi_synthesis":{"post":{"tags":["音声合成"],"summary":"複数まとめて音声合成する","operationId":"multi_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AudioQuery"},"title":"Queries"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_audio_query":{"post":{"tags":["クエリ作成"],"summary":"歌唱音声合成用のクエリを作成する","description":"歌唱音声合成用のクエリの初期値を得ます。ここで得られたクエリはそのまま歌唱音声合成に利用できます。各値の意味は`Schemas`を参照してください。","operationId":"sing_frame_audio_query","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Score"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameAudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_f0":{"post":{"tags":["クエリ編集"],"summary":"楽譜・歌唱音声合成用のクエリからフレームごとの基本周波数を得る","operationId":"sing_frame_f0","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sing_frame_f0_sing_frame_f0_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Response Sing Frame F0 Sing Frame F0 Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sing_frame_volume":{"post":{"tags":["クエリ編集"],"summary":"楽譜・歌唱音声合成用のクエリからフレームごとの音量を得る","operationId":"sing_frame_volume","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_sing_frame_volume_sing_frame_volume_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"number"},"title":"Response Sing Frame Volume Sing Frame Volume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/frame_synthesis":{"post":{"tags":["音声合成"],"summary":"Frame Synthesis","description":"歌唱音声合成を行います。","operationId":"frame_synthesis","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameAudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connect_waves":{"post":{"tags":["その他"],"summary":"base64エンコードされた複数のwavデータを一つに結合する","description":"base64エンコードされたwavデータを一纏めにし、wavファイルで返します。","operationId":"connect_waves","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Waves"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/validate_kana":{"post":{"tags":["その他"],"summary":"テキストがAquesTalk 風記法に従っているか判定する","description":"テキストがAquesTalk 風記法に従っているかどうかを判定します。\n\n従っていない場合はエラーが返ります。","operationId":"validate_kana","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","description":"判定する対象の文字列","title":"Text"},"description":"判定する対象の文字列"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Validate Kana Validate Kana Post"}}}},"400":{"description":"テキストが不正です","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseKanaBadRequest"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/initialize_speaker":{"post":{"tags":["その他"],"summary":"Initialize Speaker","description":"指定されたスタイルを初期化します。\n\n実行しなくても他のAPIは使用できますが、初回実行時に時間がかかることがあります。","operationId":"initialize_speaker","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"skip_reinit","in":"query","required":false,"schema":{"type":"boolean","description":"既に初期化済みのスタイルの再初期化をスキップするかどうか","default":false,"title":"Skip Reinit"},"description":"既に初期化済みのスタイルの再初期化をスキップするかどうか"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/is_initialized_speaker":{"get":{"tags":["その他"],"summary":"Is Initialized Speaker","description":"指定されたスタイルが初期化されているかどうかを返します。","operationId":"is_initialized_speaker","parameters":[{"name":"speaker","in":"query","required":true,"schema":{"type":"integer","title":"Speaker"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"boolean","title":"Response Is Initialized Speaker Is Initialized Speaker Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/supported_devices":{"get":{"tags":["その他"],"summary":"Supported Devices","description":"対応デバイスの一覧を取得します。","operationId":"supported_devices","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportedDevicesInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/guide":{"post":{"tags":["クエリ編集"],"summary":"参考音声に合わせて発音タイミングとイントネーションを自動調整したAudioQueryを返します","operationId":"guide","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_guide_guide_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/morphable_targets":{"post":{"tags":["音声合成"],"summary":"指定したスタイルに対してエンジン内のキャラクターがモーフィングが可能か判定する","description":"指定されたベーススタイルに対してエンジン内の各キャラクターがモーフィング機能を利用可能か返します。\n\nモーフィングの許可/禁止は`/speakers`の`speaker.supported_features.synthesis_morphing`に記載されています。\nプロパティが存在しない場合は、モーフィングが許可されているとみなします。\n返り値のスタイルIDはstring型なので注意。","operationId":"morphable_targets","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"integer"},"title":"Base Style Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/MorphableTargetInfo"}},"title":"Response Morphable Targets Morphable Targets Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/synthesis_morphing":{"post":{"tags":["音声合成"],"summary":"2種類のスタイルでモーフィングした音声を合成する","description":"指定された2種類のスタイルで音声を合成、指定した割合でモーフィングした音声を得ます。\n\nモーフィングの割合は`morph_rate`で指定でき、0.0でベースのスタイル、1.0でターゲットのスタイルに近づきます。","operationId":"_synthesis_morphing","parameters":[{"name":"base_speaker","in":"query","required":true,"schema":{"type":"integer","title":"Base Speaker"}},{"name":"target_speaker","in":"query","required":true,"schema":{"type":"integer","title":"Target Speaker"}},{"name":"morph_rate","in":"query","required":true,"schema":{"type":"number","maximum":1,"minimum":0,"title":"Morph Rate"}},{"name":"enable_interrogative_upspeak","in":"query","required":false,"schema":{"type":"boolean","description":"疑問系のテキストが与えられたら語尾を自動調整する","default":true,"title":"Enable Interrogative Upspeak"},"description":"疑問系のテキストが与えられたら語尾を自動調整する"},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/presets":{"get":{"tags":["その他"],"summary":"Get Presets","description":"エンジンが保持しているプリセットの設定を返します。","operationId":"get_presets","responses":{"200":{"description":"プリセットのリスト","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Preset"},"type":"array","title":"Response Get Presets Presets Get"}}}}}}},"/add_preset":{"post":{"tags":["その他"],"summary":"Add Preset","description":"新しいプリセットを追加します。","operationId":"add_preset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset","description":"新しいプリセット。プリセットIDが既存のものと重複している場合は、新規のプリセットIDが採番されます。"}}},"required":true},"responses":{"200":{"description":"追加したプリセットのプリセットID","content":{"application/json":{"schema":{"type":"integer","title":"Response Add Preset Add Preset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/update_preset":{"post":{"tags":["その他"],"summary":"Update Preset","description":"既存のプリセットを更新します。","operationId":"update_preset","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset","description":"更新するプリセット。プリセットIDが更新対象と一致している必要があります。"}}},"required":true},"responses":{"200":{"description":"更新したプリセットのプリセットID","content":{"application/json":{"schema":{"type":"integer","title":"Response Update Preset Update Preset Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/delete_preset":{"post":{"tags":["その他"],"summary":"Delete Preset","description":"既存のプリセットを削除します。","operationId":"delete_preset","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"integer","description":"削除するプリセットのプリセットID","title":"Id"},"description":"削除するプリセットのプリセットID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speakers":{"get":{"tags":["その他"],"summary":"Speakers","description":"喋れるキャラクターの情報の一覧を返します。","operationId":"speakers","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"},"title":"Response Speakers Speakers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/speaker_info":{"get":{"tags":["その他"],"summary":"Speaker Info","description":"UUID で指定された喋れるキャラクターの情報を返します。\n\n画像や音声はresource_formatで指定した形式で返されます。","operationId":"speaker_info","parameters":[{"name":"speaker_uuid","in":"query","required":true,"schema":{"type":"string","title":"Speaker Uuid"}},{"name":"resource_format","in":"query","required":false,"schema":{"enum":["base64","url"],"type":"string","default":"base64","title":"Resource Format"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/singers":{"get":{"tags":["その他"],"summary":"Singers","description":"歌えるキャラクターの情報の一覧を返します。","operationId":"singers","parameters":[{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"},"title":"Response Singers Singers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/singer_info":{"get":{"tags":["その他"],"summary":"Singer Info","description":"UUID で指定された歌えるキャラクターの情報を返します。\n\n画像や音声はresource_formatで指定した形式で返されます。","operationId":"singer_info","parameters":[{"name":"speaker_uuid","in":"query","required":true,"schema":{"type":"string","title":"Speaker Uuid"}},{"name":"resource_format","in":"query","required":false,"schema":{"enum":["base64","url"],"type":"string","default":"base64","title":"Resource Format"}},{"name":"core_version","in":"query","required":false,"schema":{"type":"string","title":"Core Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeakerInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/downloadable_libraries":{"get":{"tags":["音声ライブラリ管理"],"summary":"Downloadable Libraries","description":"ダウンロード可能な音声ライブラリの情報を返します。","operationId":"downloadable_libraries","responses":{"200":{"description":"ダウンロード可能な音声ライブラリの情報リスト","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DownloadableLibraryInfo"},"type":"array","title":"Response Downloadable Libraries Downloadable Libraries Get"}}}}}}},"/installed_libraries":{"get":{"tags":["音声ライブラリ管理"],"summary":"Installed Libraries","description":"インストールした音声ライブラリの情報を返します。","operationId":"installed_libraries","responses":{"200":{"description":"インストールした音声ライブラリの情報","content":{"application/json":{"schema":{"additionalProperties":{"$ref":"#/components/schemas/InstalledLibraryInfo"},"type":"object","title":"Response Installed Libraries Installed Libraries Get"}}}}}}},"/install_library/{library_uuid}":{"post":{"tags":["音声ライブラリ管理"],"summary":"Install Library","description":"音声ライブラリをインストールします。\n\n音声ライブラリのZIPファイルをリクエストボディとして送信してください。","operationId":"install_library","parameters":[{"name":"library_uuid","in":"path","required":true,"schema":{"type":"string","description":"音声ライブラリのID","title":"Library Uuid"},"description":"音声ライブラリのID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uninstall_library/{library_uuid}":{"post":{"tags":["音声ライブラリ管理"],"summary":"Uninstall Library","description":"音声ライブラリをアンインストールします。","operationId":"uninstall_library","parameters":[{"name":"library_uuid","in":"path","required":true,"schema":{"type":"string","description":"音声ライブラリのID","title":"Library Uuid"},"description":"音声ライブラリのID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user_dict":{"get":{"tags":["ユーザー辞書"],"summary":"Get User Dict Words","description":"ユーザー辞書に登録されている単語の一覧を返します。\n\n単語の表層形(surface)は正規化済みの物を返します。","operationId":"get_user_dict_words","responses":{"200":{"description":"単語のUUIDとその詳細","content":{"application/json":{"schema":{"additionalProperties":{"$ref":"#/components/schemas/UserDictWord"},"type":"object","title":"Response Get User Dict Words User Dict Get"}}}}}}},"/user_dict_word":{"post":{"tags":["ユーザー辞書"],"summary":"Add User Dict Word","description":"ユーザー辞書に言葉を追加します。","operationId":"add_user_dict_word","parameters":[{"name":"surface","in":"query","required":true,"schema":{"type":"string","description":"言葉の表層形","title":"Surface"},"description":"言葉の表層形"},{"name":"pronunciation","in":"query","required":true,"schema":{"type":"string","description":"言葉の発音(カタカナ)","title":"Pronunciation"},"description":"言葉の発音(カタカナ)"},{"name":"accent_type","in":"query","required":true,"schema":{"type":"integer","description":"アクセント型(音が下がる場所を指す)","title":"Accent Type"},"description":"アクセント型(音が下がる場所を指す)"},{"name":"word_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/WordTypes","description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},"description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},{"name":"priority","in":"query","required":false,"schema":{"type":"integer","description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨","maximum":10,"minimum":0,"title":"Priority"},"description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Add User Dict Word User Dict Word Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user_dict_word/{word_uuid}":{"put":{"tags":["ユーザー辞書"],"summary":"Rewrite User Dict Word","description":"ユーザー辞書に登録されている言葉を更新します。","operationId":"rewrite_user_dict_word","parameters":[{"name":"word_uuid","in":"path","required":true,"schema":{"type":"string","description":"更新する言葉のUUID","title":"Word Uuid"},"description":"更新する言葉のUUID"},{"name":"surface","in":"query","required":true,"schema":{"type":"string","description":"言葉の表層形","title":"Surface"},"description":"言葉の表層形"},{"name":"pronunciation","in":"query","required":true,"schema":{"type":"string","description":"言葉の発音(カタカナ)","title":"Pronunciation"},"description":"言葉の発音(カタカナ)"},{"name":"accent_type","in":"query","required":true,"schema":{"type":"integer","description":"アクセント型(音が下がる場所を指す)","title":"Accent Type"},"description":"アクセント型(音が下がる場所を指す)"},{"name":"word_type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/WordTypes","description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},"description":"PROPER_NOUN(固有名詞)、COMMON_NOUN(普通名詞)、VERB(動詞)、ADJECTIVE(形容詞)、SUFFIX(語尾)のいずれか"},{"name":"priority","in":"query","required":false,"schema":{"type":"integer","description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨。","maximum":10,"minimum":0,"title":"Priority"},"description":"単語の優先度(0から10までの整数)。数字が大きいほど優先度が高くなる。1から9までの値を指定することを推奨。"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ユーザー辞書"],"summary":"Delete User Dict Word","description":"ユーザー辞書に登録されている言葉を削除します。","operationId":"delete_user_dict_word","parameters":[{"name":"word_uuid","in":"path","required":true,"schema":{"type":"string","description":"削除する言葉のUUID","title":"Word Uuid"},"description":"削除する言葉のUUID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/import_user_dict":{"post":{"tags":["ユーザー辞書"],"summary":"Import User Dict Words","description":"他のユーザー辞書をインポートします。","operationId":"import_user_dict_words","parameters":[{"name":"override","in":"query","required":true,"schema":{"type":"boolean","description":"重複したエントリがあった場合、上書きするかどうか","title":"Override"},"description":"重複したエントリがあった場合、上書きするかどうか"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/UserDictWord"},"description":"インポートするユーザー辞書のデータ","title":"Import Dict Data"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/version":{"get":{"tags":["その他"],"summary":"Version","description":"エンジンのバージョンを取得します。","operationId":"version","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Version Version Get"}}}}}}},"/core_versions":{"get":{"tags":["その他"],"summary":"Core Versions","description":"利用可能なコアのバージョン一覧を取得します。","operationId":"core_versions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Core Versions Core Versions Get"}}}}}}},"/engine_manifest":{"get":{"tags":["その他"],"summary":"Engine Manifest","description":"エンジンマニフェストを取得します。","operationId":"engine_manifest","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngineManifest"}}}}}}},"/setting":{"get":{"tags":["設定"],"summary":"Setting Get","description":"設定ページを返します。","operationId":"setting_get","responses":{"200":{"description":"Successful Response"}}},"post":{"tags":["設定"],"summary":"Setting Post","description":"設定を更新します。","operationId":"setting_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_setting_post_setting_post"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"tags":["その他"],"summary":"Get Portal Page","description":"ポータルページを返します。","operationId":"get_portal_page","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AccentPhrase":{"properties":{"moras":{"items":{"$ref":"#/components/schemas/Mora"},"type":"array","title":"Moras","description":"モーラのリスト"},"accent":{"type":"integer","title":"Accent","description":"アクセント箇所"},"pause_mora":{"$ref":"#/components/schemas/Mora","title":"Pause Mora","description":"アクセント句の末尾につく無音モーラ。null の場合は無音モーラを付けない。"},"is_interrogative":{"type":"boolean","title":"Is Interrogative","description":"疑問系かどうか","default":false}},"type":"object","required":["moras","accent"],"title":"AccentPhrase","description":"アクセント句ごとの情報。"},"AudioQuery":{"properties":{"accent_phrases":{"items":{"$ref":"#/components/schemas/AccentPhrase"},"type":"array","title":"Accent Phrases","description":"アクセント句のリスト"},"speedScale":{"type":"number","title":"Speedscale","description":"全体の話速"},"pitchScale":{"type":"number","title":"Pitchscale","description":"全体の音高"},"intonationScale":{"type":"number","title":"Intonationscale","description":"全体の抑揚"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"prePhonemeLength":{"type":"number","title":"Prephonemelength","description":"音声の前の無音時間"},"postPhonemeLength":{"type":"number","title":"Postphonemelength","description":"音声の後の無音時間"},"pauseLength":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pauselength","description":"句読点などの無音時間。nullのときは無視される。デフォルト値はnull"},"pauseLengthScale":{"type":"number","title":"Pauselengthscale","description":"句読点などの無音時間(倍率)。デフォルト値は1","default":1},"outputSamplingRate":{"type":"integer","title":"Outputsamplingrate","description":"音声データの出力サンプリングレート"},"outputStereo":{"type":"boolean","title":"Outputstereo","description":"音声データをステレオ出力するか否か"},"kana":{"type":"string","title":"Kana","description":"[読み取り専用]AquesTalk 風記法によるテキスト。音声合成用のクエリとしては無視される"}},"type":"object","required":["accent_phrases","speedScale","pitchScale","intonationScale","volumeScale","prePhonemeLength","postPhonemeLength","outputSamplingRate","outputStereo"],"title":"AudioQuery","description":"音声合成用のクエリ。"},"Body_guide_guide_post":{"properties":{"query":{"type":"string","title":"Query"},"ref_audio":{"type":"string","format":"binary","title":"Ref Audio"},"normalize":{"type":"boolean","title":"Normalize","default":true},"trim":{"type":"boolean","title":"Trim","default":true},"assign_length":{"type":"boolean","title":"Assign Length","default":true},"assign_pitch":{"type":"boolean","title":"Assign Pitch","default":true}},"type":"object","required":["query","ref_audio"],"title":"Body_guide_guide_post"},"Body_setting_post_setting_post":{"properties":{"cors_policy_mode":{"$ref":"#/components/schemas/CorsPolicyMode"},"allow_origin":{"type":"string","title":"Allow Origin"}},"type":"object","required":["cors_policy_mode"],"title":"Body_setting_post_setting_post"},"Body_sing_frame_f0_sing_frame_f0_post":{"properties":{"score":{"$ref":"#/components/schemas/Score"},"frame_audio_query":{"$ref":"#/components/schemas/FrameAudioQuery"}},"type":"object","required":["score","frame_audio_query"],"title":"Body_sing_frame_f0_sing_frame_f0_post"},"Body_sing_frame_volume_sing_frame_volume_post":{"properties":{"score":{"$ref":"#/components/schemas/Score"},"frame_audio_query":{"$ref":"#/components/schemas/FrameAudioQuery"}},"type":"object","required":["score","frame_audio_query"],"title":"Body_sing_frame_volume_sing_frame_volume_post"},"CorsPolicyMode":{"type":"string","enum":["all","localapps"],"title":"CorsPolicyMode","description":"CORSの許可モード。"},"DownloadableLibraryInfo":{"properties":{"name":{"type":"string","title":"Name","description":"音声ライブラリの名前"},"uuid":{"type":"string","title":"Uuid","description":"音声ライブラリのUUID"},"version":{"type":"string","title":"Version","description":"音声ライブラリのバージョン"},"download_url":{"type":"string","title":"Download Url","description":"音声ライブラリのダウンロードURL"},"bytes":{"type":"integer","title":"Bytes","description":"音声ライブラリのバイト数"},"speakers":{"items":{"$ref":"#/components/schemas/LibrarySpeaker"},"type":"array","title":"Speakers","description":"音声ライブラリに含まれるキャラクターのリスト"}},"type":"object","required":["name","uuid","version","download_url","bytes","speakers"],"title":"DownloadableLibraryInfo","description":"ダウンロード可能な音声ライブラリの情報。"},"EngineManifest":{"properties":{"manifest_version":{"type":"string","title":"Manifest Version","description":"マニフェストのバージョン"},"name":{"type":"string","title":"Name","description":"エンジン名"},"brand_name":{"type":"string","title":"Brand Name","description":"ブランド名"},"uuid":{"type":"string","title":"Uuid","description":"エンジンのUUID"},"url":{"type":"string","title":"Url","description":"エンジンのURL"},"icon":{"type":"string","title":"Icon","description":"エンジンのアイコンをBASE64エンコードしたもの"},"default_sampling_rate":{"type":"integer","title":"Default Sampling Rate","description":"デフォルトのサンプリング周波数"},"frame_rate":{"type":"number","title":"Frame Rate","description":"エンジンのフレームレート"},"terms_of_service":{"type":"string","title":"Terms Of Service","description":"エンジンの利用規約"},"update_infos":{"items":{"$ref":"#/components/schemas/UpdateInfo"},"type":"array","title":"Update Infos","description":"エンジンのアップデート情報"},"dependency_licenses":{"items":{"$ref":"#/components/schemas/LicenseInfo"},"type":"array","title":"Dependency Licenses","description":"依存関係のライセンス情報"},"supported_vvlib_manifest_version":{"type":"string","title":"Supported Vvlib Manifest Version","description":"エンジンが対応するvvlibのバージョン"},"supported_features":{"$ref":"#/components/schemas/SupportedFeatures","description":"エンジンが持つ機能"}},"type":"object","required":["manifest_version","name","brand_name","uuid","url","icon","default_sampling_rate","frame_rate","terms_of_service","update_infos","dependency_licenses","supported_features"],"title":"EngineManifest","description":"エンジン自体に関する情報。"},"FrameAudioQuery":{"properties":{"f0":{"items":{"type":"number"},"type":"array","title":"F0","description":"フレームごとの基本周波数"},"volume":{"items":{"type":"number"},"type":"array","title":"Volume","description":"フレームごとの音量"},"phonemes":{"items":{"$ref":"#/components/schemas/FramePhoneme"},"type":"array","title":"Phonemes","description":"音素のリスト"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"outputSamplingRate":{"type":"integer","title":"Outputsamplingrate","description":"音声データの出力サンプリングレート"},"outputStereo":{"type":"boolean","title":"Outputstereo","description":"音声データをステレオ出力するか否か"}},"type":"object","required":["f0","volume","phonemes","volumeScale","outputSamplingRate","outputStereo"],"title":"FrameAudioQuery","description":"フレームごとの音声合成用のクエリ。"},"FramePhoneme":{"properties":{"phoneme":{"type":"string","title":"Phoneme","description":"音素"},"frame_length":{"type":"integer","title":"Frame Length","description":"音素のフレーム長"},"note_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note Id","description":"音符のID"}},"type":"object","required":["phoneme","frame_length"],"title":"FramePhoneme","description":"音素の情報。"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InstalledLibraryInfo":{"properties":{"name":{"type":"string","title":"Name","description":"音声ライブラリの名前"},"uuid":{"type":"string","title":"Uuid","description":"音声ライブラリのUUID"},"version":{"type":"string","title":"Version","description":"音声ライブラリのバージョン"},"download_url":{"type":"string","title":"Download Url","description":"音声ライブラリのダウンロードURL"},"bytes":{"type":"integer","title":"Bytes","description":"音声ライブラリのバイト数"},"speakers":{"items":{"$ref":"#/components/schemas/LibrarySpeaker"},"type":"array","title":"Speakers","description":"音声ライブラリに含まれるキャラクターのリスト"},"uninstallable":{"type":"boolean","title":"Uninstallable","description":"アンインストール可能かどうか"}},"type":"object","required":["name","uuid","version","download_url","bytes","speakers","uninstallable"],"title":"InstalledLibraryInfo","description":"インストール済み音声ライブラリの情報。"},"LibrarySpeaker":{"properties":{"speaker":{"$ref":"#/components/schemas/Speaker"},"speaker_info":{"$ref":"#/components/schemas/SpeakerInfo"}},"type":"object","required":["speaker","speaker_info"],"title":"LibrarySpeaker","description":"音声ライブラリに含まれるキャラクターの情報。"},"LicenseInfo":{"properties":{"name":{"type":"string","title":"Name","description":"依存ライブラリ名"},"version":{"type":"string","title":"Version","description":"依存ライブラリのバージョン"},"license":{"type":"string","title":"License","description":"依存ライブラリのライセンス名"},"text":{"type":"string","title":"Text","description":"依存ライブラリのライセンス本文"}},"type":"object","required":["name","text"],"title":"LicenseInfo","description":"依存ライブラリのライセンス情報。"},"Mora":{"properties":{"text":{"type":"string","title":"Text","description":"文字"},"consonant":{"type":"string","title":"Consonant","description":"子音の音素"},"consonant_length":{"type":"number","title":"Consonant Length","description":"子音の長さ"},"vowel":{"type":"string","title":"Vowel","description":"母音の音素"},"vowel_length":{"type":"number","title":"Vowel Length","description":"母音の長さ"},"pitch":{"type":"number","title":"Pitch","description":"音高"}},"type":"object","required":["text","vowel","vowel_length","pitch"],"title":"Mora","description":"モーラ(子音+母音)ごとの情報。"},"MorphableTargetInfo":{"properties":{"is_morphable":{"type":"boolean","title":"Is Morphable","description":"指定したキャラクターに対してモーフィングの可否"}},"type":"object","required":["is_morphable"],"title":"MorphableTargetInfo","description":"モーフィング相手としての情報。"},"Note":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"ID"},"key":{"type":"integer","title":"Key","description":"音階"},"frame_length":{"type":"integer","title":"Frame Length","description":"音符のフレーム長"},"lyric":{"type":"string","title":"Lyric","description":"音符の歌詞"}},"type":"object","required":["frame_length","lyric"],"title":"Note","description":"音符ごとの情報。"},"ParseKanaBadRequest":{"properties":{"text":{"type":"string","title":"Text","description":"エラーメッセージ"},"error_name":{"type":"string","title":"Error Name","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 | 処理時に無限ループになってしまいました...バグ報告をお願いします。 |"},"error_args":{"additionalProperties":{"type":"string"},"type":"object","title":"Error Args","description":"エラーを起こした箇所"}},"type":"object","required":["text","error_name","error_args"],"title":"ParseKanaBadRequest","description":"読み仮名のパースに失敗した。"},"Preset":{"properties":{"id":{"type":"integer","title":"Id","description":"プリセットID"},"name":{"type":"string","title":"Name","description":"プリセット名"},"speaker_uuid":{"type":"string","title":"Speaker Uuid","description":"キャラクターのUUID"},"style_id":{"type":"integer","title":"Style Id","description":"スタイルID"},"speedScale":{"type":"number","title":"Speedscale","description":"全体の話速"},"pitchScale":{"type":"number","title":"Pitchscale","description":"全体の音高"},"intonationScale":{"type":"number","title":"Intonationscale","description":"全体の抑揚"},"volumeScale":{"type":"number","title":"Volumescale","description":"全体の音量"},"prePhonemeLength":{"type":"number","title":"Prephonemelength","description":"音声の前の無音時間"},"postPhonemeLength":{"type":"number","title":"Postphonemelength","description":"音声の後の無音時間"},"pauseLength":{"type":"number","title":"Pauselength","description":"句読点などの無音時間"},"pauseLengthScale":{"type":"number","title":"Pauselengthscale","description":"句読点などの無音時間(倍率)","default":1}},"type":"object","required":["id","name","speaker_uuid","style_id","speedScale","pitchScale","intonationScale","volumeScale","prePhonemeLength","postPhonemeLength"],"title":"Preset","description":"プリセット情報。"},"Score":{"properties":{"notes":{"items":{"$ref":"#/components/schemas/Note"},"type":"array","title":"Notes","description":"音符のリスト"}},"type":"object","required":["notes"],"title":"Score","description":"楽譜情報。"},"Speaker":{"properties":{"name":{"type":"string","title":"Name","description":"名前"},"speaker_uuid":{"type":"string","title":"Speaker Uuid","description":"キャラクターのUUID"},"styles":{"items":{"$ref":"#/components/schemas/SpeakerStyle"},"type":"array","title":"Styles","description":"スタイルの一覧"},"version":{"type":"string","title":"Version","description":"キャラクターのバージョン"},"supported_features":{"$ref":"#/components/schemas/SpeakerSupportedFeatures","description":"キャラクターの対応機能"}},"type":"object","required":["name","speaker_uuid","styles","version"],"title":"Speaker","description":"キャラクター情報"},"SpeakerInfo":{"properties":{"policy":{"type":"string","title":"Policy","description":"policy.md"},"portrait":{"type":"string","title":"Portrait","description":"立ち絵画像をbase64エンコードしたもの、あるいはURL"},"style_infos":{"items":{"$ref":"#/components/schemas/StyleInfo"},"type":"array","title":"Style Infos","description":"スタイルの追加情報"}},"type":"object","required":["policy","portrait","style_infos"],"title":"SpeakerInfo","description":"キャラクターの追加情報"},"SpeakerStyle":{"properties":{"name":{"type":"string","title":"Name","description":"スタイル名"},"id":{"type":"integer","title":"Id","description":"スタイルID"},"type":{"type":"string","enum":["talk","singing_teacher","frame_decode","sing"],"title":"Type","description":"スタイルの種類。talk:音声合成クエリの作成と音声合成が可能。singing_teacher:歌唱音声合成用のクエリの作成が可能。frame_decode:歌唱音声合成が可能。sing:歌唱音声合成用のクエリの作成と歌唱音声合成が可能。","default":"talk"}},"type":"object","required":["name","id"],"title":"SpeakerStyle","description":"キャラクターのスタイル情報"},"SpeakerSupportedFeatures":{"properties":{"permitted_synthesis_morphing":{"type":"string","enum":["ALL","SELF_ONLY","NOTHING"],"title":"Permitted Synthesis Morphing","description":"モーフィング機能への対応。'ALL' は「全て許可」、'SELF_ONLY' は「同じキャラクター内でのみ許可」、'NOTHING' は「全て禁止」","default":"ALL"}},"type":"object","title":"SpeakerSupportedFeatures","description":"キャラクターの対応機能の情報"},"StyleInfo":{"properties":{"id":{"type":"integer","title":"Id","description":"スタイルID"},"icon":{"type":"string","title":"Icon","description":"このスタイルのアイコンをbase64エンコードしたもの、あるいはURL"},"portrait":{"type":"string","title":"Portrait","description":"このスタイルの立ち絵画像をbase64エンコードしたもの、あるいはURL"},"voice_samples":{"items":{"type":"string"},"type":"array","title":"Voice Samples","description":"サンプル音声をbase64エンコードしたもの、あるいはURL"}},"type":"object","required":["id","icon","voice_samples"],"title":"StyleInfo","description":"スタイルの追加情報"},"SupportedDevicesInfo":{"properties":{"cpu":{"type":"boolean","title":"Cpu","description":"CPUに対応しているか"},"cuda":{"type":"boolean","title":"Cuda","description":"CUDA(Nvidia GPU)に対応しているか"},"dml":{"type":"boolean","title":"Dml","description":"DirectML(Nvidia GPU/Radeon GPU等)に対応しているか"}},"type":"object","required":["cpu","cuda","dml"],"title":"SupportedDevicesInfo","description":"対応しているデバイスの情報。"},"SupportedFeatures":{"properties":{"adjust_mora_pitch":{"type":"boolean","title":"Adjust Mora Pitch","description":"モーラごとの音高の調整"},"adjust_phoneme_length":{"type":"boolean","title":"Adjust Phoneme Length","description":"音素ごとの長さの調整"},"adjust_speed_scale":{"type":"boolean","title":"Adjust Speed Scale","description":"全体の話速の調整"},"adjust_pitch_scale":{"type":"boolean","title":"Adjust Pitch Scale","description":"全体の音高の調整"},"adjust_intonation_scale":{"type":"boolean","title":"Adjust Intonation Scale","description":"全体の抑揚の調整"},"adjust_volume_scale":{"type":"boolean","title":"Adjust Volume Scale","description":"全体の音量の調整"},"adjust_pause_length":{"type":"boolean","title":"Adjust Pause Length","description":"句読点などの無音時間の調整"},"interrogative_upspeak":{"type":"boolean","title":"Interrogative Upspeak","description":"疑問文の自動調整"},"synthesis_morphing":{"type":"boolean","title":"Synthesis Morphing","description":"2種類のスタイルでモーフィングした音声を合成"},"sing":{"type":"boolean","title":"Sing","description":"歌唱音声合成"},"manage_library":{"type":"boolean","title":"Manage Library","description":"音声ライブラリのインストール・アンインストール"},"return_resource_url":{"type":"boolean","title":"Return Resource Url","description":"キャラクター情報のリソースをURLで返送"},"apply_katakana_english":{"type":"boolean","title":"Apply Katakana English","description":"未知の英単語をカタカナ読みに変換"},"guide":{"type":"boolean","title":"Guide","description":"Forced Alignerによる自動調整"}},"type":"object","required":["adjust_mora_pitch","adjust_phoneme_length","adjust_speed_scale","adjust_pitch_scale","adjust_intonation_scale","adjust_volume_scale","interrogative_upspeak","synthesis_morphing"],"title":"SupportedFeatures","description":"エンジンが持つ機能の一覧。"},"UpdateInfo":{"properties":{"version":{"type":"string","title":"Version","description":"エンジンのバージョン名"},"descriptions":{"items":{"type":"string"},"type":"array","title":"Descriptions","description":"アップデートの詳細についての説明"},"contributors":{"items":{"type":"string"},"type":"array","title":"Contributors","description":"貢献者名"}},"type":"object","required":["version","descriptions"],"title":"UpdateInfo","description":"エンジンのアップデート情報。"},"UserDictWord":{"properties":{"surface":{"type":"string","title":"Surface","description":"表層形"},"priority":{"type":"integer","maximum":10,"minimum":0,"title":"Priority","description":"優先度"},"context_id":{"type":"integer","title":"Context Id","description":"文脈ID","default":1348},"part_of_speech":{"type":"string","title":"Part Of Speech","description":"品詞"},"part_of_speech_detail_1":{"type":"string","title":"Part Of Speech Detail 1","description":"品詞細分類1"},"part_of_speech_detail_2":{"type":"string","title":"Part Of Speech Detail 2","description":"品詞細分類2"},"part_of_speech_detail_3":{"type":"string","title":"Part Of Speech Detail 3","description":"品詞細分類3"},"inflectional_type":{"type":"string","title":"Inflectional Type","description":"活用型"},"inflectional_form":{"type":"string","title":"Inflectional Form","description":"活用形"},"stem":{"type":"string","title":"Stem","description":"原形"},"yomi":{"type":"string","title":"Yomi","description":"読み"},"pronunciation":{"type":"string","title":"Pronunciation","description":"発音"},"accent_type":{"type":"integer","title":"Accent Type","description":"アクセント型"},"mora_count":{"type":"integer","title":"Mora Count","description":"モーラ数"},"accent_associative_rule":{"type":"string","title":"Accent Associative Rule","description":"アクセント結合規則"}},"type":"object","required":["surface","priority","part_of_speech","part_of_speech_detail_1","part_of_speech_detail_2","part_of_speech_detail_3","inflectional_type","inflectional_form","stem","yomi","pronunciation","accent_type","accent_associative_rule"],"title":"UserDictWord","description":"辞書のコンパイルに使われる情報。"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WordTypes":{"type":"string","enum":["PROPER_NOUN","COMMON_NOUN","VERB","ADJECTIVE","SUFFIX"],"title":"WordTypes","description":"品詞"},"BaseLibraryInfo":{"description":"音声ライブラリの情報。","properties":{"name":{"description":"音声ライブラリの名前","title":"Name","type":"string"},"uuid":{"description":"音声ライブラリのUUID","title":"Uuid","type":"string"},"version":{"description":"音声ライブラリのバージョン","title":"Version","type":"string"},"download_url":{"description":"音声ライブラリのダウンロードURL","title":"Download Url","type":"string"},"bytes":{"description":"音声ライブラリのバイト数","title":"Bytes","type":"integer"},"speakers":{"description":"音声ライブラリに含まれるキャラクターのリスト","items":{"$ref":"#/components/schemas/LibrarySpeaker"},"title":"Speakers","type":"array"}},"required":["name","uuid","version","download_url","bytes","speakers"],"title":"BaseLibraryInfo","type":"object"},"VvlibManifest":{"description":"vvlib(VOICEVOX Library)に関する情報。","properties":{"manifest_version":{"description":"マニフェストバージョン","title":"Manifest Version","type":"string"},"name":{"description":"音声ライブラリ名","title":"Name","type":"string"},"version":{"description":"音声ライブラリバージョン","title":"Version","type":"string"},"uuid":{"description":"音声ライブラリのUUID","title":"Uuid","type":"string"},"brand_name":{"description":"エンジンのブランド名","title":"Brand Name","type":"string"},"engine_name":{"description":"エンジン名","title":"Engine Name","type":"string"},"engine_uuid":{"description":"エンジンのUUID","title":"Engine Uuid","type":"string"}},"required":["manifest_version","name","version","uuid","brand_name","engine_name","engine_uuid"],"title":"VvlibManifest","type":"object"}}}}
\ No newline at end of file
diff --git a/src/components/Dialog/AllDialog.vue b/src/components/Dialog/AllDialog.vue
index f6fd2111ff..cd750a6c4b 100644
--- a/src/components/Dialog/AllDialog.vue
+++ b/src/components/Dialog/AllDialog.vue
@@ -36,6 +36,7 @@
+
diff --git a/src/components/Dialog/EngineManageDialog.vue b/src/components/Dialog/EngineManageDialog.vue
index 78327624e3..5172616153 100644
--- a/src/components/Dialog/EngineManageDialog.vue
+++ b/src/components/Dialog/EngineManageDialog.vue
@@ -381,6 +381,7 @@ const getFeatureName = (name: keyof SupportedFeatures) => {
interrogativeUpspeak: "疑問文の自動調整",
synthesisMorphing: "2種類のスタイルでモーフィングした音声を合成",
sing: "歌唱音声合成",
+ guide: "音声認識による自動調整ガイド機能",
manageLibrary: "音声ライブラリのインストール・アンインストール",
returnResourceUrl: "キャラクター情報のリソースをURLで返送",
applyKatakanaEnglish: "未知の英単語をカタカナ読みに変換",
diff --git a/src/components/Dialog/GuideDialog.vue b/src/components/Dialog/GuideDialog.vue
new file mode 100644
index 0000000000..e3763ab22e
--- /dev/null
+++ b/src/components/Dialog/GuideDialog.vue
@@ -0,0 +1,189 @@
+
+
+
+ Guide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Dialog/ToolBarCustomDialog.vue b/src/components/Dialog/ToolBarCustomDialog.vue
index d540d31e9a..900e6980f9 100644
--- a/src/components/Dialog/ToolBarCustomDialog.vue
+++ b/src/components/Dialog/ToolBarCustomDialog.vue
@@ -162,6 +162,7 @@ const usableButtonsDesc: Record = {
UNDO: "操作を一つ戻します。",
REDO: "元に戻した操作をやり直します。",
IMPORT_TEXT: "テキストファイル(.txt)を読み込みます。",
+ GUIDE: "音声ガイド機能を使用します。",
EMPTY:
"これはボタンではありません。レイアウトの調整に使います。また、実際には表示されません。",
};
diff --git a/src/components/Talk/AccentPhrase.vue b/src/components/Talk/AccentPhrase.vue
index 86ab2e1856..b96b30743f 100644
--- a/src/components/Talk/AccentPhrase.vue
+++ b/src/components/Talk/AccentPhrase.vue
@@ -210,6 +210,7 @@
import { computed, ref } from "vue";
import AudioAccent from "./AudioAccent.vue";
import AudioParameter from "./AudioParameter.vue";
+import type { DetailTypes } from "./AudioDetail.vue";
import { MenuItemButton } from "@/components/Menu/type";
import ContextMenu from "@/components/Menu/ContextMenu/Container.vue";
import { useStore } from "@/store";
@@ -237,8 +238,6 @@ defineExpose({
container,
});
-type DetailTypes = "accent" | "pitch" | "length";
-
const store = useStore();
const uiLocked = computed(() => store.getters.UI_LOCKED);
diff --git a/src/components/Talk/AudioDetail.vue b/src/components/Talk/AudioDetail.vue
index 84cb3eb05d..7eac5e43eb 100644
--- a/src/components/Talk/AudioDetail.vue
+++ b/src/components/Talk/AudioDetail.vue
@@ -178,7 +178,7 @@ registerHotkeyWithCleanup({
});
// detail selector
-type DetailTypes = "accent" | "pitch" | "length";
+export type DetailTypes = "accent" | "pitch" | "length";
const selectedDetail = ref("accent");
// accent phrase
@@ -407,4 +407,13 @@ const isAltKeyDown = useAltKey();
overflow-x: scroll;
}
}
+
+.action-buttons-wrapper {
+ flex-grow: 1;
+ border: 1px solid red;
+ padding: 0.5rem;
+ display: flex;
+ justify-content: end;
+ align-items: end;
+}
diff --git a/src/components/Talk/ToolBar.vue b/src/components/Talk/ToolBar.vue
index 8724d26911..3b692371b6 100644
--- a/src/components/Talk/ToolBar.vue
+++ b/src/components/Talk/ToolBar.vue
@@ -116,6 +116,9 @@ const saveProject = async () => {
const importTextFile = () => {
void store.actions.COMMAND_IMPORT_FROM_FILE({ type: "dialog" });
};
+const openGuideDoalog = () => {
+ void store.actions.SET_DIALOG_OPEN({ isGuideDialogOpen: true });
+};
const usableButtons: Record<
ToolbarButtonTagType,
@@ -157,6 +160,10 @@ const usableButtons: Record<
click: importTextFile,
disable: uiLocked,
},
+ GUIDE: {
+ click: openGuideDoalog,
+ disable: uiLocked,
+ },
EMPTY: null,
};
diff --git a/src/openapi/apis/DefaultApi.ts b/src/openapi/apis/DefaultApi.ts
index 9e4303c05a..9b7471c12c 100644
--- a/src/openapi/apis/DefaultApi.ts
+++ b/src/openapi/apis/DefaultApi.ts
@@ -135,6 +135,15 @@ export interface FrameSynthesisRequest {
coreVersion?: string;
}
+export interface GuideRequest {
+ query: string;
+ refAudio: Blob;
+ normalize?: boolean;
+ trim?: boolean;
+ assignLength?: boolean;
+ assignPitch?: boolean;
+}
+
export interface ImportUserDictWordsRequest {
override: boolean;
requestBody: { [key: string]: UserDictWord; } | null;
@@ -544,6 +553,26 @@ export interface DefaultApiInterface {
*/
getUserDictWords(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<{ [key: string]: UserDictWord; }>;
+ /**
+ *
+ * @summary 参考音声に合わせて発音タイミングとイントネーションを自動調整したAudioQueryを返します
+ * @param {string} query
+ * @param {Blob} refAudio
+ * @param {boolean} [normalize]
+ * @param {boolean} [trim]
+ * @param {boolean} [assignLength]
+ * @param {boolean} [assignPitch]
+ * @param {*} [options] Override http request option.
+ * @throws {RequiredError}
+ * @memberof DefaultApiInterface
+ */
+ guideRaw(requestParameters: GuideRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>;
+
+ /**
+ * 参考音声に合わせて発音タイミングとイントネーションを自動調整したAudioQueryを返します
+ */
+ guide(requestParameters: GuideRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise;
+
/**
* 他のユーザー辞書をインポートします。
* @summary Import User Dict Words
@@ -1643,6 +1672,81 @@ export class DefaultApi extends runtime.BaseAPI implements DefaultApiInterface {
return await response.value();
}
+ /**
+ * 参考音声に合わせて発音タイミングとイントネーションを自動調整したAudioQueryを返します
+ */
+ async guideRaw(requestParameters: GuideRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> {
+ if (requestParameters.query === null || requestParameters.query === undefined) {
+ throw new runtime.RequiredError('query','Required parameter requestParameters.query was null or undefined when calling guide.');
+ }
+
+ if (requestParameters.refAudio === null || requestParameters.refAudio === undefined) {
+ throw new runtime.RequiredError('refAudio','Required parameter requestParameters.refAudio was null or undefined when calling guide.');
+ }
+
+ const queryParameters: any = {};
+
+ const headerParameters: runtime.HTTPHeaders = {};
+
+ const consumes: runtime.Consume[] = [
+ { contentType: 'multipart/form-data' },
+ ];
+ // @ts-ignore: canConsumeForm may be unused
+ const canConsumeForm = runtime.canConsumeForm(consumes);
+
+ let formParams: { append(param: string, value: any): any };
+ let useForm = false;
+ // use FormData to transmit files using content-type "multipart/form-data"
+ useForm = canConsumeForm;
+ if (useForm) {
+ formParams = new FormData();
+ } else {
+ formParams = new URLSearchParams();
+ }
+
+ if (requestParameters.query !== undefined) {
+ formParams.append('query', requestParameters.query as any);
+ }
+
+ if (requestParameters.refAudio !== undefined) {
+ formParams.append('ref_audio', requestParameters.refAudio as any);
+ }
+
+ if (requestParameters.normalize !== undefined) {
+ formParams.append('normalize', requestParameters.normalize as any);
+ }
+
+ if (requestParameters.trim !== undefined) {
+ formParams.append('trim', requestParameters.trim as any);
+ }
+
+ if (requestParameters.assignLength !== undefined) {
+ formParams.append('assign_length', requestParameters.assignLength as any);
+ }
+
+ if (requestParameters.assignPitch !== undefined) {
+ formParams.append('assign_pitch', requestParameters.assignPitch as any);
+ }
+
+ const response = await this.request({
+ path: `/guide`,
+ method: 'POST',
+ headers: headerParameters,
+ query: queryParameters,
+ body: formParams,
+ }, initOverrides);
+
+ return new runtime.JSONApiResponse(response, (jsonValue) => AudioQueryFromJSON(jsonValue));
+ }
+
+ /**
+ * 参考音声に合わせて発音タイミングとイントネーションを自動調整したAudioQueryを返します
+ */
+ async guide(requestParameters: GuideRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise {
+ const response = await this.guideRaw(requestParameters, initOverrides);
+ return await response.value();
+ }
+
/**
* 他のユーザー辞書をインポートします。
* Import User Dict Words
diff --git a/src/openapi/models/AccentPhrase.ts b/src/openapi/models/AccentPhrase.ts
index 4f0a3c3128..0a2277505f 100644
--- a/src/openapi/models/AccentPhrase.ts
+++ b/src/openapi/models/AccentPhrase.ts
@@ -39,7 +39,7 @@ export interface AccentPhrase {
*/
accent: number;
/**
- * 後ろに無音を付けるかどうか
+ * アクセント句の末尾につく無音モーラ。null の場合は無音モーラを付けない。
* @type {Mora}
* @memberof AccentPhrase
*/
diff --git a/src/openapi/models/SupportedFeatures.ts b/src/openapi/models/SupportedFeatures.ts
index 9b4c34e83d..2c420c28d3 100644
--- a/src/openapi/models/SupportedFeatures.ts
+++ b/src/openapi/models/SupportedFeatures.ts
@@ -97,6 +97,12 @@ export interface SupportedFeatures {
* @memberof SupportedFeatures
*/
applyKatakanaEnglish?: boolean;
+ /**
+ * Forced Alignerによる自動調整
+ * @type {boolean}
+ * @memberof SupportedFeatures
+ */
+ guide?: boolean;
}
/**
@@ -139,6 +145,7 @@ export function SupportedFeaturesFromJSONTyped(json: any, ignoreDiscriminator: b
'manageLibrary': !exists(json, 'manage_library') ? undefined : json['manage_library'],
'returnResourceUrl': !exists(json, 'return_resource_url') ? undefined : json['return_resource_url'],
'applyKatakanaEnglish': !exists(json, 'apply_katakana_english') ? undefined : json['apply_katakana_english'],
+ 'guide': !exists(json, 'guide') ? undefined : json['guide'],
};
}
@@ -164,6 +171,7 @@ export function SupportedFeaturesToJSON(value?: SupportedFeatures | null): any {
'manage_library': value.manageLibrary,
'return_resource_url': value.returnResourceUrl,
'apply_katakana_english': value.applyKatakanaEnglish,
+ 'guide': value.guide,
};
}
diff --git a/src/store/audio.ts b/src/store/audio.ts
index e5749eb54a..7dd5589f3e 100644
--- a/src/store/audio.ts
+++ b/src/store/audio.ts
@@ -34,7 +34,10 @@ import {
isMorphable,
} from "./audioGenerate";
import { ContinuousPlayer } from "./audioContinuousPlayer";
-import { convertAudioQueryFromEngineToEditor } from "./proxy";
+import {
+ convertAudioQueryFromEditorToEngine,
+ convertAudioQueryFromEngineToEditor,
+} from "./proxy";
import {
convertHiraToKana,
convertLongVowel,
@@ -55,7 +58,13 @@ import {
StyleInfo,
Voice,
} from "@/type/preload";
-import { AudioQuery, AccentPhrase, Speaker, SpeakerInfo } from "@/openapi";
+import {
+ AudioQuery,
+ AccentPhrase,
+ Speaker,
+ SpeakerInfo,
+ AudioQueryToJSON,
+} from "@/openapi";
import { base64ImageToUri, base64ToUri } from "@/helpers/base64Helper";
import { getValueOrThrow, ResultError } from "@/type/result";
import { generateWriteErrorMessage } from "@/helpers/fileHelper";
@@ -1217,6 +1226,95 @@ export const audioStore = createPartialStore({
},
},
+ // Guide the audio query with reference audio
+ // replace the audio query with the analysis result from the reference audio
+ // TODO: make it a redo-able command
+ GUIDE_AUDIO_QUERY: {
+ action: createUILockAction(
+ async (
+ { actions, state },
+ {
+ engineId,
+ audioKey,
+ refAudio,
+ normalize,
+ trim,
+ assignLength,
+ assignPitch,
+ }: {
+ engineId: EngineId;
+ audioKey: AudioKey;
+ refAudio: Blob;
+ normalize: boolean;
+ trim: boolean;
+ assignLength: boolean;
+ assignPitch: boolean;
+ },
+ ) => {
+ // check if the engine supports guide feature
+ // as the frontend would disable the button if not,
+ // this shouldn't happen but just in case
+ if (!state.engineManifests[engineId].supportedFeatures.guide) {
+ throw new Error(
+ `Engine "${engineId}" does not support guide feature.`,
+ );
+ }
+ const text = state.audioItems[audioKey].text;
+ const query = await actions.FETCH_AUDIO_QUERY({
+ text,
+ engineId,
+ styleId: state.audioItems[audioKey].voice.styleId,
+ }); // we fetch a fresh AudioQuery for the text to avoid inconsistency
+ if (query == undefined) throw new Error("query == undefined");
+ await actions
+ .INSTANTIATE_ENGINE_CONNECTOR({
+ engineId,
+ })
+ .then(async (instance) => {
+ await instance
+ .invoke("guide")({
+ // guided api uses form-based payload to include audio file
+ // the serialization won't work out of the box
+ // we need to manually convert AudioQuery to JSON string here
+ query: JSON.stringify(
+ AudioQueryToJSON(
+ convertAudioQueryFromEditorToEngine(
+ query,
+ state.engineManifests[engineId].defaultSamplingRate,
+ ), // the sampling rate here is not used in guide API
+ ) as unknown as AudioQuery, // the assertion here is not necessary but TS is happy now
+ ),
+ refAudio: refAudio,
+ normalize: normalize,
+ trim: trim,
+ assignLength: assignLength,
+ assignPitch: assignPitch,
+ })
+ .catch((error) => {
+ window.backend.logError(
+ error,
+ `Failed to guide AudioQuery for the audioKey "${audioKey}".`,
+ );
+ throw error;
+ })
+ .then((result) => {
+ const new_query = convertAudioQueryFromEngineToEditor(result);
+ // replace the old query with the new one
+ actions
+ .SET_AUDIO_QUERY({ audioKey, audioQuery: new_query })
+ .catch((error) => {
+ window.backend.logError(
+ error,
+ `Failed to set guided AudioQuery for the audioKey "${audioKey}".`,
+ );
+ throw error;
+ });
+ });
+ });
+ },
+ ),
+ },
+
DEFAULT_PROJECT_FILE_BASE_NAME: {
getter: (state) => {
// NOTE: 起動時にソングエディタが開かれた場合、トークの初期化が行われずAudioCellが作成されない
diff --git a/src/store/type.ts b/src/store/type.ts
index 9df5efe918..a94db4b726 100644
--- a/src/store/type.ts
+++ b/src/store/type.ts
@@ -400,6 +400,18 @@ export type AudioStoreTypes = {
}): Promise;
};
+ GUIDE_AUDIO_QUERY: {
+ action(payload: {
+ engineId: EngineId;
+ audioKey: AudioKey;
+ refAudio: Blob;
+ normalize: boolean;
+ trim: boolean;
+ assignLength: boolean;
+ assignPitch: boolean;
+ }): void;
+ };
+
FETCH_AND_COPY_MORA_DATA: {
action(payload: {
accentPhrases: AccentPhrase[];
@@ -2096,6 +2108,7 @@ export type DialogStates = {
isImportSongProjectDialogOpen: boolean;
isPresetManageDialogOpen: boolean;
isHelpDialogOpen: boolean;
+ isGuideDialogOpen: boolean;
};
export type UiStoreTypes = {
diff --git a/src/store/ui.ts b/src/store/ui.ts
index 94db2da956..d0526b8768 100644
--- a/src/store/ui.ts
+++ b/src/store/ui.ts
@@ -81,6 +81,7 @@ export const uiStoreState: UiStoreState = {
isImportSongProjectDialogOpen: false,
isPresetManageDialogOpen: false,
isHelpDialogOpen: false,
+ isGuideDialogOpen: false,
isMaximized: false,
isPinned: false,
isFullscreen: false,
diff --git a/src/store/utility.ts b/src/store/utility.ts
index dd170cd882..62ab8b1104 100644
--- a/src/store/utility.ts
+++ b/src/store/utility.ts
@@ -455,6 +455,7 @@ export const getToolbarButtonName = (tag: ToolbarButtonTagType): string => {
UNDO: "元に戻す",
REDO: "やり直す",
IMPORT_TEXT: "テキスト読み込み",
+ GUIDE: "ガイド",
EMPTY: "空白",
};
return tag2NameObj[tag];
diff --git a/src/type/preload.ts b/src/type/preload.ts
index 24ef554348..89fb6e3dc8 100644
--- a/src/type/preload.ts
+++ b/src/type/preload.ts
@@ -308,6 +308,7 @@ export const toolbarButtonTagSchema = z.enum([
"UNDO",
"REDO",
"IMPORT_TEXT",
+ "GUIDE",
"EMPTY",
]);
export type ToolbarButtonTagType = z.infer;