Create speech
错误排查
调用过程中遇到错误?请参阅 API 错误码参考 获取完整的错误类型说明与排查方案。
POST https://openqiao.com/api/v1/audio/speechCreate speech 接口将输入文本转换为音频(文本转语音,Text-to-Speech),兼容 OpenAI 的 Create speech 接口。
本接口默认返回一个 JSON 响应,包含 base64 编码的音频和 token 用量。将 stream 设为 true 可改为以 Server-Sent Events 形式增量接收音频。音频编码由 response_format 参数控制。
Request headers
Authorization string *
Bearer Token 鉴权,格式为 Bearer $OPENQIAO_API_KEY。
Content-Type string *
请求内容类型,默认值为 application/json。
Request
model string *
要使用的模型 ID,格式为 <供应商>/<模型名称>。
input string *
要合成为语音的文本,不能为空。
voice string 可选
供应商特定的音色标识符,用于生成音频。可取的值取决于具体模型。
response_format string 可选
输出音频编码,因供应商而异,默认值为 pcm。不支持的取值将返回 400 错误。
pcm— 裸 PCM 音频(有符号 16 位小端序,单声道,24 kHz,无容器封装)。
stream boolean 可选
是否流式返回音频,默认值为 false。
false— 返回单个 JSON 响应,包含完整的 base64 音频和 token 用量。true— 以 Server-Sent Events 形式返回音频(Content-Type: text/event-stream),与 OpenAI 的流式格式一致。音频以 base64 编码包含在speech.audio.delta事件中(每个音频块一个,并各自携带mime_type),随后是携带 token 用量的speech.audio.done事件,最后是[DONE]事件。
speed number 可选
可选的播放速度倍率,必须为正数。仅部分模型支持。
Response
非流式(默认)
请求成功时,响应为一个 JSON 对象,包含 base64 编码的音频、其媒体类型和 token 用量:
{
"model": "google/gemini-3.1-flash-tts-preview",
"audio": "<base64 编码的音频字节>",
"mime_type": "audio/L16;rate=24000",
"usage": {
"input_tokens": 5,
"output_tokens": 109,
"total_tokens": 114
}
}audio— base64 编码的裸音频,格式为所请求的response_format(默认 PCM)。解码后即得到音频字节。mime_type— 供应商返回的音频媒体类型(如audio/L16;rate=24000),便于封装或播放。usage— token 用量,包含input_tokens、output_tokens和total_tokens。
流式(stream: true)
响应为 text/event-stream 的 Server-Sent Events 流。每个事件是一行 data:,内含一个 JSON 对象:
data: {"type":"speech.audio.delta","audio":"<base64 编码的音频字节>","mime_type":"audio/L16;rate=24000"}
data: {"type":"speech.audio.done","usage":{"input_tokens":5,"output_tokens":109,"total_tokens":114}}
data: [DONE]speech.audio.delta— 携带一个 base64 编码的音频块及其mime_type(供应商返回的该块媒体类型)。将所有 delta 拼接并解码后,即得到与非流式audio字段相同的字节。speech.audio.done— 携带 tokenusage对象,包含input_tokens、output_tokens和total_tokens。[DONE]— 标志流结束。
发生错误时,接口返回 JSON 对象而非音频:
{
"error": {
"code": "...",
"type": "...",
"message": "..."
}
}curl https://openqiao.com/api/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENQIAO_API_KEY" \
-d '{
"model": "google/gemini-3.1-flash-tts-preview",
"input": "开桥 is an LLM API aggregation service.",
"voice": "Kore",
"response_format": "pcm"
}'const response = await fetch("https://openqiao.com/api/v1/audio/speech", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.OPENQIAO_API_KEY}`,
},
body: JSON.stringify({
model: "google/gemini-3.1-flash-tts-preview",
input: "开桥 is an LLM API aggregation service.",
voice: "Kore",
response_format: "pcm",
}),
});
const { audio } = await response.json();
// 将 base64 音频解码为裸字节。
const bytes = Buffer.from(audio, "base64");
await import("node:fs/promises").then(fs => fs.writeFile("speech.pcm", bytes));import base64
import os
import requests
response = requests.post(
"https://openqiao.com/api/v1/audio/speech",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['OPENQIAO_API_KEY']}",
},
json={
"model": "google/gemini-3.1-flash-tts-preview",
"input": "开桥 is an LLM API aggregation service.",
"voice": "Kore",
"response_format": "pcm",
},
)
# 将 base64 音频解码为裸字节。
with open("speech.pcm", "wb") as f:
f.write(base64.b64decode(response.json()["audio"])){
"model": "google/gemini-3.1-flash-tts-preview",
"audio": "<base64 编码的音频字节>",
"mime_type": "audio/L16;rate=24000",
"usage": {
"input_tokens": 5,
"output_tokens": 109,
"total_tokens": 114
}
}若希望以 Server-Sent Events 形式接收音频,将 stream 设为 true:
curl https://openqiao.com/api/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENQIAO_API_KEY" \
-d '{
"model": "google/gemini-3.1-flash-tts-preview",
"input": "开桥 is an LLM API aggregation service.",
"voice": "Kore",
"response_format": "pcm",
"stream": true
}'Content-Type: text/event-stream
data: {"type":"speech.audio.delta","audio":"<base64 编码的音频字节>","mime_type":"audio/L16;rate=24000"}
data: {"type":"speech.audio.done","usage":{"input_tokens":5,"output_tokens":109,"total_tokens":114}}
data: [DONE]