エンドポイント
音声合成(TTS)
POST /audio/speech でテキストを自然な音声に変換する TTS の解説です。生の音声バイトを返す仕組み、リクエストパラメーター、例、料金、音声合成モデルの一覧の取得方法、エラーを説明します。client.audio.speech.create がそのまま動作します。
プレイグラウンドで試すテキストを自然な音声に変換します(テキスト読み上げ、TTS)。エンドポイントは OpenAI の POST /audio/speech の形式に従い、生の音声バイトを返すため、client.audio.speech.create(...) が変更なしで動作します。
POST https://api14.com/api/v1/audio/speech
リクエスト
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | はい | 音声合成モデルの ID。例: openai/gpt-4o-mini-tts。 |
input | string | はい | 読み上げるテキスト。 |
voice | string | はい | 音声名。例: alloy、nova、verse。使える音声はモデルによって異なります(モデルのページを参照)。 |
response_format | string | いいえ | mp3(デフォルト)、wav、opus、aac、flac、pcm(対応するモデルのみ)。 |
speed | number | いいえ | 再生速度。通常は 0.25 から 4.0。 |
instructions | string | いいえ | 対応するモデル向けのスタイルの指示(「落ち着いた温かいトーン」など)。 |
例
import { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api14.com/api/v1",
apiKey: process.env.API14_API_KEY,
});
const audio = await client.audio.speech.create({
"model": "openai/gpt-4o-mini-tts",
"input": "Hello from api14! One API for every model.",
"voice": "alloy",
"response_format": "mp3"
});
await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));
レスポンス
ボディは音声ファイルそのもので、対応する Content-Type(例: audio/mpeg)が付きます。ディスクに保存するか、プレーヤーにストリーミングしてください。
curl https://api14.com/api/v1/audio/speech \
-H "Authorization: Bearer sk-api14-..." \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-4o-mini-tts","input":"Hello from api14!","voice":"alloy"}' \
--output hello.mp3
エラーは引き続き OpenAI のエラー形式の JSON で返されるため、ファイルに書き込む前にステータスコードを確認してください。
料金
音声合成は、モデルの表示価格(「$ / 1M characters」)で入力の文字数ごとに課金されます。100 万文字あたり $15 のモデルでは、1,000 文字の段落で $0.015 かかります。
音声合成モデルの一覧
curl "https://api14.com/api/v1/models?category=speech"
エラー
| ステータス | コード | 発生条件 |
|---|---|---|
| 400 | model_required / invalid_json | model がない、またはボディの形式が正しくない。 |
| 402 | insufficient_balance | USD 残高が $0。 |
| 403 | model_not_allowed / plan_required | キーの許可リストまたはプランにモデルが含まれていない。 |
| 404 | model_not_found | モデル ID が不明、または無効化されている。 |
| 429 | rate_limited | 毎分のリクエスト数を超えた。 |
未対応の音声や形式は上流で拒否され、そのまま返されます。エラーを参照してください。