cURL
response_file=$(mktemp) || exit 1
if curl --fail-with-body \
--max-time 120 \
--request POST \
https://ai.kedang.net/v1/audio/speech \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"model": "MODEL_ID",
"input": "你好,欢迎使用语音服务。",
"voice": "alloy",
"response_format": "mp3"
}' \
--output "$response_file"; then
mv "$response_file" speech.mp3
else
cat "$response_file" >&2
rm -f "$response_file"
exit 1
fi
Python
# pip install requests
import requests
from pathlib import Path
url = 'https://ai.kedang.net/v1/audio/speech'
headers = {'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'}
payload = {'model': 'MODEL_ID',
'input': '你好,欢迎使用语音服务。',
'voice': 'alloy',
'response_format': 'mp3'}
response = requests.request(
'POST', url, headers=headers, timeout=120, json=payload
)
response.raise_for_status()
Path('speech.mp3').write_bytes(response.content)
JavaScript
// Node.js 18+ · 保存为 example.mjs 后运行
import { writeFile } from "node:fs/promises";
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
};
const payload = {
"model": "MODEL_ID",
"input": "你好,欢迎使用语音服务。",
"voice": "alloy",
"response_format": "mp3"
};
const response = await fetch("https://ai.kedang.net/v1/audio/speech", {
method: "POST",
headers,
signal: AbortSignal.timeout(120_000),
body: JSON.stringify(payload),
});
if (!response.ok) {
throw new Error(`${response.status}: ${await response.text()}`);
}
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
Go
package main
import (
"io"
"log"
"net/http"
"os"
"strings"
"time")
func main() {
payload := strings.NewReader("{\n \"model\": \"MODEL_ID\",\n \"input\": \"你好,欢迎使用语音服务。\",\n \"voice\": \"alloy\",\n \"response_format\": \"mp3\"\n}")
req, err := http.NewRequest("POST", "https://ai.kedang.net/v1/audio/speech", payload)
if err != nil { log.Fatal(err) }
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 120 * time.Second}
resp, err := client.Do(req)
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil { log.Fatal(err) }
if resp.StatusCode >= 400 { log.Fatalf("%s: %s", resp.Status, data) }
if err := os.WriteFile("speech.mp3", data, 0600); err != nil { log.Fatal(err) }
}