文字转语音

POST /v1/audio/speech

将文本转换为音频

请求参数

请求头

Authorization

使用 Bearer Token 认证。

格式: Authorization: Bearer sk-xxxxxx

请求体

请求体参数(5 个)
参数类型默认值说明是否必填
modelstring—TTS 模型 ID,例如 tts-1。是
inputstring—要合成的文本,最大长度为 4096 个字符。是
voicestring—声音 ID:alloy、echo、fable、onyx、nova 或 shimmer。是
response_formatstringmp3音频格式:mp3、opus、aac、flac、wav 或 pcm。否
speednumber1播放速度,范围 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 以网关实际返回为准。

results matching ""

    No results matching ""