音轨分离能力,支持人声伴奏分离。Use when: (1) 用户需要将音频分离为人声和伴奏,(2) 用户需要对音频进行专业级别的音轨分离处理。
前导检查(先执行)
功能概述
前导检查(先执行)是一项面向实际任务的技能,主要用于如果输出 UPGRADE_AVAILABLE <old> <new> <slug> :;读取 skill/baiyin-skills-upgrade/SKILL.md ,执行其中的「内联升级流程」;
核心要点
- 如果宿主支持 AskUserQuestion ,使用中文四选一: 立即更新 / 以后自动更新 / 暂不更新 / 不再提醒;
- 如果宿主不支持 AskUserQuesti。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
使用与执行
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
前导检查(先执行)
_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
[ -x "$_ROOT/skill/bin/baiyin-skill-update-check" ] && _UPD=$(bash "$_ROOT/skill/bin/baiyin-skill-update-check" "$_ROOT/skill/baiyin-track-separation-skill" 2>/dev/null || true)
[ -n "${_UPD:-}" ] && echo "$_UPD"
如果输出 UPGRADE_AVAILABLE :
- 读取
skill/baiyin-skills-upgrade/SKILL.md,执行其中的「内联升级流程」。 - 如果宿主支持
AskUserQuestion,使用中文四选一:立即更新/以后自动更新/暂不更新/不再提醒。 - 如果宿主不支持
AskUserQuestion(例如 OpenClaw 当前会话),直接询问用户:检测到百音技能有新版本(当前 v ,最新 v )。请回复:1 立即更新 / 2 以后自动更新 / 3 暂不更新 / 4 不再提醒。
如果输出 JUST_UPGRADED :
- 告诉用户:
百音技能已更新到 v ,继续处理你的请求。
如果输出 UP_TO_DATE、SNOOZED、CHECK_DISABLED 或 CHECK_FAILED:
- 不打断当前任务,直接继续。
Track Separation Skill
音轨分离能力,支持将音频分离为人声和伴奏。
前置要求
BAIYIN_API_KEY
运行时配置
BASE_URL固定使用https://ai.hikoon.com- 只有
BAIYIN_API_KEY缺失时,才向用户索要 API Key。
文件地址处理
- 如果用户提供的是本地文件路径、聊天附件、网盘私链或其他不能直接提交给分离接口的文件来源,优先由 skill 内部先调用上传接口处理,再继续后续流程。
- 这是 skill 的内部执行细节,不要在对用户回复里强调“公网”“公网地址”“公开可访问 URL”“先上传到公网”等说法。
- 面向用户时,只需要表达为“已收到文件”“正在上传”“上传成功”“开始处理”。
- 上传接口:
POST {BASE_URL}/api/open/v1/file/upload - 认证方式:
Authorization: Bearer,Content-Type: multipart/form-data - 表单字段:
file必填,filename选填,dir选填 - 成功后从返回的
data.url取文件地址,并填入originalFileUrl - 不要求用户自行准备 OSS、CDN 或其他外部存储;优先由 skill 自动处理上传步骤
获取 API Key
- 前往 百音开放平台:https://ai.hikoon.com/
- 登录账号
- 进入「百音开放平台」→「API Key 管理」
- 点击「创建 API Key」
- 复制生成的 API Key(以
bk_开头)
注意:API Key 仅在创建时显示一次,请妥善保存。
配置环境变量
BAIYIN_API_KEY
示例:
export BAIYIN_API_KEY="bk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Quick Reference
| 操作 | 方法 | 接口 |
|---|---|---|
| 创建分离任务 | POST | /api/open/v1/track-separation/split |
| 查询任务状态 | GET | /api/open/v1/tasks/:taskId |
分离类型
| 类型值 | 说明 | 输出内容 |
|---|---|---|
1 |
人声伴奏分离 | 人声轨道 + 伴奏轨道 |
认证方式
使用 API Key 认证:
Authorization: BearerContent-Type: application/json
API Key 格式:bk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
文件上传
音轨分离需要提供音频文件 URL。先上传文件获取 URL,再调用分离接口。
上传接口
POST /api/open/v1/file/upload Authorization: BearerContent-Type: multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file |
File | ✅ | 音频文件(二进制) |
filename |
string | ❌ | 自定义文件名 |
dir |
string | ❌ | 上传目录,建议 track-sep |
cURL 示例
curl --location 'https://ai.hikoon.com/api/open/v1/file/upload' --header 'Authorization: Bearer bk_your_api_key_here' --form 'file=@"/path/to/audio.mp3"' --form 'dir="track-sep"'
返回示例
{
"success": true,
"message": "操作成功",
"data": {
"url": "https://hikoon-ai.oss-cn-hangzhou.aliyuncs.com/track-sep/audio.mp3"
}
}
返回的 data.url 字段即为文件 URL,可用于音轨分离接口的 originalFileUrl 参数。
创建分离任务
请求
POST /api/open/v1/track-separation/split Authorization: BearerContent-Type: application/json
请求参数
{
"taskName": "我的音轨分离任务",
"originalFileUrl": "https://hikoon-ai.oss-cn-hangzhou.aliyuncs.com/track-sep/audio.mp3",
"separationType": 1,
"fileSize": 5242880,
"audioDuration": 180,
"format": "mp3",
"vocalAccompanimentSeparationEnabled": false,
"echoCancellationEnabled": false
}
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
taskName |
string | ✅ | 任务名称 |
originalFileUrl |
string | ✅ | 原始音频文件 URL(需公开可访问) |
separationType |
number | ✅ | 分离类型:固定为 1(人声伴奏分离) |
fileSize |
number | ✅ | 文件大小(字节) |
audioDuration |
number | ✅ | 音频时长(秒) |
format |
string | ❌ | 输出格式:mp3/wav/flac,默认 mp3 |
vocalAccompanimentSeparationEnabled |
boolean | ❌ | 人声和伴唱分离开关(仅类型1) |
echoCancellationEnabled |
boolean | ❌ | 回声消除开关(仅类型1) |
返回示例
{
"success": true,
"message": "操作成功",
"data": {
"requestId": "req_xxx",
"taskId": "task_xxx",
"capability": "track_separation.split",
"status": "queued"
}
}
查询任务
GET /api/open/v1/tasks/:taskId Authorization: Bearer
成功返回示例
{
"success": true,
"message": "操作成功",
"data": {
"requestId": "req_xxx",
"taskId": "task_xxx",
"capability": "track_separation.split",
"status": "succeeded",
"result": {
"recordId": 123,
"internalTaskId": "task_xxx",
"userTaskId": "BT202604070001",
"originalFileUrl": "https://example.com/audio.mp3",
"vocalTrackUrl": "https://oss.example.com/vocal.mp3",
"accompanyTrackUrl": "https://oss.example.com/accompany.mp3",
"instrumentalTrackUrls": [],
"zipUrl": "https://oss.example.com/result.zip",
"format": "mp3"
},
"error": null
}
}
失败任务返回示例
{
"success": true,
"message": "操作成功",
"data": {
"requestId": "req_xxx",
"taskId": "task_xxx",
"capability": "track_separation.split",
"status": "failed",
"result": {
"recordId": 125,
"internalTaskId": "task_zzz",
"userTaskId": "BT202604070003",
"originalFileUrl": "https://example.com/audio.mp3",
"vocalTrackUrl": null,
"accompanyTrackUrl": null,
"instrumentalTrackUrls": [],
"zipUrl": null,
"format": "mp3"
},
"error": "任务处理失败: 第三方接口未返回有效的任务ID"
}
}
任务状态
| 状态 | 说明 |
|---|---|
queued |
排队中 |
processing |
处理中 |
succeeded |
成功完成 |
failed |
处理失败 |
result 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
recordId |
number | 数据库记录 ID |
internalTaskId |
string | 内部任务 ID |
userTaskId |
string | 用户可见的任务编号 |
originalFileUrl |
string | 原始音频 URL |
vocalTrackUrl |
string | null | 人声轨道 URL |
accompanyTrackUrl |
string | null | 伴奏轨道 URL |
instrumentalTrackUrls |
array | 乐器轨道 URL 数组 |
zipUrl |
string | null | 打包下载 URL |
format |
string | 输出格式 |
完整调用示例
cURL
# 步骤1: 上传音频文件
curl --location 'https://ai.hikoon.com/api/open/v1/file/upload'
--header 'Authorization: Bearer bk_your_api_key_here'
--form 'file=@"/path/to/audio.mp3"'
--form 'dir="track-sep"'
# 返回: {"success":true,"message":"操作成功","data":{"url":"https://hikoon-ai.oss-cn-hangzhou.aliyuncs.com/track-sep/audio.mp3"}}
# 步骤2: 创建分离任务(使用上传返回的 URL)
curl --location 'https://ai.hikoon.com/api/open/v1/track-separation/split'
--header 'Authorization: Bearer bk_your_api_key_here'
--header 'Content-Type: application/json'
--data '{
"taskName": "测试音轨分离",
"originalFileUrl": "https://hikoon-ai.oss-cn-hangzhou.aliyuncs.com/track-sep/audio.mp3",
"separationType": 1,
"fileSize": 5242880,
"audioDuration": 180,
"format": "mp3"
}'
# 步骤3: 查询任务状态
curl --location 'https://ai.hikoon.com/api/open/v1/tasks/task_xxx'
--header 'Authorization: Bearer bk_your_api_key_here'
JavaScript
const API_BASE = 'https://ai.hikoon.com/api';
const API_KEY = 'bk_your_api_key_here';
// 步骤1: 上传文件
async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
formData.append('dir', 'track-sep');
const response = await fetch(`${API_BASE}/open/v1/file/upload`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`
},
body: formData
});
const result = await response.json();
return result.data.url; // 返回文件 URL
}
// 步骤2: 创建分离任务
async function createSeparationTask(params) {
const response = await fetch(`${API_BASE}/open/v1/track-separation/split`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(params)
});
return response.json();
}
// 步骤3: 查询任务状态
async function getTaskStatus(taskId) {
const response = await fetch(`${API_BASE}/open/v1/tasks/${taskId}`, {
headers: {
'Authorization': `Bearer ${API_KEY}`
}
});
return response.json();
}
// 轮询等待任务完成
async function waitForCompletion(taskId, maxWait = 600000, interval = 10000) {
const startTime = Date.now();
while (Date.now() - startTime < maxWait) {
const result = await getTaskStatus(taskId);
if (result.data.status === 'succeeded') {
return result.data;
}
if (result.data.status === 'failed') {
throw new Error(result.data.error || '任务处理失败');
}
await new Promise(resolve => setTimeout(resolve, interval));
}
throw new Error('任务超时');
}
// 完整流程示例
async function main() {
// 1. 上传文件(假设从 input[type=file] 获取)
// const fileInput = document.querySelector('#audio-file');
// const fileUrl = await uploadFile(fileInput.files[0]);
// 或者使用已有的 URL
const fileUrl = 'https://hikoon-ai.oss-cn-hangzhou.aliyuncs.com/track-sep/audio.mp3';
// 2. 创建任务
const createResult = await createSeparationTask({
taskName: '测试分离',
originalFileUrl: fileUrl,
separationType: 1,
fileSize: 5242880,
audioDuration: 180
});
console.log('任务已创建:', createResult.data.taskId);
// 3. 等待完成
const finalResult = await waitForCompletion(createResult.data.taskId);
console.log('分离完成:', finalResult.result);
// 4. 下载结果
console.log('人声:', finalResult.result.vocalTrackUrl);
console.log('伴奏:', finalResult.result.accompanyTrackUrl);
console.log('打包下载:', finalResult.result.zipUrl);
}
main().catch(console.error);
错误处理
| 错误码 | HTTP 状态 | 说明 |
|---|---|---|
UNAUTHORIZED_API_KEY |
401 | API Key 无效或缺失 |
INVALID_API_KEY |
401 | API Key 已失效 |
TASK_NOT_FOUND |
404 | 任务不存在 |
INSUFFICIENT_BALANCE |
400 | 余额不足 |
UPSTREAM_ERROR |
500 | 上游服务异常 |
输出约束
- 默认用中文输出,除非用户明确指定其他语言。
- 输出时不要只贴原始 JSON;要直接给出结论、关键字段和下一步。
- 不要泄露完整
BAIYIN_API_KEY。 - 不要伪造
taskId、结果链接、余额或处理结果。 - 如果处理过程中涉及文件上传,这属于内部步骤;对用户只说“上传成功”或“已开始处理”,不要说“已上传到公网”“已生成公网地址”“需要公网 URL”“公开可访问链接”等技术表述。
- 除非用户明确要求排查技术细节,否则不要向用户解释
originalFileUrl、data.url、OSS、CDN 或文件可访问性判断逻辑。
示例 1:缺少 API Key
用户输入:
帮我把这个音频做人声伴奏分离:https://example.com/demo.mp3
期望输出:
现在还没法开始分离,因为还没有配置百音开放平台的 API Key。 你可以先按下面步骤获取: 1. 打开 https://ai.hikoon.com/ 2. 进入「API Key 管理」 3. 创建并复制 API Key 然后设置: export BAIYIN_API_KEY="bk_xxx" 配置好之后,我就可以继续帮你处理这个音频。
示例 2:用户上传的是本地文件
用户输入:
帮我分离这个文件:/Users/demo/Desktop/song.mp3
期望输出:
收到,已经拿到你上传的本地音频,接下来会先处理并开始分离。 文件名:song.mp3 这类任务通常需要几分钟,处理好后我会把结果发给你。
示例 3:任务创建成功,但还未完成
已知接口返回:
{
"success": true,
"message": "操作成功",
"data": {
"requestId": "req_xxx",
"taskId": "task_xxx",
"capability": "track_separation.split",
"status": "queued"
}
}
期望输出:
已经开始处理这个音频了。 源文件名: song.mp3 taskId: task_xxx 现在还在处理中,结果还没出来,稍后可以继续查看进度。
示例 4:任务处理中
已知接口返回:
{
"success": true,
"message": "操作成功",
"data": {
"taskId": "task_xxx",
"status": "processing"
}
}
期望输出:
这个音频还在处理中。 源文件名: song.mp3 taskId: task_xxx 状态: 处理中 结果还没生成,请稍等一会儿再查看。
示例 5:人声伴奏分离成功
已知接口返回:
{
"success": true,
"message": "操作成功",
"data": {
"taskId": "task_xxx",
"status": "succeeded",
"result": {
"vocalTrackUrl": "https://oss.example.com/vocal.mp3",
"accompanyTrackUrl": "https://oss.example.com/accompany.mp3",
"zipUrl": "https://oss.example.com/result.zip"
}
}
}
期望输出:
分离完成了。 源文件名: song.mp3 taskId: task_xxx 人声: https://oss.example.com/vocal.mp3 伴奏: https://oss.example.com/accompany.mp3 打包下载: https://oss.example.com/result.zip
示例 6:任务失败
已知接口返回:
{
"success": true,
"message": "操作成功",
"data": {
"taskId": "task_zzz",
"status": "failed",
"error": "任务处理失败: 接口未返回有效的任务ID"
}
}
期望输出:
这次分离没有处理成功。 源文件名: song.mp3 taskId: task_zzz 原因:任务处理失败: 第三方接口未返回有效的任务ID 你可以稍后再试一次;如果还是失败,再检查一下音频文件本身是否有问题。
示例 7:接口直接返回错误
已知接口返回:
{
"success": false,
"message": "余额不足,请充值后重试",
"code": "INSUFFICIENT_BALANCE"
}
期望输出:
现在还不能继续分离,因为当前账户余额不足。 你可以先去百音开放平台充值,处理好之后再重新提交这个音频。 如果你愿意,也可以等你充值完成后再让我继续帮你处理。
注意事项
1. 余额检查
在创建任务前,建议先确认账户余额是否充足:
- 人声伴奏分离:消耗较少积分
如果余额不足,接口会返回 INSUFFICIENT_BALANCE 错误。
2. 文件要求
- 音频文件 URL 需要公开可访问
- 支持格式:MP3, WAV, FLAC
- 建议文件大小不超过 100MB
3. 处理时间
处理时间受多种因素影响(文件大小、服务器负载等):
| 分离类型 | 预估时间 | 建议超时设置 |
|---|---|---|
| 人声伴奏分离 | 1-5 分钟 | 10 分钟 |
4. 结果有效期
分离结果文件默认保留 7 天,请及时下载保存。
5. VIP 免费次数
VIP 用户享有每日免费次数:
- 可通过查询免费次数接口确认剩余次数
- 免费次数用尽后将扣除积分
热门AI工具
相关专题
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章