跳转到内容

快速开始

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.ttmlparseTTMLstringifyTTML
LRC.lrcparseLrcstringifyLrc
LRC A2 扩展.lrc, .alrcparseLrcA2stringifyLrcA2
网易云逐字.yrcparseYrcstringifyYrc
QQ 音乐逐字.qrcparseQrcstringifyQrc
EsLyric.lrc, .eslrcparseEslrcstringifyEslrc
ASS 字幕.ass不支持stringifyAss
Lyricify Lines.lylparseLylstringifyLyl
Lyricify Syllable.lysparseLysstringifyLys
Lyricify 快速导出.lqeparseLqestringifyLqe

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

除 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 下不适用。