@applemusic-like-lyrics/lyric 0.0.2 → 0.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.
package/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Lyric parser/writer for AMLL
2
2
 
3
+ > 警告:此为个人项目,且尚未完成开发,可能仍有大量问题,所以请勿直接用于生产环境!
4
+
5
+ ![AMLL-Lyric](https://img.shields.io/badge/Lyric-%23FB8C84?label=Apple%20Music-like%20Lyrics&labelColor=%23FB5C74)
6
+ [![npm](https://img.shields.io/npm/dt/%40applemusic-like-lyrics/lyric)](https://www.npmjs.com/package/@applemusic-like-lyrics/lyric)
7
+ [![npm](https://img.shields.io/npm/v/%40applemusic-like-lyrics%2Flyric)](https://www.npmjs.com/package/@applemusic-like-lyrics/lyric)
8
+
3
9
  一个 AMLL 的歌词解析/生成模块,使用 Rust 编写,并通过 `wasm-pack`
4
10
  构建成 WASM 模块以提供给其他项目使用。
5
11
 
@@ -17,3 +23,36 @@
17
23
  - QQ 音乐逐词歌词格式 `.qrc`
18
24
  - Lyricify Syllable 逐词歌词格式 `.lys`
19
25
  - ASS 字幕格式 `.ass`
26
+
27
+ ## 与 Core 歌词组件一起使用
28
+
29
+ 在和二者合用的时候,需要注意**两者的歌词行结构并不完全相同**,需要进行诸如(以 LyRiC 举例)下面的方式进行转换方可被歌词组件正确解析:
30
+
31
+ ```typescript
32
+ import { parseLrc } from "@applemusic-like-lyrics/lyric";
33
+ const lines = parseLrc("[00:00.00]test");
34
+ const converted = lines.map((line, i, lines) => ({
35
+ words: [
36
+ {
37
+ word: line.words[0]?.word ?? "",
38
+ startTime: line.words[0]?.startTime ?? 0,
39
+ endTime: lines[i + 1]?.words?.[0]?.startTime ?? Infinity,
40
+ },
41
+ ],
42
+ startTime: line.words[0]?.startTime ?? 0,
43
+ endTime: lines[i + 1]?.words?.[0]?.startTime ?? Infinity,
44
+ translatedLyric: "",
45
+ romanLyric: "",
46
+ isBG: false,
47
+ isDuet: false,
48
+ }));
49
+ // 此时就可以将 converted 传给 LyricPlayer 了
50
+ ```
51
+
52
+ 推荐使用 TypeScript,这样可以更方便地查错。
53
+
54
+ ## 构建
55
+
56
+ ```shell
57
+ wasm-pack build --target bundler --release --scope applemusic-like-lyrics
58
+ ```
package/package.json CHANGED
@@ -4,18 +4,26 @@
4
4
  "SteveXMH <39523898+Steve-xmh@users.noreply.github.com>"
5
5
  ],
6
6
  "description": "一个歌词解析/生成模块,着重于歌词内容解析,支持多种格式",
7
- "version": "0.0.2",
7
+ "version": "0.1.0",
8
8
  "license": "GPL-3.0",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/Steve-xmh/applemusic-like-lyrics"
12
+ },
13
+ "scripts": {
14
+ "build": "wasm-pack build --release",
15
+ "build:dev": "wasm-pack build --dev",
16
+ "fmt": "cargo fmt"
17
+ },
9
18
  "files": [
10
- "lyric_bg.wasm",
11
- "lyric.js",
12
- "lyric_bg.js",
13
- "lyric.d.ts"
19
+ "pkg/*.wasm",
20
+ "pkg/*.js",
21
+ "pkg/*.d.ts"
14
22
  ],
15
- "module": "lyric.js",
16
- "types": "lyric.d.ts",
23
+ "module": "pkg/lyric.js",
24
+ "types": "pkg/lyric.d.ts",
17
25
  "sideEffects": [
18
- "./lyric.js",
19
- "./snippets/*"
26
+ "./pkg/lyric.js",
27
+ "./pkg/snippets/*"
20
28
  ]
21
29
  }
@@ -10,7 +10,6 @@
10
10
  */
11
11
  export function set_panic_hook(): void;
12
12
 
13
-
14
13
  /**
15
14
  * 解析 LyRiC 格式的歌词字符串
16
15
  * @param src 歌词字符串
@@ -67,6 +66,20 @@ export function parseLys(src: string): LyricLine[];
67
66
  */
68
67
  export function stringifyLys(lines: LyricLine[]): string;
69
68
 
69
+ /**
70
+ * 解析 ESLyric 格式的歌词字符串
71
+ * @param src 歌词字符串
72
+ * @returns 成功解析出来的歌词
73
+ */
74
+ export function parseEslrc(src: string): LyricLine[];
75
+
76
+ /**
77
+ * 将歌词数组转换为 ESLyric 格式的字符串
78
+ * @param lines 歌词数组
79
+ * @returns ESLyric 格式的字符串
80
+ */
81
+ export function stringifyEslrc(lines: LyricLine[]): string;
82
+
70
83
  /**
71
84
  * 将歌词数组转换为 ASS 字幕格式的字符串
72
85
  *
@@ -90,7 +103,7 @@ export interface LyricWord {
90
103
  endTime: number;
91
104
  /** 单词 */
92
105
  word: string;
93
- };
106
+ }
94
107
 
95
108
  /**
96
109
  * 一行歌词,存储多个单词
@@ -112,7 +125,14 @@ export interface LyricLine {
112
125
  * 此选项只有作为 Lyricify Syllable 文件格式导入导出时才有意义
113
126
  */
114
127
  isDuet?: boolean;
115
- };
128
+ }
116
129
 
130
+ /**
131
+ * 解密十六进制字符串格式的 Qrc 歌词数据
132
+ * 解密后可去头尾 XML 数据后通过调用 `parseQrc` 解析歌词行
133
+ * @param hexData 十六进制格式的字符串,代表被加密的歌词数据
134
+ * @returns 被解密出来的歌词字符串,是前后有 XML 混合的 QRC 歌词
135
+ */
136
+ export function decryptQrcHex(hexData: string): string;
117
137
 
118
138
 
@@ -205,14 +205,58 @@ function debugString(val) {
205
205
  // TODO we could test for more things here, like `Set`s and `Map`s.
206
206
  return className;
207
207
  }
208
+ /**
209
+ * @param {any} lrc
210
+ * @returns {string}
211
+ */
212
+ export function stringifyAss(lrc) {
213
+ let deferred1_0;
214
+ let deferred1_1;
215
+ try {
216
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
217
+ wasm.stringifyAss(retptr, addHeapObject(lrc));
218
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
219
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
220
+ deferred1_0 = r0;
221
+ deferred1_1 = r1;
222
+ return getStringFromWasm0(r0, r1);
223
+ } finally {
224
+ wasm.__wbindgen_add_to_stack_pointer(16);
225
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
226
+ }
227
+ }
228
+
229
+ /**
230
+ * @param {string} hex_data
231
+ * @returns {string}
232
+ */
233
+ export function decryptQrcHex(hex_data) {
234
+ let deferred2_0;
235
+ let deferred2_1;
236
+ try {
237
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
238
+ const ptr0 = passStringToWasm0(hex_data, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
239
+ const len0 = WASM_VECTOR_LEN;
240
+ wasm.decryptQrcHex(retptr, ptr0, len0);
241
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
242
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
243
+ deferred2_0 = r0;
244
+ deferred2_1 = r1;
245
+ return getStringFromWasm0(r0, r1);
246
+ } finally {
247
+ wasm.__wbindgen_add_to_stack_pointer(16);
248
+ wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
249
+ }
250
+ }
251
+
208
252
  /**
209
253
  * @param {string} src
210
254
  * @returns {any}
211
255
  */
212
- export function parseLrc(src) {
256
+ export function parseEslrc(src) {
213
257
  const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
214
258
  const len0 = WASM_VECTOR_LEN;
215
- const ret = wasm.parseLrc(ptr0, len0);
259
+ const ret = wasm.parseEslrc(ptr0, len0);
216
260
  return takeObject(ret);
217
261
  }
218
262
 
@@ -220,12 +264,12 @@ export function parseLrc(src) {
220
264
  * @param {any} lrc
221
265
  * @returns {string}
222
266
  */
223
- export function stringifyLrc(lrc) {
267
+ export function stringifyEslrc(lrc) {
224
268
  let deferred1_0;
225
269
  let deferred1_1;
226
270
  try {
227
271
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
228
- wasm.stringifyLrc(retptr, addHeapObject(lrc));
272
+ wasm.stringifyEslrc(retptr, addHeapObject(lrc));
229
273
  var r0 = getInt32Memory0()[retptr / 4 + 0];
230
274
  var r1 = getInt32Memory0()[retptr / 4 + 1];
231
275
  deferred1_0 = r0;
@@ -241,10 +285,10 @@ export function stringifyLrc(lrc) {
241
285
  * @param {string} src
242
286
  * @returns {any}
243
287
  */
244
- export function parseQrc(src) {
288
+ export function parseLrc(src) {
245
289
  const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
246
290
  const len0 = WASM_VECTOR_LEN;
247
- const ret = wasm.parseQrc(ptr0, len0);
291
+ const ret = wasm.parseLrc(ptr0, len0);
248
292
  return takeObject(ret);
249
293
  }
250
294
 
@@ -252,12 +296,12 @@ export function parseQrc(src) {
252
296
  * @param {any} lrc
253
297
  * @returns {string}
254
298
  */
255
- export function stringifyQrc(lrc) {
299
+ export function stringifyLrc(lrc) {
256
300
  let deferred1_0;
257
301
  let deferred1_1;
258
302
  try {
259
303
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
260
- wasm.stringifyQrc(retptr, addHeapObject(lrc));
304
+ wasm.stringifyLrc(retptr, addHeapObject(lrc));
261
305
  var r0 = getInt32Memory0()[retptr / 4 + 0];
262
306
  var r1 = getInt32Memory0()[retptr / 4 + 1];
263
307
  deferred1_0 = r0;
@@ -269,26 +313,14 @@ export function stringifyQrc(lrc) {
269
313
  }
270
314
  }
271
315
 
272
- /**
273
- * When the `console_error_panic_hook` feature is enabled, we can call the
274
- * `set_panic_hook` function at least once during initialization, and then
275
- * we will get better error messages if our code ever panics.
276
- *
277
- * For more details see
278
- * https://github.com/rustwasm/console_error_panic_hook#readme
279
- */
280
- export function set_panic_hook() {
281
- wasm.set_panic_hook();
282
- }
283
-
284
316
  /**
285
317
  * @param {string} src
286
318
  * @returns {any}
287
319
  */
288
- export function parseYrc(src) {
320
+ export function parseLys(src) {
289
321
  const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
290
322
  const len0 = WASM_VECTOR_LEN;
291
- const ret = wasm.parseYrc(ptr0, len0);
323
+ const ret = wasm.parseLys(ptr0, len0);
292
324
  return takeObject(ret);
293
325
  }
294
326
 
@@ -296,12 +328,12 @@ export function parseYrc(src) {
296
328
  * @param {any} lrc
297
329
  * @returns {string}
298
330
  */
299
- export function stringifyYrc(lrc) {
331
+ export function stringifyLys(lrc) {
300
332
  let deferred1_0;
301
333
  let deferred1_1;
302
334
  try {
303
335
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
304
- wasm.stringifyYrc(retptr, addHeapObject(lrc));
336
+ wasm.stringifyLys(retptr, addHeapObject(lrc));
305
337
  var r0 = getInt32Memory0()[retptr / 4 + 0];
306
338
  var r1 = getInt32Memory0()[retptr / 4 + 1];
307
339
  deferred1_0 = r0;
@@ -317,10 +349,10 @@ export function stringifyYrc(lrc) {
317
349
  * @param {string} src
318
350
  * @returns {any}
319
351
  */
320
- export function parseLys(src) {
352
+ export function parseQrc(src) {
321
353
  const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
322
354
  const len0 = WASM_VECTOR_LEN;
323
- const ret = wasm.parseLys(ptr0, len0);
355
+ const ret = wasm.parseQrc(ptr0, len0);
324
356
  return takeObject(ret);
325
357
  }
326
358
 
@@ -328,12 +360,12 @@ export function parseLys(src) {
328
360
  * @param {any} lrc
329
361
  * @returns {string}
330
362
  */
331
- export function stringifyLys(lrc) {
363
+ export function stringifyQrc(lrc) {
332
364
  let deferred1_0;
333
365
  let deferred1_1;
334
366
  try {
335
367
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
336
- wasm.stringifyLys(retptr, addHeapObject(lrc));
368
+ wasm.stringifyQrc(retptr, addHeapObject(lrc));
337
369
  var r0 = getInt32Memory0()[retptr / 4 + 0];
338
370
  var r1 = getInt32Memory0()[retptr / 4 + 1];
339
371
  deferred1_0 = r0;
@@ -345,16 +377,39 @@ export function stringifyLys(lrc) {
345
377
  }
346
378
  }
347
379
 
380
+ /**
381
+ * When the `console_error_panic_hook` feature is enabled, we can call the
382
+ * `set_panic_hook` function at least once during initialization, and then
383
+ * we will get better error messages if our code ever panics.
384
+ *
385
+ * For more details see
386
+ * https://github.com/rustwasm/console_error_panic_hook#readme
387
+ */
388
+ export function set_panic_hook() {
389
+ wasm.set_panic_hook();
390
+ }
391
+
392
+ /**
393
+ * @param {string} src
394
+ * @returns {any}
395
+ */
396
+ export function parseYrc(src) {
397
+ const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
398
+ const len0 = WASM_VECTOR_LEN;
399
+ const ret = wasm.parseYrc(ptr0, len0);
400
+ return takeObject(ret);
401
+ }
402
+
348
403
  /**
349
404
  * @param {any} lrc
350
405
  * @returns {string}
351
406
  */
352
- export function stringifyAss(lrc) {
407
+ export function stringifyYrc(lrc) {
353
408
  let deferred1_0;
354
409
  let deferred1_1;
355
410
  try {
356
411
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
357
- wasm.stringifyAss(retptr, addHeapObject(lrc));
412
+ wasm.stringifyYrc(retptr, addHeapObject(lrc));
358
413
  var r0 = getInt32Memory0()[retptr / 4 + 0];
359
414
  var r1 = getInt32Memory0()[retptr / 4 + 1];
360
415
  deferred1_0 = r0;
@@ -466,6 +521,11 @@ export function __wbindgen_number_get(arg0, arg1) {
466
521
  getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
467
522
  };
468
523
 
524
+ export function __wbindgen_as_number(arg0) {
525
+ const ret = +getObject(arg0);
526
+ return ret;
527
+ };
528
+
469
529
  export function __wbindgen_number_new(arg0) {
470
530
  const ret = arg0;
471
531
  return addHeapObject(ret);
@@ -481,12 +541,12 @@ export function __wbindgen_string_new(arg0, arg1) {
481
541
  return addHeapObject(ret);
482
542
  };
483
543
 
484
- export function __wbg_getwithrefkey_5e6d9547403deab8(arg0, arg1) {
544
+ export function __wbg_getwithrefkey_4a92a5eca60879b9(arg0, arg1) {
485
545
  const ret = getObject(arg0)[getObject(arg1)];
486
546
  return addHeapObject(ret);
487
547
  };
488
548
 
489
- export function __wbg_set_841ac57cff3d672b(arg0, arg1, arg2) {
549
+ export function __wbg_set_9182712abebf82ef(arg0, arg1, arg2) {
490
550
  getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
491
551
  };
492
552
 
Binary file
@@ -0,0 +1,21 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export const memory: WebAssembly.Memory;
4
+ export function stringifyAss(a: number, b: number): void;
5
+ export function decryptQrcHex(a: number, b: number, c: number): void;
6
+ export function parseEslrc(a: number, b: number): number;
7
+ export function stringifyEslrc(a: number, b: number): void;
8
+ export function parseLrc(a: number, b: number): number;
9
+ export function stringifyLrc(a: number, b: number): void;
10
+ export function parseLys(a: number, b: number): number;
11
+ export function stringifyLys(a: number, b: number): void;
12
+ export function parseQrc(a: number, b: number): number;
13
+ export function stringifyQrc(a: number, b: number): void;
14
+ export function set_panic_hook(): void;
15
+ export function parseYrc(a: number, b: number): number;
16
+ export function stringifyYrc(a: number, b: number): void;
17
+ export function __wbindgen_malloc(a: number, b: number): number;
18
+ export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number;
19
+ export function __wbindgen_add_to_stack_pointer(a: number): number;
20
+ export function __wbindgen_free(a: number, b: number, c: number): void;
21
+ export function __wbindgen_exn_store(a: number): void;
package/lyric_bg.wasm DELETED
Binary file
File without changes