@applemusic-like-lyrics/core 0.3.1 → 0.4.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 +3 -3
- package/dist/amll-core.cjs +5020 -0
- package/dist/amll-core.cjs.map +1 -0
- package/dist/amll-core.d.cts +997 -0
- package/dist/amll-core.d.mts +997 -0
- package/dist/{amll-core.js → amll-core.mjs} +87 -5786
- package/dist/amll-core.mjs.map +1 -0
- package/dist/style.css +399 -0
- package/package.json +69 -84
- package/LICENSE +0 -661
- package/dist/amll-core.css +0 -2
- package/dist/amll-core.js.map +0 -1
- package/dist/bg-render/base.d.ts +0 -109
- package/dist/bg-render/img.d.ts +0 -4
- package/dist/bg-render/index.d.ts +0 -28
- package/dist/bg-render/mesh-renderer/cp-generate.d.ts +0 -6
- package/dist/bg-render/mesh-renderer/cp-presets.d.ts +0 -22
- package/dist/bg-render/mesh-renderer/index.d.ts +0 -76
- package/dist/bg-render/pixi-renderer.d.ts +0 -22
- package/dist/canvas-test.d.ts +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/interfaces.d.ts +0 -106
- package/dist/lyric-player/base.d.ts +0 -327
- package/dist/lyric-player/bottom-line.d.ts +0 -29
- package/dist/lyric-player/canvas/index.d.ts +0 -24
- package/dist/lyric-player/canvas/lyric-line.d.ts +0 -24
- package/dist/lyric-player/canvas/text-layout.d.ts +0 -39
- package/dist/lyric-player/dom/index.d.ts +0 -59
- package/dist/lyric-player/dom/interlude-dots.d.ts +0 -22
- package/dist/lyric-player/dom/lyric-line.d.ts +0 -80
- package/dist/lyric-player/dom-slim/index.d.ts +0 -38
- package/dist/lyric-player/dom-slim/interlude-dots.d.ts +0 -22
- package/dist/lyric-player/dom-slim/lyric-line.d.ts +0 -69
- package/dist/lyric-player/index.d.ts +0 -29
- package/dist/mg-test.d.ts +0 -1
- package/dist/utils/debounce.d.ts +0 -2
- package/dist/utils/derivative.d.ts +0 -2
- package/dist/utils/eq-set.d.ts +0 -1
- package/dist/utils/flagsets.d.ts +0 -17
- package/dist/utils/is-cjk.d.ts +0 -1
- package/dist/utils/linear.d.ts +0 -21
- package/dist/utils/lyric-split-words.d.ts +0 -11
- package/dist/utils/matrix.d.ts +0 -25
- package/dist/utils/mutex.d.ts +0 -2
- package/dist/utils/optimize-lyric.d.ts +0 -9
- package/dist/utils/resource.d.ts +0 -4
- package/dist/utils/schedule.d.ts +0 -6
- package/dist/utils/spring.d.ts +0 -26
- package/dist/utils/wa-spring.d.ts +0 -27
|
@@ -0,0 +1,997 @@
|
|
|
1
|
+
import { Vec2, Vec3 } from "gl-matrix";
|
|
2
|
+
|
|
3
|
+
//#region \0rolldown/runtime.js
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/interfaces.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* 拥有一个 HTML 元素的接口
|
|
8
|
+
*
|
|
9
|
+
* 可以通过 `getElement` 获取这个类所对应的 HTML 元素实例
|
|
10
|
+
*/
|
|
11
|
+
interface HasElement {
|
|
12
|
+
/** 获取这个类所对应的 HTML 元素实例 */
|
|
13
|
+
getElement(): HTMLElement;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 实现了这个接口的东西需要在使用完毕后
|
|
17
|
+
*
|
|
18
|
+
* 手动调用 `dispose` 函数来销毁清除占用资源
|
|
19
|
+
*
|
|
20
|
+
* 以免产生泄露
|
|
21
|
+
*/
|
|
22
|
+
interface Disposable {
|
|
23
|
+
/**
|
|
24
|
+
* 销毁实现了该接口的对象实例,释放占用的资源
|
|
25
|
+
*
|
|
26
|
+
* 一般情况下,调用本函数后就不可以再调用对象的任何函数了
|
|
27
|
+
*/
|
|
28
|
+
dispose(): void;
|
|
29
|
+
}
|
|
30
|
+
/** 一个歌词单词 */
|
|
31
|
+
interface LyricWordBase {
|
|
32
|
+
/** 单词的起始时间,单位为毫秒 */
|
|
33
|
+
startTime: number;
|
|
34
|
+
/** 单词的结束时间,单位为毫秒 */
|
|
35
|
+
endTime: number;
|
|
36
|
+
/** 单词内容 */
|
|
37
|
+
word: string;
|
|
38
|
+
}
|
|
39
|
+
interface LyricWord extends LyricWordBase {
|
|
40
|
+
/** 单词的音译内容 */
|
|
41
|
+
romanWord?: string;
|
|
42
|
+
/** 单词内容是否包含冒犯性的不雅用语 */
|
|
43
|
+
obscene?: boolean;
|
|
44
|
+
/** 单词的注音内容 */
|
|
45
|
+
ruby?: LyricWordBase[];
|
|
46
|
+
}
|
|
47
|
+
/** 一行歌词,存储多个单词 */
|
|
48
|
+
interface LyricLine {
|
|
49
|
+
/**
|
|
50
|
+
* 该行的所有单词
|
|
51
|
+
* 如果是 LyRiC 等只能表达一行歌词的格式,这里就只会有一个单词且通常其始末时间和本结构的 `startTime` 和 `endTime` 相同
|
|
52
|
+
*/
|
|
53
|
+
words: LyricWord[];
|
|
54
|
+
/** 该行的翻译歌词,将会显示在主歌词行的下方 */
|
|
55
|
+
translatedLyric: string;
|
|
56
|
+
/** 该行的音译歌词,将会显示在翻译歌词行的下方 */
|
|
57
|
+
romanLyric: string;
|
|
58
|
+
/** 句子的起始时间,单位为毫秒 */
|
|
59
|
+
startTime: number;
|
|
60
|
+
/** 句子的结束时间,单位为毫秒 */
|
|
61
|
+
endTime: number;
|
|
62
|
+
/** 该行是否为背景歌词行,当该行歌词的上一句非背景歌词被激活时,这行歌词将会显示出来,注意每个非背景歌词下方只能拥有一个背景歌词 */
|
|
63
|
+
isBG: boolean;
|
|
64
|
+
/** 该行是否为对唱歌词行(即歌词行靠右对齐) */
|
|
65
|
+
isDuet: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 优化歌词行的配置选项
|
|
69
|
+
*/
|
|
70
|
+
interface OptimizeLyricOptions {
|
|
71
|
+
/**
|
|
72
|
+
* 规范化歌词中的空格
|
|
73
|
+
*
|
|
74
|
+
* 将多个连续空格替换为一个空格
|
|
75
|
+
* @default true
|
|
76
|
+
*/
|
|
77
|
+
normalizeSpaces?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* 是否将行级时间戳强行设为字级时间戳
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
resetLineTimestamps?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* 把多行背景人声转换为单行背景人声 + 主歌词行的形式
|
|
85
|
+
* @default true
|
|
86
|
+
*/
|
|
87
|
+
convertExcessiveBackgroundLines?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* 是否同步主歌词与背景人声的时间
|
|
90
|
+
* @default true
|
|
91
|
+
*/
|
|
92
|
+
syncMainAndBackgroundLines?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* 清洗非刻意的重叠,以免不必要的多行高亮效果
|
|
95
|
+
*
|
|
96
|
+
* 如果两行时间轴有重叠的歌词满足下列条件之一:
|
|
97
|
+
* * 重叠小于 100ms
|
|
98
|
+
* * 重叠时长不足下一行时长的 10%
|
|
99
|
+
*
|
|
100
|
+
* 则截断上一行歌词的结束时间为下一行歌词的开始时间
|
|
101
|
+
* @default true
|
|
102
|
+
*/
|
|
103
|
+
cleanUnintentionalOverlaps?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* 尝试让歌词提前最多 1 秒开始
|
|
106
|
+
*
|
|
107
|
+
* 有重叠则尝试最多提前 400ms 或上一行时长的 30%
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
tryAdvanceStartTime?: boolean;
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/bg-render/base.d.ts
|
|
114
|
+
declare abstract class AbstractBaseRenderer implements Disposable, HasElement {
|
|
115
|
+
/**
|
|
116
|
+
* 修改背景的流动速度,数字越大越快,默认为 8
|
|
117
|
+
* @param speed 背景的流动速度,默认为 8
|
|
118
|
+
*/
|
|
119
|
+
abstract setFlowSpeed(speed: number): void;
|
|
120
|
+
/**
|
|
121
|
+
* 修改背景的渲染比例,默认是 0.5
|
|
122
|
+
*
|
|
123
|
+
* 一般情况下这个程度既没有明显瑕疵也不会特别吃性能
|
|
124
|
+
* @param scale 背景的渲染比例
|
|
125
|
+
*/
|
|
126
|
+
abstract setRenderScale(scale: number): void;
|
|
127
|
+
/**
|
|
128
|
+
* 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能
|
|
129
|
+
* @param enable 是否启用静态模式
|
|
130
|
+
*/
|
|
131
|
+
abstract setStaticMode(enable: boolean): void;
|
|
132
|
+
/**
|
|
133
|
+
* 修改背景动画帧率,默认是 30 FPS
|
|
134
|
+
*
|
|
135
|
+
* 如果设置成 0 则会停止动画
|
|
136
|
+
* @param fps 目标帧率,默认 30 FPS
|
|
137
|
+
*/
|
|
138
|
+
abstract setFPS(fps: number): void;
|
|
139
|
+
/**
|
|
140
|
+
* 暂停背景动画,画面即便是更新了图片也不会发生变化
|
|
141
|
+
*/
|
|
142
|
+
abstract pause(): void;
|
|
143
|
+
/**
|
|
144
|
+
* 恢复播放背景动画
|
|
145
|
+
*/
|
|
146
|
+
abstract resume(): void;
|
|
147
|
+
/**
|
|
148
|
+
* 设置背景专辑资源,纹理加载并设置完成后会返回
|
|
149
|
+
* @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数
|
|
150
|
+
*/
|
|
151
|
+
abstract setAlbum(albumSource: string | HTMLImageElement | HTMLVideoElement, isVideo?: boolean): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* 设置低频的音量大小,范围在 80hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间
|
|
154
|
+
*
|
|
155
|
+
* 部分渲染器会根据音量大小调整背景效果(例如根据鼓点跳动)
|
|
156
|
+
*
|
|
157
|
+
* 如果无法获取到类似的数据,请传入 1.0 作为默认值,或不做任何处理(默认值即 1.0)
|
|
158
|
+
* @param volume 低频的音量大小,范围在 50hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间
|
|
159
|
+
*/
|
|
160
|
+
abstract setLowFreqVolume(volume: number): void;
|
|
161
|
+
/**
|
|
162
|
+
* 设置背景是否根据“是否有歌词”这个特征调整自身效果,例如有歌词时会变得更加活跃
|
|
163
|
+
*
|
|
164
|
+
* 部分渲染器会根据这个特征调整自身效果
|
|
165
|
+
*
|
|
166
|
+
* 如果不确定是否需要赋值或无法知晓是否包含歌词,请传入 true 或不做任何处理(默认值为 true)
|
|
167
|
+
*
|
|
168
|
+
* @param hasLyric 是否有歌词,如不确定是否需要赋值,请传入 true 或不做任何处理(默认值为 true)
|
|
169
|
+
*/
|
|
170
|
+
abstract setHasLyric(hasLyric: boolean): void;
|
|
171
|
+
abstract dispose(): void;
|
|
172
|
+
abstract getElement(): HTMLElement;
|
|
173
|
+
}
|
|
174
|
+
declare abstract class BaseRenderer extends AbstractBaseRenderer {
|
|
175
|
+
protected canvas: HTMLCanvasElement;
|
|
176
|
+
private observer;
|
|
177
|
+
protected flowSpeed: number;
|
|
178
|
+
protected currerntRenderScale: number;
|
|
179
|
+
constructor(canvas: HTMLCanvasElement);
|
|
180
|
+
setRenderScale(scale: number): void;
|
|
181
|
+
/**
|
|
182
|
+
* 当画板元素大小发生变化时此函数会被调用
|
|
183
|
+
* 可以在此处重设和渲染器相关的尺寸设置
|
|
184
|
+
* 考虑到初始化的时候元素不一定在文档中或出于某些特殊样式状态,尺寸长宽有可能会为 0,请注意进行特判处理
|
|
185
|
+
* @param width 画板元素实际的物理像素宽度,有可能为 0
|
|
186
|
+
* @param height 画板元素实际的物理像素高度,有可能为 0
|
|
187
|
+
*/
|
|
188
|
+
protected onResize(width: number, height: number): void;
|
|
189
|
+
/**
|
|
190
|
+
* 修改背景的流动速度,数字越大越快,默认为 1
|
|
191
|
+
* @param speed 背景的流动速度,默认为 1
|
|
192
|
+
*/
|
|
193
|
+
setFlowSpeed(speed: number): void;
|
|
194
|
+
/**
|
|
195
|
+
* 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能
|
|
196
|
+
* @param enable 是否启用静态模式
|
|
197
|
+
*/
|
|
198
|
+
abstract override setStaticMode(enable: boolean): void;
|
|
199
|
+
/**
|
|
200
|
+
* 修改背景动画帧率,默认是 30 FPS
|
|
201
|
+
*
|
|
202
|
+
* 如果设置成 0 则会停止动画
|
|
203
|
+
* @param fps 目标帧率,默认 30 FPS
|
|
204
|
+
*/
|
|
205
|
+
abstract override setFPS(fps: number): void;
|
|
206
|
+
/**
|
|
207
|
+
* 暂停背景动画,画面即便是更新了图片也不会发生变化
|
|
208
|
+
*/
|
|
209
|
+
abstract override pause(): void;
|
|
210
|
+
/**
|
|
211
|
+
* 恢复播放背景动画
|
|
212
|
+
*/
|
|
213
|
+
abstract override resume(): void;
|
|
214
|
+
/**
|
|
215
|
+
* 设置背景专辑资源,纹理加载并设置完成后会返回
|
|
216
|
+
* @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数
|
|
217
|
+
*/
|
|
218
|
+
abstract override setAlbum(albumSource: string | HTMLImageElement | HTMLVideoElement, isVideo?: boolean): Promise<void>;
|
|
219
|
+
dispose(): void;
|
|
220
|
+
override getElement(): HTMLElement;
|
|
221
|
+
}
|
|
222
|
+
//#endregion
|
|
223
|
+
//#region src/bg-render/mesh-renderer/index.d.ts
|
|
224
|
+
declare class ControlPoint {
|
|
225
|
+
color: Vec3;
|
|
226
|
+
location: Vec2;
|
|
227
|
+
uTangent: Vec2;
|
|
228
|
+
vTangent: Vec2;
|
|
229
|
+
private _uRot;
|
|
230
|
+
private _vRot;
|
|
231
|
+
private _uScale;
|
|
232
|
+
private _vScale;
|
|
233
|
+
constructor();
|
|
234
|
+
get uRot(): number;
|
|
235
|
+
get vRot(): number;
|
|
236
|
+
set uRot(value: number);
|
|
237
|
+
set vRot(value: number);
|
|
238
|
+
get uScale(): number;
|
|
239
|
+
get vScale(): number;
|
|
240
|
+
set uScale(value: number);
|
|
241
|
+
set vScale(value: number);
|
|
242
|
+
private updateUTangent;
|
|
243
|
+
private updateVTangent;
|
|
244
|
+
}
|
|
245
|
+
declare class MeshGradientRenderer extends BaseRenderer {
|
|
246
|
+
private gl;
|
|
247
|
+
private lastFrameTime;
|
|
248
|
+
private frameTime;
|
|
249
|
+
private lastTickTime;
|
|
250
|
+
private smoothedVolume;
|
|
251
|
+
private volume;
|
|
252
|
+
private tickHandle;
|
|
253
|
+
private maxFPS;
|
|
254
|
+
private paused;
|
|
255
|
+
private staticMode;
|
|
256
|
+
private mainProgram;
|
|
257
|
+
private quadProgram;
|
|
258
|
+
private quadBuffer;
|
|
259
|
+
private fbo;
|
|
260
|
+
private fboTexture;
|
|
261
|
+
private manualControl;
|
|
262
|
+
private reduceImageSizeCanvas;
|
|
263
|
+
private targetSize;
|
|
264
|
+
private currentSize;
|
|
265
|
+
private isNoCover;
|
|
266
|
+
private meshStates;
|
|
267
|
+
private _disposed;
|
|
268
|
+
private frameCount;
|
|
269
|
+
private lastFPSUpdate;
|
|
270
|
+
private currentFPS;
|
|
271
|
+
private enablePerformanceMonitoring;
|
|
272
|
+
setManualControl(enable: boolean): void;
|
|
273
|
+
setWireFrame(enable: boolean): void;
|
|
274
|
+
getControlPoint(x: number, y: number): ControlPoint | undefined;
|
|
275
|
+
resizeControlPoints(width: number, height: number): void;
|
|
276
|
+
resetSubdivition(subDivisions: number): void;
|
|
277
|
+
private onTick;
|
|
278
|
+
private checkIfResize;
|
|
279
|
+
private updateFBO;
|
|
280
|
+
private onRedraw;
|
|
281
|
+
private onTickBinded;
|
|
282
|
+
private requestTick;
|
|
283
|
+
constructor(canvas: HTMLCanvasElement);
|
|
284
|
+
protected override onResize(width: number, height: number): void;
|
|
285
|
+
override setStaticMode(enable: boolean): void;
|
|
286
|
+
override setFPS(fps: number): void;
|
|
287
|
+
override pause(): void;
|
|
288
|
+
override resume(): void;
|
|
289
|
+
override setAlbum(albumSource?: string | HTMLImageElement | HTMLVideoElement, isVideo?: boolean): Promise<void>;
|
|
290
|
+
override setLowFreqVolume(volume: number): void;
|
|
291
|
+
override setHasLyric(_hasLyric: boolean): void;
|
|
292
|
+
override dispose(): void;
|
|
293
|
+
enablePerformanceMonitor(enable: boolean): void;
|
|
294
|
+
getCurrentFPS(): number;
|
|
295
|
+
private updatePerformanceStats;
|
|
296
|
+
}
|
|
297
|
+
//#endregion
|
|
298
|
+
//#region src/bg-render/pixi-renderer.d.ts
|
|
299
|
+
declare class PixiRenderer extends BaseRenderer {
|
|
300
|
+
protected override canvas: HTMLCanvasElement;
|
|
301
|
+
private app;
|
|
302
|
+
private curContainer?;
|
|
303
|
+
private staticMode;
|
|
304
|
+
private lastContainer;
|
|
305
|
+
private onTick;
|
|
306
|
+
constructor(canvas: HTMLCanvasElement);
|
|
307
|
+
protected override onResize(width: number, height: number): void;
|
|
308
|
+
override setRenderScale(scale: number): void;
|
|
309
|
+
private rebuildFilters;
|
|
310
|
+
override setStaticMode(enable?: boolean): void;
|
|
311
|
+
override setFPS(fps: number): void;
|
|
312
|
+
override pause(): void;
|
|
313
|
+
override resume(): void;
|
|
314
|
+
override setLowFreqVolume(_volume: number): void;
|
|
315
|
+
override setHasLyric(_hasLyric: boolean): void;
|
|
316
|
+
override setAlbum(albumSource?: string | HTMLImageElement | HTMLVideoElement, isVideo?: boolean): Promise<void>;
|
|
317
|
+
override dispose(): void;
|
|
318
|
+
override getElement(): HTMLElement;
|
|
319
|
+
}
|
|
320
|
+
//#endregion
|
|
321
|
+
//#region src/bg-render/index.d.ts
|
|
322
|
+
declare class BackgroundRender<Renderer extends BaseRenderer> implements AbstractBaseRenderer {
|
|
323
|
+
private element;
|
|
324
|
+
private renderer;
|
|
325
|
+
constructor(renderer: Renderer, canvas: HTMLCanvasElement);
|
|
326
|
+
static new<Renderer extends BaseRenderer>(type: {
|
|
327
|
+
new (canvas: HTMLCanvasElement): Renderer;
|
|
328
|
+
}): BackgroundRender<Renderer>;
|
|
329
|
+
setRenderScale(scale: number): void;
|
|
330
|
+
setFlowSpeed(speed: number): void;
|
|
331
|
+
setStaticMode(enable: boolean): void;
|
|
332
|
+
setFPS(fps: number): void;
|
|
333
|
+
pause(): void;
|
|
334
|
+
resume(): void;
|
|
335
|
+
setLowFreqVolume(volume: number): void;
|
|
336
|
+
setHasLyric(hasLyric: boolean): void;
|
|
337
|
+
setAlbum(albumSource: string | HTMLImageElement | HTMLVideoElement, isVideo?: boolean): Promise<void>;
|
|
338
|
+
getElement(): HTMLCanvasElement;
|
|
339
|
+
dispose(): void;
|
|
340
|
+
}
|
|
341
|
+
declare namespace spring_d_exports {
|
|
342
|
+
export { Spring, SpringParams };
|
|
343
|
+
}
|
|
344
|
+
/** MIT License github.com/pushkine/ */
|
|
345
|
+
interface SpringParams {
|
|
346
|
+
mass: number;
|
|
347
|
+
damping: number;
|
|
348
|
+
stiffness: number;
|
|
349
|
+
soft: boolean;
|
|
350
|
+
}
|
|
351
|
+
declare class Spring {
|
|
352
|
+
private currentPosition;
|
|
353
|
+
private targetPosition;
|
|
354
|
+
private currentTime;
|
|
355
|
+
private params;
|
|
356
|
+
private currentSolver;
|
|
357
|
+
private getV;
|
|
358
|
+
private getV2;
|
|
359
|
+
private queueParams;
|
|
360
|
+
private queuePosition;
|
|
361
|
+
constructor(currentPosition?: number);
|
|
362
|
+
private resetSolver;
|
|
363
|
+
arrived(): boolean;
|
|
364
|
+
setPosition(targetPosition: number): void;
|
|
365
|
+
update(delta?: number): void;
|
|
366
|
+
updateParams(params: Partial<SpringParams>, delay?: number): void;
|
|
367
|
+
setTargetPosition(targetPosition: number, delay?: number): void;
|
|
368
|
+
getCurrentPosition(): number;
|
|
369
|
+
}
|
|
370
|
+
//#endregion
|
|
371
|
+
//#region src/lyric-player/bottom-line.d.ts
|
|
372
|
+
interface LineTransforms$1 {
|
|
373
|
+
posX: Spring;
|
|
374
|
+
posY: Spring;
|
|
375
|
+
}
|
|
376
|
+
declare class BottomLineEl implements HasElement, Disposable {
|
|
377
|
+
private lyricPlayer;
|
|
378
|
+
private element;
|
|
379
|
+
private left;
|
|
380
|
+
private top;
|
|
381
|
+
private delay;
|
|
382
|
+
lineSize: [number, number];
|
|
383
|
+
readonly lineTransforms: LineTransforms$1;
|
|
384
|
+
private isFocused;
|
|
385
|
+
private blur;
|
|
386
|
+
constructor(lyricPlayer: LyricPlayerBase);
|
|
387
|
+
measureSize(): Promise<[number, number]>;
|
|
388
|
+
private lastStyle;
|
|
389
|
+
show(): void;
|
|
390
|
+
hide(): void;
|
|
391
|
+
setFocused(focused: boolean): void;
|
|
392
|
+
private rebuildStyle;
|
|
393
|
+
getElement(): HTMLElement;
|
|
394
|
+
setTransform(left?: number, top?: number, blur?: number, force?: boolean, delay?: number): void;
|
|
395
|
+
update(delta?: number): void;
|
|
396
|
+
get isInSight(): boolean;
|
|
397
|
+
dispose(): void;
|
|
398
|
+
}
|
|
399
|
+
//#endregion
|
|
400
|
+
//#region src/lyric-player/dom/interlude-dots.d.ts
|
|
401
|
+
declare class InterludeDots implements HasElement, Disposable {
|
|
402
|
+
private element;
|
|
403
|
+
private dot0;
|
|
404
|
+
private dot1;
|
|
405
|
+
private dot2;
|
|
406
|
+
private left;
|
|
407
|
+
private top;
|
|
408
|
+
private playing;
|
|
409
|
+
private lastStyle;
|
|
410
|
+
private currentInterlude?;
|
|
411
|
+
private currentTime;
|
|
412
|
+
private targetBreatheDuration;
|
|
413
|
+
constructor();
|
|
414
|
+
getElement(): HTMLElement;
|
|
415
|
+
setTransform(left?: number, top?: number): void;
|
|
416
|
+
setInterlude(interlude?: [number, number]): void;
|
|
417
|
+
pause(): void;
|
|
418
|
+
resume(): void;
|
|
419
|
+
update(delta?: number): void;
|
|
420
|
+
dispose(): void;
|
|
421
|
+
}
|
|
422
|
+
//#endregion
|
|
423
|
+
//#region src/lyric-player/base.d.ts
|
|
424
|
+
/**
|
|
425
|
+
* 歌词播放器的基类,已经包含了有关歌词操作和排版的功能,子类需要为其实现对应的显示展示操作
|
|
426
|
+
*/
|
|
427
|
+
declare abstract class LyricPlayerBase extends EventTarget implements HasElement, Disposable {
|
|
428
|
+
protected element: HTMLElement;
|
|
429
|
+
abstract get baseFontSize(): number;
|
|
430
|
+
protected currentTime: number;
|
|
431
|
+
/** @internal */
|
|
432
|
+
lyricLinesSize: WeakMap<LyricLineBase, [number, number]>;
|
|
433
|
+
/** @internal */
|
|
434
|
+
lyricLineElementMap: WeakMap<Element, LyricLineBase>;
|
|
435
|
+
protected currentLyricLines: LyricLine[];
|
|
436
|
+
protected processedLines: LyricLine[];
|
|
437
|
+
protected lyricLinesIndexes: WeakMap<LyricLineBase, number>;
|
|
438
|
+
protected hotLines: Set<number>;
|
|
439
|
+
protected bufferedLines: Set<number>;
|
|
440
|
+
protected isNonDynamic: boolean;
|
|
441
|
+
protected hasDuetLine: boolean;
|
|
442
|
+
protected scrollToIndex: number;
|
|
443
|
+
protected disableSpring: boolean;
|
|
444
|
+
protected interludeDotsSize: [number, number];
|
|
445
|
+
protected interludeDots: InterludeDots;
|
|
446
|
+
protected bottomLine: BottomLineEl;
|
|
447
|
+
protected enableBlur: boolean;
|
|
448
|
+
protected enableScale: boolean;
|
|
449
|
+
protected maskObsceneWords: MaskObsceneWordsMode;
|
|
450
|
+
protected maskObsceneWordChar: string;
|
|
451
|
+
protected hidePassedLines: boolean;
|
|
452
|
+
protected scrollBoundary: [number, number];
|
|
453
|
+
protected currentLyricLineObjects: LyricLineBase[];
|
|
454
|
+
protected isSeeking: boolean;
|
|
455
|
+
protected lastCurrentTime: number;
|
|
456
|
+
protected alignAnchor: "top" | "bottom" | "center";
|
|
457
|
+
protected alignPosition: number;
|
|
458
|
+
protected scrollOffset: number;
|
|
459
|
+
readonly size: [number, number];
|
|
460
|
+
protected allowScroll: boolean;
|
|
461
|
+
protected isPageVisible: boolean;
|
|
462
|
+
protected optimizeOptions: OptimizeLyricOptions;
|
|
463
|
+
protected initialLayoutFinished: boolean;
|
|
464
|
+
/**
|
|
465
|
+
* 标记用户是否正在进行滚动交互
|
|
466
|
+
*/
|
|
467
|
+
protected isUserScrolling: boolean;
|
|
468
|
+
protected wheelTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
469
|
+
/**
|
|
470
|
+
* 视图额外预渲染(overscan)距离,单位:像素。
|
|
471
|
+
* 用于决定在视口之外多少距离内也认为是“可见”,以便提前创建/保留行元素。
|
|
472
|
+
*/
|
|
473
|
+
protected overscanPx: number;
|
|
474
|
+
protected posXSpringParams: Partial<SpringParams>;
|
|
475
|
+
protected posYSpringParams: Partial<SpringParams>;
|
|
476
|
+
protected scaleSpringParams: Partial<SpringParams>;
|
|
477
|
+
protected scaleForBGSpringParams: Partial<SpringParams>;
|
|
478
|
+
private onPageShow;
|
|
479
|
+
private onPageHide;
|
|
480
|
+
private scrolledHandler;
|
|
481
|
+
protected isScrolled: boolean;
|
|
482
|
+
/** @internal */
|
|
483
|
+
resizeObserver: ResizeObserver;
|
|
484
|
+
protected wordFadeWidth: number;
|
|
485
|
+
protected targetAlignIndex: number;
|
|
486
|
+
protected lastInterludeState: boolean;
|
|
487
|
+
constructor(element?: HTMLElement);
|
|
488
|
+
private beginScrollHandler;
|
|
489
|
+
private endScrollHandler;
|
|
490
|
+
private limitScrollOffset;
|
|
491
|
+
/**
|
|
492
|
+
* 设置文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5,即一个全角字符的一半宽度
|
|
493
|
+
*
|
|
494
|
+
* 如果要模拟 Apple Music for Android 的效果,可以设置为 1
|
|
495
|
+
*
|
|
496
|
+
* 如果要模拟 Apple Music for iPad 的效果,可以设置为 0.5
|
|
497
|
+
*
|
|
498
|
+
* 如果想要近乎禁用渐变效果,可以设置成非常接近 0 的小数(例如 `0.0001` ),但是**不可以为 0**
|
|
499
|
+
*
|
|
500
|
+
* @param value 需要设置的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5
|
|
501
|
+
*/
|
|
502
|
+
setWordFadeWidth(value?: number): void;
|
|
503
|
+
/**
|
|
504
|
+
* 是否启用歌词行缩放效果,默认启用
|
|
505
|
+
*
|
|
506
|
+
* 如果启用,非选中的歌词行会轻微缩小以凸显当前播放歌词行效果
|
|
507
|
+
*
|
|
508
|
+
* 此效果对性能影响微乎其微,推荐启用
|
|
509
|
+
* @param enable 是否启用歌词行缩放效果
|
|
510
|
+
*/
|
|
511
|
+
setEnableScale(enable?: boolean): void;
|
|
512
|
+
/**
|
|
513
|
+
* 获取当前是否启用了歌词行缩放效果
|
|
514
|
+
* @returns 是否启用歌词行缩放效果
|
|
515
|
+
*/
|
|
516
|
+
getEnableScale(): boolean;
|
|
517
|
+
/**
|
|
518
|
+
* 获取当前文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位
|
|
519
|
+
* @returns 当前文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位
|
|
520
|
+
*/
|
|
521
|
+
getWordFadeWidth(): number;
|
|
522
|
+
setIsSeeking(isSeeking: boolean): void;
|
|
523
|
+
/**
|
|
524
|
+
* 设置是否隐藏已经播放过的歌词行,默认不隐藏
|
|
525
|
+
* @param hide 是否隐藏已经播放过的歌词行,默认不隐藏
|
|
526
|
+
*/
|
|
527
|
+
setHidePassedLines(hide: boolean): void;
|
|
528
|
+
/**
|
|
529
|
+
* 设置是否启用歌词行的模糊效果
|
|
530
|
+
* @param enable 是否启用
|
|
531
|
+
*/
|
|
532
|
+
setEnableBlur(enable: boolean): void;
|
|
533
|
+
/**
|
|
534
|
+
* 设置歌词中不雅用语的掩码模式
|
|
535
|
+
* @param mode 掩码模式
|
|
536
|
+
* @see {@link MaskObsceneWordsMode}
|
|
537
|
+
*/
|
|
538
|
+
setMaskObsceneWords(mode: MaskObsceneWordsMode): void;
|
|
539
|
+
/**
|
|
540
|
+
* 设置不雅用语掩码使用的字符,默认为 `*`
|
|
541
|
+
* @param char 单个字符,用于替换不雅用语中的字符
|
|
542
|
+
*/
|
|
543
|
+
setMaskObsceneWordChar(char: string): void;
|
|
544
|
+
rebuildLyricLines(): void;
|
|
545
|
+
/**
|
|
546
|
+
* 根据当前配置处理不雅用语单词
|
|
547
|
+
* @param word 单词对象
|
|
548
|
+
* @internal
|
|
549
|
+
*/
|
|
550
|
+
processObsceneWord(word: LyricWord): string;
|
|
551
|
+
/**
|
|
552
|
+
* 设置目标歌词行的对齐方式,默认为 `center`
|
|
553
|
+
*
|
|
554
|
+
* - 设置成 `top` 的话将会向目标歌词行的顶部对齐
|
|
555
|
+
* - 设置成 `bottom` 的话将会向目标歌词行的底部对齐
|
|
556
|
+
* - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐
|
|
557
|
+
* @param alignAnchor 歌词行对齐方式,详情见函数说明
|
|
558
|
+
*/
|
|
559
|
+
setAlignAnchor(alignAnchor: "top" | "bottom" | "center"): void;
|
|
560
|
+
/**
|
|
561
|
+
* 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,默认为 `0.5`
|
|
562
|
+
* @param alignPosition 一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置
|
|
563
|
+
*/
|
|
564
|
+
setAlignPosition(alignPosition: number): void;
|
|
565
|
+
/**
|
|
566
|
+
* 设置 overscan(视图上下额外缓冲渲染区)距离,单位:像素。
|
|
567
|
+
* @param px 像素值,默认 300
|
|
568
|
+
*/
|
|
569
|
+
setOverscanPx(px: number): void;
|
|
570
|
+
/** 获取当前 overscan 像素距离 */
|
|
571
|
+
getOverscanPx(): number;
|
|
572
|
+
/**
|
|
573
|
+
* 设置是否使用物理弹簧算法实现歌词动画效果,默认启用
|
|
574
|
+
*
|
|
575
|
+
* 如果启用,则会通过弹簧算法实时处理歌词位置,但是需要性能足够强劲的电脑方可流畅运行
|
|
576
|
+
*
|
|
577
|
+
* 如果不启用,则会回退到基于 `transition` 的过渡效果,对低性能的机器比较友好,但是效果会比较单一
|
|
578
|
+
*/
|
|
579
|
+
setEnableSpring(enable?: boolean): void;
|
|
580
|
+
/**
|
|
581
|
+
* 获取当前是否启用了物理弹簧
|
|
582
|
+
* @returns 是否启用物理弹簧
|
|
583
|
+
*/
|
|
584
|
+
getEnableSpring(): boolean;
|
|
585
|
+
/**
|
|
586
|
+
* 获取当前播放时间里是否处于间奏区间
|
|
587
|
+
* 如果是则会返回单位为毫秒的始末时间
|
|
588
|
+
* 否则返回 undefined
|
|
589
|
+
*
|
|
590
|
+
* 这个只允许内部调用
|
|
591
|
+
* @returns [开始时间,结束时间,大概处于的歌词行ID,下一句是否为对唱歌词] 或 undefined 如果不处于间奏区间
|
|
592
|
+
*/
|
|
593
|
+
protected getCurrentInterlude(): [number, number, number, boolean] | undefined;
|
|
594
|
+
/**
|
|
595
|
+
* 设置歌词的优化配置项,这些配置项默认全部开启
|
|
596
|
+
*
|
|
597
|
+
* 注意,如果在 `setLyricLines` 之后修改此配置,需要重新调用 `setLyricLines()` 才能对当前歌词生效
|
|
598
|
+
* @param options 优化配置选项
|
|
599
|
+
* @see {@link OptimizeLyricOptions}
|
|
600
|
+
*/
|
|
601
|
+
setOptimizeOptions(options: OptimizeLyricOptions): void;
|
|
602
|
+
/**
|
|
603
|
+
* 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误
|
|
604
|
+
* @param lines 歌词数组
|
|
605
|
+
* @param initialTime 初始时间,默认为 0
|
|
606
|
+
*/
|
|
607
|
+
setLyricLines(lines: LyricLine[], initialTime?: number): void;
|
|
608
|
+
/**
|
|
609
|
+
* 获取当前是否在播放
|
|
610
|
+
* @returns 当前是否在播放
|
|
611
|
+
*/
|
|
612
|
+
getIsPlaying(): boolean;
|
|
613
|
+
/**
|
|
614
|
+
* 设置当前播放进度,单位为毫秒且**必须是整数**,此时将会更新内部的歌词进度信息
|
|
615
|
+
* 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好
|
|
616
|
+
*
|
|
617
|
+
* 调用完成后,可以每帧调用 `update` 函数来执行歌词动画效果
|
|
618
|
+
* @param time 当前播放进度,单位为毫秒
|
|
619
|
+
*/
|
|
620
|
+
setCurrentTime(time: number, isSeek?: boolean): void;
|
|
621
|
+
protected updateDynamicSpringParams(): void;
|
|
622
|
+
/**
|
|
623
|
+
* 重新布局定位歌词行的位置,调用完成后再逐帧调用 `update`
|
|
624
|
+
* 函数即可让歌词通过动画移动到目标位置。
|
|
625
|
+
*
|
|
626
|
+
* 函数有一个 `force` 参数,用于指定是否强制修改布局,也就是不经过动画直接调整元素位置和大小。
|
|
627
|
+
*
|
|
628
|
+
* 此函数还有一个 `reflow` 参数,用于指定是否需要重新计算布局
|
|
629
|
+
*
|
|
630
|
+
* 因为计算布局必定会导致浏览器重排布局,所以会大幅度影响流畅度和性能,故请只在以下情况下将其设置为 true:
|
|
631
|
+
*
|
|
632
|
+
* 1. 歌词页面大小发生改变时(这个组件会自行处理)
|
|
633
|
+
* 2. 加载了新的歌词时(不论前后歌词是否完全一样)
|
|
634
|
+
* 3. 用户自行跳转了歌曲播放位置(不论距离远近)
|
|
635
|
+
*
|
|
636
|
+
* @param sync 是否同步执行,通常用于初始化或 Resize 时立即布局
|
|
637
|
+
* @param force 是否绕过弹簧效果强制更新位置
|
|
638
|
+
*/
|
|
639
|
+
calcLayout(sync?: boolean, force?: boolean): Promise<void>;
|
|
640
|
+
protected calculateBlur(itemIndex: number, isActive: boolean, latestIndex: number): number;
|
|
641
|
+
/**
|
|
642
|
+
* 设置所有歌词行在横坐标上的弹簧属性,包括重量、弹力和阻力。
|
|
643
|
+
*
|
|
644
|
+
* @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
|
|
645
|
+
* @deprecated 考虑到横向弹簧效果并不常见,所以这个函数将会在未来的版本中移除
|
|
646
|
+
*/
|
|
647
|
+
setLinePosXSpringParams(_params?: Partial<SpringParams>): void;
|
|
648
|
+
/**
|
|
649
|
+
* 设置所有歌词行在纵坐标上的弹簧属性,包括重量、弹力和阻力。
|
|
650
|
+
*
|
|
651
|
+
* @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
|
|
652
|
+
*/
|
|
653
|
+
setLinePosYSpringParams(params?: Partial<SpringParams>): void;
|
|
654
|
+
/**
|
|
655
|
+
* 设置所有歌词行在缩放大小上的弹簧属性,包括重量、弹力和阻力。
|
|
656
|
+
*
|
|
657
|
+
* @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样
|
|
658
|
+
*/
|
|
659
|
+
setLineScaleSpringParams(params?: Partial<SpringParams>): void;
|
|
660
|
+
protected isPlaying: boolean;
|
|
661
|
+
/**
|
|
662
|
+
* 暂停部分效果演出,目前会暂停播放间奏点的动画,且将背景歌词显示出来
|
|
663
|
+
*/
|
|
664
|
+
pause(): void;
|
|
665
|
+
/**
|
|
666
|
+
* 恢复部分效果演出,目前会恢复播放间奏点的动画
|
|
667
|
+
*/
|
|
668
|
+
resume(): void;
|
|
669
|
+
/**
|
|
670
|
+
* 更新动画,这个函数应该被逐帧调用或者在以下情况下调用一次:
|
|
671
|
+
*
|
|
672
|
+
* 1. 刚刚调用完设置歌词函数的时候
|
|
673
|
+
* @param delta 距离上一次被调用到现在的时长,单位为毫秒(可为浮点数)
|
|
674
|
+
*/
|
|
675
|
+
update(delta?: number): void;
|
|
676
|
+
protected onResize(): void;
|
|
677
|
+
/**
|
|
678
|
+
* 获取一个特殊的底栏元素,默认是空白的,可以往内部添加任意元素
|
|
679
|
+
*
|
|
680
|
+
* 这个元素始终在歌词的底部,可以用于显示歌曲创作者等信息
|
|
681
|
+
*
|
|
682
|
+
* 但是请勿删除该元素,只能在内部存放元素
|
|
683
|
+
*
|
|
684
|
+
* @returns 一个元素,可以往内部添加任意元素
|
|
685
|
+
*/
|
|
686
|
+
getBottomLineElement(): HTMLElement;
|
|
687
|
+
/**
|
|
688
|
+
* 重置用户滚动状态
|
|
689
|
+
*
|
|
690
|
+
* 请在用户完成滚动点击跳转歌词时调用本事件再调用 `calcLayout` 以正确滚动到目标位置
|
|
691
|
+
*/
|
|
692
|
+
resetScroll(): void;
|
|
693
|
+
/**
|
|
694
|
+
* 获取当前歌词数组
|
|
695
|
+
*
|
|
696
|
+
* 一般和最后调用 `setLyricLines` 给予的参数一样
|
|
697
|
+
* @returns 当前歌词数组
|
|
698
|
+
*/
|
|
699
|
+
getLyricLines(): LyricLine[];
|
|
700
|
+
/**
|
|
701
|
+
* 获取当前歌词的播放位置
|
|
702
|
+
*
|
|
703
|
+
* 一般和最后调用 `setCurrentTime` 给予的参数一样
|
|
704
|
+
* @returns 当前播放位置
|
|
705
|
+
*/
|
|
706
|
+
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
|
+
abstract getLine(): LyricLine;
|
|
726
|
+
abstract enable(time?: number, shouldPlay?: boolean): void;
|
|
727
|
+
abstract disable(): void;
|
|
728
|
+
abstract resume(): void;
|
|
729
|
+
abstract pause(): void;
|
|
730
|
+
onLineSizeChange(_size: [number, number]): void;
|
|
731
|
+
setTransform(top?: number, scale?: number, opacity?: number, blur?: number, _force?: boolean, delay?: number, _mode?: LyricLineRenderMode): void;
|
|
732
|
+
rebuildElement(): void;
|
|
733
|
+
/**
|
|
734
|
+
* 判定歌词是否可以应用强调辉光效果
|
|
735
|
+
*
|
|
736
|
+
* 果子在对辉光效果的解释是一种强调(emphasized)效果
|
|
737
|
+
*
|
|
738
|
+
* 条件是一个单词时长大于等于 1s 且长度小于等于 7
|
|
739
|
+
*
|
|
740
|
+
* @param word 单词
|
|
741
|
+
* @returns 是否可以应用强调辉光效果
|
|
742
|
+
*/
|
|
743
|
+
static shouldEmphasize(word: LyricWord): boolean;
|
|
744
|
+
abstract update(delta?: number): void;
|
|
745
|
+
dispose(): void;
|
|
746
|
+
}
|
|
747
|
+
//#endregion
|
|
748
|
+
//#region src/lyric-player/dom/lyric-line.d.ts
|
|
749
|
+
interface RealWord$1 extends LyricWord {
|
|
750
|
+
mainElement: HTMLSpanElement;
|
|
751
|
+
subElements: HTMLSpanElement[];
|
|
752
|
+
elementAnimations: Animation[];
|
|
753
|
+
maskAnimations: Animation[];
|
|
754
|
+
width: number;
|
|
755
|
+
height: number;
|
|
756
|
+
padding: number;
|
|
757
|
+
shouldEmphasize: boolean;
|
|
758
|
+
}
|
|
759
|
+
declare class RawLyricLineMouseEvent$1 extends MouseEvent {
|
|
760
|
+
readonly line: LyricLineBase;
|
|
761
|
+
constructor(line: LyricLineBase, event: MouseEvent);
|
|
762
|
+
}
|
|
763
|
+
type MouseEventMap$1 = { [evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never };
|
|
764
|
+
type MouseEventTypes$1 = MouseEventMap$1[keyof MouseEventMap$1];
|
|
765
|
+
type MouseEventListener$1 = (this: LyricLineEl$1, ev: RawLyricLineMouseEvent$1) => void;
|
|
766
|
+
declare class LyricLineEl$1 extends LyricLineBase {
|
|
767
|
+
private lyricPlayer;
|
|
768
|
+
private lyricLine;
|
|
769
|
+
private element;
|
|
770
|
+
private splittedWords;
|
|
771
|
+
private built;
|
|
772
|
+
lineSize: number[];
|
|
773
|
+
private renderMode;
|
|
774
|
+
private currentBrightAlpha;
|
|
775
|
+
private currentDarkAlpha;
|
|
776
|
+
private targetBrightAlpha;
|
|
777
|
+
private targetDarkAlpha;
|
|
778
|
+
private segmenter;
|
|
779
|
+
constructor(lyricPlayer: DomLyricPlayer, lyricLine?: LyricLine);
|
|
780
|
+
private listenersMap;
|
|
781
|
+
private readonly onMouseEvent;
|
|
782
|
+
addMouseEventListener(type: MouseEventTypes$1, callback: MouseEventListener$1 | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
783
|
+
removeMouseEventListener(type: MouseEventTypes$1, callback: MouseEventListener$1 | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
784
|
+
areWordsOnSameLine(word1: RealWord$1, word2: RealWord$1): boolean;
|
|
785
|
+
private isEnabled;
|
|
786
|
+
enable(maskAnimationTime?: number, shouldPlay?: boolean): Promise<void>;
|
|
787
|
+
disable(): void;
|
|
788
|
+
private lastWord?;
|
|
789
|
+
resume(): Promise<void>;
|
|
790
|
+
pause(): Promise<void>;
|
|
791
|
+
setMaskAnimationState(maskAnimationTime?: number): void;
|
|
792
|
+
getLine(): LyricLine;
|
|
793
|
+
private _prevParentEl;
|
|
794
|
+
private lastStyle;
|
|
795
|
+
show(): void;
|
|
796
|
+
hide(): void;
|
|
797
|
+
private rebuildStyle;
|
|
798
|
+
override rebuildElement(): void;
|
|
799
|
+
/** 设置翻译与音译行文本 */
|
|
800
|
+
private setSubLinesText;
|
|
801
|
+
private getRubyCharCount;
|
|
802
|
+
private getRubySegments;
|
|
803
|
+
private createWord;
|
|
804
|
+
private buildWord;
|
|
805
|
+
private initFloatAnimation;
|
|
806
|
+
private initEmphasizeAnimation;
|
|
807
|
+
private get totalDuration();
|
|
808
|
+
override onLineSizeChange(_size: [number, number]): void;
|
|
809
|
+
updateMaskImageSync(): void;
|
|
810
|
+
private generateCalcBasedMaskImage;
|
|
811
|
+
private generateWebAnimationBasedMaskImage;
|
|
812
|
+
getElement(): HTMLElement;
|
|
813
|
+
private updateMaskAlphaTargets;
|
|
814
|
+
private applyAlphaToDom;
|
|
815
|
+
override setTransform(top?: number, scale?: number, opacity?: number, blur?: number, force?: boolean, delay?: number, mode?: LyricLineRenderMode): void;
|
|
816
|
+
update(delta?: number): void;
|
|
817
|
+
_getDebugTargetPos(): string;
|
|
818
|
+
get isInSight(): boolean;
|
|
819
|
+
private disposeElements;
|
|
820
|
+
override dispose(): void;
|
|
821
|
+
}
|
|
822
|
+
//#endregion
|
|
823
|
+
//#region src/lyric-player/dom/index.d.ts
|
|
824
|
+
/**
|
|
825
|
+
* 歌词行鼠标相关事件,可以获取到歌词行的索引和歌词行元素
|
|
826
|
+
*/
|
|
827
|
+
declare class LyricLineMouseEvent extends MouseEvent {
|
|
828
|
+
/**
|
|
829
|
+
* 歌词行索引
|
|
830
|
+
*/
|
|
831
|
+
readonly lineIndex: number;
|
|
832
|
+
/**
|
|
833
|
+
* 歌词行元素
|
|
834
|
+
*/
|
|
835
|
+
readonly line: LyricLineBase;
|
|
836
|
+
constructor(lineIndex: number, line: LyricLineBase, event: MouseEvent);
|
|
837
|
+
}
|
|
838
|
+
type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;
|
|
839
|
+
/**
|
|
840
|
+
* 歌词播放组件,本框架的核心组件
|
|
841
|
+
*
|
|
842
|
+
* 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施
|
|
843
|
+
*/
|
|
844
|
+
declare class DomLyricPlayer extends LyricPlayerBase {
|
|
845
|
+
override currentLyricLineObjects: LyricLineEl$1[];
|
|
846
|
+
override onResize(): void;
|
|
847
|
+
readonly supportPlusLighter: boolean;
|
|
848
|
+
readonly supportMaskImage: boolean;
|
|
849
|
+
readonly innerSize: [number, number];
|
|
850
|
+
private readonly onLineClickedHandler;
|
|
851
|
+
/**
|
|
852
|
+
* 是否为非逐词歌词
|
|
853
|
+
* @internal
|
|
854
|
+
*/
|
|
855
|
+
_getIsNonDynamic(): boolean;
|
|
856
|
+
private _baseFontSize;
|
|
857
|
+
get baseFontSize(): number;
|
|
858
|
+
constructor();
|
|
859
|
+
private rebuildStyle;
|
|
860
|
+
override setWordFadeWidth(value?: number): void;
|
|
861
|
+
/**
|
|
862
|
+
* 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误
|
|
863
|
+
* @param lines 歌词数组
|
|
864
|
+
* @param initialTime 初始时间,默认为 0
|
|
865
|
+
*/
|
|
866
|
+
override setLyricLines(lines: LyricLine[], initialTime?: number): void;
|
|
867
|
+
override pause(): void;
|
|
868
|
+
override resume(): void;
|
|
869
|
+
override update(delta?: number): void;
|
|
870
|
+
override dispose(): void;
|
|
871
|
+
}
|
|
872
|
+
//#endregion
|
|
873
|
+
//#region src/lyric-player/dom-slim/lyric-line.d.ts
|
|
874
|
+
interface RealWord extends LyricWord {
|
|
875
|
+
mainElement: HTMLSpanElement;
|
|
876
|
+
subElements: HTMLSpanElement[];
|
|
877
|
+
elementAnimations: Animation[];
|
|
878
|
+
maskAnimations: Animation[];
|
|
879
|
+
width: number;
|
|
880
|
+
height: number;
|
|
881
|
+
padding: number;
|
|
882
|
+
shouldEmphasize: boolean;
|
|
883
|
+
}
|
|
884
|
+
declare class RawLyricLineMouseEvent extends MouseEvent {
|
|
885
|
+
readonly line: LyricLineEl;
|
|
886
|
+
constructor(line: LyricLineEl, event: MouseEvent);
|
|
887
|
+
}
|
|
888
|
+
type MouseEventMap = { [evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent ? evt : never };
|
|
889
|
+
type MouseEventTypes = MouseEventMap[keyof MouseEventMap];
|
|
890
|
+
type MouseEventListener = (this: LyricLineEl, ev: RawLyricLineMouseEvent) => void;
|
|
891
|
+
declare class LyricLineEl extends LyricLineBase {
|
|
892
|
+
private lyricPlayer;
|
|
893
|
+
private lyricLine;
|
|
894
|
+
private element;
|
|
895
|
+
private splittedWords;
|
|
896
|
+
lineSize: number[];
|
|
897
|
+
constructor(lyricPlayer: DomSlimLyricPlayer, lyricLine?: LyricLine);
|
|
898
|
+
private listenersMap;
|
|
899
|
+
private readonly onMouseEvent;
|
|
900
|
+
addMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | AddEventListenerOptions | undefined): void;
|
|
901
|
+
removeMouseEventListener(type: MouseEventTypes, callback: MouseEventListener | null, options?: boolean | EventListenerOptions | undefined): void;
|
|
902
|
+
areWordsOnSameLine(word1: RealWord, word2: RealWord): boolean;
|
|
903
|
+
private isEnabled;
|
|
904
|
+
enable(maskAnimationTime?: number): Promise<void>;
|
|
905
|
+
disable(): void;
|
|
906
|
+
private lastWord?;
|
|
907
|
+
resume(): Promise<void>;
|
|
908
|
+
pause(): Promise<void>;
|
|
909
|
+
setMaskAnimationState(maskAnimationTime?: number): void;
|
|
910
|
+
private measureLockMark;
|
|
911
|
+
private measureLock;
|
|
912
|
+
getLine(): LyricLine;
|
|
913
|
+
show(): void;
|
|
914
|
+
hide(): void;
|
|
915
|
+
private rebuildStyle;
|
|
916
|
+
private getRubySegments;
|
|
917
|
+
private buildWordElement;
|
|
918
|
+
override rebuildElement(): void;
|
|
919
|
+
private initEmphasizeAnimation;
|
|
920
|
+
private get totalDuration();
|
|
921
|
+
private maskImageDirty;
|
|
922
|
+
private markImageDirtyPromiseResolve;
|
|
923
|
+
private markImageDirtyPromise;
|
|
924
|
+
markMaskImageDirty(_debugReason?: string): Promise<void>;
|
|
925
|
+
waitMaskImageUpdated(): Promise<void>;
|
|
926
|
+
updateMaskImage(): Promise<void>;
|
|
927
|
+
private generateCalcBasedMaskImage;
|
|
928
|
+
private generateWebAnimationBasedMaskImage;
|
|
929
|
+
getElement(): HTMLElement;
|
|
930
|
+
override setTransform(top?: number, scale?: number, opacity?: number, blur?: number, force?: boolean, delay?: number): void;
|
|
931
|
+
update(delta?: number): void;
|
|
932
|
+
_getDebugTargetPos(): string;
|
|
933
|
+
get isInSight(): boolean;
|
|
934
|
+
private disposeElements;
|
|
935
|
+
override dispose(): void;
|
|
936
|
+
}
|
|
937
|
+
//#endregion
|
|
938
|
+
//#region src/lyric-player/dom-slim/index.d.ts
|
|
939
|
+
/**
|
|
940
|
+
* 歌词播放组件,本框架的核心组件
|
|
941
|
+
*
|
|
942
|
+
* 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施
|
|
943
|
+
*/
|
|
944
|
+
declare class DomSlimLyricPlayer extends LyricPlayerBase {
|
|
945
|
+
override currentLyricLineObjects: LyricLineEl[];
|
|
946
|
+
private debounceCalcLayout;
|
|
947
|
+
override onResize(): void;
|
|
948
|
+
readonly supportPlusLighter: boolean;
|
|
949
|
+
readonly supportMaskImage: boolean;
|
|
950
|
+
readonly innerSize: [number, number];
|
|
951
|
+
private readonly onLineClickedHandler;
|
|
952
|
+
/**
|
|
953
|
+
* 是否为非逐词歌词
|
|
954
|
+
* @internal
|
|
955
|
+
*/
|
|
956
|
+
_getIsNonDynamic(): boolean;
|
|
957
|
+
private _baseFontSize;
|
|
958
|
+
get baseFontSize(): number;
|
|
959
|
+
constructor();
|
|
960
|
+
private rebuildStyle;
|
|
961
|
+
override setWordFadeWidth(value?: number): void;
|
|
962
|
+
/**
|
|
963
|
+
* 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误
|
|
964
|
+
* @param lines 歌词数组
|
|
965
|
+
* @param initialTime 初始时间,默认为 0
|
|
966
|
+
*/
|
|
967
|
+
override setLyricLines(lines: LyricLine[], initialTime?: number): void;
|
|
968
|
+
override pause(): void;
|
|
969
|
+
override resume(): void;
|
|
970
|
+
override update(delta?: number): void;
|
|
971
|
+
override calcLayout(sync?: boolean): Promise<void>;
|
|
972
|
+
override dispose(): void;
|
|
973
|
+
}
|
|
974
|
+
//#endregion
|
|
975
|
+
//#region src/lyric-player/index.d.ts
|
|
976
|
+
/**
|
|
977
|
+
* 歌词中不雅用语的掩码模式
|
|
978
|
+
*/
|
|
979
|
+
declare enum MaskObsceneWordsMode {
|
|
980
|
+
/** 禁用任何不雅用语掩码 */
|
|
981
|
+
Disabled = "",
|
|
982
|
+
/** 完全掩码所有不雅用语 */
|
|
983
|
+
FullMask = "full-mask",
|
|
984
|
+
/** 保留首尾字符,屏蔽中间字符 */
|
|
985
|
+
PartialMask = "partial-mask"
|
|
986
|
+
}
|
|
987
|
+
/**
|
|
988
|
+
* 歌词行的渲染模式
|
|
989
|
+
* @internal
|
|
990
|
+
*/
|
|
991
|
+
declare enum LyricLineRenderMode {
|
|
992
|
+
SOLID = 0,
|
|
993
|
+
GRADIENT = 1
|
|
994
|
+
}
|
|
995
|
+
//#endregion
|
|
996
|
+
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 };
|
|
997
|
+
//# sourceMappingURL=amll-core.d.cts.map
|