@applemusic-like-lyrics/lyric 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  //#region src/types.d.ts
2
2
  /**
3
- * 一个歌词单词
4
- */
3
+ * 一个歌词单词
4
+ */
5
5
  interface LyricWord {
6
6
  /** 单词的起始时间 */
7
7
  startTime: number;
@@ -13,215 +13,362 @@ interface LyricWord {
13
13
  romanWord?: string;
14
14
  }
15
15
  /**
16
- * 一行歌词,存储多个单词
17
- * 如果是 LyRiC 等只能表达一行歌词的格式,则会将整行当做一个单词存储起来
18
- */
16
+ * 一行歌词,存储多个单词
17
+ * 如果是 LyRiC 等只能表达一行歌词的格式,则会将整行当做一个单词存储起来
18
+ */
19
19
  interface LyricLine {
20
20
  /**
21
- * 该行的所有单词
22
- * 如果是 LyRiC 等只能表达一行歌词的格式,这里就只会有一个单词
23
- */
21
+ * 该行的所有单词
22
+ * 如果是 LyRiC 等只能表达一行歌词的格式,这里就只会有一个单词
23
+ */
24
24
  words: LyricWord[];
25
25
  /**
26
- * 该行的翻译
27
- */
26
+ * 该行的翻译
27
+ */
28
28
  translatedLyric: string;
29
29
  /**
30
- * 该行的音译
31
- */
30
+ * 该行的音译
31
+ */
32
32
  romanLyric: string;
33
33
  /**
34
- * 该行是否为背景歌词行
35
- * 此选项只有作为 Lyricify Syllable 文件格式导入导出时才有意义
36
- */
34
+ * 该行是否为背景歌词行
35
+ * 此选项只有作为 Lyricify Syllable 文件格式导入导出时才有意义
36
+ */
37
37
  isBG: boolean;
38
38
  /**
39
- * 该行是否为对唱歌词行(即歌词行靠右对齐)
40
- * 此选项只有作为 Lyricify Syllable 文件格式导入导出时才有意义
41
- */
39
+ * 该行是否为对唱歌词行(即歌词行靠右对齐)
40
+ * 此选项只有作为 Lyricify Syllable 文件格式导入导出时才有意义
41
+ */
42
42
  isDuet: boolean;
43
43
  /**
44
- * 该行的开始时间
45
- *
46
- * **并不总是等于第一个单词的开始时间**
47
- */
44
+ * 该行的开始时间
45
+ *
46
+ * **并不总是等于第一个单词的开始时间**
47
+ */
48
48
  startTime: number;
49
49
  /**
50
- * 该行的结束时间
51
- *
52
- * **并不总是等于最后一个单词的开始时间**
53
- */
50
+ * 该行的结束时间
51
+ *
52
+ * **并不总是等于最后一个单词的开始时间**
53
+ */
54
54
  endTime: number;
55
55
  }
56
56
  /**
57
- * 一个 TTML 歌词行对象,存储了歌词行信息和 AMLL 元数据信息
58
- */
57
+ * 一段带元数据的歌词,元数据以 `[键, 值数组]` 的形式存储
58
+ *
59
+ * 与 {@link TTMLLyric} 结构相同,用于描述不限于 TTML 的歌词对象
60
+ */
61
+ type LyricParseResult = TTMLLyric;
62
+ /**
63
+ * 一个 TTML 歌词行对象,存储了歌词行信息和 AMLL 元数据信息
64
+ */
59
65
  interface TTMLLyric {
60
66
  /**
61
- * TTML 中存储的歌词行信息
62
- */
67
+ * TTML 中存储的歌词行信息
68
+ */
63
69
  lines: LyricLine[];
64
70
  /**
65
- * 一个元数据表,以 `[键, 值数组]` 的形式存储
66
- */
71
+ * 一个元数据表,以 `[键, 值数组]` 的形式存储
72
+ */
67
73
  metadata: [string, string[]][];
68
74
  }
69
75
  //#endregion
70
76
  //#region src/formats/ass.d.ts
71
77
  /**
72
- * 将歌词数组转换为 ASS 字幕格式字符串
73
- * @param lines 歌词数组
74
- * @returns ASS 字幕格式字符串
75
- */
78
+ * 将歌词数组转换为 ASS 字幕格式字符串
79
+ * @param lines 歌词数组
80
+ * @returns ASS 字幕格式字符串
81
+ */
76
82
  declare function stringifyAss(lines: LyricLine[]): string;
77
83
  //#endregion
78
84
  //#region src/formats/eqrc/index.d.ts
79
85
  /**
80
- * 解密十六进制字符串格式的 Qrc 歌词数据
81
- * 解密后可去头尾 XML 数据后通过调用 `parseQrc` 解析歌词行
82
- * @param encryptedHexString 十六进制格式的字符串,代表被加密的歌词数据
83
- * @returns 被解密出来的歌词字符串,是前后有 XML 混合的 QRC 歌词
84
- */
86
+ * 解密十六进制字符串格式的 Qrc 歌词数据
87
+ * 解密后可去头尾 XML 数据后通过调用 `parseQrc` 解析歌词行
88
+ * @param encryptedHexString 十六进制格式的字符串,代表被加密的歌词数据
89
+ * @returns 被解密出来的歌词字符串,是前后有 XML 混合的 QRC 歌词
90
+ */
85
91
  declare function decryptQrcHex(encryptedHexString: string): string;
86
92
  /**
87
- * 对明文执行加密操作。
88
- * @param plaintext 明文字符串
89
- * @returns 十六进制格式的字符串,代表被加密的歌词数据
90
- */
93
+ * 对明文执行加密操作。
94
+ * @param plaintext 明文字符串
95
+ * @returns 十六进制格式的字符串,代表被加密的歌词数据
96
+ */
91
97
  declare function encryptQrcHex(plaintext: string): string;
92
98
  //#endregion
93
- //#region src/formats/eslrc.d.ts
94
- /**
95
- * 解析 ESLyric 逐词歌词格式字符串
96
- * @param eslrc 歌词字符串
97
- * @returns 成功解析出来的歌词
98
- */
99
- declare function parseEslrc(eslrc: string): LyricLine[];
100
- /**
101
- * 将歌词数组转换为 ESLyric 逐词歌词格式字符串
102
- * @param lines 歌词数组
103
- * @returns ESLyric 逐词歌词格式字符串
104
- */
105
- declare function stringifyEslrc(lines: LyricLine[]): string;
106
- //#endregion
107
99
  //#region src/formats/lqe.d.ts
108
100
  /**
109
- * 解析 LQE 格式的歌词字符串
110
- * @param lqe 歌词字符串
111
- * @returns 成功解析出来的歌词
112
- */
101
+ * 解析 LQE 格式的歌词字符串
102
+ * @param lqe 歌词字符串
103
+ * @returns 成功解析出来的歌词
104
+ */
113
105
  declare function parseLqe(lqe: string): LyricLine[];
114
106
  /**
115
- * 将歌词数组转换为 LQE 格式的字符串
116
- * @param lines 歌词数组
117
- * @returns LQE 格式的字符串
118
- */
107
+ * 将歌词数组转换为 LQE 格式的字符串
108
+ * @param lines 歌词数组
109
+ * @returns LQE 格式的字符串
110
+ */
119
111
  declare function stringifyLqe(lines: LyricLine[]): string;
120
112
  //#endregion
121
- //#region src/formats/lrc.d.ts
113
+ //#region src/formats/lrc/types.d.ts
122
114
  /**
123
- * 解析 LyRiC 格式的歌词字符串
124
- * @param lrc 歌词字符串
125
- * @returns 成功解析出来的歌词
126
- */
127
- declare function parseLrc(lrc: string): LyricLine[];
115
+ * 歌词模式
116
+ * - `"plain"`: 普通 LRC,不含逐字信息
117
+ * - `"enhanced"`: 增强型 LRC
118
+ * - `"spl"`: Salt Player Lyrics,为前两者的超集
119
+ */
120
+ type LrcMode = "plain" | "enhanced" | "spl";
121
+ //#endregion
122
+ //#region src/formats/lrc/generator.d.ts
128
123
  /**
129
- * 将歌词数组转换为 LyRiC 格式的字符串
130
- * @param lines 歌词数组
131
- * @returns LyRiC 格式的字符串
132
- */
133
- declare function stringifyLrc(lines: LyricLine[]): string;
124
+ * 普通 LRC 显式结束时间戳的输出配置
125
+ *
126
+ * 逐字歌词的结束时间戳由最后一个音节携带,不受此配置影响
127
+ */
128
+ interface LrcEndTimestampOptions {
129
+ /**
130
+ * 输出策略
131
+ * - `"none"`: 不输出
132
+ * - `"always"`: 总是输出
133
+ * - `"interval"`: 与下一行的间隔不小于 `intervalGap` 时输出
134
+ * @default "none"
135
+ */
136
+ mode?: "none" | "always" | "interval";
137
+ /**
138
+ * 触发间隔,单位毫秒,仅在 `mode` 为 `"interval"` 时有效
139
+ * @default 5000
140
+ */
141
+ intervalGap?: number;
142
+ }
143
+ /**
144
+ * 单种辅助行(翻译、音译或背景人声)的输出配置
145
+ */
146
+ interface LrcAuxiliaryLineOptions {
147
+ /**
148
+ * 是否输出该辅助行
149
+ * @default true
150
+ */
151
+ enabled?: boolean;
152
+ /**
153
+ * 是否内联到主歌词行,仅在普通 LRC 模式下有效
154
+ *
155
+ * translation、romanization 与 backgroundVocal 中最多只有一个可以内联
156
+ *
157
+ * 内联时辅助文本会以半角圆括号 `(text)` 包裹
158
+ */
159
+ inline?: boolean;
160
+ }
161
+ /**
162
+ * 辅助行的输出配置
163
+ */
164
+ interface LrcAuxiliaryLinesOptions {
165
+ /**
166
+ * 辅助行的输出顺序
167
+ * @default "translation-first"
168
+ */
169
+ order?: "translation-first" | "romanization-first";
170
+ /**
171
+ * 翻译行设置
172
+ */
173
+ translation?: LrcAuxiliaryLineOptions;
174
+ /**
175
+ * 音译行设置
176
+ */
177
+ romanization?: LrcAuxiliaryLineOptions;
178
+ /**
179
+ * 背景人声设置
180
+ */
181
+ backgroundVocal?: LrcAuxiliaryLineOptions;
182
+ }
183
+ /**
184
+ * 生成 LRC 家族歌词的配置
185
+ */
186
+ interface StringifyLrcLikeOptions {
187
+ /**
188
+ * 生成模式,详见 {@link LrcMode}
189
+ * @default "plain"
190
+ */
191
+ mode?: LrcMode;
192
+ /**
193
+ * 逐字时间戳的括号类型,仅在 `enhanced` 和 `spl` 模式下有效
194
+ * - `"angle"`: 使用 `<mm:ss.ms>`
195
+ * - `"square"`: 使用 `[mm:ss.ms]`
196
+ * @default "angle"
197
+ */
198
+ inlineBracket?: "angle" | "square";
199
+ /**
200
+ * 辅助行(翻译、音译、背景人声)的输出配置
201
+ */
202
+ auxiliaryLines?: LrcAuxiliaryLinesOptions;
203
+ /**
204
+ * 普通 LRC 的显式结束时间戳输出配置
205
+ */
206
+ endTimestamp?: LrcEndTimestampOptions;
207
+ }
134
208
  //#endregion
135
- //#region src/formats/lrca2.d.ts
209
+ //#region src/formats/lrc/parser.d.ts
210
+ interface ParseLrcLikeOptions {
211
+ /**
212
+ * 解析模式,详见 {@link LrcMode}
213
+ * @default "spl"
214
+ */
215
+ mode?: LrcMode;
216
+ }
217
+ //#endregion
218
+ //#region src/formats/lrc/index.d.ts
219
+ /**
220
+ * 解析任意 LRC 家族歌词,包括普通 LRC、增强型 LRC、ESLyric 逐词歌词与 Salt Player Lyrics
221
+ *
222
+ * 因为 Salt Player Lyrics 是其余格式的超集,所以一个接口即可解析全部种类
223
+ *
224
+ * 同一时间可能出现多条歌词行(例如翻译与音译),
225
+ * 本接口不做多语言适配,由使用者自行决定如何使用这些时间相同的歌词行
226
+ *
227
+ * @param text 歌词文本
228
+ * @param options 解析选项
229
+ * @returns 解析出来的歌词与元数据
230
+ */
231
+ declare function parseLrcLike(text: string, options?: ParseLrcLikeOptions): LyricParseResult;
232
+ /**
233
+ * 生成 LRC 家族歌词
234
+ * @param input 歌词行,或带元数据的解析结果
235
+ * @param options 生成选项
236
+ * @returns 歌词文本
237
+ */
238
+ declare function stringifyLrcLike(input: LyricParseResult | LyricLine[], options?: StringifyLrcLikeOptions): string;
136
239
  /**
137
- * 解析 LRC A2 格式的歌词字符串
138
- * @param lrc 歌词字符串
139
- * @returns 成功解析出来的歌词
140
- */
240
+ * 解析 LyRiC 格式的歌词字符串
241
+ * @param lrc 歌词字符串
242
+ * @returns 成功解析出来的歌词
243
+ */
244
+ declare function parseLrc(lrc: string): LyricLine[];
245
+ /**
246
+ * 解析 ESLyric 逐词歌词格式的歌词字符串
247
+ * @param eslrc 歌词字符串
248
+ * @returns 成功解析出来的歌词
249
+ */
250
+ declare function parseEslrc(eslrc: string): LyricLine[];
251
+ /**
252
+ * 解析 LRC A2(增强 LRC)格式的歌词字符串
253
+ * @param lrc 歌词字符串
254
+ * @returns 成功解析出来的歌词
255
+ */
141
256
  declare function parseLrcA2(lrc: string): LyricLine[];
142
257
  /**
143
- * 将歌词数组转换为 LRC A2 格式的字符串
144
- * @param lines 歌词数组
145
- * @returns LRC A2 格式的字符串
146
- */
258
+ * 解析 SPL(Salt Player Lyrics)格式的歌词字符串
259
+ *
260
+ * 上述几种格式都语出同源,本接口只是以 SPL 之名调用同一套解析算法
261
+ * @param spl 歌词字符串
262
+ * @returns 成功解析出来的歌词
263
+ */
264
+ declare function parseSPL(spl: string): LyricLine[];
265
+ /**
266
+ * 将歌词数组转换为 LyRiC 格式的字符串
267
+ * @param lines 歌词数组
268
+ * @returns LyRiC 格式的字符串
269
+ */
270
+ declare function stringifyLrc(lines: LyricLine[]): string;
271
+ /**
272
+ * 将歌词数组转换为 ESLyric 逐词歌词格式的字符串
273
+ *
274
+ * ESLyric 的逐词语法为「文本后跟该词的结束时间」,行首时间戳即首个词的开始时间,
275
+ * 因此不写行自身的时间戳,行首时间戳直接取首个词的开始时间
276
+ * @param lines 歌词数组
277
+ * @returns ESLyric 逐词歌词格式的字符串
278
+ */
279
+ declare function stringifyEslrc(lines: LyricLine[]): string;
280
+ /**
281
+ * 将歌词数组转换为 LRC A2(增强 LRC)格式的字符串
282
+ * @param lines 歌词数组
283
+ * @returns LRC A2 格式的字符串
284
+ */
147
285
  declare function stringifyLrcA2(lines: LyricLine[]): string;
286
+ /**
287
+ * 生成 SPL(Salt Player Lyrics)格式的歌词字符串
288
+ *
289
+ * SPL 与增强型 LRC 的生成行为一致,逐字时间戳同样使用尖括号,
290
+ * 因此本接口与 {@link stringifyLrcA2} 的输出完全相同
291
+ * @param input 歌词行,或带元数据的解析结果
292
+ * @returns SPL 格式的字符串
293
+ */
294
+ declare function stringifySPL(input: LyricParseResult | LyricLine[]): string;
148
295
  //#endregion
149
296
  //#region src/formats/lyl.d.ts
150
297
  /**
151
- * 解析 LYL 格式的歌词字符串
152
- * @param lyl 歌词字符串
153
- * @returns 成功解析出来的歌词
154
- */
298
+ * 解析 LYL 格式的歌词字符串
299
+ * @param lyl 歌词字符串
300
+ * @returns 成功解析出来的歌词
301
+ */
155
302
  declare function parseLyl(lyl: string): LyricLine[];
156
303
  /**
157
- * 将歌词数组转换为 LYL 格式的字符串
158
- * @param lines 歌词数组
159
- * @returns LYL 格式的字符串
160
- */
304
+ * 将歌词数组转换为 LYL 格式的字符串
305
+ * @param lines 歌词数组
306
+ * @returns LYL 格式的字符串
307
+ */
161
308
  declare function stringifyLyl(lines: LyricLine[]): string;
162
309
  //#endregion
163
310
  //#region src/formats/lys.d.ts
164
311
  /**
165
- * 解析 LYS 格式的歌词字符串
166
- * @param lys 歌词字符串
167
- * @returns 成功解析出来的歌词
168
- */
312
+ * 解析 LYS 格式的歌词字符串
313
+ * @param lys 歌词字符串
314
+ * @returns 成功解析出来的歌词
315
+ */
169
316
  declare function parseLys(lys: string): LyricLine[];
170
317
  /**
171
- * 将歌词数组转换为 LYS 格式的字符串
172
- * @param lines 歌词数组
173
- * @returns LYS 格式的字符串
174
- */
318
+ * 将歌词数组转换为 LYS 格式的字符串
319
+ * @param lines 歌词数组
320
+ * @returns LYS 格式的字符串
321
+ */
175
322
  declare function stringifyLys(lines: LyricLine[]): string;
176
323
  //#endregion
177
324
  //#region src/formats/qrc.d.ts
178
325
  /**
179
- * 解析 QRC 格式的歌词字符串
180
- * @param qrc 歌词字符串
181
- * @returns 成功解析出来的歌词
182
- */
326
+ * 解析 QRC 格式的歌词字符串
327
+ * @param qrc 歌词字符串
328
+ * @returns 成功解析出来的歌词
329
+ */
183
330
  declare function parseQrc(qrc: string): LyricLine[];
184
331
  /**
185
- * 将歌词数组转换为 QRC 格式的字符串
186
- * @param lines 歌词数组
187
- * @returns QRC 格式的字符串
188
- */
332
+ * 将歌词数组转换为 QRC 格式的字符串
333
+ * @param lines 歌词数组
334
+ * @returns QRC 格式的字符串
335
+ */
189
336
  declare function stringifyQrc(lines: LyricLine[]): string;
190
337
  //#endregion
191
338
  //#region src/formats/ttml.d.ts
192
339
  /**
193
- * 解析 TTML 格式(包含 AMLL 特有属性信息)的歌词字符串
194
- * @param ttmlText 歌词字符串
195
- * @returns 成功解析出来的 TTML 歌词对象
196
- */
340
+ * 解析 TTML 格式(包含 AMLL 特有属性信息)的歌词字符串
341
+ * @param ttmlText 歌词字符串
342
+ * @returns 成功解析出来的 TTML 歌词对象
343
+ */
197
344
  declare function parseTTML(ttmlText: string): TTMLLyric;
198
345
  /**
199
- * 将歌词数组转换为 TTML 格式(包含 AMLL 特有属性信息)的歌词字符串
200
- * @param ttmlLyric TTML 歌词对象
201
- */
346
+ * 将歌词数组转换为 TTML 格式(包含 AMLL 特有属性信息)的歌词字符串
347
+ * @param ttmlLyric TTML 歌词对象
348
+ */
202
349
  declare function stringifyTTML(ttmlLyric: TTMLLyric): string;
203
350
  //#endregion
204
351
  //#region src/formats/yrc.d.ts
205
352
  /**
206
- * 解析 YRC 格式的歌词字符串
207
- * @param yrc 歌词字符串
208
- * @returns 成功解析出来的歌词
209
- */
353
+ * 解析 YRC 格式的歌词字符串
354
+ * @param yrc 歌词字符串
355
+ * @returns 成功解析出来的歌词
356
+ */
210
357
  declare function parseYrc(yrc: string): LyricLine[];
211
358
  /**
212
- * 将歌词数组转换为 YRC 格式的字符串
213
- * @param lines 歌词数组
214
- * @returns YRC 格式的字符串
215
- */
359
+ * 将歌词数组转换为 YRC 格式的字符串
360
+ * @param lines 歌词数组
361
+ * @returns YRC 格式的字符串
362
+ */
216
363
  declare function stringifyYrc(lines: LyricLine[]): string;
217
364
  //#endregion
218
365
  //#region src/index.d.ts
219
366
  /**
220
- * {@link stringifyLrcA2} 的别名。
221
- *
222
- * @deprecated 此为兼容旧版本拼写错误的接口,请改用 `stringifyLrcA2`。此接口将在未来版本中移除。
223
- */
367
+ * {@link stringifyLrcA2} 的别名。
368
+ *
369
+ * @deprecated 此为兼容旧版本拼写错误的接口,请改用 `stringifyLrcA2`。此接口将在未来版本中移除。
370
+ */
224
371
  declare function stringifylrcA2(...args: Parameters<typeof stringifyLrcA2>): ReturnType<typeof stringifyLrcA2>;
225
372
  //#endregion
226
- export { type LyricLine, type LyricWord, type TTMLLyric, decryptQrcHex, encryptQrcHex, parseEslrc, parseLqe, parseLrc, parseLrcA2, parseLyl, parseLys, parseQrc, parseTTML, parseYrc, stringifyAss, stringifyEslrc, stringifyLqe, stringifyLrc, stringifyLrcA2, stringifyLyl, stringifyLys, stringifyQrc, stringifyTTML, stringifyYrc, stringifylrcA2 };
373
+ export { type LrcAuxiliaryLineOptions, type LrcAuxiliaryLinesOptions, type LrcEndTimestampOptions, type LyricLine, type LyricParseResult, type LyricWord, type ParseLrcLikeOptions, type StringifyLrcLikeOptions, type TTMLLyric, decryptQrcHex, encryptQrcHex, parseEslrc, parseLqe, parseLrc, parseLrcA2, parseLrcLike, parseLyl, parseLys, parseQrc, parseSPL, parseTTML, parseYrc, stringifyAss, stringifyEslrc, stringifyLqe, stringifyLrc, stringifyLrcA2, stringifyLrcLike, stringifyLyl, stringifyLys, stringifyQrc, stringifySPL, stringifyTTML, stringifyYrc, stringifylrcA2 };
227
374
  //# sourceMappingURL=amll-lyric.d.cts.map