跳转到内容

快速开始

AMLL 提供两个 npm 包,用于歌词格式正反序列化:

  • @applemusic-like-lyrics/lyric
    主流各歌词格式的解析与生成库,例如 LRC、YRC、LQE 等,其中 TTML 正反解实际上依赖 @applemusic-like-lyrics/ttml。
  • @applemusic-like-lyrics/ttml
    TTML 逐字歌词格式正反序列化库。提供最详细的信息,包括逐字音译等特色功能。
Terminal window
npm install @applemusic-like-lyrics/lyric

Lyric 包支持如下格式:

格式 扩展名 解析 生成
TTML .ttml parseTTML stringifyTTML
LRC .lrc parseLrc stringifyLrc
LRC A2 扩展 .lrc, .alrc parseLrcA2 stringifyLrcA2
网易云逐字 .yrc parseYrc stringifyYrc
QQ 音乐逐字 .qrc parseQrc stringifyQrc
EsLyric .lrc, .eslrc parseEslrc stringifyEslrc
ASS 字幕 .ass 不支持 stringifyAss
Lyricify Lines .lyl parseLyl stringifyLyl
Lyricify Syllable .lys parseLys stringifyLys
Lyricify 快速导出 .lqe parseLqe stringifyLqe

以上解析与生成方法均为同步函数。

除 TTML 外,解析函数均接受一个字符串作为参数并返回歌词对象数组 LyricLine[],生成函数均接受一个歌词对象数组并返回字符串。

对于 TTML,解析结果和生成输入并非歌词对象数组,而是包含了元数据信息的 TTMLLyric 对象。并且 lyric 包的 TTML 正反解仅能在浏览器中使用,不支持 Node 环境如果在 Node 中使用,或需要 TTML 中更多的信息或能力,请使用下一节介绍的 TTML 专用包

Lyric 包还支持 QQ 音乐加密逐词格式的加解密。提供 decryptQrcHex 方法用于解密,提供 encryptQrcHex 方法用于加密。

你可以在 各歌词格式介绍 一文中了解各歌词格式的详细信息。

Terminal window
npm install @applemusic-like-lyrics/ttml

TTML 包提供 TTML 格式的正反序列化能力。有关 TTML 格式的详细信息,请转到 TTML 格式介绍

TTML 包有两种使用模式:类模式与函数模式。

TTML 包提供两个类:用于解析的 TTMLParser 和用于生成的 TTMLGenerator。特别地,二者还提供了静态的便捷方法,本质是立即新建实例然后操作。

import { TTMLParser, TTMLGenerator } from "@applemusic-like-lyrics/ttml";
// 建立实例并调用
const parser = new TTMLParser();
const ttmlObject = parser.parse("Some TTML string...");
// 静态方法,等价于 (new TTMLParser()).parse("Some TTML string...")
const _ttmlObject = TTMLParser.parse("Some TTML string...");
// 建立实例并调用
const generator = new TTMLGenerator();
const ttmlString = generator.generate(ttmlObject);
// 静态方法,等价于 (new TTMLGenerator()).generate(ttmlObject)
const _ttmlString = TTMLGenerator.generate(ttmlObject);

这两个类默认在浏览器环境下工作。TTMLParser 默认使用 DOMParser 类,TTMLGenerator 默认使用 XMLSerializer 类和 document.implementation 。因此,若要在 Node 环境使用,需要在构造时传入这几个工具的实现。例如使用 @xmldom/xmldom

import { TTMLParser, TTMLGenerator } from "@applemusic-like-lyrics/ttml";
import { DOMParser, DOMImplementation, XMLSerializer } from "@xmldom/xmldom";
const parser = new TTMLParser({
domParser: new DOMParser(),
});
const generator = new TTMLGenerator({
domImplementation: new DOMImplementation(),
xmlSerializer: new XMLSerializer(),
});

静态方法在 Node 下不适用。

直接引入 parseTTML, exportTTML 函数。

import { parseTTML, exportTTML } from "@applemusic-like-lyrics/ttml";
const amllObject = parseTTML("Some TTML string...");
const ttmlString = exportTTML(amllObject);

解析结果以 AmllLyricResult 类型给出,可以直接用于 AMLL 核心库。

此模式的本质是调用 TTMLParserTTMLGenerator 的静态方法。对于 TTMLParser 还会额外调用 toAmllLyrics 将对象降级为 AmllLyricResult。因此,此方法在 Node 下不适用。