Gemini 3.1 Flash文生语音
本页由 ModelFold 文档站根据上游官方 OpenAPI 文档同步生成。接口路径、参数、示例与官方保持一致;品牌与 API 域名已替换为 ModelFold。
接口
POST /jobs/createTask
完整 URL: https://ai.modelfold.online/v1/jobs/createTask
鉴权:所有请求都需要
Authorization: Bearer <API_KEY>请求头。
使用 Gemini 3.1 Flash 进行文本转语音。
输出:WAV(16 位 PCM,24 kHz,单声道)。
查询任务状态
提交任务后,使用统一的查询端点检查进度并获取结果:
- 获取任务详情 — 了解如何查询任务状态并获取生成结果
TIP
对于生产环境,我们建议使用 callBackUrl 参数接收自动通知,而不是轮询状态端点。
相关资源
请求参数
请求体 (application/json)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 使用的模型 默认值:"google/gemini-3-1-flash-tts"。 可选值:google/gemini-3-1-flash-tts。 示例:google/gemini-3-1-flash-tts。 |
callBackUrl | string | 否 | 结果回调地址 |
input | object | 是 | 生成任务的输入参数 |
input.temperature | number | 否 | 采样温度,例如:1 默认值:1。 示例:1。 |
input.scene | string | 否 | 场景描述,例如:"A quiet, warm room with a fireplace crackling softly." 默认值:""。 示例:``。 |
input.sample_context | string | 否 | 示例上下文/整体基调,例如:"Audiobook style narration. Tone is gentle and inviting." 默认值:""。 示例:``。 |
input.speakers | array<object> | 是 | 说话人配置列表 |
input.speakers[].speaker_id | string | 是 | 说话人标识,如 "Speaker 1" 或 "Speaker 2";必须为「Speaker N」格式 |
input.speakers[].voice_name | string | 是 | 音色名称,如 "Zephyr"、"Fenrir"、"Puck" 可选值:Achernar / Achird / Algenib / Algieba / Alnilam / Aoede / Autonoe / Callirrhoe / Charon / Despina / Enceladus / Erinome / Fenrir / Gacrux / Iapetus / Kore / Laomedeia / Leda / Orus / Puck / Pulcherrima / Rasalgethi / Sadachbia / Sadaltager / Schedar / Sulafat / Umbriel / Vindemiatrix / Zephyr / Zubenelgenubi。 示例:Achernar。 |
input.speakers[].audio_profile | string | 否 | 音频画像描述,如 "A warm and soothing narrator" 或 "A stern and weary gatekeeper" |
input.speakers[].accent | string | 是 | 口音,如 "British (RP)" 或 "American (Gen)" 可选值:Neutral / American (Gen) / American (Valley) / American (South) / British (RP) / British (Brixton) / Transatlantic / Australian。 示例:Neutral。 |
input.speakers[].style | string | 否 | 情感风格,如 "Whisper" 或 "Deadpan" 可选值:Vocal Smile / Newscaster / Whisper / Empathetic / Promo/Hype / Deadpan。 示例:Vocal Smile。 |
input.speakers[].pace | string | 否 | 语速,如 "Staccato" 或 "Natural" 可选值:Natural / Rapid Fire / The Drift / Staccato。 示例:Natural。 |
input.dialogue_turns | array<object> | 是 | 对话内容列表,按顺序输出 |
input.dialogue_turns[].speaker_id | string | 是 | 对应的说话人标识,如 "Speaker 1" |
input.dialogue_turns[].text | string | 是 | 该说话人的台词文本,可包含语气标签,例如:"Once upon a time, in a quiet valley hidden away..." |
请求示例
bash
curl -X POST "https://ai.modelfold.online/v1/jobs/createTask" \
-H "Authorization: Bearer $MODELFOLD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemini-3-1-flash-tts",
"callBackUrl": "https://your-domain.com/api/callback",
"input": {
"temperature": 1,
"scene": "一座黑暗、正在崩塌的地牢……",
"sample_context": "奇幻 RPG 风格……",
"speakers": [
{
"speaker_id": "Speaker 1",
"voice_name": "Fenrir",
"audio_profile": "一位严厉而疲惫的守门人",
"accent": "British (RP)",
"style": "Deadpan",
"pace": "Natural"
},
{
"speaker_id": "Speaker 2",
"voice_name": "Puck",
"audio_profile": "一位坚定而勇敢、追寻答案的旅人",
"accent": "American (Gen)",
"style": "Empathetic",
"pace": "Staccato"
}
],
"dialogue_turns": [
{
"speaker_id": "Speaker 1",
"text": "[大喊] 站住,旅人!北方隘口已奉议会之命封锁。"
},
{
"speaker_id": "Speaker 2",
"text": "[坚定] 我为长老带来一则消息。让开,否则我就强行闯过去。"
},
{
"speaker_id": "Speaker 1",
"text": "[警惕] 谁也不许通过。[沉思] 长老他……他已经不再接见访客了。"
},
{
"speaker_id": "Speaker 2",
"text": "太迟了。[低语] 那阴影……它先一步找上了他。[急迫] 你得离开。[大喊] 马上。"
}
]
}
}'json
{
"model": "google/gemini-3-1-flash-tts",
"callBackUrl": "https://your-domain.com/api/callback",
"input": {
"temperature": 1,
"scene": "一座黑暗、正在崩塌的地牢……",
"sample_context": "奇幻 RPG 风格……",
"speakers": [
{
"speaker_id": "Speaker 1",
"voice_name": "Fenrir",
"audio_profile": "一位严厉而疲惫的守门人",
"accent": "British (RP)",
"style": "Deadpan",
"pace": "Natural"
},
{
"speaker_id": "Speaker 2",
"voice_name": "Puck",
"audio_profile": "一位坚定而勇敢、追寻答案的旅人",
"accent": "American (Gen)",
"style": "Empathetic",
"pace": "Staccato"
}
],
"dialogue_turns": [
{
"speaker_id": "Speaker 1",
"text": "[大喊] 站住,旅人!北方隘口已奉议会之命封锁。"
},
{
"speaker_id": "Speaker 2",
"text": "[坚定] 我为长老带来一则消息。让开,否则我就强行闯过去。"
},
{
"speaker_id": "Speaker 1",
"text": "[警惕] 谁也不许通过。[沉思] 长老他……他已经不再接见访客了。"
},
{
"speaker_id": "Speaker 2",
"text": "太迟了。[低语] 那阴影……它先一步找上了他。[急迫] 你得离开。[大喊] 马上。"
}
]
}
}响应
200 — 请求成功
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | 响应状态码 200: 成功 - 请求已成功处理 401: 未授权 - 缺少身份验证凭据或凭据无效 402: 额度不足 - 账户额度不足,无法执行该操作 404: 未找到 - 请求的资源或接口不存在 422: 校验错误 - 请求参数未通过校验检查 429: 请求受限 - 已超过该资源的请求频率限制 433: 请求限额 - 子 key 使用超出限额 455: 服务不可用 - 系统目前正在维护中 500: 服务器错误 - 处理请求时发生了意外错误 501: 生成失败 - 内容生成任务失败 505: 功能禁用 - 请求的功能目前已禁用 可选值: 200 / 401 / 402 / 404 / 422 / 429 / 433 / 455 / 500 / 501 / 505。 示例:200。 |
msg | string | 是 | 响应消息,失败时的错误描述 |
data | object | 是 | — |
data.taskId | string | 否 | 任务 ID 可与“获取任务详细信息”端点一起使用,以查询任务状态 |
json
{
"code": 200,
"msg": "success",
"data": {
"taskId": "281e5b0*********************f39b9"
}
}回调
musicTaskCompleted
回调地址:{request.body#/callBackUrl}(即请求体里的 callBackUrl)。
音频任务成功或失败时,系统会向该地址发送回调。
回调体参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | integer | 是 | 统一回调状态码:成功为 200,失败为 501。 可选值:200 / 501。 示例:200。 |
msg | string | 是 | 统一回调消息。 可选值:Playground task completed successfully. / Playground task failed.。 示例:Playground task completed successfully.。 |
data | object | 是 | — |
data.taskId | string | 是 | 任务唯一标识符。 |
data.model | string | 是 | 任务使用的模型。 可选值:google/gemini-3-1-flash-tts。 示例:google/gemini-3-1-flash-tts。 |
data.state | string | 是 | 任务最终状态。 可选值:success / fail。 示例:success。 |
data.param | string | 是 | 包含已提交任务参数的 JSON 字符串。 |
data.resultJson | string | 否 | 任务成功时,包含 resultUrls 和 resultObject 的 JSON 字符串;任务。仅在 state 为 success 时出现。 |
data.failCode | string | 否 | 失败码,数字字符串,如 "400"、"500"。仅在 state 为 fail 时出现。 |
data.failMsg | string | 否 | 失败原因,仅在 state 为 fail 时出现。 |
data.costTime | integer | 否 | 处理耗时(秒),成功和失败回调都会返回。 |
data.completeTime | integer | 否 | 任务完成时间戳。 |
data.createTime | integer | 否 | 任务创建时间戳。 |
data.updateTime | integer | 否 | 完成时间请以 completeTime 为准;updateTime 可能与 createTime 相同。 |
data.creditsConsumed | number | 否 | 本任务消耗的积分;失败任务为 0。 |
任务成功完成
json
{
"code": 200,
"msg": "Playground task completed successfully.",
"data": {
"taskId": "task_example_music_webhook_001",
"model": "google/gemini-3-1-flash-tts",
"state": "success",
"param": "{\"input\":\"{\\\"temperature\\\":1,\\\"scene\\\":\\\"A dark, crumbling dungeon...\\\",\\\"sample_context\\\":\\\"Fantasy RPG style...\\\",\\\"speakers\\\":[{\\\"speaker_id\\\":\\\"Speaker 1\\\",\\\"voice_name\\\":\\\"Fenrir\\\",\\\"audio_profile\\\":\\\"A stern and weary gatekeeper\\\",\\\"accent\\\":\\\"British (RP)\\\",\\\"style\\\":\\\"Deadpan\\\",\\\"pace\\\":\\\"Natural\\\"}],\\\"dialogue_turns\\\":[{\\\"speaker_id\\\":\\\"Speaker 1\\\",\\\"text\\\":\\\"[shouting] Halt, traveler! The northern pass is sealed by order of the council.\\\"}]}\",\"callBackUrl\":\"https://example.com/callback\",\"model\":\"google/gemini-3-1-flash-tts\"}",
"resultJson": "{\"resultUrls\":[\"https://example.com/generated-audio.wav\"],\"resultObject\":null}",
"costTime": 12,
"completeTime": 1234567890,
"createTime": 1234560000,
"updateTime": 1234567890,
"creditsConsumed": 1.23
}
}任务失败
json
{
"code": 501,
"msg": "Playground task failed.",
"data": {
"taskId": "task_example_music_webhook_001",
"model": "google/gemini-3-1-flash-tts",
"state": "fail",
"param": "{\"input\":\"{\\\"temperature\\\":1,\\\"scene\\\":\\\"A dark, crumbling dungeon...\\\",\\\"sample_context\\\":\\\"Fantasy RPG style...\\\",\\\"speakers\\\":[{\\\"speaker_id\\\":\\\"Speaker 1\\\",\\\"voice_name\\\":\\\"Fenrir\\\",\\\"audio_profile\\\":\\\"A stern and weary gatekeeper\\\",\\\"accent\\\":\\\"British (RP)\\\",\\\"style\\\":\\\"Deadpan\\\",\\\"pace\\\":\\\"Natural\\\"}],\\\"dialogue_turns\\\":[{\\\"speaker_id\\\":\\\"Speaker 1\\\",\\\"text\\\":\\\"[shouting] Halt, traveler! The northern pass is sealed by order of the council.\\\"}]}\",\"callBackUrl\":\"https://example.com/callback\",\"model\":\"google/gemini-3-1-flash-tts\"}",
"failCode": "400",
"failMsg": "<error detail>",
"costTime": 12,
"creditsConsumed": 0
}
}