开放平台改词翻唱 v2 API
改词翻唱是把一首原唱音源与一份改写后的歌词组合,生成新的演唱音频。先了解下面的业务步骤,再按后文接口示例接入;也可以把文末的完整任务说明复制给 AI 编码代理。
改词翻唱的业务流程
-
选择原唱音源
从音乐库选歌、上传企业自己的音频,或解析抖音 / 哔哩哔哩 / 快手分享内容。
-
按需准备原唱歌词
手工改词时可跳过。需要 AI 写新歌词时,可从歌词库获取、粘贴或异步提取。
-
提供新歌词并提交
可粘贴新歌词,也可用 AI 根据原唱歌曲名称或原唱歌词及主题同步生成。提交翻唱时新歌词必填。
AI 写词需有原唱歌曲名称或原唱歌词,既可在请求中提供 musicName/correctLyric,也可复用草稿订单已保存的对应资料;两者都不是翻唱音频生成的必填项。真正提交翻唱时必填的是调整后的 modifiedLyricText。AI 生成歌词是同步接口,歌词提取是异步任务。
接入约定
企业 Token 可在开放平台的“开放平台”模块 → “我的团队”菜单中查看和复制。
- API 域名:
https://www.wechatscan.com,接口路径带/a前缀。 - JSON 请求使用
Content-Type: application/json,企业鉴权 Header 为token: YOUR_ENTERPRISE_TOKEN。 - 响应统一为
code、msg、data;code=200表示成功。 - 改词翻唱订单按私密方式处理。
第一步:选择原唱
方式一:从音乐库选歌
先搜索歌曲,搜索结果的 data.list 每项包含可直接传给解析接口的歌曲对象。page 和 limit 表示请求分页,total 是本页实际返回的候选歌曲数,不是音乐库全量匹配数;继续翻页直到 list 为空。
POST /a/open/karaoke/v2/search
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"keyword": "歌曲名或歌手",
"page": 1,
"limit": 20
}
{
"code": 200,
"msg": "成功",
"data": {
"page": 1,
"limit": 20,
"total": 1,
"list": [{
"mediaId": "搜索结果歌曲标识",
"name": "歌曲名",
"singer": "歌手",
"albumName": "专辑名",
"interval": "歌曲时长",
"lyric": "歌曲歌词",
"qualitys": ["标准音质"]
}]
}
}
song 至少需要包含搜索结果中的 mediaId;建议将 data.list 中的完整歌曲对象原样传入,避免自行重组时丢失候选信息。设置 purpose=audio 获取音源;响应的 data.url 可作为改词翻唱接口的 sourceUrl。企业接口直接使用 url,不返回代理地址。下例只展示识别歌曲所需的最小字段。
POST /a/open/karaoke/v2/resolve
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"song": { "mediaId": "搜索结果歌曲标识", "name": "歌曲名", "singer": "歌手" },
"purpose": "audio"
}
{
"code": 200,
"msg": "成功",
"data": {
"url": "https://media.example.com/source.mp3",
"downloadUrl": "https://media.example.com/source.mp3",
"quality": "标准音质",
"candidateName": "歌曲名",
"candidateSinger": "歌手",
"correctLyric": "歌曲歌词"
}
}
方式二:使用本地歌曲
先将本地音频上传到企业自己的 OSS 或对象存储,再把任务期间可访问的 HTTP/HTTPS 地址传给平台。开放平台不接收本地文件路径或 multipart 文件。
方式三:解析短视频
支持抖音、哔哩哔哩和快手分享链接或分享文本。解析成功后,将 extractUrl 传给改词翻唱接口。
POST /a/open/download/v2/extract
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"source": "短视频分享链接或分享文本"
}
{
"code": 200,
"msg": "成功",
"data": {
"extractUrl": "https://media.example.com/source.mp4",
"mediaType": "video",
"title": "视频标题"
}
}
三种音源最终都通过 create(直接提交)或 importRemoteMedia(先建草稿)传入,字段对应关系如下:
| 选择方式 | sourceType | sourceUrl | 补充字段 |
|---|---|---|---|
| 本地上传到企业 OSS | oss | 企业 OSS 音源地址 | musicName 可选歌曲名称 |
| 音乐库选歌 | karaoke | resolve 返回的 data.url | 无需额外字段 |
| 短视频解析 | shortVideo | extract 返回的 data.extractUrl | 建议传 mediaTypeHint: video |
第二步:按需准备原唱歌词
这一步可跳过,原唱歌词不是翻唱必填项。AI 写词时,原唱歌曲名称和原唱歌词至少提供一项;只有歌曲名称时,模型须能依据已有知识可靠识别旋律模板,否则返回无法生成。模型不会在此接口中联网搜索乐谱或歌曲。
方式一:从音乐库获取歌词
将音乐库搜索结果对象放入 song 调用歌词接口,至少提供 mediaId,读取 data.correctLyric。
POST /a/open/karaoke/v2/lyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"song": { "mediaId": "搜索结果歌曲标识", "name": "歌曲名", "singer": "歌手" }
}
{
"code": 200,
"msg": "成功",
"data": {
"correctLyric": "原唱第一句歌词\n原唱第二句歌词",
"candidateName": "歌曲名",
"candidateSinger": "歌手"
}
}
方式二:粘贴已有歌词
分步处理时调用 saveDraft 保存;字段 sourceLyricText 可省略,手工新歌词不依赖它。
POST /a/open/coverLyric/v2/saveDraft
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"orderUuid": "平台订单UUID",
"sourceLyricText": "可选的原唱歌词"
}
方式三:异步提取歌词
先导入音源,再启动提取。该任务需要时间;在“开放平台”模块 → “改词翻唱V2 API”菜单 → “设置”界面配置企业回调地址后,提取完成或失败时平台会发送明文 JSON 通知。未配置回调或未收到通知时,可调用订单详情查询当前状态。
若企业已准备原唱歌词,可在 importRemoteMedia 中传入可选字段 correctLyric;该歌词保存在订单中,供后续 AI 生成新歌词使用,不是翻唱 worker 的必填输入。
POST /a/open/coverLyric/v2/importRemoteMedia
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"sourceType": "oss",
"sourceUrl": "https://storage.example.com/audio/source.mp3",
"musicName": "歌曲名称"
}
{
"code": 200,
"msg": "原唱素材已导入,请输入新歌词;使用AI写词时再准备原唱歌词",
"data": {
"order": {
"orderUuid": "平台订单UUID",
"taskStage": "extract",
"status": "待分配",
"preparationStatus": "waiting_modified_lyrics",
"sourceLyricText": "",
"modifiedLyricText": ""
}
}
}
分步导入草稿时,importRemoteMedia 不按 clientRequestId 去重,不要发送空字符串并期待获得幂等保护。若请求超时且没有收到 orderUuid,先在企业订单列表中核对是否已创建订单;确认结果前不要自动重复导入。
POST /a/open/coverLyric/v2/startExtract
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{ "orderUuid": "平台订单UUID" }
提取阶段回调示例:
{
"orderUuid": "平台订单UUID",
"musicName": "歌曲名称",
"taskStage": "extract",
"status": "提取歌词完成",
"sourceLyricText": "识别出的原唱歌词",
"modifiedLyricText": "",
"outputUrl": "",
"cost": "0",
"billingStatus": "PENDING",
"state": "企业透传值"
}
回调不加密、不签名;平台发送 Content-Type: application/json。企业处理成功请返回 HTTP 2xx。平台可能因回调投递失败再次发送通知,企业应按 orderUuid 和 taskStage 幂等处理。请使用 HTTPS 接收回调;由于回调没有签名,不要仅凭回调内容授权交付或记账,执行相关操作前应使用企业 Token 调用 detail 核验订单。歌词提取失败后没有开放平台重提接口;请通过 detail 查看订单状态。
第三步:输入或生成新歌词
方式一:自己粘贴新歌词
最短路径是直接调用 create,无需先创建草稿。modifiedLyricText 必填;此接口不需要原唱歌词。
POST /a/open/coverLyric/v2/create
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"clientRequestId": "customer-order-0001",
"sourceType": "oss",
"sourceUrl": "https://storage.example.com/audio/source.mp3",
"musicName": "歌曲名称",
"modifiedLyricText": "改写第一句歌词\n改写第二句歌词",
"state": "customer-order-0001"
}
sourceType 支持 oss、karaoke、shortVideo。音源地址必须是平台可访问的公网 HTTP/HTTPS URL。歌词最多 8000 字符,改写歌词不能为空。
clientRequestId 为企业侧唯一请求号,最长 128 个字符。同一请求号和相同请求内容可用于识别重复的 create 请求;同一请求号不可用于不同内容。请求超时后先按请求号调用 searchOrder,不要换号重建;每个新的用户提交使用新的请求号。
{
"code": 200,
"msg": "已提交改词翻唱",
"data": {
"order": {
"orderUuid": "平台订单UUID",
"sourceType": "oss",
"musicName": "歌曲名称",
"fileName": "source.mp3",
"taskStage": "cover",
"status": "待分配",
"preparationStatus": "cover_queued",
"sourceLyricText": "",
"modifiedLyricText": "改写第一句歌词\n改写第二句歌词",
"outputUrl": "",
"state": "customer-order-0001",
"billingStatus": "PENDING"
}
}
}
code=200 表示已受理,不代表成品已生成。订单成功后查询或回调中的 outputUrl 获取成品。
翻唱完成回调示例:
{
"orderUuid": "平台订单UUID",
"musicName": "歌曲名称",
"status": "已完成",
"templateUuid": "模板UUID",
"taskStage": "cover",
"sourceLyricText": "原唱歌词;未提供时为空字符串",
"modifiedLyricText": "提交的改写歌词",
"outputUrl": "https://media.example.com/result.mp3",
"cost": "1",
"billingStatus": "SUCCESS",
"state": "企业透传值"
}
方式二:让 AI 根据歌曲名称或原唱歌词生成
AI 歌词接口为同步接口:请求返回时即包含生成歌词,不需要任务状态查询或回调。必须提供主题;请求中的 musicName、correctLyric 与草稿订单中已保存的歌曲名称、原唱歌词合计至少提供一项。歌曲名称可覆盖订单中的名称;传入尚未提交翻唱的订单号时,模型生成结果和歌曲名称都会保存到该订单。
POST /a/open/coverLyric/v2/generateLyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"clientRequestId": "ai-lyric-customer-order-0001",
"orderUuid": "已有草稿订单UUID,可选",
"musicName": "原唱歌曲名称;未填写时使用订单歌曲名称",
"correctLyric": "原唱第一句歌词\n原唱第二句歌词",
"theme": "希望表达的主题",
"targetLanguage": "Mandarin"
}
clientRequestId 是企业侧唯一请求号,最长 128 个字符。AI 生成可能耗时较长,客户端读取超时建议设为至少 300 秒。建议对已有草稿订单传入 orderUuid,这样即使请求超时也能通过 detail 查看已保存的生成结果;重试同一业务请求时应复用原请求号和完全相同的参数,不要并发重发。不同参数不可复用同一请求号,否则返回 720012;同一请求仍在处理时返回 720017。targetLanguage 可选:Mandarin、English、Russian、Japanese、Korean、Spanish,默认中文。AI 写词固定开启深度思考,无需传入开关。成功返回:
{
"code": 200,
"msg": "AI歌词已生成",
"data": {
"clientRequestId": "ai-lyric-customer-order-0001",
"orderUuid": "平台订单UUID",
"sourceLyricText": "原唱第一句歌词\n原唱第二句歌词",
"modifiedLyricText": "AI生成的改写歌词",
"musicName": "原唱歌曲名称",
"theme": "希望表达的主题",
"targetLanguage": "Mandarin"
}
}
请求字段使用 correctLyric,响应字段 sourceLyricText 是本次采用的原唱歌词,可能为空。歌曲名称和原唱歌词都可用于推断旋律模板:只有歌曲名称时,模型须能依据已有知识可靠识别旋律,否则返回 720018;只有原唱歌词时,按提供歌词的片段行结构和音节创作;两者都有时,原唱歌词用于校准歌曲版本和片段位置。AI 生成结果完全由模型决定,接口不校验生成歌词的音节,也不因匹配质量重新生成;模型请求或响应故障最多自动重试一次。返回 720018 后重复相同 clientRequestId 不会再次调用模型;修改输入后须使用新的请求号。有 orderUuid 时,成功生成的新歌词和歌曲名称会保存为订单草稿;之后调用 submitCover 时可省略歌词字段。没有订单号时,请保存响应中的 modifiedLyricText,创建或提交订单时传入。AI 接口失败会返回非 200 code 和 msg,没有异步任务需要查询。
端到端示例:点歌台 + AI 写词 + 翻唱
先按第一步搜索歌曲,并分别解析音源和歌词:音源调用 /a/open/karaoke/v2/resolve(purpose=audio)取得 data.url;歌词调用 /a/open/karaoke/v2/lyric 取得 data.correctLyric。将这两个结果用于以下分步流程。
- 导入音源和原唱歌词,保存响应中的
orderUuid:
POST /a/open/coverLyric/v2/importRemoteMedia
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"sourceType": "karaoke",
"sourceUrl": "点歌台 resolve 返回的 data.url",
"musicName": "歌曲名",
"correctLyric": "点歌台 lyric 返回的 data.correctLyric"
}
- 关联草稿生成中文歌词。成功响应中的
modifiedLyricText已保存到该订单:
POST /a/open/coverLyric/v2/generateLyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{
"clientRequestId": "ai-lyric-customer-order-0001",
"orderUuid": "上一步返回的订单UUID",
"theme": "希望表达的主题",
"targetLanguage": "Mandarin"
}
- AI 歌词确认后提交翻唱;若用户修改了歌词,先用
saveDraft保存新歌词:
POST /a/open/coverLyric/v2/submitCover
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{ "orderUuid": "上一步返回的订单UUID" }
submitCover 返回 code=200 只代表已受理。保存 orderUuid,通过 detail 轮询或接收回调;直到 preparationStatus=finished 且订单 status=已完成 后,读取 outputUrl。处理中不要重复提交。
POST /a/open/coverLyric/v2/detail
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{ "orderUuid": "上一步返回的订单UUID" }
{
"code": 200,
"msg": "成功",
"data": {
"order": {
"orderUuid": "平台订单UUID",
"status": "已完成",
"taskStage": "cover",
"preparationStatus": "finished",
"outputUrl": "https://media.example.com/result.mp3",
"billingStatus": "SUCCESS"
}
}
}
订单查询和响应字段
查询单笔订单:
POST /a/open/coverLyric/v2/detail
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json
{ "orderUuid": "平台订单UUID" }
订单主体位于 data.order。完整响应会包含下列状态和素材字段:
| 字段 | 含义 |
|---|---|
orderUuid | 平台订单号,后续接口使用。 |
id | 平台内部订单记录 ID;企业侧优先保存并使用 orderUuid。 |
sourceType、musicName、fileName、mediaType | 原唱来源、歌曲名称和音源信息;fileName 是导入后的素材文件名。 |
uploadUrl、fileExt、fileSize、duration | 已导入的音源地址及文件属性;无法识别时 duration 为 null。 |
sourceLyricText、modifiedLyricText、theme | 原唱歌词、新歌词和主题;原唱歌词可为空。 |
taskStage、status、preparationStatus | 当前阶段和处理状态。 |
outputUrl、failureRemark | 成功成品地址或失败原因。 |
mediaReady、sourceLyricReady、modifiedLyricReady、coverReady | 音源、原唱歌词、新歌词及提交翻唱所需素材是否就绪。原唱歌词可选;lyricsReady 为兼容字段,等同于 modifiedLyricReady。 |
canEditLyrics、canReplaceMedia、canExtractSourceLyric、canDelete | 订单当前允许的操作;提取原唱歌词仅在 AI 写词需要时使用。 |
billingStatus、costMoney | costMoney 是创建订单时锁定的单笔翻唱价格,不代表已扣款;只有 billingStatus=SUCCESS 才表示扣款成功,NOT_CHARGED 表示未扣款。回调字段 cost 是本次实际扣款金额,失败或歌词提取阶段为 0。 |
state | 企业提交的透传字段。 |
准备好音源和新歌词后订单即为 ready_to_submit;缺少新歌词时为 waiting_modified_lyrics。也可按企业请求号查询订单列表:GET /a/open/coverLyric/v2/searchOrder?page=1&limit=20&clientRequestId=customer-order-0001。响应的 data 包含 total 和 list。
分步接口速查
| 接口 | 用途 | 关键请求字段 | 成功响应 |
|---|---|---|---|
POST /a/open/coverLyric/v2/importRemoteMedia | 创建草稿并导入原唱音源。 | sourceType、sourceUrl;可选 musicName、correctLyric(供 AI 写词)、state。 | data.order.orderUuid、订单状态和歌曲名称。 |
POST /a/open/coverLyric/v2/startExtract | 异步提取原唱歌词。 | orderUuid | data.orderUuid、taskStage、status。 |
POST /a/open/coverLyric/v2/saveDraft | 保存歌词或主题。 | orderUuid;可选 sourceLyricText、modifiedLyricText、theme。 | data.order。 |
POST /a/open/coverLyric/v2/generateLyric | 同步 AI 生成改写歌词。 | 必填 clientRequestId、theme;musicName/correctLyric 与草稿中已有资料合计至少一项;可选 orderUuid、targetLanguage。 | data.modifiedLyricText、data.musicName。 |
POST /a/open/coverLyric/v2/submitCover | 提交分步订单开始翻唱。 | orderUuid;可选 modifiedLyricText、sourceLyricText、theme。 | data.order。 |
POST /a/open/coverLyric/v2/detail | 查询单笔订单。 | orderUuid | data.order。 |
状态和计费
taskStage=extract 表示原唱歌词提取阶段,taskStage=cover 表示翻唱阶段。只有生成有效翻唱成品后计费;歌词搜索、歌词提取、AI 写词以及失败任务不计费。costMoney 是创建订单时确定的单笔翻唱价格快照,失败订单仍可能显示该价格;实际扣款以 billingStatus=SUCCESS 为准。
preparationStatus=cover_queued 或 covering 表示翻唱处理中;finished 且 status=已完成 表示成品生成完成,读取 outputUrl。生成状态与结算状态彼此独立:billingStatus=PENDING 表示尚未确认,SUCCESS 表示扣款成功,NOT_CHARGED 表示未扣款,FAILED 表示结算未成功确认。
若订单已完成且有 outputUrl,但 billingStatus=FAILED,不要重新创建或提交翻唱,也不要仅凭 costMoney 判断实际扣款。保存 orderUuid,通过 detail 核对最新状态,并联系平台处理结算核对;是否向终端用户交付成品按双方业务约定执行。
请求号、超时和重试
| 接口 | 请求号规则 | 超时后的处理 |
|---|---|---|
create | 必填 clientRequestId;同一请求号仅用于相同请求内容。 | 用同一请求号调用 searchOrder 查找订单;不要换请求号重复建单。 |
草稿 importRemoteMedia | 当前草稿导入不按 clientRequestId 去重。 | 若没有收到 orderUuid,先核对企业订单列表;确认是否建单前不要自动重试。 |
generateLyric | 必填 clientRequestId;相同业务请求复用请求号和参数。 | 已关联草稿时用 orderUuid 调用 detail 查看已保存结果;720017 表示请求仍在处理。 |
submitCover | 使用已有 orderUuid,不依赖请求号防重。 | 用 detail 确认是否已进入队列或完成;不要自动重复提交。 |
可选字段无值时应省略,不要传空字符串;每个新的用户操作使用新的 clientRequestId。同一逻辑请求重试时才复用原请求号和完全相同的请求内容。
常见错误
720001:请求参数、来源类型或文件格式不合法;远程素材不能超过 100 MB。720002:订单不存在,或订单不属于当前企业。720006:AI 歌词生成缺少歌曲名称和原唱歌词。720007:缺少必填的新歌词。720009:歌词包含无法处理的内容。720011:订单当前状态不允许此操作。720012:幂等请求号已用于不同内容,请为新请求生成新号码。720015:AI 生成主题不能为空。720101:音源 URL 无效或不可访问。720102:远程素材下载失败;检查 URL 是否公网可访问、未过期且无需登录。720103:素材转存结果不可用;检查素材格式后再发起,仍失败请联系平台。720104:素材导入过程失败;先核对企业订单列表,避免不确定时重复导入。720016:AI 歌词生成或结果保存失败;关联草稿时查询订单详情,仍无法确认时联系平台处理。720018:模型无法根据歌曲名称或原唱歌词确定可靠的旋律模板;请补充或校正原唱歌曲名称/歌词,调整后使用新的请求号。720017:相同 AI 歌词请求仍在处理中;避免并发重复请求,使用草稿订单时可查询订单详情。
复制给 AI 编码代理
将下面代码框中的任务说明完整复制到企业自己的 AI 编码代理。说明包含业务流程、接口地址、关键字段和安全要求,可让代理先检查现有项目,再完成实际接入。
请在当前项目中实际接入“深度音频开放平台改词翻唱 v2”,先检查项目现有的前后端结构、配置管理、文件上传和任务状态展示方式,再按现有技术栈实现,不要只生成方案或独立 Demo。
接入文档:https://www.deepvoicefix.com/docs/open-cover-lyric-v2-ai-integration.html
【连接与鉴权】
- API_BASE=https://www.wechatscan.com/a
- 所有接口使用 JSON;请求头为 Content-Type: application/json 和 token: 企业Token。
- 企业 Token 在深度音频开放平台的“开放平台”模块 / “我的团队”菜单中查看。
- Token 必须保存在本项目服务端环境变量或密钥配置中,所有平台 API 从服务端调用;不要放进浏览器代码、日志或错误提示。
- 平台响应结构为 code、msg、data;只有 code=200 才算请求成功。失败时向用户显示可理解的错误,不要把成功受理误报为成品完成。
【用户业务流程】
1. 选择原唱音源,三选一:音乐库选歌、用户上传到企业自己的 OSS/对象存储、解析抖音/哔哩哔哩/快手分享内容。平台需要可访问的公网 HTTP/HTTPS 音源 URL。
2. 原唱歌词是可选资料。用户手工输入新歌词时可跳过;如果用户选择 AI 生成新歌词,歌曲名称和原唱歌词至少提供一项。原唱歌词可以是所选歌曲的片段;只有歌曲名称时,模型必须能可靠识别旋律模板,否则生成失败。
3. 用户输入或确认新歌词后提交翻唱。提交翻唱时改写后的歌词 modifiedLyricText 必填;原唱歌词 correctLyric 只用于 AI 生成歌词,不是翻唱音频任务的必填参数。
【选歌与歌词接口】
- POST /open/karaoke/v2/search,请求 {"keyword":"歌曲名或歌手","page":1,"limit":20}。候选歌曲在 data.list;保留选中的完整歌曲对象,并将该对象原样传给 resolve 和 lyric,不要自行构造精简对象。
- POST /open/karaoke/v2/resolve,请求 {"song":歌曲对象,"purpose":"audio"}。将响应 data.url 作为后续 sourceUrl。
- POST /open/karaoke/v2/lyric,请求 {"song":歌曲对象}。如有歌词,读取 data.correctLyric。
- POST /open/download/v2/extract,请求 {"source":"短视频分享链接或分享文本"}。将响应 data.extractUrl 作为 sourceUrl,并按视频来源传 mediaTypeHint="video"。
- 用户上传本地音频时,由当前项目上传至企业自己的对象存储,再把可访问的音频 URL 传给平台;不要向平台传本机文件路径或 multipart 文件。
【AI 生成新歌词】
- POST /open/coverLyric/v2/generateLyric 是同步接口:等待响应,直接读取 data.modifiedLyricText;不要为 AI 生成接口实现回调或异步任务轮询。
- 请求必填 clientRequestId(企业侧唯一请求号)、theme;musicName/correctLyric 与草稿订单中已保存的对应资料合计至少一项。传入的 musicName 会覆盖并保存为订单歌曲名称;未传时使用草稿订单中已保存的名称。correctLyric 可为歌曲片段。可选 targetLanguage(Mandarin、English、Russian、Japanese、Korean、Spanish,默认 Mandarin);AI 写词固定开启深度思考。
- 生成成功时直接读取 data.modifiedLyricText;生成完全依赖大模型,API 不校验音节匹配,也不因匹配问题重新生成。有效的 unavailable 结果不重试;模型请求或响应故障最多自动重试一次。当请求带有效 orderUuid 时,歌词和歌曲名称保存到草稿;没有草稿时,使用返回的 modifiedLyricText 创建翻唱订单。
【提交翻唱和查询结果】
- 最短路径:POST /open/coverLyric/v2/create,请求包含 clientRequestId、sourceType、sourceUrl、modifiedLyricText;sourceType 为 oss、karaoke 或 shortVideo。musicName、mediaTypeHint、state 可按来源和项目需要提供。musicName 会保存在订单中,并在查询和回调中返回;响应中的 fileName 表示实际素材文件名。
- 回调地址在深度音频开放平台“开放平台”模块 / “改词翻唱V2 API”菜单 / “设置”界面配置。分步路径:POST /open/coverLyric/v2/importRemoteMedia 创建草稿并导入音源;需要歌词提取时再 POST /open/coverLyric/v2/startExtract,body 为 {"orderUuid":"订单UUID"}。每个草稿只能启动一次歌词提取。提取是异步任务,可接收明文 JSON 回调,也可 POST /open/coverLyric/v2/detail 查询。回调无需加密或签名,企业回调成功返回 HTTP 2xx;平台可能重复投递通知,企业按 orderUuid 和 taskStage 幂等消费。歌词提取失败没有开放平台重提接口,查询订单状态即可。
- 分步订单可用 POST /open/coverLyric/v2/saveDraft 保存歌词;AI 生成结果已保存到草稿时,用 POST /open/coverLyric/v2/submitCover 提交翻唱,body 至少包含 orderUuid。具体字段以本文对应接口示例为准。
- create 或 submitCover 返回 code=200 只代表已受理。通过 POST /open/coverLyric/v2/detail 查询订单,成品生成后读取 data.order.outputUrl。也可按本文说明调用 searchOrder 按 clientRequestId 查订单。
- 回调包含 orderUuid、taskStage、status、outputUrl、cost、billingStatus、state 等字段。taskStage=extract 是歌词提取,taskStage=cover 是翻唱。
【实现要求】
- 在现有产品中提供完整的选择音源、歌词准备、AI 写词/手工改词、提交、状态查看和成品播放或下载流程;避免要求用户填写可由前一步自动获得的字段。
- create 和 generateLyric 使用 clientRequestId;同一逻辑请求重试时复用请求号和原参数。草稿 importRemoteMedia 不按 clientRequestId 去重,超时且未取得 orderUuid 时先核对企业订单列表,不要自动重复导入。submitCover 超时后先通过 detail 查询,不要自动重复提交。
- AI 写词应尽量关联草稿订单,以便通过 detail 获取已保存结果。可选字段无值时省略,不要发送空字符串。
- costMoney 是创建订单时确定的单笔翻唱价格,不等同于已扣款;只有 billingStatus=SUCCESS 表示扣款成功。finished 与 billingStatus=FAILED 可以同时出现;此时不要重提任务,需核对订单和结算。回调里的 cost 是实际扣款金额。
- 回调未签名;使用 HTTPS 接收,按 orderUuid 和 taskStage 幂等处理。交付或记账前使用 detail 核验订单,不要仅凭回调内容做决定。
- duration 无法获取时按 null 处理。不要把 null 显示成 0 秒。
- 为平台请求添加服务端日志时屏蔽 token、音源签名参数和歌词正文。遵循项目现有的鉴权、错误处理和测试约定,并验证主要成功与失败路径。
请先阅读接入文档中对应接口的完整请求/响应示例,再完成实现;如果当前项目结构与某项要求冲突,优先沿用项目现有架构,并说明具体差异。