功能介绍
音乐标签能力通过对音乐进行多维度分析,自动生成各个维度下的分类标签及概率值,目前支持的七大维度维度包括:
- 人声
- 情绪
- 语种
- 风格
- 场景
- 背景音乐
- 强度
接口说明
请求方式:
POST(HTTP)
请求地址:
https://api.mediax.tencent.com/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 | 源路径 |
注意:source, url 两个字段有且只有一个
Output
| 参数 | 是否必须 | 类型 | 说明 |
|---|---|---|---|
| inputSelectors | 是 | Array of int | 该输出的输入源 |
| smartContentDescriptor | 是 | object | 智能能力的描述,默认:空 |
| - musicTagV2 | 是 | object | |
| -- tagType | 是 | Array of string | 1. 输入范围: ["vocal", "language", "mood", "genre", "scene", "bgm", "intensity", "all"]2. 输入说明 - all 表示调用全部类型的标签 - 可以根据维度名称,组合调用各个子维度的标签 - all 选项和子选项不能同时出现 |
- vocal,2类人声标签
- language,21类语种标签
- mood,11类情绪标签
- genre,37类风格标签
- scene,36类场景标签
- bgm,2类背景音乐标签
- intensity,2类强度标签
- all,获取7大维度标签
请求示例:
{
"action": "CreateJob",
"secretId": "{secretId}",
"secretKey": "{secretKey}",
"createJobRequest": {
"customId": "{customId}",
"callback": "{callback}",
"inputs": [
{
"url": "{url}"
}
],
"outputs": [
{
"inputSelectors": [0],
"smartContentDescriptor": {
"musicTagV2": {
"tagType": ["mood", "vocal", "language", "scene", "genre", "bgm"]
}
}
}
]
}
}
返回示例:
{
"requestId": "ac004192-110b-46e3-ade8-4e449df84d60",
"createJobResponse": {
"job": {
"id": "13f342e4-6866-450e-b44e-3151431c578b",
"state": 1, // 见下方state说明
"customId": "{customId}",
"callback": "{callback}",
"inputs": [
{
"url": "{url}"
}
],
"outputs": [
{
"inputSelectors": [0],
"smartContentDescriptor": {
"musicTagV2": {
"tagType": ["mood", "vocal", "language", "scene", "genre", "bgm"]
}
}
}
],
"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 结构体,其中的 audioTagger 字段是一个结果对象数组,每个结果对象有标签类型(tagType),标签名称(tag),概率(probility)
主动查询,根据用户在新建任务时传入的自定义 customId
请求示例:
{
"action": "ListJobs",
"secretId": "{secretId}",
"secretKey": "{secretKey}",
"listJobsRequest": {
"customId": "{customId}"
}
}
注:listJobs 回包中携带的 jobs 是一个数组
返回示例:
{
"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": [
{
"inputSelectors": [0],
"smartContentDescriptor": {
"musicTagV2": {
"tagType": ["mood", "vocal", "language", "scene", "genre", "bgm"]
}
},
"smartContentResult": {
"musigTagV2": {
"musicTagV2": {
"vocal": {
"label": "声乐",
"prob": "1.0000"
},
"language": {
"label": "其他",
"prob": "0.0817"
},
"mood": {
"label": "兴奋",
"prob": "0.2953"
},
"genre": {
"label": "壮族",
"prob": "0.7710"
},
"scene": {
"label": "祈祷",
"prob": "0.8886"
},
"intensity": {}
}
}
}
}
]
}
],
"total": 1
}
}
主动查询,根据新建任务时回包带的 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": [
{
"inputSelectors": [0],
"smartContentDescriptor": {
"musicTagV2": {
"tagType": ["mood", "vocal", "language", "scene", "genre", "bgm"]
}
},
"smartContentResult": {
"musigTagV2": {
"musicTagV2": {
"vocal": {
"label": "声乐",
"prob": "1.0000"
},
"language": {
"label": "其他",
"prob": "0.0817"
},
"mood": {
"label": "兴奋",
"prob": "0.2953"
},
"genre": {
"label": "壮族",
"prob": "0.7710"
},
"scene": {
"label": "祈祷",
"prob": "0.8886"
},
"intensity": {}
}
}
}
}
]
}
}
}
被动回调
会将进入完成态(COMPLETED/ERROR)的任务的整个 Job 结构体发送到用户在创建任务时指定的 callback 字段对应的地址,Job 结构体见主动查询的示例(getJobResponse 下)
cURL 示例
新建任务
curl --location --request POST 'https://api.mediax.tencent.com/test/job' \
--header 'Content-Type: application/json' \
--data-raw '{
"action": "CreateJob",
"secretId": "{secretId}",
"secretKey": "{secretKey}",
"createJobRequest": {
"customId": "{customId}",
"callback": "{callback}",
"inputs": [{
"url": "{url}"
}],
"outputs": [
{
"inputSelectors": [0],
"smartContentDescriptor": {
"audioTagger": {
"tags": [1, 2, 3]
}
}
}]
}
}'
查询任务
# 根据customId
curl --location --request POST 'https://api.mediax.tencent.com/test/job' \
--header 'Content-Type: application/json' \
--data-raw '{
"action": "ListJobs",
"secretId": "{secretId}",
"secretKey": "{secretKey}",
"listJobsRequest": {
"customId": "{customId}"
}
}'
# 根据id
curl --location --request POST 'https://api.mediax.tencent.com/test/job' \
--header 'Content-Type: application/json' \
--data-raw '{
"action": "GetJob",
"secretId": "{secretId}",
"secretKey": "{secretKey}",
"getJobRequest": {
"id": "{id}"
}
}'
附录:目前支持的标签
| 音乐标签模型列表 | ||
|---|---|---|
| 标签模型 | 种类 | 标签字段 |
| vocal | 2 | 声乐 |
| 纯音乐 | ||
| language | 21 | 俄语 |
| 印尼语 | ||
| 国语 | ||
| 德语 | ||
| 意大利语 | ||
| 日语 | ||
| 法语 | ||
| 泰语 | ||
| 爪哇语 | ||
| 瑞典语 | ||
| 粤语 | ||
| 纯音乐 | ||
| 缅甸语 | ||
| 英语 | ||
| 葡萄牙语 | ||
| 西班牙语 | ||
| 越南语 | ||
| 阿拉伯语 | ||
| 韩语 | ||
| 马来语 | ||
| 其他 | ||
| mood | 11 | 伤感 |
| 兴奋 | ||
| 安静 | ||
| 宣泄 | ||
| 浪漫 | ||
| 欢快 | ||
| 怀旧 | ||
| 恐怖 | ||
| 恢弘 | ||
| 放空 | ||
| 滑稽 | ||
| genre | 37 | 8bit 像素风 |
| ACG | ||
| Bossa | ||
| 中国基督教歌曲 | ||
| 中国禅修 | ||
| 古风 | ||
| 乡村 | ||
| 佛教 | ||
| 儿童 | ||
| 加勒比风格 | ||
| 印度 | ||
| 古典 | ||
| 古装原声 | ||
| 另类 | ||
| 史诗 | ||
| 嘻哈 | ||
| 壮族 | ||
| 巴西 | ||
| 布鲁斯 | ||
| 彝族 | ||
| 拉丁 | ||
| 摇滚 | ||
| 朋克 | ||
| 民谣 | ||
| 泰国 | ||
| 爵士 | ||
| 电子 | ||
| 硬核 | ||
| 舞曲 | ||
| 节奏布鲁斯 | ||
| 蒙古 | ||
| 藏族 | ||
| 轻音乐 | ||
| 金属 | ||
| 陕北民歌 | ||
| 雷鬼 | ||
| 韩国流行 | ||
| scene | 25 | 东方禅修 |
| 中国风 | ||
| 二次元 | ||
| 健身 | ||
| 像素风音效 | ||
| 儿歌 | ||
| 八音盒 | ||
| 咖啡厅 | ||
| 喜庆 | ||
| 夜店 | ||
| 大合唱 | ||
| 宠物 | ||
| 情歌 | ||
| 旅行 | ||
| 校园 | ||
| 歌剧 | ||
| 游戏 | ||
| 瑜伽 | ||
| 睡前 | ||
| 祈祷 | ||
| 纯自然 | ||
| 航拍 | ||
| 花滑 | ||
| 草原 | ||
| 跑步 | ||
| 钢琴纯音 | ||
| bgm | 2 | 有背景音乐 |
| 无背景音乐 | ||
| intensity | 2 | 兴奋 |
| 舒缓 |
