Skip to content

音乐生成 API

通过文本提示生成 AI 作曲的音乐曲目。支持纯器乐和带自定义歌词的人声曲目。由 MiniMax Music 模型驱动。

基础 URL: https://api.jarvisclaw.ai/v1

认证

两种方式均支持 — 所有请求通过 x402 链上结算:

方式Header描述
API KeyAuthorization: Bearer sk-...平台自动从你的 HD 钱包签名 x402
私钥(x402)通过 SDK 自动Agent 直接从自身钱包签名 x402

详见 Agent 支付(x402) 了解两种方式的工作原理。

端点

POST /v1/audio/generations

通过文本提示生成音乐曲目。

参数类型必填描述
modelstring模型标识符(auto/musicminimax/music-2.5+
promptstring音乐描述(风格、情绪、节奏)
instrumentalboolean仅生成器乐(无人声)(默认:false)
lyricsstring自定义歌词(instrumental 为 true 时忽略)
duration_secondsinteger目标时长(秒),最大 180(默认:180)

请求

json
{
  "model": "auto/music",
  "prompt": "Upbeat electronic dance track with synth arpeggios and driving bass",
  "instrumental": true,
  "duration_seconds": 120
}

响应

音乐生成是异步的,与视频走同一套作业流程。POST 返回的是作业句柄,不是成品音轨:

json
{
  "id": "minimax:music_ae260c45bdb7453c8bbe",
  "status": "queued",
  "model": "minimax/music-2.5+",
  "price": {
    "amount": "0.1575",
    "currency": "USD"
  },
  "poll_url": "/v1/audio/generations/minimax%3Amusic_ae260c45bdb7453c8bbe?..."
}

若音轨恰好已就绪,statuscompleted,不返回 poll_url

GET /v1/audio/generations/:id

轮询作业状态。每 5–10 秒调用一次,直到 statuscompletedfailed。作业 ID 带供应商 前缀,其中的 : 必须 URL 编码为 %3A —— 或直接用 POST 返回的 poll_url,它已经编码好了。

轮询免费,该读取复用原始支付。

作业失败时返回:

json
{
  "id": "minimax:music_ae260c45bdb7453c8bbe",
  "status": "failed",
  "error": "upstream generation failed",
  "retryable": true
}

重新提交前先看 retryable —— 不可重试的失败在相同输入下还会再失败。

定价

模型价格说明
auto/music$0.1575/曲自动路由至最佳可用模型
minimax/music-2.5+$0.1575/曲最长约 3 分钟输出

以上为参考价,精确扣费金额请读响应中的 price.amount。轮询(GET)免费。

代码示例

bash
curl -X POST https://api.jarvisclaw.ai/v1/audio/generations \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto/music",
    "prompt": "Chill lo-fi hip hop beat with rain sounds",
    "instrumental": true,
    "duration_seconds": 120
  }'
python
from jarvisclaw import AudioClient

audio = AudioClient(api_key="sk-your-api-key")

# 生成音乐(返回音频字节,约 1-3 分钟)
result = audio.music("Chill lo-fi hip hop beat with rain sounds", instrumental=True)

# 保存音频文件
with open("track.mp3", "wb") as f:
    f.write(result.content)
print(f"已保存 {len(result.content)} 字节,类型: {result.content_type}")
python
from jarvisclaw import AudioClient

# ─── 选项 A:Base 链(EVM)───
# 十六进制私钥 → Base 上的 USDC(Chain ID 8453)
audio = AudioClient(private_key="0x<evm-private-key>")

# ─── 选项 B:Solana ───
# Base58 密钥对 → Solana 主网上的 USDC SPL
# audio = AudioClient(private_key="<solana-bs58-keypair>")

# SDK 自动从密钥格式检测链 — 无需配置

# 生成音乐(返回音频字节,约 1-3 分钟)
result = audio.music("Chill lo-fi hip hop beat with rain sounds", instrumental=True)

# 保存音频文件
with open("track.mp3", "wb") as f:
    f.write(result.content)
print(f"已保存 {len(result.content)} 字节")

# ─── 不想阻塞? ───
# wait=False 立即返回 MusicJob,不代你轮询
job = audio.music("Chill lo-fi hip hop beat", instrumental=True, wait=False)
if job.done():
    track = job.result(timeout=300)
go
package main

import (
    "context"
    "fmt"
    jc "github.com/api-jarvisclaw/go-sdk/v2"
)

func main() {
    ctx := context.Background()
    ac, _ := jc.NewAudioClient(jc.WithAPIKey("sk-your-api-key"))

    // 智能路由(自动选择最佳模型)
    result, _ := ac.Music(ctx, "Chill lo-fi hip hop beat with rain sounds",
        jc.WithInstrumental(true))
    fmt.Printf("曲目 URL: %s\n", result.URL)

    // 指定模型
    result, _ = ac.Music(ctx, "Chill lo-fi hip hop beat with rain sounds",
        jc.WithAudioModel("auto/music"), jc.WithInstrumental(true))
    fmt.Printf("曲目 URL: %s\n", result.URL)
}
go
package main

import (
    "context"
    "fmt"
    jc "github.com/api-jarvisclaw/go-sdk/v2"
)

func main() {
    ctx := context.Background()

    // x402 Agent 钱包 — 通过 Base 上的 USDC 按调用付费(Chain ID 8453)
    ac, _ := jc.NewAudioClient(jc.WithPrivateKey("0x<evm-private-key>"))

    // 智能路由(自动选择最佳模型)
    result, _ := ac.Music(ctx, "Chill lo-fi hip hop beat with rain sounds",
        jc.WithInstrumental(true))
    fmt.Printf("曲目 URL: %s\n", result.URL)

    // 指定模型
    result, _ = ac.Music(ctx, "Chill lo-fi hip hop beat",
        jc.WithAudioModel("auto/music"), jc.WithInstrumental(true))
    fmt.Printf("曲目 URL: %s\n", result.URL)
}