音声生成
ファイルを入力する場合は ファイル API でアップロードし、返された file_id を参照します。ゲートウェイは変換を担当し、入力への対応可否は上流が判断します。
input_references: [{"type":"image","role":"reference","source":{"type":"file","file_id":"..."}}] で素材を参照します。type は実ファイルの image/audio/video に一致させます。source を COS 署名 URL に変換し、role を保持して DSL に渡します。既存の必須項目は引き続き必要です。Images と 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。固定形式 Base64 マッピングは設定形式のみ受け付けます。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。Base64 DSL は 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 として保存しないでください。DSL は 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 | JSON/Base64/パスが不正、またはバッファー超過です。 |
上流エラーには成功時の変換を適用しません。タイムアウト時でも生成・課金済みの場合があるため、無制限に再試行しません。秘密や機密テキストではなく X-Gateway-Trace-ID を保存してください。URL 取得、再エンコード、タスク照会は非対応です。
成功時の MIME は通常 audio/mpeg、audio/ogg、audio/aac、audio/flac、audio/wav、PCM の application/octet-stream です。ネイティブプロバイダーでは SSE を利用できますが、request DSL と Base64 抽出は非対応です。400 は入力またはマッピング、429 は Retry-After、502 は変換失敗または既定 32 MiB のバッファー超過です。
マッピング管理で音声 API と audio_path を設定します。ネイティブは既定で有効で、無効にすると request DSL と audio_response を編集できます。完全な AI 生成規約、fixture、境界、計量は docs/audio-protocol-dsl.md と docs/audio-protocol-dsl.schema.json を参照してください。
設定検証と課金
テストは構造検証と cURL 例の生成のみで、上流を呼び出しません。ネイティブは {"version":1} を保存します。音声では汎用 response/retrieve JSON ステージを使いません。
計量と課金は別の設定です。Base64 は元の JSON usage を参照し、デコード後のバイト列は参照しません。バイナリーには通常 JSON usage がありませんが、欠損は無料を意味しません。現在の計量 DSL は文字列長や音声秒数を計算しないため、文字数・秒数課金には信頼できる上流メーターか専用アダプターが必要です。バッファー上限には JSON/Base64 の増加分が含まれ、並行処理ではデコード後のメモリも考慮します。
オンライン体験
Playground とモデル詳細の「今すぐ試す」では音声出力、ボイス、MP3/WAV/Opus/AAC/FLAC を選択し、結果を再生・保存できます。モデルが選択したボイスと形式に対応している必要があります。固定形式の audio_response DSL には同じリクエスト形式を指定してください。未加工 PCM の再生には対応せず、音声レスポンスは Chat JSON ではなく音声バイトとして扱います。