@braccato/parsers (英语)
Lyrics格式解析器用于 TTML, LRC, SRT, QRC, 和纯文本, 并带有自动格式检测. 生产 Lyric[] 阵列 @braccato/core 使。 。 .
这个 解析器指南 显示如何解析每个更好的 Lyrics API 提供者的响应 .
安装
npm i @braccato/parsers
使用量
import { detectParser } from "@braccato/parsers";
const parser = detectParser(inputText);
const lyrics = parser.parse(inputText, durationMs);
或者直接使用特定的解析器:
import { TTMLParser, LRCParser, SRTParser, QRCParser, PlainParser } from "@braccato/parsers";
const lyrics = TTMLParser.parse(ttmlString);
解析器接口
所有解析器执行 :
interface LyricParser {
parse(input: string, duration?: number): Lyric[];
metadata(input: string): LyricMetadata;
detect(input: string): boolean;
}
metadata 阅读文件上对这首歌的描述,而不是其台词,即今天谁写的. songwriters 当文件入帐时为空 :
const { songwriters } = detectParser(inputText).metadata(inputText); // ["Max Martin", "Savan Kotecha"]
| 格式 | 歌词的出处 |
|---|---|
| TTML 语言 | <songwriters> 在任何元数据容器中 iTunesMetadata红外线 sourceMetadata)和作曲家 <composer:meta key="songwriter"> |
| LRC 数据 | [au:] 财务报告和审定财务报表 [lr:]。 。 。 . [by:] 制作文件的人的名字被排除在外 |
| 问题研究中心 | 信贷额度,例如: 作词: 或者说 Written by:生产者、混合和其他角色被排除在外 |
| 平原特别小组 | 没什么 |
LRC 和 QRC 作为自由文本持有的名称被拆分 /, (中文(简体) ), 、, (中文(简体) ), , 财务报告和审定财务报表 ,。每种格式都会重复并保留文件给出的命令.
detectParser 按优先级顺序尝试每个格式: TTML, LRC, SRT, QRC, Plain. 同样的规则是单独输出 detectFormat 从无依赖的 @braccato/parsers/format 子路径, 返回 "ttml" | "lrc" | "srt" | "qrc" | "plain" 不装入 XML 解析器.
TTMLParser.parse 忽略它的 duration 参数,因为 TTML 文档在 <body dur>。通过 parseTTMLContent 而不是当文档省略它.
格式细节
TTML 语言
parseTTMLContent 返回已解析的行以及文档是否同步并声明的语言:
import { parseTTMLContent } from "@braccato/parsers";
const { lyrics, isWordSynced, language } = parseTTMLContent(ttmlString, {
songDurationMs: 214000, // only used when <body> carries no dur
instrumentalGapMs: 5000, // silence longer than this becomes an instrumental line
});
无论文档是否注明了期限,都插入了仪器行。 这在0.2.0中有所改变:0.1.x只插入到一个文件上,因为该文件 <body> 携带a dur,而这个套件的被重写 并没有打开它们,所以门不见了。 无文件 dur 当第一行的开始超过 instrumentalGapMs 中,和任何两行之间用以上分隔的一行。 外出是例外,因为没有说明歌曲的结局:通过 songDurationMs 为了得到它.
它读取了音节时间, ttm:role="x-bg" 背景声, ttm:agent (达到稳定的相声插槽) v1, (中文(简体) ), v2,以及 v1000 代表团体),来自任一团体的明快旗 explicit 或AMLL's (英语) obscene, (中文(简体) ), itunes:key,翻译和转写. 命名空间前缀,一个文档不用声明就使用这些前缀被恢复而不是拒绝,时间可能是时钟值或抵消次数,例如 432.25s, (中文(简体) ), 5m 或者说 250ms。 。 。 .
LRC 数据
LRCParser.parse 运行一套适合 Musixmatch 单词的定时器。 对于时机已经干净的来源,使用 parseLRC,它返回的文档完全按照:
import { parseLRC, lrcFixers } from "@braccato/parsers";
const lyrics = parseLRC(lrcText, durationMs, {
instrumentalGapMs: 5000, // silence longer than this becomes an instrumental line
});
lrcFixers(lyrics); // optional, mutates in place
仪表行遵循与TTML相同的规则. 空白的定时行,或只持有音乐笔记的行,不是一首歌词:它结束了它之前的行,它留下的寂静会成为工具行,当它运行的时间超过 instrumentalGapMs。 。 。 。 在增强的LRC中,一个时间戳在关闭了上个字和行后一无所有,所以它之后的沉默算不上是空白行. 门槛后第一行开始时会添加一个入门. 出道需要最后一行,通过收尾时间戳或后行空白一行来说明结束位置,因为一行平整的最后一行会跑到歌曲的结尾.
问题研究中心
QRCParser.parse 接受 <QrcInfos> 信封QQ音乐回归或赤裸的QRC正文. 通过歌曲元数据 parseQRC 以删除仅与标题或艺术家相呼应的开口行 :
import { parseQRC } from "@braccato/parsers";
const lyrics = parseQRC(qrcXml, durationMs, { title: "Song", artist: "Artist" });
歌手前缀( R)Name: 在一行行头)成为代理,被从文字中剥去,坚持到下一行出现为止. 信用额度被取消.
见 完整文档 用于类型定义.