Quick Start
AMLL provides two npm packages for lyric format parsing and serialization:
- @applemusic-like-lyrics/lyric
Parsing and generation for mainstream lyric formats such as LRC, YRC, and LQE. TTML parsing/serialization in this package internally relies on
@applemusic-like-lyrics/ttml. - @applemusic-like-lyrics/ttml Dedicated TTML parsing and serialization library with the most detailed TTML feature support.
Lyric Package
Section titled “Lyric Package”npm install @applemusic-like-lyrics/lyricpnpm add @applemusic-like-lyrics/lyricyarn add @applemusic-like-lyrics/lyricSupported formats in the Lyric package:
| Format | Extension | Parse | Stringify |
|---|---|---|---|
| TTML | .ttml |
parseTTML |
stringifyTTML |
| LRC | .lrc |
parseLrc |
stringifyLrc |
| LRC A2 | .lrc, .alrc |
parseLrcA2 |
stringifyLrcA2 |
| SPL | .spl |
parseSPL |
stringifySPL |
| NetEase YRC | .yrc |
parseYrc |
stringifyYrc |
| QQ QRC | .qrc |
parseQrc |
stringifyQrc |
| EsLyric | .lrc, .eslrc |
parseEslrc |
stringifyEslrc |
| ASS subtitle | .ass |
Not supported | stringifyAss |
| Lyricify Lines | .lyl |
parseLyl |
stringifyLyl |
| Lyricify Syllable | .lys |
parseLys |
stringifyLys |
| Lyricify Quick Export | .lqe |
parseLqe |
stringifyLqe |
All parse and stringify methods above are synchronous.
Except TTML, the parse functions in the table take a string and return LyricLine[]; the stringify functions take a lyric object array and return a string.
The LRC family formats share the same syntax family, so parseLrcLike and stringifyLrcLike are also provided as unified entry points: the former parses every LRC-family notation and additionally returns the metadata found in the file (result type LyricParseResult), while the latter takes generation options such as the output mode and auxiliary lines, and also accepts such a parse result.
For TTML, parse output and stringify input are not LyricLine[], but a TTMLLyric object with metadata. Also, TTML parse/stringify in the Lyric package is browser-only. For Node.js usage or advanced TTML data, use the dedicated TTML package below.
The Lyric package also supports decryption/encryption for QQ Music encrypted QRC payloads: decryptQrcHex and encryptQrcHex.
For format details, see Lyric Formats.
TTML Package
Section titled “TTML Package”npm install @applemusic-like-lyrics/ttmlpnpm add @applemusic-like-lyrics/ttmlyarn add @applemusic-like-lyrics/ttmlThe TTML package provides TTML parsing and serialization. For format details, see TTML Format.
It supports two usage modes: class mode and function mode.
Class Mode
Section titled “Class Mode”The TTML package provides two classes: TTMLParser for parsing and TTMLGenerator for generation. Both also provide static shortcuts.
import { TTMLParser, TTMLGenerator } from "@applemusic-like-lyrics/ttml";
const parser = new TTMLParser();const ttmlObject = parser.parse("Some TTML string...");
const _ttmlObject = TTMLParser.parse("Some TTML string...");
const generator = new TTMLGenerator();const ttmlString = generator.generate(ttmlObject);
const _ttmlString = TTMLGenerator.generate(ttmlObject);By default, these classes are browser-oriented. TTMLParser uses DOMParser, and TTMLGenerator uses XMLSerializer and document.implementation. For Node.js, provide implementations explicitly, for example with @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(),});Static methods are not suitable for Node.js.
Function Mode
Section titled “Function Mode”Import parseTTML and exportTTML directly.
import { parseTTML, exportTTML } from "@applemusic-like-lyrics/ttml";
const amllObject = parseTTML("Some TTML string...");const ttmlString = exportTTML(amllObject);The parse result type is AmllLyricResult, which can be directly used in AMLL core.
Internally, this mode calls static methods of TTMLParser/TTMLGenerator. For parsing, it additionally calls toAmllLyrics. So this mode is also not suitable for Node.js.