# 团子轻函数

# 调用

# 介绍和限制

  • 团子轻函数是一系列轻便、快速的函数,包含多个功能,皆使用统一的接口调用方式,每个功能抽象为“输入”和“输出”,您只需要提交正确的输入、函数名称,即可获得指定的“输出”。
  • 本文档首先介绍轻函数的使用方法,不同的功能的调用的URL、输入和输出不同,除此之外均相同,文档的末尾将列出不同功能的输入和输出。

# 流程

抽象的来说,轻函数需要您的“输入”文件,执行,并返回“输出”文件,整个流程如下:

  1. 创建上传通道:在使用轻函数之前,您需要创建一条临时的上传通道(channel),该通道用于提交即将上传输入文件的选项。
  2. 上传文件:您需要将一个或多个文件上传到团子指定的动态URL内,作为“输入”。
  3. 执行轻函数:输入文件上传完毕后,您需要调用接口来执行轻函数。
  4. 查询文件处理情况:您可以查询文件的处理状态,获取文件的一些基本信息,当函数执行完毕后,该接口也会返回输出文件。

# 限制

  • 轻函数的执行速度和当前的服务器负载有关,大多数处理将在 5 秒左右完成,在负载较高时可能延迟到 1 分钟左右的处理时间。
  • 请勿过快调用接口,以免被自动限制,本页面全部接口限制最大QPS(每秒可调用接口次数):5次
  • 轻函数的输出文件仅保存1天,请在获取到输出文件后及时下载,过期后将无法获取。
  • 上传的文件请遵守当地法律法规以及团子的《协议条款》 (opens new window),不得上传侵权文件。

# 轻函数列表

目前已实现的功能(点击函数名称查看详情):

# 创建上传通道

在使用团子轻函数之前,你必须创建一条临时一次性的上传通道(channel),你可以在通道里提交即将上传的文件的选项,当服务器确认无误后将返回该通道的信息,持有这些信息就可以上传文件了。

创建通道不会扣费,只会预测余额是否不足且传递一些配置信息。

请求地址:

POST https://api.tuanziai.com/lite-method/{method-name}/upload/channel

URL参数:

参数名 类型 必须 默认 描述
method-name string 轻函数的名称,当前支持的轻函数名称请参考轻函数列表

POST请求体参数:

参数名 类型 必须 默认 描述
uploadVersion int 上传行为版本号,固定为2,必填,否则无法上传。
filename string 您自定的标识(可以是文件的文件名或任何字符),在查询文件时,该字段将原封不动的返回给您。
useFreeNum boolean true 是否使用免费点数扣除本次计算任务,默认为true,为false时则消耗付费点数。

请求举例:

POST https://api.tuanziai.com/lite-method/audio-tool-lossy-check/upload/channel

{
	"uploadVersion": 2,
	"filename": "example",
    "useFreeNum": true
}

返回结果:

参数名 类型 必须 默认 描述
files object 返回的需要补充的输入内容,详情见files字段
channel string 上传的通道号,持有此通道号用来获取上传结果

# files字段

files是一个object类型的字段,可能包含了未知的1个或多个,每个代表了“要补充的输入”。的数量和名称取决于当前轻函数的输入,如音质损伤分析只有一个名为input

每个对应的为一个object,值的内容包含了以下内容:

键名 类型 必须 描述
url string 上传的动态URL,您需要将文件上传到此URL。
form object 上传到URL时需要携带的表单信息,无需关心此内容

返回举例:

{
	"code": 0,
	"message": "success",
	"data": {
		"channel": "25ff1dbf0d504d65bf1dbf0d50ed65da",
		"files": {
            "input": { //键名称(具体取决于轻函数)
	            "url": "xxxxx", 
	            "form": {
		            "xxxxx": "xxxxx",// 上传时表单信息
		            "xxxxx": "xxxxx"
                }
            }
        }
	}
}

可能的错误:

code message 描述
-10 余额不足 你没有足够的余额来进行运算,请在开放平台充值后再试。

# 接下来做什么:

在获取到返回结果之后,你可以通过该通道进行上传文件了。

# 上传输入文件

您需要将一个或多个文件(取决于当前的轻函数所需的输入文件数量)上传至团子指定的动态URL内。

该动态URL取自创建上传通道返回的url字段,同时还需要在上传文件时携带动态的表单信息,该信息取自创建上传通道返回的form字段。

# 如何创建表单

您需要构建一个http表单(而非和团子其他请求那样的JSON)

创建上传通道返回的form字段为object类型,包含多个键与值,您无需关心其内容,仅需将这些键值对作为表单的键值对,同时在表单的最后一位添加一个file字段,值为要上传的文件。

# 文件的格式与限制

每个输入根据自身的类型,拥有不同的限制,具体请查阅当前轻函数的输入类型

类型 描述
音频类 服务器仅接收12分钟以内的、类型为MP3 / FLAC / WAV的音频文件。输入音频一律归一化为 16bit / 44100SampleRate

请求地址:

POST 动态地址,值为“创建上传通道接口”返回结果中的"url"值。

请求参数:

参数名 类型 必须 默认 描述
form的键1 ... ... ... form的值1
form的键2 ... ... ... form的值2
... ... ... ... ...
file File 要上传的文件,字段名必须为file否则服务器无法识别。该字段必须在表单最后的位置。

注意

请求举例:

POST https://dangoai.oss-accelerate.aliyuncs.com
	请使用表单模式调用此接口("multipart/form-data")。

<formdata>
	"xxxx": "xxxx",
	"xxxx": "xxxx",
	"xxxx": "xxxx",
	"file": <FILE>

返回结果:

(无返回,即便有,也无任何意义,无需解析此返回结果。查询文件是否上传成功、以及获取文件的处理情况请参考执行轻函数)

# 接下来做什么:

当一个或多个输入文件已经上传到指定URL后,即可请求团子执行轻函数了。

# 执行轻函数

您上传的文件位置并非在团子的服务器内,而是上传到了阿里云的OSS(一种类似云盘)上。故上传完文件后需要调用此接口用以检查文件,并启动文件的处理。

本接口可以查询一首歌的上传结果,并开始处理这首歌。验证文件是否有效,余额是否可用,且返回文件的ID,持有函数ID即可查询文件处理情况以及下载文件。

注意

  • 一旦调用此接口,您就会开始扣除点数余额,不同轻函数的价格信息不同,具体的,请点击每个轻函数对应团子网站的功能页面,并在页面内找到工具与价格信息按钮并点击查看。
  • API调用不支持每日赠送的免费额度。
  • 如本请求返回错误(如您的余额不足),请重新创建通道并重新上传文件,一条通道只能使用一次

请求地址:

POST https://api.tuanziai.com/lite-method/{method-name}/upload/{channel}/result

URL参数:

参数名 类型 必须 默认 描述
method-name string 轻函数的名称,当前支持的轻函数名称请参考轻函数列表
channel string url参数,指32位长度字符串的上传通道,请通过创建上传通道获取。

请求举例:

POST https://api.tuanziai.com/lite-method/audio-tool-lossy-check/25ff1dbf0d504d65bf1dbf0d50ed65da/result

返回结果:

参数名 类型 必须 默认 描述
(根) string 返回的文件methodId(32位长度),请妥善保存此ID以方便后面的下载文件等操作。

返回举例:

{
	"code": 0,
	"message": "success",
	"data": "33441abf7d3f4d3c841abf7d3f2d3c86"
}

可能的错误:

code message 描述
-10 余额不足 你没有足够的余额来进行运算,请充值后再试。
-1 上传的音频文件不符合要求 音频类文件格式有问题,请上传支持的文件格式,或者你的音频文件可能损坏。
-1 缺少必须的文件 输入文件不完整或不存在,请检查上传的文件是否正确。
-1 上传的文件不允许超过x分钟,请考虑裁剪音频文件 文件过长,超过x分钟,请参考文件的格式与限制
-100 - 参数错误,或通道不存在等其他原因。

# 接下来做什么:

函数开始运行后,稍等约5 ~ 60秒即可处理完成。 这期间您可以通过轮询查询文件处理情况

# 查询文件处理情况

通过本接口你可以获取到文件的状态(是否处理完成),以及文件的一些基本信息。

为了同时节省双方服务的带宽,一首歌根据时长最少也要 5 秒左右才会出现结果,所以在轮询本接口时可以添加一个 5 秒的延迟(即过了延迟时间再开始轮询),轮询频率请保持为 1 秒以上,否则可能触发服务器自动限流导致服务被暂停使用。

请求地址:

POST https://api.tuanziai.com/lite-method/{method-name}/{methodId}

URL参数:

参数名 类型 必须 默认 描述
method-name string 轻函数的名称,当前支持的轻函数名称请参考轻函数列表
methodId string url参数。函数的ID,这个字段通过执行轻函数接口返回的。
此接口支持查询多个内容,您可以在多个ID直接用英文逗号隔开。

请求举例:

POST https://api.tuanziai.com/lite-method/audio-tool-lossy-check/33441abf7d3f4d3c841abf7d3f2d3c86
查询函数ID"33441abf7d3f4d3c841abf7d3f2d3c86"的文件信息

POST https://api.tuanziai.com/lite-method/audio-tool-lossy-check/33441abf7d3f4d3c841abf7d3f2d3c86,25ff1dbf0d504d65bf1dbf0d50ed65da
查询函数ID"334...""25f..."的文件信息

返回结果:

参数名 类型 必须 默认 描述
status int 文件当前处理状态。请参考文件状态
id string 函数ID
methodName string 函数名称
userFileName string 文件的文件名(上传时由您提供的)
cost int 函数扣除的点数
costType string 值为free时该函数消耗的是免费点数,值为pay时消耗的是付费点数。
files array[OutputFile] 输出文件(数组),仅在status为2时该字段存在,具体内容取决于当前轻函数的输出。files的详细定义请参考OutputFile部分。

# 文件状态

状态号 描述
0 文件仍在处理中
1 文件处理失败
通常代表文件格式有问题。如果一首歌两次以上出现这个状态,可以联系我们进行排查。
文件处理失败则会退回费用,不收费
2 文件处理成功,可以下载了

# OutputFile

键名 类型 描述
name string 输出文件的名称。
url string 输出文件的下载地址(链接有效期15分钟)。

返回举例:

{
    "code": 0,
    "message": "success",
    "data": {
        "status": 2,
        "id": "33441abf7d3f4d3c841abf7d3f2d3c86",
        "methodName": "audio-tool-lossy-check",
        "userFileName": "example",
        "cost": 10,
        "costType": "free",
	    "files": [
		    {
			    "name": "output.json",
			    "url": "xxxxx"
		    }
	    ]
    }
}

可能的错误:

code message 描述
-10 文件已过期 文件已过期1天,已从服务器上永久删除无法获取信息。
-1 文件不存在 请检查methodId是否有误。

# 接下来做什么:

如果文件处理成功,您可以根据需要下载所需的输出文件,不同的轻函数的输出文件含义不同,具体需要查看当前轻函数的输出文件定义。

# 轻函数:音质损伤分析

# 名称(method-name)

audio-tool-lossy-check

# 介绍

该功能将分析输入的音频的损伤情况。

团子会输出到具体精确到区块的音质损伤值,音质损伤可能是因为遭遇过有损压缩、量化压缩、音频存在明显伪影,都会导致音质损伤。

# 输入

名称 类型 必须 描述
input 音频类 要分析的音频文件。

# 输出

名称 描述
output.json 文本,为JSON字符串,包含了音质损伤的分析结果,具体格式请参考音质损伤分析报告

# 音质损伤分析报告

音质损伤分析报告为JSON格式,包含以下字段:

键名 类型 描述
audio_length int 音频的帧数,除以44100为音频的秒数。
chunk_size int 输出的采样帧数,通常为44100,即每秒分析一次(输入的采样率固定为44100),它决定了result的结果长度,请按照此字段解释result的每个值(而非按“秒”),团子无法保证chunk_size的值固定为44100。
version string 算法的版本号和名称。
result array[float] 数组,包含了每个采样点的音质损伤值,长度为ceil(audio_length / chunk_size)(意味着可能result的最后一个数值的是不满chunk_size长度的),数值范围为-1 或 0 ~ 1。-1为该区块为空音频(无法分析),0为损伤严重,1为无损。通常情况下可以认为value < 0.3时判断为有损区块,value >= 0.3 && value < 0.75时判断为怀疑区块,value >= 0.75时判断为无损区块。

# 示例

{
    //输入文件为3.226秒(142300 / 44100)
    "audio_length": 142300,
    //采样区块为1秒一次
    "chunk_size": 44100,
    //版本号
    "version": "2,dango-psyche-network",
    //结果数组(4条数据)
    //意味着[0-1秒的质量, 1-2秒的质量, 2-3秒的质量, 3-3.226秒的质量]
    "result": [0.15, 0.25, 0.9, 0.9]
}