Music Beat

Feature Introduction

Music beat recognition capability can identify drum beat position information in user-input music. Input a music file, output recognized drum beat position information and a marked music file (optional)

API Description

Request Method: POST (HTTP)

Request URL: https://api.mediax.tencent.com/job

Request Header: Content-Type: application/json

Request Flow: The API includes 'Create Task' and 'Query Task'. After creating a task, users can actively query the task to know the result, or input a callback address when creating the task, and the task will automatically callback to that address after completion

Other Requirements: Common audio formats are recommended, such as mp3, wav

Create Task

Parameter Description

Parameter Required Type Description
action Yes string Common parameter, here is CreateJob
secretId Yes string Common parameter, user SecretId
secretKey Yes string Common parameter, user SecretKey
createJobRequest Yes object
- inputs Yes Array of Input Input, input structure array
- outputs Yes Array of Output Output, output structure array
- callback No string Callback address, default: callback disabled
- customId No string User-defined task ID, less than 64 characters
- timeout No int Task timeout, in seconds. Task will be set to ERROR after timeout

Input

Parameter Required Type Description
url No string Source URL address, choose one with source field
source No object Repository source settings, choose one with url field
- contentId Yes string Repository ID
- path Yes string Source path

Output

Parameter Required Type Description
contentId Yes string Repository ID, default: empty
destination No string Output directory, default: '/' (root directory)
inputSelectors Yes Array of int Input source for this output
smartContentDescriptor Yes SmartContentDescriptor Smart capability description, default: empty
- outputPrefix No string Output file prefix, less than 20 characters, default: empty
- musicBeat Yes object Music beat recognition
-- outputType Yes MusicBeatOutputTypeOption enum Music beat recognition output option
-- drumType No MusicBeatDrumTypeOption enum Drum type for marked music
-- enlargeLevel No int Enhancement level for marked music, valid values: 1-6, default 0, recommended 3
-- splitNum No int Chunk concurrent processing count, valid values: 1-10, default 1, recommended 3-5

MusicBeatOutputTypeOption

Value Meaning Description
1 JSON Output beat information JSON, content includes beat, downbeat
2 DRUM Output drum track for marked music, no original music
3 MERGE Output marked music, original music and drum track merged
4 ALL Output JSON_MASK, DRUM, MERGE results simultaneously
5 JSON_MASK Output beat information JSON, content includes beat, downbeat, real drum beats
6 BPM Output beats per minute, content includes: whole song bpm, bpm at each beat

MusicBeatDrumTypeOption

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

Request Example:

{
  "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
          }
        }
      }
    ]
  }
}

Response Example:

{
  "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

Value Meaning
1 SUBMITTED
2 PROCESSING
3 COMPLETED
4 ERROR
5 CANCELED

Get Task Information

There are two ways to get information: active query and passive callback.

  • Active query has two types of query interfaces based on id category: one is to query based on user-defined id, since the platform cannot guarantee the uniqueness of this id, it returns a Job array (see 1); the other is to query by the id in the response after creating the task (see 2)
  • Passive callback requires filling in the callback field when creating the task, the platform will send the Job structure to the address specified by callback after the task enters the completion state (COMPLETED/ERROR) (see 3), the platform recommends using passive callback to get task results.

In the music beat recognition capability, if the queried task is successful (state=3), the task's Output will carry a smartContentResult structure, in which the musicBeat structure will have mergeFileName, drumFileName and jsonName. Users can combine the output file's COS path based on the cos and destination information in the Output.

Output Beat Information JSON File Field Description

Parameter Type Range Description
effectId string - Can be ignored
type string PuckingDrum, SlowRhythm, RealDrum Represent: beat, downbeat, drum respectively
time int - Corresponding beat or downbeat or drum occurrence time, unit: milliseconds
duration int 0 Can be ignored

Output BPM JSON File Field Description

Parameter Type Range Description
effectId string - Can be ignored
type string GlobalBpm, BeatBpm Represent: whole song bpm, bpm at each beat respectively
time int - bpm start time, unit: milliseconds
bpm float - bpm value

1. Active Query, Based on User-Defined customId Passed When Creating Task Request Example:

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

Response Example:

{
  "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. Active Query, Based on id in Response After Creating Task Request Example:

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

Response Example:

{
  "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. Passive Callback

The entire Job structure of the task that enters the completion state (COMPLETED/ERROR) will be sent to the address corresponding to the callback field specified by the user when creating the task. See the active query example (under getJobResponse) for the Job structure

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.