音乐生成 API
通过文本提示生成 AI 作曲的音乐曲目。支持纯器乐和带自定义歌词的人声曲目。由 MiniMax Music 模型驱动。
基础 URL: https://api.jarvisclaw.ai/v1
认证
两种方式均支持 — 所有请求通过 x402 链上结算:
| 方式 | Header | 描述 |
|---|---|---|
| API Key | Authorization: Bearer sk-... | 平台自动从你的 HD 钱包签名 x402 |
| 私钥(x402) | 通过 SDK 自动 | Agent 直接从自身钱包签名 x402 |
详见 Agent 支付(x402) 了解两种方式的工作原理。
端点
POST /v1/audio/generations
通过文本提示生成音乐曲目。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| model | string | 是 | 模型标识符(auto/music、minimax/music-2.5+) |
| prompt | string | 是 | 音乐描述(风格、情绪、节奏) |
| instrumental | boolean | 否 | 仅生成器乐(无人声)(默认:false) |
| lyrics | string | 否 | 自定义歌词(instrumental 为 true 时忽略) |
| duration_seconds | integer | 否 | 目标时长(秒),最大 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?..."
}若音轨恰好已就绪,status 为 completed,不返回 poll_url。
GET /v1/audio/generations/:id
轮询作业状态。每 5–10 秒调用一次,直到 status 为 completed 或 failed。作业 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)
}