テキスト音声変換
POST /v1/audio/speech
OpenAI 互換のエンドポイント 1 つでテキストを自然な音声に変換します。JSON を送れば、音声のバイト列がそのまま返ります。プロバイダーを切り替えるときに変えるのは modelだけです。ディスクには一切書き込みません。音声はそのままストリーミングで返されます。
リクエスト例
curl https://synthorai.io/v1/audio/speech \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from Synthorai.",
"voice": "alloy"
}' \
--output speech.mp3 Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="$SYNTHORAI_API_KEY",
base_url="https://synthorai.io/v1",
)
with client.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input="Hello from Synthorai.",
) as response:
response.stream_to_file("speech.mp3") リクエストボディ
| パラメータ | 型 | 説明 |
|---|---|---|
model* | string | モデル ID。tts-1、tts-1-hd、seed-tts-2.0 のいずれか。 |
input* | string | 合成するテキスト。最大 4096 文字。 |
voice | string | 読み上げに使うボイス。デフォルトは alloy。下記「ボイス」を参照してください。 |
response_format | string | 音声コンテナ:mp3(デフォルト)、opus、wav、pcm。 |
speed | number | 話速。0.25–4.0。デフォルトは 1.0。 |
対応モデル
どれを選べばよいですか?
| 必要なもの | 推奨モデル |
|---|---|
| 最も安価で、多くのプロダクト音声には十分 | google-tts-standard |
| 中国語中心のコンテンツ、またはボイスの選択肢を多く求める場合 | qwen3-tts-instruct-flash seed-tts-2.0 |
| 日常的なプロダクト音声で、音質とコストのバランスを取りたい場合 | tts-1 google-tts-neural2 |
| 表現力が最高:ナレーション、コンパニオンデバイス、ブランドボイス | tts-1-hd google-tts-chirp3-hd |
| モデル | 料金 | 適した用途 |
|---|---|---|
google-tts-standard | $4 / 1M chars | コストが最優先となる大量の通知や案内音声 |
qwen3-tts-instruct-flash | $11.50 / 1M chars | 中国語・多言語コンテンツ。上流が課金対象の文字数を返します |
tts-1 | $15 / 1M chars | 一般的なプロダクト音声、案内音声、通知 |
google-tts-neural2 | $16 / 1M chars | 多くの言語で自然な日常の音声 |
tts-1-hd | $30 / 1M chars | ナレーション、マーケティング、ユーザーがしばらく聴き続けるもの |
seed-tts-2.0 | $30 / 1M chars | 中国語・多言語コンテンツ。180+ のボイス |
google-tts-chirp3-hd | $30 / 1M chars | Google の最新で最も表現力の高いボイス |
$30 のモデルが 3 つあります。違いはボイスの性格と対応言語の広さであって、価格ではありません。決める前にご自身のテキストで試してみてください。
プロバイダーの切り替えは 1 行で済みます。 ここに挙げたモデルはすべて同じリクエストとレスポンスの形を持ちます。内部のプロバイダーは大きく異なりますが(認証方式、ストリーミング形式、ボイスの命名がそれぞれ違います)、gateway がその差を吸収するため、変更が必要なのは model.
# Same request, different provider — only the model name changes.
-d '{"model": "tts-1", "input": "...", "voice": "alloy"}'
-d '{"model": "seed-tts-2.0", "input": "...", "voice": "alloy"}' ボイス
OpenAI のモデルは標準のボイスを受け付けます: alloy, echo, fable, onyx, nova, shimmer.
モデル seed-tts-2.0 でも同じ 6 つの名前が使えます(近いボイスにマッピングされます)。完全に制御したい場合は、BytePlus のネイティブボイス ID をそのまま渡すこともできます。たとえば zh_female_cancan_uranus_bigtts. 180+ のネイティブボイスの全一覧は BytePlus のボイスカタログにあります。
モデル qwen3-tts-instruct-flash でも同じ 6 つの名前が使えます。Qwen のネイティブボイスを直接渡すこともできます。たとえば Cherry, Ethan, Nofish, Jada.
Google のボイスは料金ティアに紐づいています。 Google の各モデルは 1 つのティアに対応し、ティアはボイス名の一部になっています。ネイティブのボイス id、たとえば en-US-Neural2-C を渡す場合は、対応するモデル、この例では google-tts-neural2を使う必要があります。ティアをまたぐボイスは、誤った料金で黙って課金されるのではなく 502 で拒否されます。
音声フォーマット
コンテナは response_format で指定します。デフォルトは mp3: mp3, opus, wav, pcm.
すべてのプロバイダーがすべてのコンテナに対応しているわけではありません。未対応の値はエラーにはならず、MP3 にフォールバックします。
課金
入力文字数に応じて、プロバイダーの公式定価で課金されます。上乗せはありません。1 文字 = 漢字 1 文字 = アルファベット 1 文字 = 句読点 1 つ = スペース 1 つ。失敗したリクエストが課金されることはありません。
返ってくる音声は個別には計測されません。課金対象は送信したテキストだけです。
制限
- 1 リクエストあたり最大 4096 文字です。これを超える入力は課金される前に拒否されます。クライアント側で分割し、生成された音声をつなげてください。
- 話速は
speedで制御します(0.25–4.0、デフォルトは 1.0)。プロバイダーの範囲を外れた値は拒否されず、範囲内に丸められます。
エラー
| レスポンス | 説明 |
|---|---|
400 | 入力が空、または 4096 文字を超えています。 |
401 | API key がない、または無効です。 |
402 | このリクエストに必要なクォータが足りません。 |
502 | そのモデルがアカウントで利用できないか、上流のプロバイダーが失敗しました。課金は発生しません。 |
503 | 現在このモデルを提供しているチャネルがありません。 |