API 文档
使用 AI LRC Generator API,以编程方式从音频生成时间轴同步的 LRC 歌词文件。
概览
AI LRC Generator API 支持上传音视频文件,异步返回带时间戳的 LRC 歌词。标准流程如下:
- 上传 + 触发 —
POST /api/v2/open/audio_analysis(一步到位,推荐) - 轮询结果 —
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。
| 等级 | 每分钟 | 每小时 | 每天 |
|---|---|---|---|
| 免费 | 30 | 600 | 3,000 |
| Pro | 300 | 6,000 | 30,000 |
| Premium | 1,000 | 20,000 | 100,000 |
分析任务提交是主要的套餐限额,统计范围仅包括 POST /api/v2/open/audio_analysis:
| 等级 | 每分钟 | 每小时 | 每天 | 队列保护上限 |
|---|---|---|---|---|
| 免费 | 3 | 20 | 50 | 10 |
| Pro | 60 | 1,000 | 5,000 | 50 |
| Premium | 200 | 4,000 | 20,000 | 200 |
每次响应都会返回当前限额状态:
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
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | File | ✓ | 支持 mp3、wav、ogg、flac、mp4、webm、mov |
fileName | string | — | 自定义文件名,不传则使用原始文件名 |
metadata | JSON 字符串 | — | 序列化为 JSON 的 AI 分析选项 |
metadata 字段
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableMetadata | boolean | true | 生成歌词时是否使用音频内嵌元数据 |
reference | string | "" | 参考歌词;同时用于辅助识别和生成确定性的逐行校对结果,最多 20,000 字符、1,000 行 |
language | string | auto | 歌词语言代码,传 auto 时自动检测 |
enableChorus | boolean | false | 是否启用演唱者及合唱标注 |
timingGranularity | string | line | line 生成标准行级 LRC;word 生成包含 <mm:ss.xx> 逐词时间的 Enhanced LRC |
enableTranslation | boolean | false | 是否同时生成原文和译文 |
sourceLanguage | string | auto | 原歌词的语言,用于指导翻译和发音标注;传 auto 时由 AI 自动识别 |
targetLanguage | string | — | 译文要输出成的语言;enableTranslation 为 true 时必填,不能为 auto |
enablePronunciationGuide | boolean | false | 是否生成发音标注;可独立于歌词翻译启用 |
pronunciationScheme | string | auto | 发音方案:auto、romaji、kana、pinyin、bopomofo、jyutping、korean-rr、ipa |
timingGranularity: "word" 的逐词时间效果取决于当前使用的 AI
模型;实际精度也会受到音频质量影响,建议生成后进行校对。
语言代码
sourceLanguage 表示原歌词使用的语言。明确知道原歌词语言时,指定代码有助于 AI 生成更准确的翻译或发音;不确定时可传 auto 自动识别。
targetLanguage 表示启用歌词翻译后,译文需要输出成的语言。它仅在 enableTranslation: true 时使用,此时必须提供一个明确的语言代码,不能传 auto。发音标注的输出形式由 pronunciationScheme 控制,不应将发音方案填写到 targetLanguage。
| 代码 | 含义 | sourceLanguage | targetLanguage |
|---|---|---|---|
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"响应字段
| 字段 | 类型 | 返回时机 | 说明 |
|---|---|---|---|
taskId | string | 始终返回 | 分析任务 ID |
fileName | string | 始终返回 | 上传文件名 |
status | string | 始终返回 | PENDING、QUEUED、PROCESSING、COMPLETED 或 FAILED |
queuePosition | number/null | 排队中 | 可获取时返回当前队列位置 |
progress | number | 处理中 | Worker 报告的处理进度 |
result | object | 已完成 | 包含生成的歌词、能力标记,以及可选的参考校对与导出结果 |
error | string | 失败 | 经过规范化的公开错误信息 |
creditsUsed | number | 已完成 | 当前任务实际扣除的积分 |
completedAt | string | 已完成 | 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[] 字段
| 字段 | 类型 | 含义 |
|---|---|---|
id | string | 当前比较结果中差异项的唯一标识,由配对行索引生成;输入歌词改变后该值也可能改变 |
status | string | 差异类型:format-only、different、recognized-only 或 reference-only |
recognizedLineIndex | number | 识别结果有效歌词行中的索引,从 0 开始;参考独有行不返回 |
lrcLineIndex | number | 该识别行在 rawLrc 全部文本行中的索引,从 0 开始,可用于定位原始 LRC;参考独有行不返回 |
referenceLineIndex | number | 参考歌词有效歌词行中的索引,从 0 开始;识别独有行不返回 |
timestamp | string | 可用的 LRC 时间戳。通常来自识别行;参考独有行只有自带时间戳时才返回 |
recognizedText | string | 去除时间戳、演唱者标签和逐词时间标签后的识别文本;参考独有行不返回 |
referenceText | string | 去除时间戳、演唱者标签和逐词时间标签后的参考文本;识别独有行不返回 |
alignmentConfidence | number/null | 两行对齐可靠度,范围 0–1;未配对行返回 null。它不表示参考歌词内容一定正确 |
similarity | number | 基于规范化文字编辑距离计算的字符相似度,范围 0–1;不能单独作为自动采用依据 |
recommendation | string | 处理建议:high-confidence-replace、timed-reference-insert 或 manual-review |
canApply | boolean | 是否具有可直接应用参考文本所需的位置或时间信息;它不代表应该在无人确认时自动应用 |
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 |
exportIncludeTranslation | true | 是否包含译文 |
exportIncludePronunciation | true | 是否包含发音标注 |
exportIncludeChorusLabels | true | 是否包含演唱者及合唱标签 |
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
查询参数
| 参数 | 默认值 | 说明 |
|---|---|---|
page | 1 | 页码 |
limit | 20 | 每页最多 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"
}| HTTP | businessCode | 含义 |
|---|---|---|
400 | — | 请求参数错误或缺少必填字段 |
401 | — | API Key 缺失、无效、已撤销或已过期 |
403 | not_enough_credits | 积分不足 |
403 | level_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 支持即将推出。