音声生成
ファイルを入力する場合は ファイル API でアップロードし、返された file_id を参照します。ゲートウェイは変換を担当し、入力への対応可否は上流が判断します。
input_references: [{"type":"audio","role":"reference","source":{"type":"file","file_id":"..."}}] で素材を参照します。type は実ファイルの image/audio/video に一致させます。ゲートウェイがファイルを読み取り、プロバイダーの API が受け入れる形で引き渡し、role はそのまま保たれます。既存の必須項目は引き続き必要です。Images・Video・Speech の input_references は InOneAPI 拡張です。
POST /v1/audio/speech は OpenAI Speech JSON 形式に従い、JSON ではなく音声バイト列を返します。
必須は model、input、voice。任意は instructions、response_format(mp3、opus、aac、flac、wav、pcm)、speed(0.25–4)、stream_format(audio または sse)です。Chat 形式の stream は送信しません。
最小リクエスト
YOUR_MODEL_ID をモデル詳細の正確な ID に置き換え、接頭辞は追加しないでください。任意パラメーターと音色はモデルの対応範囲に従い、アプリヘッダーはコメントのままで利用できます。
# -H "X-APP-NAME: Your App Name"
# -H "X-APP-URL: https://your-app.example.com"
curl "https://api.inoneapi.com/v1/audio/speech" \
-H "Authorization: Bearer $INONEAPI_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "YOUR_MODEL_ID",
"input": "Hello from InOneAPI",
"voice": "REPLACE_WITH_SUPPORTED_VOICE",
"response_format": "mp3"
}' \
--output speech.mp3パラメーター詳細
| フィールド | 型 | 説明 |
|---|---|---|
| model | string | 必須の公開モデル ID。転送時にプラットフォームが実際のプロバイダーのモデル ID に置き換えます。例のモデル名は管理画面で利用可能なものに変更してください。 |
| input | string | 必須の空でないテキスト。長さ制限は上流によります。自動分割、切り詰め、結合、SSML 変換はありません。 |
| voice | string/object | 必須の音色名、または対応するカスタム音色 {"id":"voice_123"}。音色名と権限はプロバイダー固有です。 |
| instructions | string | 任意の感情・話し方の指示。対応モデルのみで有効で、input の代わりではありません。 |
| response_format | string | 既定は mp3。出力形式が固定のモデルはその形式のみ受け付けます。url、base64、json ではありません。 |
| speed | number | 0.25–4。省略時は上流の既定値。上流の制限がより厳しい場合があります。 |
| stream_format | string | 既定は audio。SSE は対応モデルのみ。音声の分割転送は SSE ではありません。 |
キーはサーバー側に保持し、利用者に AI 音声であることを明示してください。文字起こし、翻訳、Realtime、音声学習はこの API の対象外です。
クライアント例
curl https://api.inoneapi.com/v1/audio/speech \
-H "Authorization: Bearer $INONEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "YOUR_MODEL_ID","input": "こんにちは。","voice": "REPLACE_WITH_SUPPORTED_VOICE","response_format": "mp3"}' \
--output speech.mp3cURL の終了コードを確認してください。--fail-with-body はエラー JSON も speech.mp3 に保存する場合があります。成功した音声応答には response.json() を使いません。JavaScript と TypeScript は全体をメモリに保持します。大きな音声にはストリームを使用してください。Python は分割保存でき、HTTP エラーは HTTPError になります。
音声形式とストリーミング
| 形式 | MIME と注意点 |
|---|---|
| mp3 | audio/mpeg。既定形式。 |
| opus | audio/ogg。プロバイダーが実際に Ogg Opus を返す必要があり、形式変換はしません。 |
| aac | audio/aac。実際の格納形式と再生環境を確認してください。 |
| flac | audio/flac。可逆圧縮で大きくなる場合があります。 |
| wav | audio/wav。コンテナーヘッダーあり。サンプル仕様は上流によります。 |
| pcm | application/octet-stream。ヘッダーなし。サンプルレート、ビット深度、チャンネル、エンディアンを確認してください。拡張子変更だけでは WAV になりません。 |
プロバイダーが返した MIME とバイト列をそのまま保持します。Base64 で返る音声は MIME を指定するだけで、再エンコードやコーデック検証はしません。非 SSE 経路は最初にバッファリングする場合があり、即時のバイト単位転送を保証しません。
curl -N https://api.inoneapi.com/v1/audio/speech \
-H "Authorization: Bearer $INONEAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"YOUR_MODEL_ID","input":"Hello!","voice":"REPLACE_WITH_SUPPORTED_VOICE","stream_format":"sse"}'
SSE は text/event-stream です。上流イベントと音声断片を解析し、SSE テキスト全体を MP3 として保存しないでください。SSE 非対応のモデルは 400 PROTOCOL_STREAM_UNSUPPORTED を返します。
エラー詳細
| エラー | 対応 |
|---|---|
| 400 INVALID_REQUEST_BODY | 必須値、型、speed、列挙値を確認し、stream を削除します。 |
| 400 PROTOCOL_TRANSFORM_FAILED | モデルが受け付けないパラメーター、または未設定の必須項目です。 |
| 400 AUDIO_FORMAT_UNSUPPORTED | 固定形式との不一致。形式省略時は mp3。 |
| 401/403 | キー、権限、モデル制限を確認します。 |
| 429 | Retry-After、レート制限、予算に従います。 |
| 502 PROTOCOL_RESPONSE_TRANSFORM_FAILED | プロバイダーの音声が不正、またはレスポンスがサイズ上限を超えました。 |
失敗したリクエストは音声を生成しません。タイムアウト時でも生成・課金済みの場合があるため、無制限に再試行しません。秘密や機密テキストではなく X-Gateway-Trace-ID を保存してください。URL 取得、再エンコード、タスク照会は非対応です。
成功時の MIME は通常 audio/mpeg、audio/ogg、audio/aac、audio/flac、audio/wav、PCM の application/octet-stream です。SSE 対応のモデルでは stream_format=sse を利用できます。400 は入力または形式、429 は Retry-After、502 はプロバイダーのレスポンスを解析できないかサイズ上限超過です。
オンライン体験
Playground とモデル詳細の「今すぐ試す」では音声出力、ボイス、MP3/WAV/Opus/AAC/FLAC を選択し、結果を再生・保存できます。モデルが選択したボイスと形式に対応している必要があります。出力形式が固定のモデルには同じ形式を指定してください。未加工 PCM の再生には対応せず、音声レスポンスは Chat JSON ではなく音声バイトとして扱います。