跳转到主要内容
POST
/
api
/
v1
/
generate
/
add-instrumental
添加乐器
curl --request POST \
  --url https://api.sunoapi.org/api/v1/generate/add-instrumental \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "uploadUrl": "https://example.com/music.mp3",
  "title": "轻松钢琴",
  "negativeTags": "重金属, 激进鼓点",
  "tags": "轻松钢琴, 环境音乐, 宁静",
  "callBackUrl": "https://api.example.com/callback",
  "vocalGender": "m",
  "styleWeight": 0.61,
  "weirdnessConstraint": 0.72,
  "audioWeight": 0.65,
  "model": "V4_5PLUS"
}
'
import requests

url = "https://api.sunoapi.org/api/v1/generate/add-instrumental"

payload = {
"uploadUrl": "https://example.com/music.mp3",
"title": "轻松钢琴",
"negativeTags": "重金属, 激进鼓点",
"tags": "轻松钢琴, 环境音乐, 宁静",
"callBackUrl": "https://api.example.com/callback",
"vocalGender": "m",
"styleWeight": 0.61,
"weirdnessConstraint": 0.72,
"audioWeight": 0.65,
"model": "V4_5PLUS"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
uploadUrl: 'https://example.com/music.mp3',
title: '轻松钢琴',
negativeTags: '重金属, 激进鼓点',
tags: '轻松钢琴, 环境音乐, 宁静',
callBackUrl: 'https://api.example.com/callback',
vocalGender: 'm',
styleWeight: 0.61,
weirdnessConstraint: 0.72,
audioWeight: 0.65,
model: 'V4_5PLUS'
})
};

fetch('https://api.sunoapi.org/api/v1/generate/add-instrumental', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sunoapi.org/api/v1/generate/add-instrumental",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'uploadUrl' => 'https://example.com/music.mp3',
'title' => '轻松钢琴',
'negativeTags' => '重金属, 激进鼓点',
'tags' => '轻松钢琴, 环境音乐, 宁静',
'callBackUrl' => 'https://api.example.com/callback',
'vocalGender' => 'm',
'styleWeight' => 0.61,
'weirdnessConstraint' => 0.72,
'audioWeight' => 0.65,
'model' => 'V4_5PLUS'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.sunoapi.org/api/v1/generate/add-instrumental"

payload := strings.NewReader("{\n \"uploadUrl\": \"https://example.com/music.mp3\",\n \"title\": \"轻松钢琴\",\n \"negativeTags\": \"重金属, 激进鼓点\",\n \"tags\": \"轻松钢琴, 环境音乐, 宁静\",\n \"callBackUrl\": \"https://api.example.com/callback\",\n \"vocalGender\": \"m\",\n \"styleWeight\": 0.61,\n \"weirdnessConstraint\": 0.72,\n \"audioWeight\": 0.65,\n \"model\": \"V4_5PLUS\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.sunoapi.org/api/v1/generate/add-instrumental")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"uploadUrl\": \"https://example.com/music.mp3\",\n \"title\": \"轻松钢琴\",\n \"negativeTags\": \"重金属, 激进鼓点\",\n \"tags\": \"轻松钢琴, 环境音乐, 宁静\",\n \"callBackUrl\": \"https://api.example.com/callback\",\n \"vocalGender\": \"m\",\n \"styleWeight\": 0.61,\n \"weirdnessConstraint\": 0.72,\n \"audioWeight\": 0.65,\n \"model\": \"V4_5PLUS\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.sunoapi.org/api/v1/generate/add-instrumental")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"uploadUrl\": \"https://example.com/music.mp3\",\n \"title\": \"轻松钢琴\",\n \"negativeTags\": \"重金属, 激进鼓点\",\n \"tags\": \"轻松钢琴, 环境音乐, 宁静\",\n \"callBackUrl\": \"https://api.example.com/callback\",\n \"vocalGender\": \"m\",\n \"styleWeight\": 0.61,\n \"weirdnessConstraint\": 0.72,\n \"audioWeight\": 0.65,\n \"model\": \"V4_5PLUS\"\n}"

response = http.request(request)
puts response.read_body
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "5c79****be8e"
  }
}
通过上传音频文件生成现有音乐曲目的乐器版本。此接口允许您基于上传的音乐创建乐器伴奏。

主要功能

  • 基于上传的处理: 上传您现有的音乐文件以创建乐器版本
  • 风格控制: 定义所需的乐器风格和特征
  • 质量筛选: 使用负面标签排除不需要的风格或乐器
  • 灵活参数: 可选的人声性别、风格权重和音频权重控制

使用指南

必需参数

所有请求必须包含:
  • uploadUrl: 有效的音频文件URL(MP3、WAV等)
  • title: 生成的乐器曲目标题
  • tags: 乐器所需的风格和特征
  • negativeTags: 要排除的风格或乐器
  • callBackUrl: 接收完成通知的URL

可选参数

通过以下参数增强生成控制:
  • vocalGender: 任何人声元素的首选人声性别(‘m’或’f’)
  • styleWeight: 风格指引权重(0.00-1.00)
  • weirdnessConstraint: 创意/新颖性约束(0.00-1.00)
  • audioWeight: 音频一致性权重(0.00-1.00)
  • model:用于生成的模型版本。可选值:V4_5PLUS(默认)、V5V5_5

音频要求

  • 文件格式: MP3、WAV或其他支持的音频格式
  • 文件大小: 确保上传的音频可通过提供的URL访问
  • 质量: 更高质量的输入通常产生更好的乐器效果

响应信息

  • 处理时间: 通常需要2-4分钟,取决于音频长度和复杂性
  • 回调阶段: 系统可能在不同阶段调用您的回调URL(text、first、complete)
  • 结果格式: 返回用于下载和流式传输的音频URL

开发者注意事项

  1. 文件保留: 生成的乐器文件保留15天
  2. 并发: 遵守速率限制以避免请求被拒绝
  3. 风格标签: 使用具体的标签以获得所需的乐器风格
  4. 负面标签: 有效使用负面标签以避免不需要的元素
  5. 回调处理: 实施适当的回调处理以可靠地获取结果

最佳实践

优化提示

  • 使用描述性和具体的风格标签(例如:“原声吉他, 柔和钢琴, 环境音乐”)
  • 包含相关的负面标签以排除不需要的元素
  • 确保上传的音频URL是公开可访问且稳定的
  • 首先使用较短的音频片段测试以了解系统行为

重要考虑事项

  • 确保您有使用上传音频内容的适当权利
  • 系统在清晰、高质量的音频输入下效果最佳
  • 非常短的音频片段(少于10秒)可能产生有限的结果
  • 复杂的多乐器曲目可能需要更多处理时间

授权

Authorization
string
header
必填

🔑 API 认证说明

所有接口都需要通过 Bearer Token 方式进行认证。

获取 API Key

  1. 访问 API Key 管理页面 获取您的 API Key

使用方式

在请求头中添加:

Authorization: Bearer YOUR_API_KEY

⚠️ 注意:

  • 请妥善保管您的 API Key,不要泄露给他人
  • 如果怀疑 API Key 泄露,请立即在管理页面重置

请求体

application/json
uploadUrl
string<uri>
必填

要添加乐器的上传音乐文件的URL。

  • 必填。
  • 必须是系统可访问的有效音频文件URL。
  • 上传的音频应为支持的格式(MP3、WAV等)。
示例:

"https://example.com/music.mp3"

title
string
必填

音乐曲目的标题。

  • 必填。
  • 这将用作生成的乐器曲目的标题。
示例:

"轻松钢琴"

negativeTags
string
必填

要从生成的乐器中排除的音乐风格或特征。

  • 必填。
  • 用于避免乐器版本中的特定风格或乐器。
    示例:"重金属, 激进鼓点"
示例:

"重金属, 激进鼓点"

tags
string
必填

乐器的音乐风格和特征。

  • 必填。
  • 描述乐器曲目所需的风格、情绪和乐器。
    示例:"轻松钢琴, 环境音乐, 宁静"
示例:

"轻松钢琴, 环境音乐, 宁静"

callBackUrl
string<uri>
必填

乐器生成完成时接收任务完成通知的URL。回调过程有三个阶段:text(文本生成)、first(第一首完成)、complete(全部完成)。注意:某些情况下可能会跳过 textfirst 阶段,直接返回 complete

  • 详细的回调格式和实现指南,请参见 添加乐器回调
  • 或者,您也可以使用获取音乐生成详情接口来轮询任务状态
示例:

"https://api.example.com/callback"

vocalGender
enum<string>

任何人声元素的首选人声性别。可选。允许的值:'m'(男性)、'f'(女性)。

可用选项:
m,
f
示例:

"m"

styleWeight
number

风格指引权重。可选。范围:0-1。建议使用两位小数。

必填范围: 0 <= x <= 1必须是以下数值的倍数 0.01
示例:

0.61

weirdnessConstraint
number

创意/新颖性约束。可选。范围:0-1。建议使用两位小数。

必填范围: 0 <= x <= 1必须是以下数值的倍数 0.01
示例:

0.72

audioWeight
number

音频一致性相对于其他控制的权重。可选。范围:0-1。建议使用两位小数。

必填范围: 0 <= x <= 1必须是以下数值的倍数 0.01
示例:

0.65

model
enum<string>
默认值:V4_5PLUS

用于生成的模型版本。可选。默认值:V4_5PLUS。

可用选项:
V4_5PLUS,
V5,
V5_5
示例:

"V4_5PLUS"

回调

POST
{request.body#/callBackUrl}instrumentalAdded

请求体

application/json
code
integer

状态码

示例:

200

msg
string

响应消息

示例:

"All generated successfully"

data
object

响应

200

回调接收成功

响应

请求成功

code
enum<integer>

状态码说明

  • ✅ 200 - 请求成功
  • ⚠️ 400 - 参数错误
  • ⚠️ 401 - 没有访问权限
  • ⚠️ 404 - 请求方式或者路径错误
  • ⚠️ 405 - 调用超过限制
  • ⚠️ 413 - 主题或者prompt过长
  • ⚠️ 429 - 积分不足
  • ⚠️ 430 - 您的调用频率过高,请稍后再试。
  • ⚠️ 455 - 网站维护
  • ❌ 500 - 服务器异常
可用选项:
200,
400,
401,
404,
405,
413,
429,
430,
455,
500
示例:

200

msg
string

当 code != 200 时,展示错误信息

示例:

"success"

data
object