# BPM 分析
> 分析歌曲的速度，异步任务
> 引用源音轨用 `task_id` 加 `audio_index`
> 只返回分析结果，不产出音频
`POST /v1/music/generations/bpm`
## 认证
- `Authorization` (string / 必填) — 所有接口均使用 Bearer Token 进行认证。 获取 API Key：[访问控制台](https://api.oairoute.com/keys) 创建。 请求时在请求头中添加： ```http Authorization: Bearer YOUR_OAIRoute_KEY ```
## 请求参数
- `model` (string / 可选) — 音频模型，默认 `suno`。
- `task_id` (string / 必填) — 产出源音轨那次任务的 task_id。缺失或无法解析源音轨时，提交阶段直接返回 400。
- `audio_index` (integer / 可选) — 引用源任务结果 `data.result.music[]` 中的第几首，默认 `1`，从 1 开始。 一次生成通常 2 首，即索引 1 和 2。
> **Note:** 
> 本端点**没有版本维度**，不要传 `version`。传了会被丢弃，也不影响计费。
> **Note:** 
> 引用源音轨只需 `task_id` 与 `audio_index` 两个值，无需记录任何额外 id。
## 响应
- `code` (integer) — 响应状态码。
- `data[].status` (string) — 任务状态，提交后为 `submitted`。
- `data[].task_id` (string) — 任务唯一标识，用于轮询 `GET /v1/music/tasks/{task_id}`。
## BPM 有什么用
| 用途 | 说明 |
|---|---|
| 配乐选曲 | 按目标节奏筛选，短视频常用 100 到 130 |
| 剪辑对齐 | 按 BPM 算一拍时长，让画面切点踩在节拍上 |
| 二次创作 | 混搭或续写时保持节奏一致 |
| 曲库检索 | 按速度区间分类管理素材 |
算一拍时长：`60 / BPM` 秒。120 BPM 就是一拍 0.5 秒，四拍一小节 2 秒。
## 错误码
| HTTP | type | 说明 |
|---|---|---|
| 400 | invalid_request_error | 请求参数无效 |
| 401 | authentication_error | 身份验证失败，请检查API密钥 |
| 402 | payment_required | 账户余额不足 |
| 429 | rate_limit_error | 请求过于频繁 |
更多状态码与重试建议见[错误码与限流](../../../support/errors.html)，常见报错的排查步骤见[常见问题](../../../support/faq.html)。
## 使用示例
提交一个任务并拿到 `task_id`：
> **Note:** 
> 提交成功只表示任务已受理。真正的产物要拿返回的 `task_id` 去任务查询接口轮询，`status` 变成 `completed` 之后才有结果。
**BPM 分析{BPM analysis}::cURL**
```
curl -X POST https://api.oairoute.com/v1/music/generations/bpm \
  -H 'Authorization: Bearer YOUR_OAIRoute_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "model": "suno",
    "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
    "audio_index": 1
  }'
```
**BPM 分析{BPM analysis}::Python**
```
import requests
res = requests.post(
    "https://api.oairoute.com/v1/music/generations/bpm",
    headers={
        "Authorization": "Bearer YOUR_OAIRoute_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "suno",
        "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
        "audio_index": 1,
    },
)
print(res.json()["data"][0]["task_id"])
```
**BPM 分析{BPM analysis}::JavaScript**
```
const res = await fetch(
  "https://api.oairoute.com/v1/music/generations/bpm",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer YOUR_OAIRoute_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      model: "suno",
      task_id: "task_01K8SGYNNNVBQTXNR4MM964S7K",
      audio_index: 1,
    }),
  }
);
const { data } = await res.json();
console.log(data[0].task_id);
```
**200 BPM 分析{BPM analysis}**
```
{
  "code": 200,
  "data": [
    { "status": "submitted", "task_id": "task_01K8D77M0HP1GJWBJYZMKX1XS1" }
  ]
}
```
