Music Beat

功能介绍

音乐鼓点识别能力,可以识别用户输入音乐的鼓点位置信息。输入音乐文件,输出识别的鼓点位置信息和打点后的音乐文件(可选)

接口说明

请求方式: POST(HTTP)

请求地址: http://service-mqk0mc83-1257411467.bj.apigw.tencentcs.com/release/job

请求头: Content-Type: application/json

请求流程: 接口包括‘创建任务’,‘查询任务’。创建任务后,用户可以主动查询任务来知晓任务结果,也可以在创建任务时输入回调地址(callback),则任务在完成后会自动回调该地址

其他要求: 建议采用常见音频格式,如 mp3、wav

创建任务

参数说明

参数 是否必选 类型 说明
action string 公共参数,此处为 CreateJob
secretId string 公共参数,用户 SecretId
secretKey string 公共参数,用户 secretKey
createJobRequest object
- inputs Array of Input Input,输入结构体数组
- outputs Array of Output Output,输出结构体数组
- callback string 回调地址,默认:不开启回调
- customId string 用户自定义任务 ID,小于 64 字符
- timeout int 任务超时时间,单位秒。超过超时时间后任务会被置为 ERROR

Input

参数 是否必选 类型 说明
url string 源 url 地址,与 source 字段二选一填写
source object 仓库源设置,与 url 字段二选一填写
- contentId string 仓库 ID
- path string 源路径

Output

参数 是否必选 类型 说明
contentId string 仓库 ID,默认:空
destination string 输出目录,默认:'/' (即根目录)
inputSelectors Array of int 该输出的输入源
smartContentDescriptor SmartContentDescriptor 智能能力的描述,默认:空
- outputPrefix string 输出文件前缀,小于 20 字符,默认:空
- musicBeat object 音乐鼓点识别
-- outputType MusicBeatOutputTypeOption enum 音乐鼓点识别的输出选项
-- drumType MusicBeatDrumTypeOption enum 打点音乐的鼓点类型
-- enlargeLevel int 打点音乐的增强幅度,有效值:1-6,默认为 0,推荐选 3
-- splitNum int 切块并发处理数量,有效值:1-10,默认 1,推荐 3-5

MusicBeatOutputTypeOption

含义 说明
1 JSON 输出鼓点信息 JSON,内容包括 beat、downbeat
2 DRUM 输出打点音乐的鼓点轨道,无原音乐
3 MERGE 输出打点音乐,原音乐和鼓点轨道融合
4 ALL 同时输出 JSON_MASK、DRUM、MERGE 的结果
5 JSON_MASK 输出鼓点信息 JSON,内容包括 beat、downbeat、真实鼓点
6 BPM 输出每分钟的节拍数量,内容包括:整曲 bpm、各节拍处 bpm

MusicBeatDrumTypeOption

含义
1 Western1
2 Western2
3 Western3
4 Chinese
5 Muyu
6 Orchestral
7 Orchestral2
8 Dance
9 Dance2

请求示例:

{
  "action": "CreateJob",
  "secretId": "{secretId}",
  "secretKey": "{secretKey}",
  "createJobRequest": {
    "customId": "{customId}",
    "callback": "{callback}",
    "inputs": [
      {
        "url": "{url}"
      }
    ],
    "outputs": [
      {
        "contentId": "{contentId}",
        "destination": "/output",
        "inputSelectors": [0],
        "smartContentDescriptor": {
          "outputPrefix": "{outputPrefix}",
          "musicBeat": {
            "outputType": 4,
            "drumType": 2,
            "enlargeLevel": 3,
            "splitNum": 3
          }
        }
      }
    ]
  }
}

返回示例:

{
  "requestId": "ac004192-110b-46e3-ade8-4e449df84d60",
  "createJobResponse": {
    "job": {
      "id": "13f342e4-6866-450e-b44e-3151431c578b",
      "state": 1,
      "customId": "{customId}",
      "callback": "{callback}",
      "inputs": [
        {
          "url": "{url}"
        }
      ],
      "outputs": [
        {
          "contentId": "{contentId}",
          "destination": "{destination}",
          "inputSelectors": [0],
          "smartContentDescriptor": {
            "outputPrefix": "{outputPrefix}",
            "musicBeat": {
              "outputType": 4,
              "drumType": 2,
              "enlargeLevel": 3,
              "splitNum": 3
            }
          }
        }
      ],
      "timing": {
        "createdAt": "1603432763000",
        "startedAt": "0",
        "completedAt": "0"
      }
    }
  }
}

State

含义
1 SUBMITTED
2 PROCESSING
3 COMPLETED
4 ERROR
5 CANCELED

获取任务信息

获取方式:分为主动获取和被动回调。

  • 主动获取按照 id 的类别有两种查询接口,一种是根据用户自定义 id 查询,由于平台无法保证该 id 的唯一性,故返回 Job 数组(见 1);另一种是通过创建任务后的回包中的 id 查询(见 2)
  • 被动回调需要在创建任务时填写 callback 字段,平台在任务进入完成态(COMPLETED/ERROR)后会将 Job 结构体发送给 callback 所指的地址(见 3),平台方推荐使用被动回调的方式获取任务结果。

在音乐鼓点识别能力中,如果查询到的任务成功(state=3),则任务的 Output 中会携带 smartContentResult 结构体,其中的 musicBeat 结构体会带有 mergeFileName, drumFileName 和 jsonName。用户根据 Output 中的 cos 及 destination 信息可自行拼接出输出文件的 cos 路径。

输出 鼓点信息 json 文件 字段说明

参数 类型 范围 说明
effectId string - 可忽略
type string PuckingDrum, SlowRhythm, RealDrum 分别代表:节拍(beat),强拍(downbeat),鼓(drum)
time int - 对应节拍 or 强拍 or 鼓的发生时间,单位:毫秒
duration int 0 可忽略

输出 BPM json 文件 字段说明

参数 类型 范围 说明
effectId string - 可忽略
type string GlobalBpm, BeatBpm 分别代表:整曲 bpm,各节拍 bpm
time int - bpm 开始时间,单位:毫秒
bpm float - bpm 数值

1. 主动查询,根据用户在新建任务时传入的自定义 customId 请求示例:

{
  "action": "ListJobs",
  "secretId": "{secretId}",
  "secretKey": "{secretKey}",
  "listJobsRequest": {
    "customId": "{customId}"
  }
}

返回示例:

{
  "requestId": "c9845a99-34e3-4b0f-80f5-f0a2a0ee8896",
  "listJobsResponse": {
    "jobs": [
      {
        "id": "a95e9d74-6602-4405-a3fc-6408a76bcc98",
        "state": 3,
        "customId": "{customId}",
        "callback": "{callback}",
        "timing": {
          "createdAt": "1610513575000",
          "startedAt": "1610513575000",
          "completedAt": "1610513618000"
        },
        "inputs": [{ "url": "{url}" }],
        "outputs": [
          {
            "contentId": "{contentId}",
            "destination": "{destination}",
            "inputSelectors": [0],
            "smartContentDescriptor": {
              "outputPrefix": "{outputPrefix}",
              "musicBeat": {
                "outputType": 4,
                "drumType": 2,
                "enlargeLevel": 3,
                "splitNum": 3
              }
            },
            "smartContentResult": {
              "musicBeat": {
                "drumFileName": "drum.mp3",
                "mergeFileName": "merge.mp3",
                "jsonName": "info.json"
              }
            }
          }
        ]
      }
    ],
    "total": 1
  }
}

2. 主动查询,根据新建任务时回包带的 id 请求示例:

{
  "action": "GetJob",
  "secretId": "{secretId}",
  "secretKey": "{secretKey}",
  "getJobRequest": {
    "id": "{id}"
  }
}

返回示例:

{
  "requestId": "c9845a99-34e3-4b0f-80f5-f0a2a0ee8896",
  "getJobResponse": {
    "job": {
      "id": "a95e9d74-6602-4405-a3fc-6408a76bcc98",
      "state": 3,
      "customId": "{customId}",
      "callback": "{callback}",
      "timing": {
        "createdAt": "1610513575000",
        "startedAt": "1610513575000",
        "completedAt": "1610513618000"
      },
      "inputs": [{ "url": "{url}" }],
      "outputs": [
        {
          "contentId": "{contentId}",
          "destination": "{destination}",
          "inputSelectors": [0],
          "smartContentDescriptor": {
            "outputPrefix": "{outputPrefix}",
            "musicBeat": {
              "outputType": 4,
              "drumType": 2,
              "enlargeLevel": 3,
              "splitNum": 3
            }
          },
          "smartContentResult": {
            "musicBeat": {
              "drumFileName": "drum.mp3",
              "mergeFileName": "merge.mp3",
              "jsonName": "info.json"
            }
          }
        }
      ]
    }
  }
}

3. 被动回调

会将进入完成态(COMPLETED/ERROR)的任务的整个 Job 结构体发送到用户在创建任务时指定的 callback 字段对应的地址,Job 结构体见主动查询的示例(getJobResponse 下)

Tencent Media Lab
/
We would like to use performance and analytics cookies (“Cookies”) to help us recognize whether you are a returning visitor and to track the number of website views and visits. For more information about the Cookies we use and your options (including how to change your preferences) see our Cookies Policy.