@applemusic-like-lyrics/core 0.4.2 → 0.5.1
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/LICENSE +661 -0
- package/README.md +2 -2
- package/dist/amll-core.cjs +1048 -1567
- package/dist/amll-core.cjs.map +1 -1
- package/dist/amll-core.d.cts +260 -252
- package/dist/amll-core.d.mts +260 -252
- package/dist/amll-core.mjs +1048 -1567
- package/dist/amll-core.mjs.map +1 -1
- package/dist/style.css +112 -210
- package/package.json +87 -69
package/dist/amll-core.d.mts
CHANGED
|
@@ -368,7 +368,30 @@ declare class Spring {
|
|
|
368
368
|
getCurrentPosition(): number;
|
|
369
369
|
}
|
|
370
370
|
//#endregion
|
|
371
|
-
//#region src/lyric-player/
|
|
371
|
+
//#region src/lyric-player/dom/interlude-dots.d.ts
|
|
372
|
+
declare class InterludeDots implements HasElement, Disposable {
|
|
373
|
+
private element;
|
|
374
|
+
private dot0;
|
|
375
|
+
private dot1;
|
|
376
|
+
private dot2;
|
|
377
|
+
private left;
|
|
378
|
+
private top;
|
|
379
|
+
private playing;
|
|
380
|
+
private lastStyle;
|
|
381
|
+
private currentInterlude?;
|
|
382
|
+
private currentTime;
|
|
383
|
+
private targetBreatheDuration;
|
|
384
|
+
constructor();
|
|
385
|
+
getElement(): HTMLElement;
|
|
386
|
+
setTransform(left?: number, top?: number): void;
|
|
387
|
+
setInterlude(interlude?: [number, number]): void;
|
|
388
|
+
pause(): void;
|
|
389
|
+
resume(): void;
|
|
390
|
+
update(delta?: number): void;
|
|
391
|
+
dispose(): void;
|
|
392
|
+
}
|
|
393
|
+
//#endregion
|
|
394
|
+
//#region src/lyric-player/base/bottom-line.d.ts
|
|
372
395
|
interface LineTransforms$1 {
|
|
373
396
|
posX: Spring;
|
|
374
397
|
posY: Spring;
|
|
@@ -397,51 +420,210 @@ declare class BottomLineEl implements HasElement, Disposable {
|
|
|
397
420
|
dispose(): void;
|
|
398
421
|
}
|
|
399
422
|
//#endregion
|
|
400
|
-
//#region src/lyric-player/
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
423
|
+
//#region src/lyric-player/base/consts.d.ts
|
|
424
|
+
type ValueOf<T extends Record<PropertyKey, unknown>> = T[keyof T];
|
|
425
|
+
/** 歌词中不雅用语的掩码模式 */
|
|
426
|
+
declare const MaskObsceneWordsMode: {
|
|
427
|
+
/** 禁用任何不雅用语掩码 */readonly Disabled: ""; /** 完全掩码所有不雅用语 */
|
|
428
|
+
readonly FullMask: "full-mask"; /** 保留首尾字符,屏蔽中间字符 */
|
|
429
|
+
readonly PartialMask: "partial-mask";
|
|
430
|
+
};
|
|
431
|
+
/** 歌词中不雅用语的掩码模式枚举类型,见 {@link MaskObsceneWordsMode} */
|
|
432
|
+
type MaskObsceneWordsMode = ValueOf<typeof MaskObsceneWordsMode>;
|
|
433
|
+
/**
|
|
434
|
+
* 歌词行的渲染模式
|
|
435
|
+
* @internal
|
|
436
|
+
*/
|
|
437
|
+
declare const LyricLineRenderMode: {
|
|
438
|
+
readonly SOLID: 0;
|
|
439
|
+
readonly GRADIENT: 1;
|
|
440
|
+
};
|
|
441
|
+
/**
|
|
442
|
+
* 歌词行的渲染模式枚举类型,见 {@link LyricLineRenderMode}
|
|
443
|
+
* @internal
|
|
444
|
+
*/
|
|
445
|
+
type LyricLineRenderMode = ValueOf<typeof LyricLineRenderMode>;
|
|
446
|
+
/** 布局对齐锚点 */
|
|
447
|
+
declare const LayoutAlignAnchor: {
|
|
448
|
+
readonly Top: "top";
|
|
449
|
+
readonly Center: "center";
|
|
450
|
+
readonly Bottom: "bottom";
|
|
451
|
+
};
|
|
452
|
+
/** 布局对齐锚点枚举类型,见 {@link LayoutAlignAnchor} */
|
|
453
|
+
type LayoutAlignAnchor = ValueOf<typeof LayoutAlignAnchor>;
|
|
454
|
+
//#endregion
|
|
455
|
+
//#region src/lyric-player/base/line.d.ts
|
|
456
|
+
interface LineTransforms {
|
|
457
|
+
scale: Spring;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* 所有标准歌词行的基类
|
|
461
|
+
* @internal
|
|
462
|
+
*/
|
|
463
|
+
declare abstract class LyricLineBase extends EventTarget implements Disposable {
|
|
464
|
+
protected top: number;
|
|
465
|
+
protected scale: number;
|
|
466
|
+
protected blur: number;
|
|
467
|
+
protected opacity: number;
|
|
468
|
+
protected delay: number;
|
|
469
|
+
readonly lineTransforms: LineTransforms;
|
|
470
|
+
/**
|
|
471
|
+
* 用于 CJK 词语边界检测的分词器
|
|
472
|
+
*/
|
|
473
|
+
static readonly wordSegmenter: Intl.Segmenter | null;
|
|
474
|
+
/**
|
|
475
|
+
* Unicode 标准的全局 Grapheme Cluster 分词器
|
|
476
|
+
* 用于正确处理 emoji、复合字符等
|
|
477
|
+
*/
|
|
478
|
+
static readonly graphemeSegmenter: Intl.Segmenter | null;
|
|
479
|
+
abstract getLine(): LyricLine;
|
|
480
|
+
abstract enable(time?: number, shouldPlay?: boolean): void;
|
|
481
|
+
abstract disable(): void;
|
|
482
|
+
abstract resume(): void;
|
|
483
|
+
abstract pause(): void;
|
|
484
|
+
abstract onLineSizeChange(size: [number, number]): void;
|
|
485
|
+
setTransform(scale?: number, opacity?: number, blur?: number, _force?: boolean, delay?: number, _mode?: LyricLineRenderMode): void;
|
|
486
|
+
rebuildElement(): void;
|
|
487
|
+
/**
|
|
488
|
+
* 判定歌词是否可以应用强调辉光效果
|
|
489
|
+
*
|
|
490
|
+
* 果子在对辉光效果的解释是一种强调(emphasized)效果
|
|
491
|
+
*
|
|
492
|
+
* 条件是一个单词时长大于等于 1s 且长度小于等于 7
|
|
493
|
+
*
|
|
494
|
+
* @param word 单词
|
|
495
|
+
* @returns 是否可以应用强调辉光效果
|
|
496
|
+
*/
|
|
497
|
+
static shouldEmphasize(word: LyricWord): boolean;
|
|
498
|
+
abstract update(delta?: number): void;
|
|
420
499
|
dispose(): void;
|
|
421
500
|
}
|
|
422
501
|
//#endregion
|
|
423
|
-
//#region src/lyric-player/base.d.ts
|
|
502
|
+
//#region src/lyric-player/base/group.d.ts
|
|
503
|
+
interface LyricPlayerFlags {
|
|
504
|
+
getEnableSpring(): boolean;
|
|
505
|
+
getEnableScale(): boolean;
|
|
506
|
+
getIsPlaying(): boolean;
|
|
507
|
+
getAlwaysPostpositionBackground(): boolean;
|
|
508
|
+
}
|
|
509
|
+
declare abstract class LyricLineGroupBase<T extends LyricLineBase = LyricLineBase> implements Disposable {
|
|
510
|
+
mainLine: T;
|
|
511
|
+
bgLine?: T | undefined;
|
|
512
|
+
protected abstract readonly lyricPlayer: LyricPlayerFlags;
|
|
513
|
+
posY: Spring;
|
|
514
|
+
bgSlideY: Spring;
|
|
515
|
+
top: number;
|
|
516
|
+
delay: number;
|
|
517
|
+
isActive: boolean;
|
|
518
|
+
opacity: number;
|
|
519
|
+
blur: number;
|
|
520
|
+
isBgFirst: boolean;
|
|
521
|
+
constructor(mainLine: T, bgLine?: T | undefined);
|
|
522
|
+
get startTime(): number;
|
|
523
|
+
get endTime(): number;
|
|
524
|
+
onLineSizeChange(size: [number, number]): void;
|
|
525
|
+
setTransform(top: number, force: boolean, delay: number, isActive: boolean, opacity: number, blur: number): void;
|
|
526
|
+
private setLineTransformations;
|
|
527
|
+
protected abstract renderStyles(): void;
|
|
528
|
+
abstract get isInSight(): boolean;
|
|
529
|
+
update(delta: number): void;
|
|
530
|
+
rebuildAllLines(): void;
|
|
531
|
+
enable(time?: number, shouldPlay?: boolean): void;
|
|
532
|
+
disable(): void;
|
|
533
|
+
dispose(): void;
|
|
534
|
+
}
|
|
535
|
+
//#endregion
|
|
536
|
+
//#region src/lyric-player/base/layout.d.ts
|
|
424
537
|
/**
|
|
425
|
-
*
|
|
538
|
+
* 播放器布局状态。
|
|
539
|
+
*
|
|
540
|
+
* 这部分状态保存布局计算阶段所需的配置项与缓存值,
|
|
541
|
+
* 例如对齐方式、间奏点尺寸、上一轮布局命中的目标行等。
|
|
542
|
+
* 不描述播放时间线或用户滚动交互,仅记录当前歌词排布。
|
|
543
|
+
*/
|
|
544
|
+
interface PlayerLayoutState {
|
|
545
|
+
/** 间奏点元素当前测量得到的尺寸 */
|
|
546
|
+
interludeDotsSize: [number, number];
|
|
547
|
+
/** 上一轮布局实际对齐的目标歌词行索引 */
|
|
548
|
+
targetAlignIndex: number;
|
|
549
|
+
/** 上一轮布局时是否处于间奏区间 */
|
|
550
|
+
lastInterludeState: boolean;
|
|
551
|
+
/** 当前歌词目标行的对齐锚点 */
|
|
552
|
+
alignAnchor: LayoutAlignAnchor;
|
|
553
|
+
/** 当前歌词目标行在播放器高度中的相对对齐位置 */
|
|
554
|
+
alignPosition: number;
|
|
555
|
+
/** 视口上下额外保留的预渲染距离,单位为像素 */
|
|
556
|
+
overscanPx: number;
|
|
557
|
+
}
|
|
558
|
+
//#endregion
|
|
559
|
+
//#region src/lyric-player/base/scroll.d.ts
|
|
560
|
+
/**
|
|
561
|
+
* 播放器滚动状态。
|
|
562
|
+
*
|
|
563
|
+
* 这部分状态描述用户手势/滚轮滚动产生的临时偏移,以及当前允许滚动的范围。
|
|
564
|
+
* 改状态仅记录用户如何把当前视图上下拖动,不决定应该滚动到哪一行,
|
|
565
|
+
* 后者由时间线状态与布局计算共同决定。
|
|
566
|
+
*/
|
|
567
|
+
interface PlayerScrollState {
|
|
568
|
+
/** 允许的滚动偏移范围 */
|
|
569
|
+
scrollBoundary: {
|
|
570
|
+
/** 允许的最小偏移量 */minOffset: number; /** 允许的最大偏移量 */
|
|
571
|
+
maxOffset: number;
|
|
572
|
+
};
|
|
573
|
+
/** 当前用户滚动带来的额外偏移量 */
|
|
574
|
+
scrollOffset: number;
|
|
575
|
+
/** 是否允许用户通过手势或滚轮滚动歌词视图 */
|
|
576
|
+
allowScroll: boolean;
|
|
577
|
+
/** 是否处于用户滚动过,尚未回归自动对齐的状态 */
|
|
578
|
+
isScrolled: boolean;
|
|
579
|
+
/** 是否正在进行滚动交互或惯性滚动 */
|
|
580
|
+
isUserScrolling: boolean;
|
|
581
|
+
}
|
|
582
|
+
//#endregion
|
|
583
|
+
//#region src/lyric-player/base/timeline.d.ts
|
|
584
|
+
/**
|
|
585
|
+
* 播放时间线状态。
|
|
586
|
+
*
|
|
587
|
+
* 描述播放器在时间轴上的当前位置,当前处于激活状态的歌词组信息
|
|
588
|
+
*/
|
|
589
|
+
interface PlayerTimelineState {
|
|
590
|
+
/** 当前播放时间,单位为毫秒 */
|
|
591
|
+
currentTime: number;
|
|
592
|
+
/** 上一次提交到时间线状态的播放时间,单位为毫秒 */
|
|
593
|
+
lastCurrentTime: number;
|
|
594
|
+
/** 热行:当前时间 {@link currentTime} 正在命中的组(含主行+可能的背景行) */
|
|
595
|
+
hotGroups: Set<number>;
|
|
596
|
+
/** 缓冲组:UI 上还保持激活表现的组索引,通常包含热组,和刚结束仍在过渡中的组 */
|
|
597
|
+
bufferedGroups: Set<number>;
|
|
598
|
+
/** 当前应滚动对齐到的歌词组索引 */
|
|
599
|
+
scrollToIndex: number;
|
|
600
|
+
/** 是否正在拖拽进度条。若是,更新时丢弃缓冲行,并根据当前时间直接计算热行 */
|
|
601
|
+
isSeeking: boolean;
|
|
602
|
+
/** 是否处于播放状态 */
|
|
603
|
+
isPlaying: boolean;
|
|
604
|
+
/** 是否已经完成至少一次初始布局 */
|
|
605
|
+
initialLayoutFinished: boolean;
|
|
606
|
+
}
|
|
607
|
+
//#endregion
|
|
608
|
+
//#region src/lyric-player/base/index.d.ts
|
|
609
|
+
/**
|
|
610
|
+
* 歌词播放器的基类,已经包含了有关歌词操作和排版的功能,
|
|
611
|
+
* 子类需要为其实现对应的显示展示操作
|
|
426
612
|
*/
|
|
427
613
|
declare abstract class LyricPlayerBase extends EventTarget implements HasElement, Disposable {
|
|
428
614
|
protected element: HTMLElement;
|
|
429
615
|
abstract get baseFontSize(): number;
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
lyricLinesSize: WeakMap<LyricLineBase, [number, number]>;
|
|
616
|
+
/** 播放时间线状态 */
|
|
617
|
+
protected timelineState: PlayerTimelineState;
|
|
433
618
|
/** @internal */
|
|
434
|
-
|
|
619
|
+
lyricGroupElementMap: WeakMap<Element, LyricLineGroupBase>;
|
|
435
620
|
protected currentLyricLines: LyricLine[];
|
|
436
621
|
protected processedLines: LyricLine[];
|
|
437
622
|
protected lyricLinesIndexes: WeakMap<LyricLineBase, number>;
|
|
438
|
-
protected hotLines: Set<number>;
|
|
439
|
-
protected bufferedLines: Set<number>;
|
|
440
623
|
protected isNonDynamic: boolean;
|
|
441
624
|
protected hasDuetLine: boolean;
|
|
442
|
-
protected scrollToIndex: number;
|
|
443
625
|
protected disableSpring: boolean;
|
|
444
|
-
protected
|
|
626
|
+
protected layoutState: PlayerLayoutState;
|
|
445
627
|
protected interludeDots: InterludeDots;
|
|
446
628
|
protected bottomLine: BottomLineEl;
|
|
447
629
|
protected enableBlur: boolean;
|
|
@@ -449,28 +631,14 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
449
631
|
protected maskObsceneWords: MaskObsceneWordsMode;
|
|
450
632
|
protected maskObsceneWordChar: string;
|
|
451
633
|
protected hidePassedLines: boolean;
|
|
452
|
-
protected
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
protected lastCurrentTime: number;
|
|
456
|
-
protected alignAnchor: "top" | "bottom" | "center";
|
|
457
|
-
protected alignPosition: number;
|
|
458
|
-
protected scrollOffset: number;
|
|
634
|
+
protected scrollState: PlayerScrollState;
|
|
635
|
+
currentLyricGroups: LyricLineGroupBase[];
|
|
636
|
+
lyricGroupSize: WeakMap<LyricLineGroupBase, [number, number]>;
|
|
459
637
|
readonly size: [number, number];
|
|
460
|
-
protected allowScroll: boolean;
|
|
461
638
|
protected isPageVisible: boolean;
|
|
462
639
|
protected optimizeOptions: OptimizeLyricOptions;
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
* 标记用户是否正在进行滚动交互
|
|
466
|
-
*/
|
|
467
|
-
protected isUserScrolling: boolean;
|
|
468
|
-
protected wheelTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
469
|
-
/**
|
|
470
|
-
* 视图额外预渲染(overscan)距离,单位:像素。
|
|
471
|
-
* 用于决定在视口之外多少距离内也认为是“可见”,以便提前创建/保留行元素。
|
|
472
|
-
*/
|
|
473
|
-
protected overscanPx: number;
|
|
640
|
+
/** 是否强制让背景人声行始终后置(即始终在主歌词下方显示,不前置背景人声) */
|
|
641
|
+
protected alwaysPostpositionBackground: boolean;
|
|
474
642
|
protected posXSpringParams: Partial<SpringParams>;
|
|
475
643
|
protected posYSpringParams: Partial<SpringParams>;
|
|
476
644
|
protected scaleSpringParams: Partial<SpringParams>;
|
|
@@ -478,16 +646,12 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
478
646
|
private onPageShow;
|
|
479
647
|
private onPageHide;
|
|
480
648
|
private scrolledHandler;
|
|
481
|
-
protected isScrolled: boolean;
|
|
482
649
|
/** @internal */
|
|
483
650
|
resizeObserver: ResizeObserver;
|
|
484
651
|
protected wordFadeWidth: number;
|
|
485
|
-
protected targetAlignIndex: number;
|
|
486
|
-
protected lastInterludeState: boolean;
|
|
487
652
|
constructor(element?: HTMLElement);
|
|
488
653
|
private beginScrollHandler;
|
|
489
654
|
private endScrollHandler;
|
|
490
|
-
private limitScrollOffset;
|
|
491
655
|
/**
|
|
492
656
|
* 设置文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5,即一个全角字符的一半宽度
|
|
493
657
|
*
|
|
@@ -556,7 +720,7 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
556
720
|
* - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐
|
|
557
721
|
* @param alignAnchor 歌词行对齐方式,详情见函数说明
|
|
558
722
|
*/
|
|
559
|
-
setAlignAnchor(alignAnchor:
|
|
723
|
+
setAlignAnchor(alignAnchor: LayoutAlignAnchor): void;
|
|
560
724
|
/**
|
|
561
725
|
* 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,默认为 `0.5`
|
|
562
726
|
* @param alignPosition 一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置
|
|
@@ -583,15 +747,6 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
583
747
|
*/
|
|
584
748
|
getEnableSpring(): boolean;
|
|
585
749
|
/**
|
|
586
|
-
* 获取当前播放时间里是否处于间奏区间
|
|
587
|
-
* 如果是则会返回单位为毫秒的始末时间
|
|
588
|
-
* 否则返回 undefined
|
|
589
|
-
*
|
|
590
|
-
* 这个只允许内部调用
|
|
591
|
-
* @returns [开始时间,结束时间,大概处于的歌词行ID,下一句是否为对唱歌词] 或 undefined 如果不处于间奏区间
|
|
592
|
-
*/
|
|
593
|
-
protected getCurrentInterlude(): [number, number, number, boolean] | undefined;
|
|
594
|
-
/**
|
|
595
750
|
* 设置歌词的优化配置项,这些配置项默认全部开启
|
|
596
751
|
*
|
|
597
752
|
* 注意,如果在 `setLyricLines` 之后修改此配置,需要重新调用 `setLyricLines()` 才能对当前歌词生效
|
|
@@ -611,14 +766,14 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
611
766
|
*/
|
|
612
767
|
getIsPlaying(): boolean;
|
|
613
768
|
/**
|
|
614
|
-
*
|
|
615
|
-
*
|
|
769
|
+
* 设置当前播放进度,此时将会更新内部的歌词进度信息。
|
|
770
|
+
*
|
|
771
|
+
* 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好。
|
|
772
|
+
* 调用完成后,应每帧调用 {@link update} 方法来执行歌词动画效果。**此函数本身不会触发动画效果**。
|
|
616
773
|
*
|
|
617
|
-
* 调用完成后,可以每帧调用 `update` 函数来执行歌词动画效果
|
|
618
774
|
* @param time 当前播放进度,单位为毫秒
|
|
619
775
|
*/
|
|
620
776
|
setCurrentTime(time: number, isSeek?: boolean): void;
|
|
621
|
-
protected updateDynamicSpringParams(): void;
|
|
622
777
|
/**
|
|
623
778
|
* 重新布局定位歌词行的位置,调用完成后再逐帧调用 `update`
|
|
624
779
|
* 函数即可让歌词通过动画移动到目标位置。
|
|
@@ -637,7 +792,6 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
637
792
|
* @param force 是否绕过弹簧效果强制更新位置
|
|
638
793
|
*/
|
|
639
794
|
calcLayout(sync?: boolean, force?: boolean): Promise<void>;
|
|
640
|
-
protected calculateBlur(itemIndex: number, isActive: boolean, latestIndex: number): number;
|
|
641
795
|
/**
|
|
642
796
|
* 设置所有歌词行在横坐标上的弹簧属性,包括重量、弹力和阻力。
|
|
643
797
|
*
|
|
@@ -657,7 +811,6 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
657
811
|
* @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
|
|
658
812
|
*/
|
|
659
813
|
setLineScaleSpringParams(params?: Partial<SpringParams>): void;
|
|
660
|
-
protected isPlaying: boolean;
|
|
661
814
|
/**
|
|
662
815
|
* 暂停部分效果演出,目前会暂停播放间奏点的动画,且将背景歌词显示出来
|
|
663
816
|
*/
|
|
@@ -704,58 +857,22 @@ declare abstract class LyricPlayerBase extends EventTarget implements HasElement
|
|
|
704
857
|
* @returns 当前播放位置
|
|
705
858
|
*/
|
|
706
859
|
getCurrentTime(): number;
|
|
707
|
-
getElement(): HTMLElement;
|
|
708
|
-
dispose(): void;
|
|
709
|
-
}
|
|
710
|
-
interface LineTransforms {
|
|
711
|
-
posY: Spring;
|
|
712
|
-
scale: Spring;
|
|
713
|
-
}
|
|
714
|
-
/**
|
|
715
|
-
* 所有标准歌词行的基类
|
|
716
|
-
* @internal
|
|
717
|
-
*/
|
|
718
|
-
declare abstract class LyricLineBase extends EventTarget implements Disposable {
|
|
719
|
-
protected top: number;
|
|
720
|
-
protected scale: number;
|
|
721
|
-
protected blur: number;
|
|
722
|
-
protected opacity: number;
|
|
723
|
-
protected delay: number;
|
|
724
|
-
readonly lineTransforms: LineTransforms;
|
|
725
|
-
/**
|
|
726
|
-
* 用于 CJK 词语边界检测的分词器
|
|
727
|
-
*/
|
|
728
|
-
static readonly wordSegmenter: Intl.Segmenter | null;
|
|
729
860
|
/**
|
|
730
|
-
*
|
|
731
|
-
* 用于正确处理 emoji、复合字符等
|
|
732
|
-
*/
|
|
733
|
-
static readonly graphemeSegmenter: Intl.Segmenter | null;
|
|
734
|
-
abstract getLine(): LyricLine;
|
|
735
|
-
abstract enable(time?: number, shouldPlay?: boolean): void;
|
|
736
|
-
abstract disable(): void;
|
|
737
|
-
abstract resume(): void;
|
|
738
|
-
abstract pause(): void;
|
|
739
|
-
onLineSizeChange(_size: [number, number]): void;
|
|
740
|
-
setTransform(top?: number, scale?: number, opacity?: number, blur?: number, _force?: boolean, delay?: number, _mode?: LyricLineRenderMode): void;
|
|
741
|
-
rebuildElement(): void;
|
|
742
|
-
/**
|
|
743
|
-
* 判定歌词是否可以应用强调辉光效果
|
|
744
|
-
*
|
|
745
|
-
* 果子在对辉光效果的解释是一种强调(emphasized)效果
|
|
861
|
+
* 设置是否让背景人声行始终后置显示
|
|
746
862
|
*
|
|
747
|
-
*
|
|
748
|
-
*
|
|
749
|
-
* @param
|
|
750
|
-
* @returns 是否可以应用强调辉光效果
|
|
863
|
+
* 默认情况下,如果背景歌词开始时间早于主歌词,会在主歌词上方展示;
|
|
864
|
+
* 如果设置为 `true`,则无论时间顺序如何,背景歌词都会始终在主歌词下方展示
|
|
865
|
+
* @param enable 是否启用始终后置
|
|
751
866
|
*/
|
|
752
|
-
|
|
753
|
-
|
|
867
|
+
setAlwaysPostpositionBackground(enable: boolean): void;
|
|
868
|
+
/** 获取当前是否设置了让背景人声行始终后置显示 */
|
|
869
|
+
getAlwaysPostpositionBackground(): boolean;
|
|
870
|
+
getElement(): HTMLElement;
|
|
754
871
|
dispose(): void;
|
|
755
872
|
}
|
|
756
873
|
//#endregion
|
|
757
874
|
//#region src/lyric-player/dom/lyric-line.d.ts
|
|
758
|
-
interface RealWord
|
|
875
|
+
interface RealWord extends LyricWord {
|
|
759
876
|
mainElement: HTMLSpanElement;
|
|
760
877
|
subElements: HTMLSpanElement[];
|
|
761
878
|
elementAnimations: Animation[];
|
|
@@ -765,14 +882,14 @@ interface RealWord$1 extends LyricWord {
|
|
|
765
882
|
padding: number;
|
|
766
883
|
shouldEmphasize: boolean;
|
|
767
884
|
}
|
|
768
|
-
declare class RawLyricLineMouseEvent
|
|
885
|
+
declare class RawLyricLineMouseEvent extends MouseEvent {
|
|
769
886
|
readonly line: LyricLineBase;
|
|
770
887
|
constructor(line: LyricLineBase, event: MouseEvent);
|
|
771
888
|
}
|
|
772
|
-
type MouseEventMap
|
|
773
|
-
type MouseEventTypes
|
|
774
|
-
type MouseEventListener
|
|
775
|
-
declare class LyricLineEl
|
|
889
|
+
type MouseEventMap = { [evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never };
|
|
890
|
+
type MouseEventTypes = MouseEventMap[keyof MouseEventMap];
|
|
891
|
+
type MouseEventListener = (this: LyricLineEl, ev: RawLyricLineMouseEvent) => void;
|
|
892
|
+
declare class LyricLineEl extends LyricLineBase {
|
|
776
893
|
private lyricPlayer;
|
|
777
894
|
private lyricLine;
|
|
778
895
|
private element;
|
|
@@ -791,9 +908,9 @@ declare class LyricLineEl$1 extends LyricLineBase {
|
|
|
791
908
|
constructor(lyricPlayer: DomLyricPlayer, lyricLine?: LyricLine);
|
|
792
909
|
private listenersMap;
|
|
793
910
|
private readonly onMouseEvent;
|
|
794
|
-
addMouseEventListener(type: MouseEventTypes
|
|
795
|
-
removeMouseEventListener(type: MouseEventTypes
|
|
796
|
-
areWordsOnSameLine(word1: RealWord
|
|
911
|
+
addMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
912
|
+
removeMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
913
|
+
areWordsOnSameLine(word1: RealWord, word2: RealWord): boolean;
|
|
797
914
|
private isEnabled;
|
|
798
915
|
enable(maskAnimationTime?: number, shouldPlay?: boolean): Promise<void>;
|
|
799
916
|
disable(): void;
|
|
@@ -802,10 +919,8 @@ declare class LyricLineEl$1 extends LyricLineBase {
|
|
|
802
919
|
pause(): Promise<void>;
|
|
803
920
|
setMaskAnimationState(maskAnimationTime?: number): void;
|
|
804
921
|
getLine(): LyricLine;
|
|
805
|
-
private _prevParentEl;
|
|
806
922
|
private lastStyle;
|
|
807
923
|
show(): void;
|
|
808
|
-
hide(): void;
|
|
809
924
|
private rebuildStyle;
|
|
810
925
|
override rebuildElement(): void;
|
|
811
926
|
/** 设置翻译与音译行文本 */
|
|
@@ -824,14 +939,30 @@ declare class LyricLineEl$1 extends LyricLineBase {
|
|
|
824
939
|
getElement(): HTMLElement;
|
|
825
940
|
private updateMaskAlphaTargets;
|
|
826
941
|
private applyAlphaToDom;
|
|
827
|
-
override setTransform(
|
|
942
|
+
override setTransform(scale?: number, opacity?: number, blur?: number, force?: boolean, delay?: number, mode?: LyricLineRenderMode): void;
|
|
828
943
|
update(delta?: number): void;
|
|
829
944
|
_getDebugTargetPos(): string;
|
|
830
|
-
|
|
945
|
+
teardownContent(): void;
|
|
831
946
|
private disposeElements;
|
|
832
947
|
override dispose(): void;
|
|
833
948
|
}
|
|
834
949
|
//#endregion
|
|
950
|
+
//#region src/lyric-player/dom/lyric-group.d.ts
|
|
951
|
+
declare class LyricLineGroup extends LyricLineGroupBase<LyricLineEl> {
|
|
952
|
+
lyricPlayer: DomLyricPlayer;
|
|
953
|
+
element: HTMLElement;
|
|
954
|
+
bgWrapper?: HTMLElement;
|
|
955
|
+
private lastIsActive?;
|
|
956
|
+
constructor(lyricPlayer: DomLyricPlayer, mainLine: LyricLineEl);
|
|
957
|
+
get isInSight(): boolean;
|
|
958
|
+
show(): void;
|
|
959
|
+
hide(): void;
|
|
960
|
+
override update(delta: number): void;
|
|
961
|
+
addBgLine(bgLine: LyricLineEl): void;
|
|
962
|
+
protected renderStyles(): void;
|
|
963
|
+
override dispose(): void;
|
|
964
|
+
}
|
|
965
|
+
//#endregion
|
|
835
966
|
//#region src/lyric-player/dom/index.d.ts
|
|
836
967
|
/**
|
|
837
968
|
* 歌词行鼠标相关事件,可以获取到歌词行的索引和歌词行元素
|
|
@@ -854,108 +985,7 @@ type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;
|
|
|
854
985
|
* 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施
|
|
855
986
|
*/
|
|
856
987
|
declare class DomLyricPlayer extends LyricPlayerBase {
|
|
857
|
-
override
|
|
858
|
-
override onResize(): void;
|
|
859
|
-
readonly supportPlusLighter: boolean;
|
|
860
|
-
readonly supportMaskImage: boolean;
|
|
861
|
-
readonly innerSize: [number, number];
|
|
862
|
-
private readonly onLineClickedHandler;
|
|
863
|
-
/**
|
|
864
|
-
* 是否为非逐词歌词
|
|
865
|
-
* @internal
|
|
866
|
-
*/
|
|
867
|
-
_getIsNonDynamic(): boolean;
|
|
868
|
-
private _baseFontSize;
|
|
869
|
-
get baseFontSize(): number;
|
|
870
|
-
constructor();
|
|
871
|
-
private rebuildStyle;
|
|
872
|
-
override setWordFadeWidth(value?: number): void;
|
|
873
|
-
/**
|
|
874
|
-
* 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误
|
|
875
|
-
* @param lines 歌词数组
|
|
876
|
-
* @param initialTime 初始时间,默认为 0
|
|
877
|
-
*/
|
|
878
|
-
override setLyricLines(lines: LyricLine[], initialTime?: number): void;
|
|
879
|
-
override pause(): void;
|
|
880
|
-
override resume(): void;
|
|
881
|
-
override update(delta?: number): void;
|
|
882
|
-
override dispose(): void;
|
|
883
|
-
}
|
|
884
|
-
//#endregion
|
|
885
|
-
//#region src/lyric-player/dom-slim/lyric-line.d.ts
|
|
886
|
-
interface RealWord extends LyricWord {
|
|
887
|
-
mainElement: HTMLSpanElement;
|
|
888
|
-
subElements: HTMLSpanElement[];
|
|
889
|
-
elementAnimations: Animation[];
|
|
890
|
-
maskAnimations: Animation[];
|
|
891
|
-
width: number;
|
|
892
|
-
height: number;
|
|
893
|
-
padding: number;
|
|
894
|
-
shouldEmphasize: boolean;
|
|
895
|
-
}
|
|
896
|
-
declare class RawLyricLineMouseEvent extends MouseEvent {
|
|
897
|
-
readonly line: LyricLineEl;
|
|
898
|
-
constructor(line: LyricLineEl, event: MouseEvent);
|
|
899
|
-
}
|
|
900
|
-
type MouseEventMap = { [evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never };
|
|
901
|
-
type MouseEventTypes = MouseEventMap[keyof MouseEventMap];
|
|
902
|
-
type MouseEventListener = (this: LyricLineEl, ev: RawLyricLineMouseEvent) => void;
|
|
903
|
-
declare class LyricLineEl extends LyricLineBase {
|
|
904
|
-
private lyricPlayer;
|
|
905
|
-
private lyricLine;
|
|
906
|
-
private element;
|
|
907
|
-
private splittedWords;
|
|
908
|
-
lineSize: number[];
|
|
909
|
-
constructor(lyricPlayer: DomSlimLyricPlayer, lyricLine?: LyricLine);
|
|
910
|
-
private listenersMap;
|
|
911
|
-
private readonly onMouseEvent;
|
|
912
|
-
addMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
913
|
-
removeMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
914
|
-
areWordsOnSameLine(word1: RealWord, word2: RealWord): boolean;
|
|
915
|
-
private isEnabled;
|
|
916
|
-
enable(maskAnimationTime?: number): Promise<void>;
|
|
917
|
-
disable(): void;
|
|
918
|
-
private lastWord?;
|
|
919
|
-
resume(): Promise<void>;
|
|
920
|
-
pause(): Promise<void>;
|
|
921
|
-
setMaskAnimationState(maskAnimationTime?: number): void;
|
|
922
|
-
private measureLockMark;
|
|
923
|
-
private measureLock;
|
|
924
|
-
getLine(): LyricLine;
|
|
925
|
-
show(): void;
|
|
926
|
-
hide(): void;
|
|
927
|
-
private rebuildStyle;
|
|
928
|
-
private getRubySegments;
|
|
929
|
-
private buildWordElement;
|
|
930
|
-
override rebuildElement(): void;
|
|
931
|
-
private initEmphasizeAnimation;
|
|
932
|
-
private get totalDuration();
|
|
933
|
-
private maskImageDirty;
|
|
934
|
-
private markImageDirtyPromiseResolve;
|
|
935
|
-
private markImageDirtyPromise;
|
|
936
|
-
markMaskImageDirty(_debugReason?: string): Promise<void>;
|
|
937
|
-
waitMaskImageUpdated(): Promise<void>;
|
|
938
|
-
updateMaskImage(): Promise<void>;
|
|
939
|
-
private generateCalcBasedMaskImage;
|
|
940
|
-
private generateWebAnimationBasedMaskImage;
|
|
941
|
-
getElement(): HTMLElement;
|
|
942
|
-
override setTransform(top?: number, scale?: number, opacity?: number, blur?: number, force?: boolean, delay?: number): void;
|
|
943
|
-
update(delta?: number): void;
|
|
944
|
-
_getDebugTargetPos(): string;
|
|
945
|
-
get isInSight(): boolean;
|
|
946
|
-
private disposeElements;
|
|
947
|
-
override dispose(): void;
|
|
948
|
-
}
|
|
949
|
-
//#endregion
|
|
950
|
-
//#region src/lyric-player/dom-slim/index.d.ts
|
|
951
|
-
/**
|
|
952
|
-
* 歌词播放组件,本框架的核心组件
|
|
953
|
-
*
|
|
954
|
-
* 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施
|
|
955
|
-
*/
|
|
956
|
-
declare class DomSlimLyricPlayer extends LyricPlayerBase {
|
|
957
|
-
override currentLyricLineObjects: LyricLineEl[];
|
|
958
|
-
private debounceCalcLayout;
|
|
988
|
+
override currentLyricGroups: LyricLineGroup[];
|
|
959
989
|
override onResize(): void;
|
|
960
990
|
readonly supportPlusLighter: boolean;
|
|
961
991
|
readonly supportMaskImage: boolean;
|
|
@@ -980,30 +1010,8 @@ declare class DomSlimLyricPlayer extends LyricPlayerBase {
|
|
|
980
1010
|
override pause(): void;
|
|
981
1011
|
override resume(): void;
|
|
982
1012
|
override update(delta?: number): void;
|
|
983
|
-
override calcLayout(sync?: boolean): Promise<void>;
|
|
984
1013
|
override dispose(): void;
|
|
985
1014
|
}
|
|
986
1015
|
//#endregion
|
|
987
|
-
|
|
988
|
-
/**
|
|
989
|
-
* 歌词中不雅用语的掩码模式
|
|
990
|
-
*/
|
|
991
|
-
declare enum MaskObsceneWordsMode {
|
|
992
|
-
/** 禁用任何不雅用语掩码 */
|
|
993
|
-
Disabled = "",
|
|
994
|
-
/** 完全掩码所有不雅用语 */
|
|
995
|
-
FullMask = "full-mask",
|
|
996
|
-
/** 保留首尾字符,屏蔽中间字符 */
|
|
997
|
-
PartialMask = "partial-mask"
|
|
998
|
-
}
|
|
999
|
-
/**
|
|
1000
|
-
* 歌词行的渲染模式
|
|
1001
|
-
* @internal
|
|
1002
|
-
*/
|
|
1003
|
-
declare enum LyricLineRenderMode {
|
|
1004
|
-
SOLID = 0,
|
|
1005
|
-
GRADIENT = 1
|
|
1006
|
-
}
|
|
1007
|
-
//#endregion
|
|
1008
|
-
export { AbstractBaseRenderer, BackgroundRender, BaseRenderer, Disposable, DomLyricPlayer, DomLyricPlayer as LyricPlayer, DomSlimLyricPlayer, HasElement, LyricLine, LyricLineMouseEvent, LyricLineMouseEventListener, LyricLineRenderMode, LyricPlayerBase, LyricWord, LyricWordBase, MaskObsceneWordsMode, MeshGradientRenderer, OptimizeLyricOptions, PixiRenderer, type spring_d_exports as spring };
|
|
1016
|
+
export { AbstractBaseRenderer, BackgroundRender, BaseRenderer, Disposable, DomLyricPlayer, DomLyricPlayer as LyricPlayer, HasElement, LayoutAlignAnchor, LyricLine, type LyricLineBase, LyricLineMouseEvent, LyricLineMouseEventListener, LyricLineRenderMode, LyricPlayerBase, LyricWord, LyricWordBase, MaskObsceneWordsMode, MeshGradientRenderer, OptimizeLyricOptions, PixiRenderer, type PlayerLayoutState, type PlayerScrollState, type PlayerTimelineState, type spring_d_exports as spring };
|
|
1009
1017
|
//# sourceMappingURL=amll-core.d.mts.map
|