Skip to content
Markdown · 适合发给 AI

Suno V6 Mini 音乐生成 ​

Suno V6 Mini 是 Suno 公司的音乐模型。使用 suno-v6-mini 通过知梦 API 的 Chat Completions 兼容协议生成音乐,¥0.60/次调用。直接使用完整模型名,无需配置别名。

当前非流式调用返回 M4A 音频链接,可包含多个版本。n: 1 不保证只返回一条;duration 不保证实际时长。

在线调试 Suno → · 音频模型总览 · 价格与模型

接口与鉴权 ​

http
POST https://api.zmoapi.cn/v1/chat/completions
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

兼容客户端 Base URL 为 https://api.zmoapi.cn/v1。使用知梦 API 密钥,请求体为 UTF-8 JSON。

请求参数 ​

音乐描述、曲风、情绪、乐器及歌词要求写入 user 消息。以下扩展字段来自已成功返回的请求示例;请求被接收不代表每个字段都会严格控制生成结果。

参数类型必填说明
modelstring是固定 suno-v6-mini。
messagesobject[]是本站示例发送一条 user 消息。
messages[0].rolestring是固定 user。
messages[0].contentstring是非空音乐描述。可在正文附上歌词、演唱或纯音乐要求。
instrumentalboolean否纯音乐偏好,示例为 true,表示请求不含人声;false 表示不指定纯音乐偏好。实际生成效果以音频为准;不传时由服务端处理。
ninteger否示例值为 1,该请求实际返回两条音频,不能用此字段保证数量或截断结果。其他取值的服务端范围尚未明确;调试台只做正整数基础校验。
streamboolean是(本站示例)使用 false,保持连接等待完整 JSON;不是字符串 "false"。
durationnumber否期望时长,单位秒,示例值为 7。可能被忽略或不生效,不保证生成 7 秒;范围与精度未明确。留空不传,也不按此值计价。

本页不发送 TTS / Lyria 的 output_format、audio、speakers,也不把专用音乐接口的顶层 prompt / lyrics 套入 Chat。歌词直接放入 messages[0].content。提示词中的 BPM、时长、歌词与分段均不保证严格遵循。

请求示例 ​

以下为已成功返回音频的请求结构,duration: 7 只是期望值:

bash
curl 'https://api.zmoapi.cn/v1/chat/completions' \
  -H "Authorization: Bearer $ZHIMENG_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "model": "suno-v6-mini",
    "messages": [{
      "role": "user",
      "content": "温暖的钢琴独奏,轻柔舒缓,适合午后阅读"
    }],
    "instrumental": true,
    "n": 1,
    "stream": false,
    "duration": 7
  }'

instrumental、n、duration 均可省略。需要描述歌词时,将内容写进 user 消息;不要同时写“不要人声”和歌词演唱要求。

返回结果与保存 ​

响应为完整的 chat.completion JSON,无需轮询。下面保留了实测响应的主要字段,域名与 ID 为示例值:

json
{
  "id": "chatcmpl_example",
  "model": "suno-v6-mini",
  "object": "chat.completion",
  "choices": [{
    "index": 0,
    "finish_reason": "stop",
    "message": {
      "role": "assistant",
      "content": "[生成音频](https://example.com/track-a.m4a)\n[生成音频](https://example.com/track-b.m4a)\n"
    }
  }],
  "data": [
    {"id": "clip-a", "format": "m4a", "mime_type": "audio/mp4", "url": "https://example.com/track-a.m4a"},
    {"id": "clip-b", "format": "m4a", "mime_type": "audio/mp4", "url": "https://example.com/track-b.m4a"}
  ],
  "usage": {"prompt_tokens": 23, "completion_tokens": 98, "total_tokens": 121}
}
字段说明
data[]音频结果列表,优先遍历全部元素;条数以实际列表为准,不按 n 假定或截断。
data[].id单条音频 ID,和 Chat 响应 ID 不同。
data[].url可下载音频地址,保留完整路径及签名查询参数。
data[].format实测为 m4a,保存文件使用 .m4a,不要误命名为 .mp3。
data[].mime_type实测为 audio/mp4,与 M4A 容器相符;不据此推断内部音频编码、码率或采样率。
choices[].message.contentMarkdown 格式的音频链接,可能与 data[] 重复;可作为兼容来源,合并时按完整 URL 去重。
choices[].finish_reason实测为 stop,同时检查正文错误及 HTTP 状态,不能只看 HTTP 200。
usage返回的 Chat 用量统计,公开售价仍按次调用计价,不按 Token 加价。
idChat 响应标识,保留供排查,不作为任务轮询 ID。

一次请求可返回多个版本,本例 n: 1 返回两条;这不是提交了两次请求。 不把一次示例推广为“永远返回两条”。两个表示位置中的相同链接也不是两份不同作品。

Suno 本例返回 URL,按本页接口约定处理,不套用 Google 音频的 output_format 选项。无需传 output_format 来获取上述结果。音频实际长度以文件或播放器读取的时长为准,响应未给出实际时长,不把请求中的 duration 当作实测秒数。 这次 duration: 7 样本的两条音频经媒体检测分别为 165.2 秒和 155.2 秒,说明该请求并未按 7 秒生成;这不是固定输出时长。

本例媒体文件检测为 M4A 容器、Opus 编码、48kHz、双声道。这只是本次样本信息,不作为所有请求的固定编码规格;不要根据 .m4a 后缀直接假定 AAC 编码。

下载时不附加知梦 API Key;生成后及时保存,不承诺永久链接或固定有效期。试听取决于浏览器对实际音频编码的支持。

Python 调用与下载所有版本 ​

python
import os
from pathlib import Path
from urllib.parse import urlsplit
import requests

response = requests.post(
    "https://api.zmoapi.cn/v1/chat/completions",
    headers={"Authorization": "Bearer " + os.environ["ZHIMENG_API_KEY"]},
    json={
        "model": "suno-v6-mini",
        "messages": [{"role": "user", "content": "温暖的钢琴独奏,轻柔舒缓,适合午后阅读"}],
        "instrumental": True,
        "n": 1,
        "stream": False,
        "duration": 7,  # 期望值,不保证生效;不需要时可省略。
    },
    timeout=(10, 180),
)
response.raise_for_status()
result = response.json()
if result.get("error"):
    raise RuntimeError(result["error"])
for choice in result.get("choices", []):
    if choice.get("finish_reason") != "stop":
        raise RuntimeError("生成响应未正常结束,请查看完整响应")
    content = (choice.get("message") or {}).get("content", "")
    if isinstance(content, str) and content.lstrip().lower().startswith(("错误:", "错误:", "error:")):
        raise RuntimeError(content)

seen = set()
for item in result.get("data", []):
    url = item.get("url", "")
    parsed = urlsplit(url)
    if parsed.scheme not in ("http", "https") or not parsed.hostname or parsed.username or parsed.password:
        continue
    if url in seen:
        continue
    seen.add(url)
    fmt = str(item.get("format", "")).lower()
    if fmt not in ("m4a", "mp3", "wav"):
        raise RuntimeError("请按实际 format / MIME 选择保存格式")
    # 使用独立下载请求,不携带知梦 API Key;保留完整 URL。
    with requests.get(url, stream=True, timeout=(10, 180)) as audio:
        audio.raise_for_status()
        with Path(f"song-{len(seen)}.{fmt}").open("wb") as file:
            for chunk in audio.iter_content(65536):
                file.write(chunk)
if not seen:
    raise RuntimeError("没有可用 data 音频列表,请查看完整响应及正文链接")

读取超时建议至少 180 秒;生成耗时以实际请求为准。网络失败或请求超时后先核对消费记录和执行情况,不自动重复提交收费生成请求。

调试与计费 ​

在调试台选择“Suno → Suno V6 Mini”,填写描述、可选歌词、instrumental、n 与期望 duration。未填写的可选字段省略;点击“填充示例”会填入上面的 true、1、7。生成前以“完整请求”中的 JSON 为准。

调试台展示全部已识别的音频版本,按 URL 去重,正确识别 M4A,提供试听与下载。duration 表示请求期望,实际音频长度从媒体读取;n 不用于裁剪结果列表。

¥0.60/次调用,按调用计价,不按时长或 Token 计价;单次请求返回多个版本不等于多次调用。实际费用以平台消费记录为准,原有 TTS / Lyria 仍为 ¥0.30/次。

知梦 API · 图像、视频与音乐生成接口文档