0.9.0 — Google TTS の構造化スタイルメタデータ
1. 目的
multiai-tts 0.5.0 は、Google TTS へ話し方の指示を渡す形式として
speech_metadata を提供する。これは Gemini 3.8 を含む構造化 TTS メタデータ対応モデルで、原稿を逐語的な text、話し方を speech_metadata.style として分離する形式である。
従来のインライン形式では、スタイル指示と原稿を同じ入力に連結する。構造化形式へ同じ連結を行うと、指示や区切り文字まで原稿として音声化されるおそれがある。0.9.0 は、slidemovie がこの形式を明示的に選択・転送できるようにし、原稿以外を読み上げないことを保証する。
モデル名の接頭辞・接尾辞による判定は行わない。将来の Gemini モデルを含め、対応可否は利用者が設定する API 契約 tts_prompt_mode で決める。
2. 設定
config.json、Movie 属性、CLI、GUI に tts_prompt_mode を追加する。
| 値 | 意味 | 既定値 |
|---|---|---|
legacy_inline |
従来の Google TTS 互換形式。スタイル指示と原稿の区切りとして prompt_separator を使える。 |
はい |
speech_metadata |
原稿を本文、スタイル指示を構造化メタデータとして送る。 | いいえ |
legacy_inline を既定にして、既存プロジェクトの出力と設定を維持する。未知の値は multiai-tts の設定エラーとして API 呼び出し前に失敗する。
{
"tts_provider": "google",
"tts_model": "gemini-3.8-flash-tts",
"tts_prompt_mode": "speech_metadata",
"tts_use_prompt": true,
"prompt": "大学教員が学生に語りかけるように、落ち着いた自然な抑揚で読む。",
"prompt_separator": ""
}
CLI では次のように指定できる。
slidemovie my-project --video \
--tts-provider google \
--tts-model gemini-3.8-flash-tts \
--tts-prompt-mode speech_metadata
3. 原稿・プロンプト・区切りの扱い
tts_use_prompt が真の場合、prompt とスライドごとの additional_prompt をスタイル指示として multiai-tts.Prompt.save_tts() の prompt 引数へ渡す。偽の場合は従来どおり空のプロンプトを渡す。
| モード | 原稿 | スタイル指示 | prompt_separator |
|---|---|---|---|
legacy_inline |
従来の multiai-tts 形式 |
prompt + additional_prompt + prompt_separator |
使用する |
speech_metadata |
text として変更せず渡す |
speech_metadata.style へ渡す |
使用しない |
speech_metadata では、設定値に prompt_separator が残っていてもスタイル指示へ追加しない。移行時は空文字列へ変更することを推奨する。prompt には読み上げ見出し、原稿の開始記号、原稿そのものを入れず、話し方だけを書く。
局所的な間や息継ぎはスタイルプロンプトではなく、対応モデルが定める原稿中のタグ(例: <short pause>)として ::: notes に記述する。slidemovie は原稿のタグを変更しない。
4. チャンク処理と状態管理
chunk_size、split_chars、chunk_overflow は従来どおり原稿だけを対象にする。分割された各チャンクには、同じスタイル指示が再適用される。スタイルプロンプトや prompt_separator の長さはチャンク境界へ影響しない。
tts_prompt_mode は status.json の tts_config.prompt_mode に記録する。既存の状態ファイルにこの項目がない場合は legacy_inline として補完し、不要な設定変更確認を出さない。モードを変更した場合は他の TTS 設定と同様に変更確認の対象となり、音声の再生成を促す。
GUI はこの設定を「Google プロンプト形式」として表示・保存し、記録済みの TTS 設定を採用した場合にも復元する。
5. 依存関係と互換性
speech_metadata を使うには multiai-tts>=0.5.0 が必要である。slidemovie の依存下限もこのバージョンへ更新する。
- OpenAI、Azure、VOICEVOX の送信内容は変更しない。
- Google で
legacy_inlineを選ぶ場合も従来どおりである。 - 対応可否をモデル名から推測しないため、構造化メタデータを受け付ける将来モデルは
speech_metadataを明示するだけで利用できる。 - 構造化メタデータを受け付けないモデルで
speech_metadataを指定した場合は、旧形式へ黙ってフォールバックせず、multiai-ttsが返す明確なエラーを利用者へ示す。
6. テストと受け入れ条件
- 任意の Google モデル ID で
speech_metadataを指定すると、その値がPrompt.tts_prompt_modeへ渡る。 speech_metadataではprompt_separatorがsave_tts()のpromptに混入しない。legacy_inlineでは従来どおりprompt + additional_prompt + prompt_separatorを渡す。- CLI、GUI、
config.json、status.jsonの各経路でモードが保持される。 - 原稿の分割結果と、OpenAI・Azure・VOICEVOX の既存挙動を変更しない。