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 @@ + + + + + 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;