Overview
一个接口,生成完整声音场景
Seed Audio 1.0 适用于对白、旁白、拟音、环境声和音乐氛围的统一生成。接口采用 Bearer Token 认证,并直接返回音频二进制数据。
Quickstart
快速开始
将示例中的 YOUR_FLU_API_KEY 替换为你的 Flu API 密钥。成功响应是音频文件,不是 JSON。
curl --request POST \
--url 'https://new.fluapi.com/v1/audio/speech' \
--max-time 300 \
--header 'Authorization: Bearer YOUR_FLU_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "seed-audio-1.0",
"text_prompt": "先是一声手机震动,环境中持续传来鸟鸣。男子用低沉严肃的语气说道:我们开始吧。",
"audio_config": {
"format": "mp3",
"sample_rate": 48000,
"pitch_rate": 0,
"speech_rate": 0,
"loudness_rate": 0
},
"watermark": {}
}' \
--output seed-audio.mp3
import os
import requests
url = "https://new.fluapi.com/v1/audio/speech"
api_key = os.environ["FLU_API_KEY"]
payload = {
"model": "seed-audio-1.0",
"text_prompt": (
"清晨的海边,远处有海浪和海鸟声。"
"女声以自然、平静的语气说道:今天会是很好的一天。"
),
"audio_config": {
"format": "mp3",
"sample_rate": 48000,
"pitch_rate": 0,
"speech_rate": 0,
"loudness_rate": 0,
},
"watermark": {},
}
response = requests.post(
url,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json=payload,
timeout=300,
)
response.raise_for_status()
with open("seed-audio.mp3", "wb") as audio_file:
audio_file.write(response.content)
print("已保存 seed-audio.mp3")
import { writeFile } from "node:fs/promises";
const response = await fetch(
"https://new.fluapi.com/v1/audio/speech",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.FLU_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seed-audio-1.0",
text_prompt: "生成一段节奏克制、具有未来感的产品提示音。",
audio_config: {
format: "mp3",
sample_rate: 48000,
pitch_rate: 0,
speech_rate: 0,
loudness_rate: 0,
},
watermark: {},
}),
signal: AbortSignal.timeout(300_000),
}
);
if (!response.ok) {
throw new Error(`请求失败 ${response.status}: ${await response.text()}`);
}
const audio = Buffer.from(await response.arrayBuffer());
await writeFile("seed-audio.mp3", audio);
console.log("已保存 seed-audio.mp3");
async function generateAudio() {
const response = await fetch(
"https://new.fluapi.com/v1/audio/speech",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_FLU_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "seed-audio-1.0",
text_prompt: "生成一段简洁、清晰的应用启动音。",
audio_config: { format: "mp3", sample_rate: 48000 },
watermark: {},
}),
}
);
if (!response.ok) {
throw new Error(await response.text());
}
const blob = await response.blob();
const downloadUrl = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = downloadUrl;
link.download = "seed-audio.mp3";
link.click();
URL.revokeObjectURL(downloadUrl);
}
Authentication
身份认证
所有请求都必须在 HTTP Header 中携带 Flu API Key。密钥格式采用标准 Bearer Token。
Authorization: Bearer YOUR_FLU_API_KEY
Content-Type: application/json
- 通过环境变量或密钥管理服务读取 API Key,不要写死在源码中。
- 不要将包含真实密钥的代码提交到 Git、日志、工单或前端构建产物。
- 不同环境使用不同密钥,发现泄露后立即停用并更换。
API Reference
请求参数
请求体为 JSON。推荐直接使用 text_prompt 描述需要生成的全部声音内容。
顶层参数
| 字段 | 类型 | 要求 | 说明 |
|---|---|---|---|
model |
string |
必填 | 固定填写 seed-audio-1.0。 |
text_prompt |
string |
必填* | 完整音频描述,最多 3,000 个 Unicode 字符。传入后优先于 input。 |
input |
string |
可选 | OpenAI 兼容字段;未传 text_prompt 时作为生成文本。 |
instructions |
string |
可选 | 与 input 搭配时,会按“instructions + 换行 + input”组合成最终描述。 |
audio_config |
object |
可选 | 音频格式、采样率、语速、音高和响度设置。默认格式为 MP3,采样率为 48,000 Hz。 |
response_format |
string |
可选 | OpenAI 兼容格式字段。若 audio_config.format 已设置,以后者为准。 |
speed |
number |
可选 | OpenAI 兼容语速倍率。仅在未设置 audio_config.speech_rate 时生效,并映射到 -50 至 100。 |
references |
object | array |
可选 | 高级参考音频或上游参考信息,结构按业务接入约定透传。 |
watermark |
object |
可选 | 水印配置。无特殊要求时传空对象 {}。 |
metadata |
object |
高级 | 用于透传额外上游参数。常规调用无需设置。 |
audio_config 参数
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
format |
string |
mp3 |
输出格式。
mp3wavpcmogg_opus
|
sample_rate |
integer |
48000 |
音频采样率,单位 Hz。 |
pitch_rate |
number |
0 |
音高调整。使用 0 可保持模型默认音高。 |
speech_rate |
number |
0 |
语速调整。使用 0 可保持模型默认语速;兼容映射范围为 -50 至 100。 |
loudness_rate |
number |
0 |
响度调整。使用 0 可保持模型默认响度。 |
Prompting
提示词指南
将“声音出现的顺序、环境、角色音色、说话方式和配乐”写在同一段描述里,模型更容易生成结构完整的音频。
先写时间顺序
使用“先是、随后、同时、最后”等词明确各声音出现的先后关系。
补充环境与声音层次
描述空间、距离、持续时间和背景声,例如室内混响、远处雷声或持续鸟鸣。
定义角色与表演方式
说明年龄、性别、口音、音色、情绪和语气,并用引号标出需要说出的台词。
明确配乐和整体情绪
写出主奏乐器、节奏、风格及情绪,例如克制、悬疑、温暖或未来感。
先是一声手机震动,环境中持续传来鸟鸣。
音乐以马林巴为主奏乐器,加入合成器 Lead、电贝斯和打击乐,
整体情绪紧张、悬疑。
男子 1(中青年男性,台湾口音,嗓音低沉浑厚)
用严肃的语气说道:“钟 sir,你是什么时候被收买的?”
Response
响应与文件保存
成功时返回 HTTP 200,响应体是原始音频字节。请根据请求格式写入对应扩展名,不要尝试按 JSON 解析。
| 输出格式 | Content-Type | 建议扩展名 |
|---|---|---|
mp3 |
audio/mpeg |
.mp3 |
wav |
audio/wav |
.wav |
pcm |
audio/pcm |
.pcm |
ogg_opus |
audio/ogg |
.ogg |
# 正确:保存原始响应体
response.raise_for_status()
Path("output.mp3").write_bytes(response.content)
# 错误:成功响应不是 JSON
data = response.json()
Billing
按生成时长计费
Seed Audio 1.0 的基础价格为每秒 0.6 美元。系统优先使用上游返回的原始音频时长计费,并应用账号所在分组的倍率。
Errors
错误处理
非 2xx 响应应先记录状态码和响应文本,再根据错误类型决定是否重试。不要对所有错误进行无限重试。
audio_config 类型。
import random
import time
import requests
retryable_statuses = {429, 500, 502, 503, 504}
for attempt in range(3):
response = requests.post(url, headers=headers, json=payload, timeout=300)
if response.ok:
break
if response.status_code not in retryable_statuses:
response.raise_for_status()
time.sleep((2 ** attempt) + random.random())
else:
response.raise_for_status()
Production
生产环境建议
音频生成耗时和响应体积都高于普通文本接口。上线前应完善超时、重试、存储与密钥管理。
- 客户端超时建议设置为 300 秒,并根据实际业务限制单次文本长度。
- 只对 429 和 5xx 错误进行有限重试,使用指数退避,避免重复生成造成额外费用。
- 为每次业务请求生成幂等标识,并在应用层缓存已成功生成的结果。
- 收到响应后检查 HTTP 状态与
Content-Type,再按二进制方式写入文件。 - 大规模任务使用队列控制并发,将成品上传到对象存储,不要长期占用应用进程内存。
- 记录模型、耗时、输出格式、文件大小和业务请求 ID,但不要在日志中记录 API Key。