文字转语音
POST
/v1/audio/speech
将文本转换为音频
请求参数
请求头
Authorization
使用 Bearer Token 认证。
格式: Authorization: Bearer sk-xxxxxx
请求体
请求体参数(5 个)
| 参数 | 类型 | 默认值 | 说明 | 是否必填 |
|---|---|---|---|---|
model | string | — | TTS 模型 ID,例如 tts-1。 | 是 |
input | string | — | 要合成的文本,最大长度为 4096 个字符。 | 是 |
voice | string | — | 声音 ID:alloy、echo、fable、onyx、nova 或 shimmer。 | 是 |
response_format | string | mp3 | 音频格式:mp3、opus、aac、flac、wav 或 pcm。 | 否 |
speed | number | 1 | 播放速度,范围 0.25 到 4。 | 否 |
请求体示例
查看 JSON 请求体示例
{
"model": "tts-1",
"input": "你好,这是一个语音示例。",
"voice": "alloy",
"response_format": "mp3",
"speed": 1
}
请求示例代码
curl -X POST "https://10000router.com/v1/audio/speech" \
-H "Authorization: Bearer $API_KEY" \
-d '{"model":"tts-1","input":"你好,这是一个语音示例。","voice":"alloy","response_format":"mp3","speed":1}' \
--output speech.mp3
const response = await fetch("https://10000router.com/v1/audio/speech", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.API_KEY,
},
body: JSON.stringify({ model: "tts-1", input: "你好,这是一个语音示例。", voice: "alloy", response_format: "mp3", speed: 1 })
});
const audioBytes = await response.arrayBuffer();
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["API_KEY"], base_url="https://10000router.com/v1")
response = client.post(
"https://10000router.com/v1/audio/speech",
headers={
"Authorization": "Bearer " + os.environ["API_KEY"],
},
json={"model": "tts-1", "input": "你好,这是一个语音示例。", "voice": "alloy", "response_format": "mp3", "speed": 1},
)
response.raise_for_status()
with open("speech.mp3", "wb") as audio:
audio.write(response.content)
payload := `{"model":"tts-1","input":"你好,这是一个语音示例。","voice":"alloy","response_format":"mp3","speed":1}`
req, _ := http.NewRequest("POST", "https://10000router.com/v1/audio/speech", strings.NewReader(payload))
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
var payload = "{\"model\":\"tts-1\",\"input\":\"你好,这是一个语音示例。\",\"voice\":\"alloy\",\"response_format\":\"mp3\",\"speed\":1}";
var request = java.net.http.HttpRequest.newBuilder(java.net.URI.create("https://10000router.com/v1/audio/speech"))
.header("Authorization", "Bearer " + System.getenv("API_KEY"))
.POST(java.net.http.HttpRequest.BodyPublishers.ofString(payload)).build();
var response = java.net.http.HttpClient.newHttpClient().send(request, java.net.http.HttpResponse.BodyHandlers.ofByteArray());
using System.Net.Http.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("API_KEY"));
var payload = new { model = "tts-1", input = "你好,这是一个语音示例。", voice = "alloy", response_format = "mp3", speed = 1 };
var response = await client.PostAsJsonAsync("https://10000router.com/v1/audio/speech", payload);
await File.WriteAllBytesAsync("speech.mp3", await response.Content.ReadAsByteArrayAsync());
返回响应
响应示例
响应体是所选格式的二进制音频数据,不是 JSON。常见映射包括 mp3 → audio/mpeg、wav → audio/wav、flac → audio/flac 和 pcm → audio/pcm;opus、aac 的 Content-Type 可能因渠道而异,应以实际响应头为准。客户端应将响应体保存为对应扩展名的音频文件。
{
"error": {
"message": "Missing required parameter: input",
"type": "invalid_request_error",
"param": "input",
"code": null
}
}
{
"error": {
"message": "Rate limit reached",
"type": "rate_limit_exceeded",
"param": null,
"code": null
}
}
{
"error": {
"message": "Invalid authentication credentials",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
返回字段参数
成功响应
| 内容 | 类型 | 说明 |
|---|---|---|
| 响应体 | binary | 所选 response_format 对应的音频字节;响应头中的 Content-Type 以网关实际返回为准。 |