Questa pagina al momento è disponibile solo in cinese. Navigazione e menu sono già in italiano.
语音生成
如需引用文件,先通过 文件 API 上传素材,再使用返回的 file_id。网关负责转换,服务商是否接受由上游返回结果。
素材可以使用 input_references: [{"type":"image","role":"reference","source":{"type":"file","file_id":"..."}}]。type 必须匹配实际素材的 image/audio/video 类型。网关将 source 转为 COS 签名 URL,保留 role 后执行 DSL;其他必填字段保持不变。图片和语音接口的 input_references 属于 InOneAPI 扩展。
使用 POST /v1/audio/speech 生成音频。请求遵循 OpenAI Speech JSON 协议,成功响应是音频字节而不是 JSON。
最小请求
先将 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请求
地址:https://api.inoneapi.com/v1/audio/speech。密钥仅放在服务端。公开模型必须存在音频映射,不回退其他 API 类型。示例 model 为占位符,请替换成控制台可用模型。
| 参数 | 类型 | 详细说明 |
|---|---|---|
| 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 的原生渠道。HTTP 分块音频不等于 SSE。 |
必填字段为 model、input、voice;可选字段为 instructions、response_format(mp3、opus、aac、flac、wav、pcm)、speed(0.25–4)和 stream_format(audio 或 sse)。不要发送 Chat 风格的 stream 字段。音色、输入长度和格式能力取决于模型。
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 示例会分块保存,非 2xx 会抛出 HTTPError。
响应、流式与错误
成功时不要调用 response.json()。JavaScript 保存字节示例:
import { writeFile } from "node:fs/promises";
const response = await fetch("https://api.inoneapi.com/v1/audio/speech", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INONEAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "YOUR_MODEL_ID",
input: "你好。",
voice: "REPLACE_WITH_SUPPORTED_VOICE",
response_format: "mp3",
}),
});
if (!response.ok)
throw new Error(`${response.status}: ${await response.text()}`);
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
Python 分块保存,非 2xx 会抛出 HTTPError:
import json, os, urllib.request
request = urllib.request.Request(
"https://api.inoneapi.com/v1/audio/speech",
data=json.dumps({
"model": "YOUR_MODEL_ID",
"input": "你好。",
"voice": "REPLACE_WITH_SUPPORTED_VOICE",
"response_format": "mp3",
}).encode(),
headers={
"Authorization": "Bearer " + os.environ["INONEAPI_API_KEY"],
"Content-Type": "application/json",
},
method="POST",
)
with urllib.request.urlopen(request, timeout=180) as response:
with open("speech.mp3", "wb") as output:
while chunk := response.read(65536):
output.write(chunk)
cURL 必须检查退出码:--fail-with-body 仍可能把错误 JSON 写入 speech.mp3。不要把错误响应当音频播放。JavaScript 例完整缓冲文件,大文件宜使用流式保存。
| 格式 | MIME 与使用要求 |
|---|---|
| mp3 | audio/mpeg,默认格式。 |
| opus | audio/ogg;Base64 DSL 声明 opus 要求上游实际返回 Ogg Opus。 |
| aac | audio/aac,实际封装和终端支持取决于服务商。 |
| flac | audio/flac,无损,文件可能更大。 |
| wav | audio/wav,包含容器头,采样参数以实际音频为准。 |
| pcm | application/octet-stream,无容器头;必须确认采样率、位深、声道和端序。 |
原生保留 MIME 和字节。Base64 DSL 声明 MIME,但不转码或验证编码真实性。默认 audio 路径可能先缓冲部分响应,不保证逐字节即时转发。
原生 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 | response_format 与固定格式不符;省略时按 mp3。 |
| 401/403 | 检查密钥、权限和模型限制。 |
| 402 / 429 | 402 检查余额与预算;429 遵循 Retry-After,检查限流。 |
| 502 PROTOCOL_RESPONSE_TRANSFORM_FAILED | 上游 JSON/Base64/路径无效或缓冲超限。 |
上游错误不执行成功音频转换。超时可能已经生成和收费,不应无限重试。排障保留 X-Gateway-Trace-ID,不记录密钥和敏感朗读文本。明确告知使用者音频由 AI 生成。此端点不提供转写、翻译、Realtime、URL 下载、转码或任务轮询。
响应 MIME 通常为 audio/mpeg、audio/ogg、audio/aac、audio/flac、audio/wav 或 application/octet-stream(PCM)。PCM 没有 WAV 头,不能仅通过改扩展名播放。原生服务商支持时可使用 stream_format=sse;DSL 转换和 Base64 音频提取不支持 SSE。400 表示参数或映射错误,429 应遵循 Retry-After,502 表示响应转换失败或超出默认 32 MiB 缓冲区。
在线体验
控制台 Playground 和模型详情的“立即体验”可选择音频输出、音色和 MP3/WAV/Opus/AAC/FLAC 格式,成功后播放并保存音频。具体音色、格式必须由该模型支持;固定格式的 audio_response DSL 要求请求选择相同格式。体验页不提供裸 PCM 播放,也不会把语音响应当作 Chat JSON。