@applemusic-like-lyrics/lyric

中文文档
1.1.0发布于 2026/09/20AGPL-3.0-onlyTypeScriptESM + CJS构建来源已验证近 30 天下载 4389

一个歌词解析/生成模块,着重于歌词内容解析,支持多种格式

中文使用文档
文档目录5 节
  1. 解析和生成支持
  2. 格式化能力支持
  3. 转换和退化规则
  4. 使用核心语言元件
  5. 大楼

AMLL 语言解析器/撰写器

英文/英文 简体中文

这是原歌词包的重构版本. 文档尚未完成 .

下面是原始文件。 另见: AMLL 文档。 。 。 .


警告: 这是一个个人项目,仍在开发中。 可能还有许多问题,所以请不要在生产环境中直接使用!

AMLL-Lyric npm npm

一个用于AMLL的活字解析/生成模块,完全用TypeScript来写.

由于这个模块只关注词性内容,因此它抛弃了与歌词无关的所有信息. 如果您需要从词典文件中获取详细的信息(如艺术家),请考虑使用其他框架.

解析和生成支持

格式通用扩展解析生成
LyRiC (英语).lrc✅✅
LRC A2 数据 (增强LRC).lrc✅✅
ESLyric逐字歌词.lrc✅✅
盐玩家歌词 (SPL).spl✅✅
网易逐字歌词.yrc✅✅
QQ音乐逐字歌词.qrc✅✅
拼写可操作.lys✅✅
拼写行.lyl✅✅
拼写快速导出.lqe✅✅
TTML 语言.ttml✅✅
支助.ass❌✅

格式化能力支持

每种格式都有不同的语法规则,因此它所支持的语法能力,如词级计时,翻译,和声段信息,也不同:

格式时间颗粒性翻译/转写二重唱背景声元数据
LyRiC (英语:.lrc(中文(简体) )行级XQ 以附加词行写入❌QQ 文本包入 ()❌
LRC A2( 微分数).lrc(中文(简体) )词层XQ 以附加词行写入❌QQ 文本包入 ()❌
ESLyric (英语:.lrc(中文(简体) )词层XQ 以附加词行写入❌QQ 文本包入 ()❌
SPL (英语:.spl(中文(简体) )词层XQ 以附加词行写入❌QQ 文本包入 ()✅
净值.yrc(中文(简体) )字符级别❌❌QQ 文本包入 ()❌
QQ音乐(.qrc(中文(简体) )字符级别❌❌QQ 文本包入 ()❌
可拼写符号( C).lys(中文(简体) )词层❌✅✅❌
拼写行( R).lyl(中文(简体) )行级❌❌QQ 文本包入 ()❌
拼写快速导出( L).lqe(中文(简体) )词层✅✅✅❌
TTML (英语:.ttml(中文(简体) )词层✅✅✅✅
支助.ass(中文(简体) )词层❌❌QQ 文本包入 ()❌

转换和退化规则

在通过AMLL的内部结构在格式之间转换时,当目标格式缺乏源格式提供的能力时,适用下列降解规则: 1

  1. 文字时间退化: 当目标格式只支持行级歌词, 如 LyRiC .lrc 线条 .lyl,字级时间戳被剥去,一行上的所有字被合并为一行.
  2. 翻译和转写退化数字 :
    • 在导出为 LRC-家族格式(LyRiC,LRC A2,ESLyric,或SPL)时,会将翻译和转写作为附加的有主行时间戳的活字行被插入.
    • 在导出到除TTML(YRC,QRC,LYS,或LYL)以外的词级格式时,会丢弃翻译和转写.
  3. 背景声:当目标格式没有原生背景-vocal标记时,背景相声会用括号环绕词尾写出: (...)。 。 。 .
  4. 二重奏属性:只有LYS,LQE和TTML保存二重奏信息. 它在导出到其他格式时丢失 .
  5. 元数据: 要保存向 SPL 导出时的元数据, 将包含元数据的完整剖析结果传递给 stringifySPL元数据为 [key:value] 标记行,当再次解析时,键会转换为小写。 TTML和SPL以外的格式不支持元数据.
  6. 时间戳精度损失: ASS卡拉OK效果使用百分秒(1克),因此从以毫秒为基础的格式导出到ASS的回合时间戳并可能损失高达10毫秒的精度.

使用核心语言元件

当它们一起使用时,注意 两者的词条结构并不完全相同。您需要以如下例子(使用LyRiC作为示例)的方式转换它们,以便正确解析:

import { parseLrc } from "@applemusic-like-lyrics/lyric";
const lines = parseLrc("[00:00.00]test");
const converted = lines.map((line, i, lines) => ({
    words: [
        {
            word: line.words[0]?.word ?? "",
            startTime: line.words[0]?.startTime ?? 0,
            endTime: lines[i + 1]?.words?.[0]?.startTime ?? Infinity,
        },
    ],
    startTime: line.words[0]?.startTime ?? 0,
    endTime: lines[i + 1]?.words?.[0]?.startTime ?? Infinity,
    translatedLyric: "",
    romanLyric: "",
    isBG: false,
    isDuet: false,
}));
// Now you can pass converted to LyricPlayer

建议使用TypeScript,因为这样可以更容易地检测出错误.

大楼

wasm-pack build --target bundler --release --scope applemusic-like-lyrics

版本与发布记录

@applemusic-like-lyrics/lyric 共发布 18 个版本,首次发布于 2023/07/27;过去 12 个月发布了 7 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.1.0latest2026/09/201 个月前
1.0.22026/07/103 个月前
1.0.12026/05/185 个月前
1.0.02026/04/236 个月前
1.0.0-alpha.02026/04/156 个月前
0.4.12026/04/037 个月前

关于 @applemusic-like-lyrics/lyric 的常见问题

@applemusic-like-lyrics/lyric 是什么?

一个歌词解析/生成模块,着重于歌词内容解析,支持多种格式

如何安装 @applemusic-like-lyrics/lyric?

在项目目录运行 npm install @applemusic-like-lyrics/lyric,或使用 pnpm add / yarn add / bun add。

@applemusic-like-lyrics/lyric 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@applemusic-like-lyrics/lyric 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@applemusic-like-lyrics/lyric 可以商用吗?

@applemusic-like-lyrics/lyric 使用 AGPL-3.0-only 许可。最严格的 Copyleft:除分发外,通过网络向用户提供基于它的服务也需要开源对应源码。闭源 SaaS 使用前务必评估。以上为概括,不构成法律意见,请以许可原文为准。

@applemusic-like-lyrics/lyric 的下载量有多少?

根据 npm 官方下载统计,@applemusic-like-lyrics/lyric 在 2026/10/07 – 2026/11/05 这 30 天内被下载 4,389 次,日均约 146 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@applemusic-like-lyrics/lyric 还在维护吗?

最新版本 1.1.0 发布于 2026/09/20(1 个月前);至今共发布 18 个版本,其中过去 12 个月发布了 7 个;首次发布于 2023/07/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。