from typing import List, Optional from pydantic import BaseModel, Field class UpdateInfo(BaseModel): """ エンジンのアップデート情報 """ version: str = Field(title="エンジンのバージョン名") descriptions: List[str] = Field(title="アップデートの詳細についての説明") contributors: Optional[List[str]] = Field(title="貢献者名") class LicenseInfo(BaseModel): """ 依存ライブラリのライセンス情報 """ name: str = Field(title="依存ライブラリ名") version: Optional[str] = Field(title="依存ライブラリのバージョン") license: Optional[str] = Field(title="依存ライブラリのライセンス名") text: str = Field(title="依存ライブラリのライセンス本文") class SupportedFeatures(BaseModel): """ エンジンが持つ機能の一覧 """ adjust_mora_pitch: bool = Field(title="モーラごとの音高の調整") adjust_phoneme_length: bool = Field(title="音素ごとの長さの調整") adjust_speed_scale: bool = Field(title="全体の話速の調整") adjust_pitch_scale: bool = Field(title="全体の音高の調整") adjust_intonation_scale: bool = Field(title="全体の抑揚の調整") adjust_volume_scale: bool = Field(title="全体の音量の調整") interrogative_upspeak: bool = Field(title="疑問文の自動調整") synthesis_morphing: bool = Field(title="2人の話者でモーフィングした音声を合成") manage_library: bool = Field(title="音声ライブラリのインストール・アンインストール") class EngineManifest(BaseModel): """ エンジン自体に関する情報 """ manifest_version: str = Field(title="マニフェストのバージョン") name: str = Field(title="エンジン名") brand_name: str = Field(title="ブランド名") uuid: str = Field(title="エンジンのUUID") url: str = Field(title="エンジンのURL") icon: str = Field(title="エンジンのアイコンをBASE64エンコードしたもの") default_sampling_rate: int = Field(title="デフォルトのサンプリング周波数") terms_of_service: str = Field(title="エンジンの利用規約") update_infos: List[UpdateInfo] = Field(title="エンジンのアップデート情報") dependency_licenses: List[LicenseInfo] = Field(title="依存関係のライセンス情報") supported_features: SupportedFeatures = Field(title="エンジンが持つ機能")