# 有损音频修复

# 使用场景和限制

# 使用场景(仅供参考)

  • 某音乐资源网站,拥有大量有损文件、且冷门以至于无法寻找无损替代文件,使用团子API服务自选的升级音频音质。
  • 某音频类 AI 产品,训练模型时有部分有损文件,导致训练的模型出现偏见(bias)或模型性能降低,使用团子API服务对这些有损文件进行无损音质升级处理以提升最终模型性能。
  • 某音频处理软件,提供有损音频修复功能,使用团子API服务对用户上传的有损文件进行无损音质升级处理。

# 限制

  • 由于团子有损音频修复的 AI 系统极其复杂,不支持对实时性要求较高的业务,适合需要处理大量音乐文件、且对实时性要求不强的的业务
  • 请勿过快调用接口,以免被自动限制,本页面全部接口限制最大QPS(每秒可调用接口次数):5次
  • 上传的文件请遵守当地法律法规以及团子的《协议条款》 (opens new window),不得上传侵权文件。

# 创建上传通道

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

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

请求地址:

POST https://api.tuanziai.com/lossy-audio-fixer/upload/channel

请求参数:

参数名 类型 必须 默认 描述
uploadVersion int 上传行为版本号,固定为2,必填,否则无法上传。
filename string 歌曲的文件名(需要包含扩展名,如"1.mp3")
config object 歌曲配置,为对象,对象形式参考歌曲配置
verion int 算法版本,当前必填1值。
intensity int 1 修复强度,详情参考修复强度
frequency float 0. 修复频率,详情参考修复频率
output48k int 0 输出采样率,详情参考输出采样率
artifactRemoval int 0 杂音移除,详情参考杂音移除
deterministic boolean true 确定性修复,true时,同样的输入会带来同样的输出,false时即便上传相同文件、输出的修复也会灵活多变每次结果均不同。

# 修复强度

值(int) 描述
0 谨慎修复:仅修复包络。
1 标准修复:修复包络、高频缺失谐波、能量以及相位信息。
2 激进修复:在标准修复的基础上,进一步增加修复强度、但可能带来错误或夸张的高频信息。

# 修复频率

如不需要修改修复频率,填写0即可,团子将自动根据歌曲信息决定修复频率的截止点。自动模式通常会带来最佳性能。

值(float) 描述
0 自动。
0.0 ~ 1.0 自主选择修复频率截止点,float值,最低0,最高1,代表高频截止强度,如0.75应代表修复截止到22050 * 0.75 ≈ 16537hz

# 输出采样率

值(int) 描述
0 输出FLAC, 44100Hz, 16bit文件。
1 实验性算法,输出FLAC, 48000Hz, 24bit文件。计算时间较慢,尽管最终高频的上限更高,但高频的能量恢复程度、谐波细节程度可能没有0值模式高。

# 杂音移除

值(int) 描述
0 不移除杂音。
1 移除噼啪声(Pop)、咔哒声(Click)等因为有损音频本身爆音导致的伪影,但可能会影响打击乐的清脆感,仅推荐歌曲在有损压缩严重、且的确存在伪影时启用。
2 更为激进的移除杂音。但会进一步的模糊打击乐的清脆感。

# 歌曲配置

参数名 类型 必须 默认 描述
unlock boolean 必填 必填,必须填true值。

请求举例:

POST https://api.tuanziai.com/lossy-audio-fixer/upload/channel

{
	"filename": "test.mp3",
	"uploadVersion": 2,
	"version": 1,
	"config": {
	    "unlock": true,
    },
    "intensity": 1,
    "frequency": 0,
    "output48k": 0,
    "artifactRemoval": 0,
    "deterministic": true
}

返回结果:

参数名 类型 必须 默认 描述
channel string 上传的通道号,持有此通道号用来获取上传结果
url string 上传歌曲的目标地址,详情参见“上传歌曲”
form object 上传表单,持有此字段用以上传歌曲,详情参见“上传歌曲”

返回举例:

{
	"code": 0,
	"message": "success",
	"data": {
		"channel": "25ff1dbf0d504d65bf1dbf0d50ed65da",
		"url": "https://dangoai.oss-accelerate.aliyuncs.com",
		"form": {
			"xxxxx": "xxxxx", // 请将此字段作为表单的键值对
			"xxxxx": "xxxxx",
			"xxxxx": "xxxxx"
		}
	}
}

可能的错误:

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

# 接下来做什么:

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

# 上传歌曲

v1接口停止服务通知

上传行为已升级为v2版本(当前页面所展示的),v1版本将于2025年6月1日后停止服务,请尽快升级您的代码,详细请参考上传文件接口v1迁移至v2

您需要将歌曲上传至团子指定的动态URL内,该URL取自创建上传通道返回的url字段,同时还需要在上传文件时携带动态的表单信息,该信息取自创建上传通道返回的form字段。

# 如何创建表单

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

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

# 文件的格式与限制

服务器仅接收12分钟以内的、类型为MP3 / FLAC / WAV的歌曲文件。

请求地址:

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即可查询歌曲处理情况以及下载歌曲。

注意

  • 一旦调用此接口,您就会开始扣除点数余额,如歌曲时长小于30秒,则扣除10点免费点数,否则扣除30 ~ 60点付费点数,具体的,请点击此页面 (opens new window),并在页面右上角找到工具与价格信息按钮并点击查看。
  • 如本请求返回错误(如您的余额不足),请重新创建通道并重新上传歌曲,一条通道只能使用一次

请求地址:

POST https://api.tuanziai.com/lossy-audio-fixer/upload/{channel}/result

请求参数:

参数名 类型 必须 默认 描述
channel string url参数,指32位长度字符串的上传通道,请通过创建上传通道获取。

请求举例:

POST https://api.tuanziai.com/lossy-audio-fixer/upload/25ff1dbf0d504d65bf1dbf0d50ed65da/result

返回结果:

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

返回举例:

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

可能的错误:

code message 描述
-10 余额不足 你没有足够的余额来进行运算,请充值后再试。
-1 暂不支持的文件格式,请上传常见的歌曲类型(如MP3、FLAC等) 文件格式有问题,请上传支持的文件格式,或者你的歌曲文件可能损坏。
-1 上传的歌曲不允许超过12分钟,请考虑裁剪音频文件 歌曲过长,超过12分钟,请参考文件的格式与限制
-100 - 参数错误,或通道不存在等其他原因。

# 接下来做什么:

歌曲上传成功后,稍等约2 ~ 3分钟即可处理完成(这取决于歌曲的长度)。 这期间您可以通过轮询查询歌曲处理情况

# 查询歌曲处理情况

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

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

请求地址:

POST https://api.tuanziai.com/lossy-audio-fixer/{musicId}

请求参数:

参数名 类型 必须 默认 描述
musicId string url参数。音乐的ID,这个字段通过开始处理歌曲接口返回的。
此接口支持查询多个内容,您可以在多个ID直接用英文逗号隔开。

请求举例:

POST https://api.tuanziai.com/lossy-audio-fixer/33441abf7d3f4d3c841abf7d3f2d3c86
查询歌曲ID"33441abf7d3f4d3c841abf7d3f2d3c86"的歌曲信息

POST https://api.tuanziai.com/lossy-audio-fixer/33441abf7d3f4d3c841abf7d3f2d3c86,25ff1dbf0d504d65bf1dbf0d50ed65da
查询歌曲ID"334...""25f..."的歌曲信息

返回结果:

参数名 类型 必须 默认 描述
status int 歌曲当前处理状态。请参考歌曲状态
length int 歌曲的长度(秒)
style int 歌曲移除类型
name string 歌曲的文件名(上传时由您提供的)
downloadCount int 歌曲剩余下载次数
cost int 歌曲本次扣除的付费点数,如歌曲时长小于30秒,则此字段无意义。

# 歌曲状态

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

返回举例:

{
    "code": 0,
    "message": "success",
    "data": {
        "status": 2,
        "length": 137,
        "name": "七里香.mp3",
        "style": 0,
        "lossless": false,
        "downloadCount": 7,
	    "cost": 60
    }
}

可能的错误:

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

# 接下来做什么:

如果歌曲处理成功,您就可以下载它了,如果歌曲处理失败,您的点数将返回,不会扣费。

# 下载歌曲

当处理成功时,请及时将歌曲下载到您本身的数据存储中,团子只会暂存歌曲 30 天,过期后会删除。

下载歌曲时请确保歌曲status2,否则歌曲无法下载。查询歌曲状态请参考查询歌曲信息

下载歌曲会扣除一次下载次数下载次数每首歌为7次,除特殊情况恕不进行补充,请根据您的需求斟酌下载,下载次数的查询请参考查询歌曲信息

返回的下载地址将在 15 分钟后过期,请及时下载。

请求地址:

POST https://api.tuanziai.com/lossy-audio-fixer/{musicId}/download/ai

请求参数:

参数名 类型 必须 默认 描述
musicId string url参数。音乐的ID,这个字段通过开始处理歌曲接口返回的。

请求举例:

POST https://api.tuanziai.com/lossy-audio-fixer/cd038fd3c62b441a838fd3c62b941a84/download/ai
解释:下载音乐ID为cd038fd3c62b441a838fd3c62b941a84的歌曲文件。

返回结果:

参数名 类型 必须 默认 描述
url string 下载地址,请在20分钟内下载,否则超时该链接将失效。20分钟内重复下载此URL不扣除下载次数。
downloadCountLeft int 剩余下载次数,也可以通过查询歌曲信息来手动查询剩余下载次数。

返回举例:

{
    "code": 0,
    "message": "success",
    "data": {
        "url": "http://dangoai.oss-cn-hangzhou.aliyuncs.com/out/cd038fd3c62b441a838fd3c62b941a84/ai.mp3",
        "downloadCountLeft": 6
    }
}

可能的错误:

code message 描述
-1 歌曲仍在准备中 歌曲正在处理中,或歌曲处理失败,请确保status2时再下载歌曲。
-1 已经超过最大下载次数 7 次下载次数已用完。请注意,这是不应该出现的问题,出现此问题请考虑您的软件与产品系统设计问题,团子并非“云硬盘”,您的歌曲会过期永久删除,故请将歌曲下载到您的项目/产品里。