API 文档

API 文档

使用 AI LRC Generator API,以编程方式从音频生成时间轴同步的 LRC 歌词文件。

概览

AI LRC Generator API 支持上传音视频文件,异步返回带时间戳的 LRC 歌词。标准流程如下:

  1. 上传 + 触发 — POST /api/v2/open/audio_analysis(一步到位,推荐)
  2. 轮询结果 — GET /api/v2/open/audio_tasks/:id,直到 status 变为 COMPLETED

Base URL: https://ailrcgenerator.com

API 支持 v1.4.0 的逐词时间轴、独立发音标注和参考歌词校对能力。任务完成后还可按需生成标准 LRC、Enhanced LRC、TXT、SRT、ASS、WebVTT 或 TTML 内容。

认证

所有请求须在请求头中携带 API Key:

Authorization: Bearer ailrc_sk_YOUR_KEY

在开发者 API 页面创建和管理 API Key。密钥仅在创建时显示一次,请立即保存。

请像对待密码一样保管 API Key,切勿将其暴露在客户端代码或公开的代码仓库中。

频率限制

API 目前处于公测阶段。我们会根据服务承载能力和实际使用情况调整限额;如有更高频率需求,请联系支持。

通用请求限流是较宽松的防滥用兜底,统计任务提交、任务列表、状态轮询等所有开放 API 调用。它采用三层滑动窗口机制(分钟/小时/天),任一层触发即返回 429。

等级每分钟每小时每天
免费306003,000
Pro3006,00030,000
Premium1,00020,000100,000

分析任务提交是主要的套餐限额,统计范围仅包括 POST /api/v2/open/audio_analysis:

等级每分钟每小时每天队列保护上限
免费3205010
Pro601,0005,00050
Premium2004,00020,000200

每次响应都会返回当前限额状态:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1745024400

超出限制时返回 429 Too Many Requests,并附带 Retry-After 响应头(等待秒数)。

接口列表

触发分析

上传音视频文件并立即启动 AI 分析(一步模式)。

POST /api/v2/open/audio_analysis
Content-Type: multipart/form-data

请求参数

字段类型必填说明
fileFile✓支持 mp3、wav、ogg、flac、mp4、webm、mov
fileNamestring—自定义文件名,不传则使用原始文件名
metadataJSON 字符串—序列化为 JSON 的 AI 分析选项

metadata 字段

字段类型默认值说明
enableMetadatabooleantrue生成歌词时是否使用音频内嵌元数据
referencestring""参考歌词;同时用于辅助识别和生成确定性的逐行校对结果,最多 20,000 字符、1,000 行
languagestringauto歌词语言代码,传 auto 时自动检测
enableChorusbooleanfalse是否启用演唱者及合唱标注
timingGranularitystringlineline 生成标准行级 LRC;word 生成包含 <mm:ss.xx> 逐词时间的 Enhanced LRC
enableTranslationbooleanfalse是否同时生成原文和译文
sourceLanguagestringauto原歌词的语言,用于指导翻译和发音标注;传 auto 时由 AI 自动识别
targetLanguagestring—译文要输出成的语言;enableTranslation 为 true 时必填,不能为 auto
enablePronunciationGuidebooleanfalse是否生成发音标注;可独立于歌词翻译启用
pronunciationSchemestringauto发音方案:auto、romaji、kana、pinyin、bopomofo、jyutping、korean-rr、ipa

timingGranularity: "word" 的逐词时间效果取决于当前使用的 AI 模型;实际精度也会受到音频质量影响,建议生成后进行校对。

语言代码

sourceLanguage 表示原歌词使用的语言。明确知道原歌词语言时,指定代码有助于 AI 生成更准确的翻译或发音;不确定时可传 auto 自动识别。

targetLanguage 表示启用歌词翻译后,译文需要输出成的语言。它仅在 enableTranslation: true 时使用,此时必须提供一个明确的语言代码,不能传 auto。发音标注的输出形式由 pronunciationScheme 控制,不应将发音方案填写到 targetLanguage。

代码含义sourceLanguagetargetLanguage
auto由 AI 自动识别✓—
ar阿拉伯语✓✓
bn孟加拉语✓✓
bg保加利亚语✓✓
zh-cn简体中文✓✓
zh-tw繁体中文✓✓
zh-yue粤语✓✓
hr克罗地亚语✓✓
cs捷克语✓✓
da丹麦语✓✓
nl荷兰语✓✓
en英语✓✓
et爱沙尼亚语✓✓
fi芬兰语✓✓
fr法语✓✓
de德语✓✓
el希腊语✓✓
he希伯来语✓✓
hi印地语✓✓
hu匈牙利语✓✓
id印度尼西亚语✓✓
it意大利语✓✓
ja日语✓✓
ko韩语✓✓
lv拉脱维亚语✓✓
lt立陶宛语✓✓
no挪威语✓✓
pl波兰语✓✓
pt葡萄牙语✓✓
ro罗马尼亚语✓✓
ru俄语✓✓
sr塞尔维亚语✓✓
sk斯洛伐克语✓✓
sl斯洛文尼亚语✓✓
es西班牙语✓✓
sw斯瓦希里语✓✓
sv瑞典语✓✓
th泰语✓✓
tr土耳其语✓✓
uk乌克兰语✓✓
vi越南语✓✓

为保持旧版调用兼容,历史 targetLanguage 值 zh-pinyin 和 yue-pronunciation 仍会分别按拼音和粤拼发音标注处理,但不会生成译文。新接入请使用 enablePronunciationGuide 和 pronunciationScheme。

发音方案

pronunciationScheme 仅在 enablePronunciationGuide: true 时生效:

值含义
auto根据源语言自动选择:日语使用罗马音、普通话使用拼音、粤语使用粤拼、韩语使用修订罗马字,其他语言使用 IPA
romaji日语赫本式罗马音;按实际读音处理助词 は、へ、を,并以 ou、uu 等形式保留长音
kana日语假名注音;结合语境和实际演唱将汉字转为平假名,按读音处理助词,并在适合时保留片假名外来词
pinyin带声调符号的普通话汉语拼音
bopomofo带声调符号的国语注音符号(Zhuyin)
jyutping粤语粤拼罗马化方案(Jyutping)
korean-rr韩语修订罗马字;依据标准韩语发音,并考虑连音和音变规则
ipa国际音标(International Phonetic Alphabet),适用于需要通用语音表示的语言

文件大小限制: 免费 10 MB · Pro 30 MB · Premium 60 MB

请求示例

curl -X POST https://ailrcgenerator.com/api/v2/open/audio_analysis \
  -H "Authorization: Bearer ailrc_sk_YOUR_KEY" \
  -F "[email protected]" \
  -F "fileName=My Song" \
  -F 'metadata={"enableMetadata":true,"reference":"参考歌词第一行\\n参考歌词第二行","language":"auto","enableChorus":true,"timingGranularity":"word","enableTranslation":true,"sourceLanguage":"auto","targetLanguage":"en","enablePronunciationGuide":true,"pronunciationScheme":"auto"}'

响应示例

{
  "code": 0,
  "message": "ok",
  "items": {
    "taskId": "cm4abc123",
    "traceId": "cm4abc123",
    "status": "QUEUED",
    "queuePosition": 2,
    "remainingCredits": 46,
    "fileName": "song.mp3"
  }
}

查询任务状态

获取任务的当前状态与结果。请轮询此接口直到 status 变为 COMPLETED 或 FAILED。参见轮询指南了解推荐间隔。

GET /api/v2/open/audio_tasks/:id

请求示例

curl https://ailrcgenerator.com/api/v2/open/audio_tasks/cm4abc123 \
  -H "Authorization: Bearer ailrc_sk_YOUR_KEY"

响应字段

字段类型返回时机说明
taskIdstring始终返回分析任务 ID
fileNamestring始终返回上传文件名
statusstring始终返回PENDING、QUEUED、PROCESSING、COMPLETED 或 FAILED
queuePositionnumber/null排队中可获取时返回当前队列位置
progressnumber处理中Worker 报告的处理进度
resultobject已完成包含生成的歌词、能力标记,以及可选的参考校对与导出结果
errorstring失败经过规范化的公开错误信息
creditsUsednumber已完成当前任务实际扣除的积分
completedAtstring已完成ISO 8601 格式的完成时间

响应 — 排队中

{
  "code": 0,
  "items": {
    "taskId": "cm4abc123",
    "status": "QUEUED",
    "queuePosition": 2,
    "fileName": "song.mp3"
  }
}

响应 — 处理中

{
  "code": 0,
  "items": {
    "taskId": "cm4abc123",
    "status": "PROCESSING",
    "progress": 35,
    "fileName": "song.mp3"
  }
}

响应 — 已完成

{
  "code": 0,
  "items": {
    "taskId": "cm4abc123",
    "status": "COMPLETED",
    "result": {
      "lrc": "[00:00.00]<00:00.00>第一行\n[00:05.23]<00:05.23>第二行",
      "chorusLabelsDetected": false
    },
    "creditsUsed": 6,
    "completedAt": "2026-04-19T10:02:30Z",
    "fileName": "song.mp3"
  }
}

响应 — 失败

{
  "code": 0,
  "items": {
    "taskId": "cm4abc123",
    "status": "FAILED",
    "error": "PROCESSING_FAILED",
    "fileName": "song.mp3"
  }
}

result 字段

字段返回条件说明
lrc始终返回最终 LRC;逐词模式下包含 <mm:ss.xx> 内联时间戳
chorusLabelsDetected始终返回是否检测到 [Singer1]、[Singer2] 或合唱标签
rawLrc请求中提供了 reference用于校对的原始识别 LRC
referenceComparison请求中提供了 reference识别歌词与参考歌词的摘要及逐行差异
export查询时提供了 exportFormat按指定格式和内容选项生成的文件名、MIME 类型与文本内容

发音标注会使用相同的行时间戳紧跟原文,并在文件开头加入 [ailrcgenerator:pronunciation] 标记。启用翻译时,译文继续跟在发音行之后。发音标注和翻译可以独立启用。

参考歌词校对结果

提供 metadata.reference 后,API 除了将参考文本用于辅助识别,还会在任务完成时返回确定性的逐行对照结果:

{
  "result": {
    "lrc": "[00:12.30]오늘도 너를 생가해",
    "chorusLabelsDetected": false,
    "rawLrc": "[00:12.30]오늘도 너를 생가해",
    "referenceComparison": {
      "summary": {
        "totalRecognized": 1,
        "totalReference": 1,
        "exact": 0,
        "formatOnly": 0,
        "different": 1,
        "recognizedOnly": 0,
        "referenceOnly": 0
      },
      "changes": [
        {
          "id": "recognized-0-reference-0",
          "status": "different",
          "recognizedLineIndex": 0,
          "lrcLineIndex": 0,
          "referenceLineIndex": 0,
          "timestamp": "[00:12.30]",
          "recognizedText": "오늘도 너를 생가해",
          "referenceText": "오늘도 너를 생각해",
          "alignmentConfidence": 0.91,
          "recommendation": "high-confidence-replace",
          "similarity": 0.9,
          "canApply": true
        }
      ]
    }
  }
}

referenceComparison 由汇总信息 summary 和非完全一致项 changes 组成。完全一致的行只计入 summary.exact,不会出现在 changes 中。

summary 字段

字段含义
totalRecognized原始识别 LRC 中参与比较的有效歌词行总数
totalReference参考歌词中参与比较的有效歌词行总数;空行和 LRC 元数据行不计入
exact原文与参考文本完全一致的已对齐行数
formatOnly忽略大小写、全半角、空格和常见标点后文字一致,仅格式不同的行数
different已对齐但文字内容不同的行数
recognizedOnly只在识别结果中存在、未找到参考对应行的行数
referenceOnly只在参考歌词中存在、未找到识别对应行的行数

changes[] 字段

字段类型含义
idstring当前比较结果中差异项的唯一标识,由配对行索引生成;输入歌词改变后该值也可能改变
statusstring差异类型:format-only、different、recognized-only 或 reference-only
recognizedLineIndexnumber识别结果有效歌词行中的索引,从 0 开始;参考独有行不返回
lrcLineIndexnumber该识别行在 rawLrc 全部文本行中的索引,从 0 开始,可用于定位原始 LRC;参考独有行不返回
referenceLineIndexnumber参考歌词有效歌词行中的索引,从 0 开始;识别独有行不返回
timestampstring可用的 LRC 时间戳。通常来自识别行;参考独有行只有自带时间戳时才返回
recognizedTextstring去除时间戳、演唱者标签和逐词时间标签后的识别文本;参考独有行不返回
referenceTextstring去除时间戳、演唱者标签和逐词时间标签后的参考文本;识别独有行不返回
alignmentConfidencenumber/null两行对齐可靠度,范围 0–1;未配对行返回 null。它不表示参考歌词内容一定正确
similaritynumber基于规范化文字编辑距离计算的字符相似度,范围 0–1;不能单独作为自动采用依据
recommendationstring处理建议:high-confidence-replace、timed-reference-insert 或 manual-review
canApplyboolean是否具有可直接应用参考文本所需的位置或时间信息;它不代表应该在无人确认时自动应用

status 的含义:

值含义
format-only两行文字规范化后相同,仅大小写、全半角、空格或标点不同
different两行已对齐,但文字内容存在差异
recognized-only该行只存在于识别结果中
reference-only该行只存在于参考歌词中

recommendation 的含义:

值含义
high-confidence-replace两行对齐可靠度不低于 0.8,可建议用参考文本替换识别文本,同时保留原时间戳和演唱者标签
timed-reference-insert该行只存在于参考歌词且参考行自带时间戳,可建议按此时间戳新增歌词行
manual-review对齐存在歧义、只有识别行,或参考独有行没有时间戳,需要结合音频人工核对

API 只返回比较和建议,不会自动修改 result.lrc。即使 canApply 为 true 或建议为 high-confidence-replace,调用方也应让用户确认后再自行更新歌词文本。

按指定格式导出

任务完成后,在查询任务状态时传入 exportFormat,响应的 result.export 会包含转换后的文本。未传 exportFormat 时响应结构、状态码和处理逻辑均保持不变,现有调用方无需修改。

GET /api/v2/open/audio_tasks/:id?exportFormat=srt&exportIncludeTranslation=true&exportIncludePronunciation=false&exportIncludeChorusLabels=false
参数默认值说明
exportFormat—lrc、lrc-standard、txt、srt、ass、webvtt 或 ttml
exportIncludeTranslationtrue是否包含译文
exportIncludePronunciationtrue是否包含发音标注
exportIncludeChorusLabelstrue是否包含演唱者及合唱标签

lrc 会保留 Enhanced LRC 逐词时间,lrc-standard 会移除逐词时间。字幕格式会自动移除逐词标签,并使用下一行开始时间作为当前字幕的结束时间;最后一条字幕默认持续 3 秒。

curl "https://ailrcgenerator.com/api/v2/open/audio_tasks/cm4abc123?exportFormat=srt&exportIncludeTranslation=true&exportIncludePronunciation=false&exportIncludeChorusLabels=false" \
  -H "Authorization: Bearer ailrc_sk_YOUR_KEY"
{
  "code": 0,
  "items": {
    "taskId": "cm4abc123",
    "status": "COMPLETED",
    "result": {
      "lrc": "[00:00.00]第一行\n[00:05.23]第二行",
      "chorusLabelsDetected": false,
      "export": {
        "format": "srt",
        "fileName": "song.srt",
        "mimeType": "application/x-subrip;charset=utf-8",
        "content": "1\n00:00:00,000 --> 00:00:05,230\n第一行\n\n2\n00:00:05,230 --> 00:00:08,230\n第二行"
      }
    },
    "creditsUsed": 6,
    "completedAt": "2026-04-19T10:02:30Z",
    "fileName": "song.mp3"
  }
}

获取任务列表

分页返回当前账号下的音频任务列表。

GET /api/v2/open/audio_tasks

查询参数

参数默认值说明
page1页码
limit20每页最多 100 条
status—状态过滤:PENDING QUEUED PROCESSING COMPLETED FAILED

请求示例

curl "https://ailrcgenerator.com/api/v2/open/audio_tasks?page=1&limit=20&status=COMPLETED" \
  -H "Authorization: Bearer ailrc_sk_YOUR_KEY"

删除任务

删除指定任务及其关联数据。

DELETE /api/v2/open/audio_tasks/:id

状态为 PROCESSING 或 QUEUED 的任务无法删除。

请求示例

curl -X DELETE https://ailrcgenerator.com/api/v2/open/audio_tasks/cm4abc123 \
  -H "Authorization: Bearer ailrc_sk_YOUR_KEY"

错误码参考

所有错误均使用统一格式返回:

{
  "code": 403,
  "message": "Not enough credits",
  "businessCode": "not_enough_credits"
}
HTTPbusinessCode含义
400—请求参数错误或缺少必填字段
401—API Key 缺失、无效、已撤销或已过期
403not_enough_credits积分不足
403level_not_enough文件超出当前等级的大小限制
404—任务不存在或不属于当前账号
429—超出频率限制,请查看 Retry-After
500—服务器内部错误

轮询指南

AI 分析为异步任务,通常在 30–120 秒内完成,取决于文件时长。

推荐策略: 起始间隔 3 秒,指数退避至最长 10 秒,最多尝试 60 次(约 10 分钟)。

async function pollTask(taskId, apiKey) {
  let delay = 3000;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, delay));
    const res = await fetch(
      `https://ailrcgenerator.com/api/v2/open/audio_tasks/${taskId}`,
      { headers: { Authorization: `Bearer ${apiKey}` } },
    );
    const { items } = await res.json();
    if (items.status === "COMPLETED") return items.result.lrc;
    if (items.status === "FAILED") throw new Error(items.error ?? "分析失败");
    delay = Math.min(delay * 1.5, 10000);
  }
  throw new Error("等待超时");
}

需要帮助?联系支持 · Webhook 支持即将推出。