Files
oss-sync 57702b4f34
CI / build-and-test (push) Canceled after 0s
sync: update from private repo (2336949a)
2026-09-17 11:29:31 +00:00

3.5 KiB

Speak

文章を読み上げて音声ファイルにする。外部の読み上げサーバー(OpenAI 互換の /audio/speech)に文字を送り、返ってきた音声を workspace の output/ に保存する。

基本

Speak({
  text: "おはようございます。今日の予定は 3 件です。",
  file_name: "morning-brief",   // 省略時 speak-{日時}.{形式}
  voice: "jf_alpha"             // 省略時 config の speak_voice
})

返り値は保存したパス。そのまま利用者に示せる。

音声を保存しました -> output/morning-brief.mp3 (mp3, 48213 bytes, 24 文字, voice: jf_alpha)

サーバー設定(必須)

設定 → ツール → Speech の「読み上げ」の欄で設定する。文字起こし(TranscribeAudio)とは別の接続先で、片方だけ設定しても構わない。

欄 設定キー 既定
読み上げの接続先 speak_server_url なし(未設定なら使えない)
読み上げモデル speak_model なし(送らない)
声 speak_voice なし(送らない)
出力の形式 speak_format mp3
読み上げのタイムアウト speak_timeout 120 秒
文字数の上限 speak_max_chars 4096 文字

接続先が未設定のときは、送信せずに断る。

ツールの入り切り

読み上げは分類 speak として、ワークスペースごとに入り切りを決める(設定 → ツール)。既定は切。接続先を設定していない状態では動かないため。

声の名前について

声の名前は自由入力で、こちらは選択肢を持たない。OpenAI 互換の仕様が声の語彙を定めておらず、サーバーの実装ごとに違うため。決め打ちすると、接続先を替えた瞬間に通らなくなる。

名前が通らなかったときは、サーバーが返した文をそのまま返す。

読み上げサーバーエラー (400): {"error":{"message":"voice 'alloy' is not available"}}

この文が「声の名前が違う」と気づける唯一の手がかりなので、加工しない。

出力の形式

仕様上は mp3 / opus / aac / flac / wav / pcm があるが、全部を持つサーバーとは限らない。既定の mp3 がいちばん通りやすい。指定した形式がそのまま拡張子になる。

pcm は画面のプレビューでは再生できない(ダウンロードはできる)。アプリの中で聴くなら mp3 などにする。

文字数の上限

上限を超える文章は断る。黙って切り詰めることはしない。切ると、途中で終わった音声が「できた」として返り、最後まで聴いて初めて気づくことになる。

文字数が上限を超えています(5200 文字 / 上限 4096 文字)。切り詰めてはいません。…

長い文章は段落ごとに分けて複数回呼ぶか、設定で上限を上げる。

立てられるサーバーの例

OpenAI 互換の /audio/speech を持つ実装であれば何でもよい。

音の品質・話速・言語の対応はサーバー側の責務で、このアプリでは扱わない。

関連

  • 文字起こしは TranscribeAudio(逆向き。音声 → 文字)
  • 保存した音声はファイル窓のプレビューでそのまま再生できる