@music-lyric-player/base 0.2.0 → 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/dist/index.comm.js +1 -1
- package/dist/index.comm.js.map +1 -1
- package/dist/index.ecma.d.ts +39 -1
- package/dist/index.ecma.js +60 -15
- package/dist/index.ecma.js.map +1 -1
- package/package.json +2 -2
package/dist/index.comm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("lodash-es");const r=require("@music-lyric-player/utils"),d={},u="0.5.1";class l{get version(){return u}type="Incorrect";metas=[];lines=[];agents=[];toJSON(){return{version:this.version,type:this.type,metas:this.metas,lines:this.lines,agents:this.agents}}}class o{config=new r.ConfigManager(d);event=new r.Event;state;active;time;info;constructor(){this.state={playing:!1,frameId:null,scanIndex:0},this.active={lines:[],index:[]},this.time={start:0,seek:0},this.info=new l}handleGetCurrentTime(){return this.state.playing?this.time.seek+(performance.now()-this.time.start):this.time.seek}handleGetLineTime(e){if(e<0||e>=this.info.lines.length)return 0;if(e===this.info.lines.length-1)return 1/0;const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("lodash-es");const r=require("@music-lyric-player/utils"),d={},u="0.5.1";class l{get version(){return u}type="Incorrect";metas=[];lines=[];agents=[];toJSON(){return{version:this.version,type:this.type,metas:this.metas,lines:this.lines,agents:this.agents}}}class o{config=new r.ConfigManager(d);event=new r.Event;state;active;time;info;constructor(){this.state={playing:!1,frameId:null,scanIndex:0},this.active={lines:[],index:[]},this.time={start:0,seek:0},this.info=new l}handleGetCurrentTime(){return this.state.playing?this.time.seek+(performance.now()-this.time.start):this.time.seek}handleGetLineTime(e){if(e<0||e>=this.info.lines.length)return 0;if(e===this.info.lines.length-1)return 1/0;const s=this.info.lines[e],n=this.info.lines[e+1];return Math.max(s.time.end,n.time.start)}handleGetActiveIndex(){return this.active.index.length>0?this.active.index[0]:-1}handleSyncTime(e){const s=[],n=[];let i=this.info.lines.length;for(let t=0;t<this.info.lines.length;t++){const a=this.info.lines[t];if(a.time.start>e){i=t;break}this.handleGetLineTime(t)>e&&(s.push(a),n.push(t))}this.state.scanIndex=i,this.active.lines=s,this.active.index=n,this.event.emit("linesUpdate",[...this.active.lines],[...this.active.index],this.handleGetActiveIndex(),!0)}handleUpdateActiveLines(e){let s=!1;const n=[],i=[];for(let t=0;t<this.active.lines.length;t++){const a=this.active.lines[t],h=this.active.index[t];e>=this.handleGetLineTime(h)?s=!0:(n.push(a),i.push(h))}for(;this.state.scanIndex<this.info.lines.length;){const t=this.info.lines[this.state.scanIndex];if(e>=t.time.start)e<this.handleGetLineTime(this.state.scanIndex)&&(n.push(t),i.push(this.state.scanIndex),s=!0),this.state.scanIndex++;else break}s&&(this.active.lines=n,this.active.index=i,this.event.emit("linesUpdate",[...this.active.lines],[...this.active.index],this.handleGetActiveIndex(),!1))}onTick=()=>{if(!this.state.playing)return;const e=this.handleGetCurrentTime();this.handleUpdateActiveLines(e),this.state.frameId=requestAnimationFrame(this.onTick)};updateLyric(e){e&&(this.pause(),this.info=e,this.active.lines=[],this.active.index=[],this.state.scanIndex=0,this.time.seek=0,this.event.emit("lyricUpdate",e),this.event.emit("linesUpdate",[],[],-1,!1))}play(e){this.pause(),typeof e=="number"&&!Number.isNaN(e)&&(this.time.seek=e,this.handleSyncTime(e)),this.time.start=performance.now(),this.state.playing=!0,this.onTick(),this.event.emit("play",this.handleGetCurrentTime())}pause(){this.state.playing&&(this.time.seek=this.handleGetCurrentTime(),this.state.playing=!1),this.state.frameId!==null&&(cancelAnimationFrame(this.state.frameId),this.state.frameId=null),this.event.emit("pause",this.handleGetCurrentTime())}dispose(){this.pause(),this.event.clear(),this.active.lines=[],this.active.index=[],this.info=new l}matchLinesWithTime(e){const s=[],n=[];for(let i=0;i<this.info.lines.length;i++){const t=this.info.lines[i];if(t.time.start>e)break;this.handleGetLineTime(i)>e&&(s.push(t),n.push(i))}return{lines:s,index:n}}get currentPlaying(){return this.state.playing}get currentLines(){return[...this.active.lines]}get currentIndex(){return[...this.active.index]}get currentActive(){return this.handleGetActiveIndex()}get currentInfo(){return this.info}get currentTime(){return this.handleGetCurrentTime()}}exports.BaseLyricPlayer=o;
|
|
2
2
|
//# sourceMappingURL=index.comm.js.map
|
package/dist/index.comm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.comm.js","sources":["../src/options.ts","../../../node_modules/.pnpm/@music-lyric-kit+lyric@0.4.0/node_modules/@music-lyric-kit/lyric/dist/index.ecma.js","../src/index.ts"],"sourcesContent":["export interface Options {}\n\nexport const DEFAULT_OPTIONS: Options = {}\n","import { createRandomHex as r } from \"@music-lyric-kit/utils\";\nclass s {\n start = 0;\n end = 0;\n get duration() {\n return this.end - this.start;\n }\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n duration: this.duration\n };\n }\n}\nvar o = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Space = \"Space\", t))(o || {});\nclass i {\n stress = !1;\n toJSON() {\n return {\n stress: this.stress\n };\n }\n}\nclass p {\n get type() {\n return \"Normal\";\n }\n time = new s();\n content = \"\";\n extended = [];\n config = new i();\n toJSON() {\n return {\n type: this.type,\n time: this.time,\n content: this.content,\n extended: this.extended,\n config: this.config\n };\n }\n}\nclass N {\n get type() {\n return \"Space\";\n }\n count = 1;\n toJSON() {\n return {\n type: this.type,\n count: this.count\n };\n }\n}\nvar a = /* @__PURE__ */ ((t) => (t.UnKnown = \"UnKnown\", t.Translate = \"Translate\", t.Roman = \"Roman\", t))(a || {});\nclass S {\n type = \"UnKnown\";\n content = \"\";\n toJSON() {\n return {\n type: this.type,\n content: this.content\n };\n }\n}\nvar l = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Interlude = \"Interlude\", t))(l || {});\nclass x {\n get type() {\n return \"Interlude\";\n }\n id = r(4).toUpperCase();\n time = new s();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time\n };\n }\n}\nclass c {\n words = [];\n extended = [];\n get original() {\n return this.words.map((n) => n.type === o.Normal ? n.content : new Array(n.count).fill(\" \").join(\"\")).join(\"\");\n }\n toJSON() {\n return {\n words: this.words,\n extended: this.extended,\n original: this.original\n };\n }\n}\nclass y {\n get type() {\n return \"Normal\";\n }\n id = r(4).toUpperCase();\n time = new s();\n content = new c();\n agent;\n background;\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time,\n content: this.content,\n agent: this.agent,\n background: this.background\n };\n }\n}\nvar u = /* @__PURE__ */ ((t) => (t.Offset = \"Offset\", t.Duration = \"Duration\", t.Title = \"Title\", t.Singer = \"Singer\", t.Album = \"Album\", t.Creator = \"Creator\", t.UnKnown = \"UnKnown\", t))(u || {});\nclass e {\n id = r(4).toUpperCase();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n content: this.content\n };\n }\n}\nclass f extends e {\n get type() {\n return \"Offset\";\n }\n content = 0;\n}\nclass w extends e {\n get type() {\n return \"Duration\";\n }\n content = 0;\n}\nclass O extends e {\n get type() {\n return \"Title\";\n }\n content = \"\";\n}\nclass b extends e {\n get type() {\n return \"Singer\";\n }\n content = \"\";\n}\nclass J extends e {\n get type() {\n return \"Album\";\n }\n content = \"\";\n}\nclass U extends e {\n get type() {\n return \"Creator\";\n }\n content = {\n role: \"\",\n name: []\n };\n}\nclass C extends e {\n get type() {\n return \"UnKnown\";\n }\n content = \"\";\n}\nclass I {\n id = \"\";\n name = \"\";\n count = 0;\n}\nclass d {\n // index in global\n global = 0;\n // index in block\n block = 0;\n toJSON() {\n return {\n global: this.global,\n block: this.block\n };\n }\n}\nclass v {\n id = \"\";\n index = new d();\n toJSON() {\n return {\n id: this.id,\n index: this.index\n };\n }\n}\nconst m = \"0.5.1\";\nvar g = /* @__PURE__ */ ((t) => (t.Incorrect = \"Incorrect\", t.Normal = \"Normal\", t.Syllable = \"Syllable\", t.Pure = \"Pure\", t.Empty = \"Empty\", t.NoTime = \"NoTime\", t))(g || {});\nclass A {\n get version() {\n return m;\n }\n type = \"Incorrect\";\n metas = [];\n lines = [];\n agents = [];\n toJSON() {\n return {\n version: this.version,\n type: this.type,\n metas: this.metas,\n lines: this.lines,\n agents: this.agents\n };\n }\n}\nexport {\n I as Agent,\n v as AgentLine,\n d as AgentLineIndex,\n S as Extended,\n a as ExtendedType,\n A as Info,\n x as LineInterlude,\n y as LineNormal,\n c as LineNormalContent,\n l as LineType,\n J as MetaAlbum,\n U as MetaCreator,\n w as MetaDuration,\n f as MetaOffset,\n b as MetaSinger,\n O as MetaTitle,\n u as MetaType,\n C as MetaUnKnown,\n s as Time,\n g as Type,\n m as Version,\n p as WordNormal,\n N as WordSpace,\n o as WordType\n};\n//# sourceMappingURL=index.ecma.js.map\n","import type { Line } from '@music-lyric-kit/lyric'\nimport type { DeepPartial } from '@music-lyric-player/utils'\nimport type { Options } from './options'\n\nimport { DEFAULT_OPTIONS } from './options'\n\nimport { Info } from '@music-lyric-kit/lyric'\nimport { ConfigManager, Event } from '@music-lyric-player/utils'\n\nexport interface BaseLyricPlayerEventMap {\n /**\n * When the player starts or resumes playback.\n * @param currentTime The current playback time.\n */\n play: (currentTime: number) => void\n\n /**\n * When the player pauses playback.\n * @param currentTime The current playback time.\n */\n pause: (currentTime: number) => void\n\n /**\n * When the entire lyric information is updated (e.g., loading a new lyric/song).\n * @param info The newly loaded lyric information object.\n */\n lyricUpdate: (info: Info) => void\n\n /**\n * When the currently active lyric lines change during playback.\n * @param lines An array of the currently active lyric lines.\n * @param indexs An array of the currently active lyric lines' indexes.\n * @param firstIndex The index of the first currently active lyric line (-1 if none).\n */\n linesUpdate: (lines: Line[], indexs: number[], index: number) => void\n}\n\nexport class BaseLyricPlayer {\n readonly config = new ConfigManager<Options, DeepPartial<Options>>(DEFAULT_OPTIONS)\n\n readonly event: Event<BaseLyricPlayerEventMap> = new Event()\n\n private state: {\n playing: boolean\n frameId: number | null\n scanIndex: number\n }\n private active: {\n lines: Line[]\n index: number[]\n }\n private time: {\n start: number\n seek: number\n }\n private info: Info\n\n constructor() {\n this.state = {\n playing: false,\n frameId: null,\n scanIndex: 0,\n }\n this.active = {\n lines: [],\n index: [],\n }\n this.time = {\n start: 0,\n seek: 0,\n }\n this.info = new Info()\n }\n\n private handleGetCurrentTime() {\n if (!this.state.playing) {\n return this.time.seek\n }\n return this.time.seek + (performance.now() - this.time.start)\n }\n\n private handleGetLineTime(index: number): number {\n if (index < 0 || index >= this.info.lines.length) {\n return 0\n }\n\n if (index === this.info.lines.length - 1) {\n return Infinity\n }\n\n const line = this.info.lines[index]\n const nextLine = this.info.lines[index + 1]\n return Math.max(line.time.end, nextLine.time.start)\n }\n\n private handleGetActiveIndex() {\n return this.active.index.length > 0 ? this.active.index[0] : -1\n }\n\n private handleSyncTime(time: number) {\n const lines: Line[] = []\n const index: number[] = []\n\n let firstIndex = this.info.lines.length\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n firstIndex = i\n break\n }\n\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i) // 保证 lines 和 index 同步推入\n }\n }\n\n this.state.scanIndex = firstIndex\n\n this.active.lines = lines\n this.active.index = index\n\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex())\n }\n\n private handleUpdateActiveLines(now: number) {\n let hasChanged = false\n\n const newActiveLines: Line[] = []\n const newActiveIndex: number[] = []\n\n for (let i = 0; i < this.active.lines.length; i++) {\n const line = this.active.lines[i]\n const infoIndex = this.active.index[i]\n\n if (now >= this.handleGetLineTime(infoIndex)) {\n hasChanged = true\n } else {\n newActiveLines.push(line)\n newActiveIndex.push(infoIndex)\n }\n }\n\n while (this.state.scanIndex < this.info.lines.length) {\n const nextLine = this.info.lines[this.state.scanIndex]\n if (now >= nextLine.time.start) {\n if (now < this.handleGetLineTime(this.state.scanIndex)) {\n newActiveLines.push(nextLine)\n newActiveIndex.push(this.state.scanIndex)\n hasChanged = true\n }\n this.state.scanIndex++\n } else {\n break\n }\n }\n\n if (!hasChanged) {\n return\n }\n\n this.active.lines = newActiveLines\n this.active.index = newActiveIndex\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex())\n }\n\n private onTick = () => {\n if (!this.state.playing) {\n return\n }\n\n const now = this.handleGetCurrentTime()\n this.handleUpdateActiveLines(now)\n\n this.state.frameId = requestAnimationFrame(this.onTick)\n }\n\n updateLyric(info: Info) {\n if (!info) {\n return\n }\n\n this.pause()\n this.info = info\n\n this.active.lines = []\n this.active.index = []\n\n this.state.scanIndex = 0\n this.time.seek = 0\n\n this.event.emit('lyricUpdate', info)\n this.event.emit('linesUpdate', [], [], -1)\n }\n\n play(time?: number) {\n this.pause()\n\n if (typeof time === 'number' && !Number.isNaN(time)) {\n this.time.seek = time\n this.handleSyncTime(time)\n }\n\n this.time.start = performance.now()\n this.state.playing = true\n this.onTick()\n\n this.event.emit('play', this.handleGetCurrentTime())\n }\n\n pause() {\n if (this.state.playing) {\n this.time.seek = this.handleGetCurrentTime()\n this.state.playing = false\n }\n if (this.state.frameId !== null) {\n cancelAnimationFrame(this.state.frameId)\n this.state.frameId = null\n }\n\n this.event.emit('pause', this.handleGetCurrentTime())\n }\n\n dispose() {\n this.pause()\n this.event.clear()\n\n this.active.lines = []\n this.active.index = []\n\n this.info = new Info()\n }\n\n get currentLines() {\n return [...this.active.lines]\n }\n\n get currentIndex() {\n return [...this.active.index]\n }\n\n get currentActive() {\n return this.handleGetActiveIndex()\n }\n\n get currentInfo() {\n return this.info\n }\n\n get currentTime() {\n return this.handleGetCurrentTime()\n }\n}\n"],"names":["DEFAULT_OPTIONS","m","A","BaseLyricPlayer","ConfigManager","Event","Info","index","line","nextLine","time","lines","firstIndex","i","now","hasChanged","newActiveLines","newActiveIndex","infoIndex","info"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"index.comm.js","sources":["../src/options.ts","../../../node_modules/.pnpm/@music-lyric-kit+lyric@0.4.0/node_modules/@music-lyric-kit/lyric/dist/index.ecma.js","../src/index.ts"],"sourcesContent":["export interface Options {}\n\nexport const DEFAULT_OPTIONS: Options = {}\n","import { createRandomHex as r } from \"@music-lyric-kit/utils\";\nclass s {\n start = 0;\n end = 0;\n get duration() {\n return this.end - this.start;\n }\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n duration: this.duration\n };\n }\n}\nvar o = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Space = \"Space\", t))(o || {});\nclass i {\n stress = !1;\n toJSON() {\n return {\n stress: this.stress\n };\n }\n}\nclass p {\n get type() {\n return \"Normal\";\n }\n time = new s();\n content = \"\";\n extended = [];\n config = new i();\n toJSON() {\n return {\n type: this.type,\n time: this.time,\n content: this.content,\n extended: this.extended,\n config: this.config\n };\n }\n}\nclass N {\n get type() {\n return \"Space\";\n }\n count = 1;\n toJSON() {\n return {\n type: this.type,\n count: this.count\n };\n }\n}\nvar a = /* @__PURE__ */ ((t) => (t.UnKnown = \"UnKnown\", t.Translate = \"Translate\", t.Roman = \"Roman\", t))(a || {});\nclass S {\n type = \"UnKnown\";\n content = \"\";\n toJSON() {\n return {\n type: this.type,\n content: this.content\n };\n }\n}\nvar l = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Interlude = \"Interlude\", t))(l || {});\nclass x {\n get type() {\n return \"Interlude\";\n }\n id = r(4).toUpperCase();\n time = new s();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time\n };\n }\n}\nclass c {\n words = [];\n extended = [];\n get original() {\n return this.words.map((n) => n.type === o.Normal ? n.content : new Array(n.count).fill(\" \").join(\"\")).join(\"\");\n }\n toJSON() {\n return {\n words: this.words,\n extended: this.extended,\n original: this.original\n };\n }\n}\nclass y {\n get type() {\n return \"Normal\";\n }\n id = r(4).toUpperCase();\n time = new s();\n content = new c();\n agent;\n background;\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time,\n content: this.content,\n agent: this.agent,\n background: this.background\n };\n }\n}\nvar u = /* @__PURE__ */ ((t) => (t.Offset = \"Offset\", t.Duration = \"Duration\", t.Title = \"Title\", t.Singer = \"Singer\", t.Album = \"Album\", t.Creator = \"Creator\", t.UnKnown = \"UnKnown\", t))(u || {});\nclass e {\n id = r(4).toUpperCase();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n content: this.content\n };\n }\n}\nclass f extends e {\n get type() {\n return \"Offset\";\n }\n content = 0;\n}\nclass w extends e {\n get type() {\n return \"Duration\";\n }\n content = 0;\n}\nclass O extends e {\n get type() {\n return \"Title\";\n }\n content = \"\";\n}\nclass b extends e {\n get type() {\n return \"Singer\";\n }\n content = \"\";\n}\nclass J extends e {\n get type() {\n return \"Album\";\n }\n content = \"\";\n}\nclass U extends e {\n get type() {\n return \"Creator\";\n }\n content = {\n role: \"\",\n name: []\n };\n}\nclass C extends e {\n get type() {\n return \"UnKnown\";\n }\n content = \"\";\n}\nclass I {\n id = \"\";\n name = \"\";\n count = 0;\n}\nclass d {\n // index in global\n global = 0;\n // index in block\n block = 0;\n toJSON() {\n return {\n global: this.global,\n block: this.block\n };\n }\n}\nclass v {\n id = \"\";\n index = new d();\n toJSON() {\n return {\n id: this.id,\n index: this.index\n };\n }\n}\nconst m = \"0.5.1\";\nvar g = /* @__PURE__ */ ((t) => (t.Incorrect = \"Incorrect\", t.Normal = \"Normal\", t.Syllable = \"Syllable\", t.Pure = \"Pure\", t.Empty = \"Empty\", t.NoTime = \"NoTime\", t))(g || {});\nclass A {\n get version() {\n return m;\n }\n type = \"Incorrect\";\n metas = [];\n lines = [];\n agents = [];\n toJSON() {\n return {\n version: this.version,\n type: this.type,\n metas: this.metas,\n lines: this.lines,\n agents: this.agents\n };\n }\n}\nexport {\n I as Agent,\n v as AgentLine,\n d as AgentLineIndex,\n S as Extended,\n a as ExtendedType,\n A as Info,\n x as LineInterlude,\n y as LineNormal,\n c as LineNormalContent,\n l as LineType,\n J as MetaAlbum,\n U as MetaCreator,\n w as MetaDuration,\n f as MetaOffset,\n b as MetaSinger,\n O as MetaTitle,\n u as MetaType,\n C as MetaUnKnown,\n s as Time,\n g as Type,\n m as Version,\n p as WordNormal,\n N as WordSpace,\n o as WordType\n};\n//# sourceMappingURL=index.ecma.js.map\n","import type { Line } from '@music-lyric-kit/lyric'\nimport type { DeepPartial } from '@music-lyric-player/utils'\nimport type { Options } from './options'\n\nimport { DEFAULT_OPTIONS } from './options'\n\nimport { Info } from '@music-lyric-kit/lyric'\nimport { ConfigManager, Event } from '@music-lyric-player/utils'\n\nexport interface BaseLyricPlayerEventMap {\n /**\n * When the player starts or resumes playback.\n * @param currentTime The current playback time.\n */\n play: (currentTime: number) => void\n\n /**\n * When the player pauses playback.\n * @param currentTime The current playback time.\n */\n pause: (currentTime: number) => void\n\n /**\n * When the entire lyric information is updated (e.g., loading a new lyric/song).\n * @param info The newly loaded lyric information object.\n */\n lyricUpdate: (info: Info) => void\n\n /**\n * When the currently active lyric lines change during playback.\n * @param lines An array of the currently active lyric lines.\n * @param indexs An array of the currently active lyric lines' indexes.\n * @param firstIndex The index of the first currently active lyric line (-1 if none).\n * @param isSeek Is seek.\n */\n linesUpdate: (lines: Line[], indexs: number[], index: number, isSeek: boolean) => void\n}\n\nexport class BaseLyricPlayer {\n readonly config = new ConfigManager<Options, DeepPartial<Options>>(DEFAULT_OPTIONS)\n\n readonly event: Event<BaseLyricPlayerEventMap> = new Event()\n\n private state: {\n playing: boolean\n frameId: number | null\n scanIndex: number\n }\n private active: {\n lines: Line[]\n index: number[]\n }\n private time: {\n start: number\n seek: number\n }\n private info: Info\n\n constructor() {\n this.state = {\n playing: false,\n frameId: null,\n scanIndex: 0,\n }\n this.active = {\n lines: [],\n index: [],\n }\n this.time = {\n start: 0,\n seek: 0,\n }\n this.info = new Info()\n }\n\n private handleGetCurrentTime() {\n if (!this.state.playing) {\n return this.time.seek\n }\n return this.time.seek + (performance.now() - this.time.start)\n }\n\n private handleGetLineTime(index: number): number {\n if (index < 0 || index >= this.info.lines.length) {\n return 0\n }\n\n if (index === this.info.lines.length - 1) {\n return Infinity\n }\n\n const line = this.info.lines[index]\n const nextLine = this.info.lines[index + 1]\n return Math.max(line.time.end, nextLine.time.start)\n }\n\n private handleGetActiveIndex() {\n return this.active.index.length > 0 ? this.active.index[0] : -1\n }\n\n private handleSyncTime(time: number) {\n const lines: Line[] = []\n const index: number[] = []\n\n let firstIndex = this.info.lines.length\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n firstIndex = i\n break\n }\n\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i)\n }\n }\n\n this.state.scanIndex = firstIndex\n\n this.active.lines = lines\n this.active.index = index\n\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), true)\n }\n\n private handleUpdateActiveLines(now: number) {\n let hasChanged = false\n\n const newActiveLines: Line[] = []\n const newActiveIndex: number[] = []\n\n for (let i = 0; i < this.active.lines.length; i++) {\n const line = this.active.lines[i]\n const infoIndex = this.active.index[i]\n\n if (now >= this.handleGetLineTime(infoIndex)) {\n hasChanged = true\n } else {\n newActiveLines.push(line)\n newActiveIndex.push(infoIndex)\n }\n }\n\n while (this.state.scanIndex < this.info.lines.length) {\n const nextLine = this.info.lines[this.state.scanIndex]\n if (now >= nextLine.time.start) {\n if (now < this.handleGetLineTime(this.state.scanIndex)) {\n newActiveLines.push(nextLine)\n newActiveIndex.push(this.state.scanIndex)\n hasChanged = true\n }\n this.state.scanIndex++\n } else {\n break\n }\n }\n\n if (!hasChanged) {\n return\n }\n\n this.active.lines = newActiveLines\n this.active.index = newActiveIndex\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), false)\n }\n\n private onTick = () => {\n if (!this.state.playing) {\n return\n }\n\n const now = this.handleGetCurrentTime()\n this.handleUpdateActiveLines(now)\n\n this.state.frameId = requestAnimationFrame(this.onTick)\n }\n\n updateLyric(info: Info) {\n if (!info) {\n return\n }\n\n this.pause()\n this.info = info\n\n this.active.lines = []\n this.active.index = []\n\n this.state.scanIndex = 0\n this.time.seek = 0\n\n this.event.emit('lyricUpdate', info)\n this.event.emit('linesUpdate', [], [], -1, false)\n }\n\n /**\n * Start playback\n * @param time Optional time in ms to seek to before starting playback. If not provided, playback will start from the current position.\n */\n play(time?: number) {\n this.pause()\n\n if (typeof time === 'number' && !Number.isNaN(time)) {\n this.time.seek = time\n this.handleSyncTime(time)\n }\n\n this.time.start = performance.now()\n this.state.playing = true\n this.onTick()\n\n this.event.emit('play', this.handleGetCurrentTime())\n }\n\n /**\n * Pause playback\n */\n pause() {\n if (this.state.playing) {\n this.time.seek = this.handleGetCurrentTime()\n this.state.playing = false\n }\n if (this.state.frameId !== null) {\n cancelAnimationFrame(this.state.frameId)\n this.state.frameId = null\n }\n\n this.event.emit('pause', this.handleGetCurrentTime())\n }\n\n /**\n * Stop playback\n */\n dispose() {\n this.pause()\n this.event.clear()\n\n this.active.lines = []\n this.active.index = []\n\n this.info = new Info()\n }\n\n /**\n * Find all active lines at the given time (ms). Does not mutate internal state.\n * @param time time in ms to find active lines for.\n */\n matchLinesWithTime(time: number): { lines: Line[]; index: number[] } {\n const lines: Line[] = []\n const index: number[] = []\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n break\n }\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i)\n }\n }\n return { lines, index }\n }\n\n /**\n * Whether the player is currently playing.\n */\n get currentPlaying() {\n return this.state.playing\n }\n\n /**\n * Current active lines.\n */\n get currentLines() {\n return [...this.active.lines]\n }\n\n /**\n * Indices of currently active lines.\n */\n get currentIndex() {\n return [...this.active.index]\n }\n\n /**\n * The index of the primary active line, or -1 if none.\n */\n get currentActive() {\n return this.handleGetActiveIndex()\n }\n\n /**\n * The current lyric info object.\n */\n get currentInfo() {\n return this.info\n }\n\n /**\n * The current playback time in ms.\n */\n get currentTime() {\n return this.handleGetCurrentTime()\n }\n}\n"],"names":["DEFAULT_OPTIONS","m","A","BaseLyricPlayer","ConfigManager","Event","Info","index","line","nextLine","time","lines","firstIndex","i","now","hasChanged","newActiveLines","newActiveIndex","infoIndex","info"],"mappings":"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","x_google_ignoreList":[1]}
|
package/dist/index.ecma.d.ts
CHANGED
|
@@ -18,13 +18,50 @@ export declare class BaseLyricPlayer {
|
|
|
18
18
|
private handleUpdateActiveLines;
|
|
19
19
|
private onTick;
|
|
20
20
|
updateLyric(info: Info): void;
|
|
21
|
+
/**
|
|
22
|
+
* Start playback
|
|
23
|
+
* @param time Optional time in ms to seek to before starting playback. If not provided, playback will start from the current position.
|
|
24
|
+
*/
|
|
21
25
|
play(time?: number): void;
|
|
26
|
+
/**
|
|
27
|
+
* Pause playback
|
|
28
|
+
*/
|
|
22
29
|
pause(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Stop playback
|
|
32
|
+
*/
|
|
23
33
|
dispose(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Find all active lines at the given time (ms). Does not mutate internal state.
|
|
36
|
+
* @param time time in ms to find active lines for.
|
|
37
|
+
*/
|
|
38
|
+
matchLinesWithTime(time: number): {
|
|
39
|
+
lines: Line[];
|
|
40
|
+
index: number[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Whether the player is currently playing.
|
|
44
|
+
*/
|
|
45
|
+
get currentPlaying(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Current active lines.
|
|
48
|
+
*/
|
|
24
49
|
get currentLines(): Line[];
|
|
50
|
+
/**
|
|
51
|
+
* Indices of currently active lines.
|
|
52
|
+
*/
|
|
25
53
|
get currentIndex(): number[];
|
|
54
|
+
/**
|
|
55
|
+
* The index of the primary active line, or -1 if none.
|
|
56
|
+
*/
|
|
26
57
|
get currentActive(): number;
|
|
58
|
+
/**
|
|
59
|
+
* The current lyric info object.
|
|
60
|
+
*/
|
|
27
61
|
get currentInfo(): Info;
|
|
62
|
+
/**
|
|
63
|
+
* The current playback time in ms.
|
|
64
|
+
*/
|
|
28
65
|
get currentTime(): number;
|
|
29
66
|
}
|
|
30
67
|
|
|
@@ -49,8 +86,9 @@ export declare interface BaseLyricPlayerEventMap {
|
|
|
49
86
|
* @param lines An array of the currently active lyric lines.
|
|
50
87
|
* @param indexs An array of the currently active lyric lines' indexes.
|
|
51
88
|
* @param firstIndex The index of the first currently active lyric line (-1 if none).
|
|
89
|
+
* @param isSeek Is seek.
|
|
52
90
|
*/
|
|
53
|
-
linesUpdate: (lines: Line[], indexs: number[], index: number) => void;
|
|
91
|
+
linesUpdate: (lines: Line[], indexs: number[], index: number, isSeek: boolean) => void;
|
|
54
92
|
}
|
|
55
93
|
|
|
56
94
|
declare interface Options {
|
package/dist/index.ecma.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "lodash-es";
|
|
2
2
|
import { ConfigManager as c, Event as d } from "@music-lyric-player/utils";
|
|
3
|
-
const o = {},
|
|
3
|
+
const o = {}, u = "0.5.1";
|
|
4
4
|
class r {
|
|
5
5
|
get version() {
|
|
6
|
-
return
|
|
6
|
+
return u;
|
|
7
7
|
}
|
|
8
8
|
type = "Incorrect";
|
|
9
9
|
metas = [];
|
|
@@ -47,40 +47,40 @@ class v {
|
|
|
47
47
|
return 0;
|
|
48
48
|
if (e === this.info.lines.length - 1)
|
|
49
49
|
return 1 / 0;
|
|
50
|
-
const
|
|
51
|
-
return Math.max(
|
|
50
|
+
const n = this.info.lines[e], s = this.info.lines[e + 1];
|
|
51
|
+
return Math.max(n.time.end, s.time.start);
|
|
52
52
|
}
|
|
53
53
|
handleGetActiveIndex() {
|
|
54
54
|
return this.active.index.length > 0 ? this.active.index[0] : -1;
|
|
55
55
|
}
|
|
56
56
|
handleSyncTime(e) {
|
|
57
|
-
const
|
|
58
|
-
let
|
|
57
|
+
const n = [], s = [];
|
|
58
|
+
let i = this.info.lines.length;
|
|
59
59
|
for (let t = 0; t < this.info.lines.length; t++) {
|
|
60
60
|
const a = this.info.lines[t];
|
|
61
61
|
if (a.time.start > e) {
|
|
62
|
-
|
|
62
|
+
i = t;
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
|
-
this.handleGetLineTime(t) > e && (
|
|
65
|
+
this.handleGetLineTime(t) > e && (n.push(a), s.push(t));
|
|
66
66
|
}
|
|
67
|
-
this.state.scanIndex =
|
|
67
|
+
this.state.scanIndex = i, this.active.lines = n, this.active.index = s, this.event.emit("linesUpdate", [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), !0);
|
|
68
68
|
}
|
|
69
69
|
handleUpdateActiveLines(e) {
|
|
70
|
-
let
|
|
71
|
-
const s = [],
|
|
70
|
+
let n = !1;
|
|
71
|
+
const s = [], i = [];
|
|
72
72
|
for (let t = 0; t < this.active.lines.length; t++) {
|
|
73
73
|
const a = this.active.lines[t], h = this.active.index[t];
|
|
74
|
-
e >= this.handleGetLineTime(h) ?
|
|
74
|
+
e >= this.handleGetLineTime(h) ? n = !0 : (s.push(a), i.push(h));
|
|
75
75
|
}
|
|
76
76
|
for (; this.state.scanIndex < this.info.lines.length; ) {
|
|
77
77
|
const t = this.info.lines[this.state.scanIndex];
|
|
78
78
|
if (e >= t.time.start)
|
|
79
|
-
e < this.handleGetLineTime(this.state.scanIndex) && (s.push(t),
|
|
79
|
+
e < this.handleGetLineTime(this.state.scanIndex) && (s.push(t), i.push(this.state.scanIndex), n = !0), this.state.scanIndex++;
|
|
80
80
|
else
|
|
81
81
|
break;
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
n && (this.active.lines = s, this.active.index = i, this.event.emit("linesUpdate", [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), !1));
|
|
84
84
|
}
|
|
85
85
|
onTick = () => {
|
|
86
86
|
if (!this.state.playing)
|
|
@@ -89,29 +89,74 @@ class v {
|
|
|
89
89
|
this.handleUpdateActiveLines(e), this.state.frameId = requestAnimationFrame(this.onTick);
|
|
90
90
|
};
|
|
91
91
|
updateLyric(e) {
|
|
92
|
-
e && (this.pause(), this.info = e, this.active.lines = [], this.active.index = [], this.state.scanIndex = 0, this.time.seek = 0, this.event.emit("lyricUpdate", e), this.event.emit("linesUpdate", [], [], -1));
|
|
92
|
+
e && (this.pause(), this.info = e, this.active.lines = [], this.active.index = [], this.state.scanIndex = 0, this.time.seek = 0, this.event.emit("lyricUpdate", e), this.event.emit("linesUpdate", [], [], -1, !1));
|
|
93
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Start playback
|
|
96
|
+
* @param time Optional time in ms to seek to before starting playback. If not provided, playback will start from the current position.
|
|
97
|
+
*/
|
|
94
98
|
play(e) {
|
|
95
99
|
this.pause(), typeof e == "number" && !Number.isNaN(e) && (this.time.seek = e, this.handleSyncTime(e)), this.time.start = performance.now(), this.state.playing = !0, this.onTick(), this.event.emit("play", this.handleGetCurrentTime());
|
|
96
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Pause playback
|
|
103
|
+
*/
|
|
97
104
|
pause() {
|
|
98
105
|
this.state.playing && (this.time.seek = this.handleGetCurrentTime(), this.state.playing = !1), this.state.frameId !== null && (cancelAnimationFrame(this.state.frameId), this.state.frameId = null), this.event.emit("pause", this.handleGetCurrentTime());
|
|
99
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Stop playback
|
|
109
|
+
*/
|
|
100
110
|
dispose() {
|
|
101
111
|
this.pause(), this.event.clear(), this.active.lines = [], this.active.index = [], this.info = new r();
|
|
102
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Find all active lines at the given time (ms). Does not mutate internal state.
|
|
115
|
+
* @param time time in ms to find active lines for.
|
|
116
|
+
*/
|
|
117
|
+
matchLinesWithTime(e) {
|
|
118
|
+
const n = [], s = [];
|
|
119
|
+
for (let i = 0; i < this.info.lines.length; i++) {
|
|
120
|
+
const t = this.info.lines[i];
|
|
121
|
+
if (t.time.start > e)
|
|
122
|
+
break;
|
|
123
|
+
this.handleGetLineTime(i) > e && (n.push(t), s.push(i));
|
|
124
|
+
}
|
|
125
|
+
return { lines: n, index: s };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Whether the player is currently playing.
|
|
129
|
+
*/
|
|
130
|
+
get currentPlaying() {
|
|
131
|
+
return this.state.playing;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Current active lines.
|
|
135
|
+
*/
|
|
103
136
|
get currentLines() {
|
|
104
137
|
return [...this.active.lines];
|
|
105
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Indices of currently active lines.
|
|
141
|
+
*/
|
|
106
142
|
get currentIndex() {
|
|
107
143
|
return [...this.active.index];
|
|
108
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* The index of the primary active line, or -1 if none.
|
|
147
|
+
*/
|
|
109
148
|
get currentActive() {
|
|
110
149
|
return this.handleGetActiveIndex();
|
|
111
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* The current lyric info object.
|
|
153
|
+
*/
|
|
112
154
|
get currentInfo() {
|
|
113
155
|
return this.info;
|
|
114
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* The current playback time in ms.
|
|
159
|
+
*/
|
|
115
160
|
get currentTime() {
|
|
116
161
|
return this.handleGetCurrentTime();
|
|
117
162
|
}
|
package/dist/index.ecma.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ecma.js","sources":["../src/options.ts","../../../node_modules/.pnpm/@music-lyric-kit+lyric@0.4.0/node_modules/@music-lyric-kit/lyric/dist/index.ecma.js","../src/index.ts"],"sourcesContent":["export interface Options {}\n\nexport const DEFAULT_OPTIONS: Options = {}\n","import { createRandomHex as r } from \"@music-lyric-kit/utils\";\nclass s {\n start = 0;\n end = 0;\n get duration() {\n return this.end - this.start;\n }\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n duration: this.duration\n };\n }\n}\nvar o = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Space = \"Space\", t))(o || {});\nclass i {\n stress = !1;\n toJSON() {\n return {\n stress: this.stress\n };\n }\n}\nclass p {\n get type() {\n return \"Normal\";\n }\n time = new s();\n content = \"\";\n extended = [];\n config = new i();\n toJSON() {\n return {\n type: this.type,\n time: this.time,\n content: this.content,\n extended: this.extended,\n config: this.config\n };\n }\n}\nclass N {\n get type() {\n return \"Space\";\n }\n count = 1;\n toJSON() {\n return {\n type: this.type,\n count: this.count\n };\n }\n}\nvar a = /* @__PURE__ */ ((t) => (t.UnKnown = \"UnKnown\", t.Translate = \"Translate\", t.Roman = \"Roman\", t))(a || {});\nclass S {\n type = \"UnKnown\";\n content = \"\";\n toJSON() {\n return {\n type: this.type,\n content: this.content\n };\n }\n}\nvar l = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Interlude = \"Interlude\", t))(l || {});\nclass x {\n get type() {\n return \"Interlude\";\n }\n id = r(4).toUpperCase();\n time = new s();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time\n };\n }\n}\nclass c {\n words = [];\n extended = [];\n get original() {\n return this.words.map((n) => n.type === o.Normal ? n.content : new Array(n.count).fill(\" \").join(\"\")).join(\"\");\n }\n toJSON() {\n return {\n words: this.words,\n extended: this.extended,\n original: this.original\n };\n }\n}\nclass y {\n get type() {\n return \"Normal\";\n }\n id = r(4).toUpperCase();\n time = new s();\n content = new c();\n agent;\n background;\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time,\n content: this.content,\n agent: this.agent,\n background: this.background\n };\n }\n}\nvar u = /* @__PURE__ */ ((t) => (t.Offset = \"Offset\", t.Duration = \"Duration\", t.Title = \"Title\", t.Singer = \"Singer\", t.Album = \"Album\", t.Creator = \"Creator\", t.UnKnown = \"UnKnown\", t))(u || {});\nclass e {\n id = r(4).toUpperCase();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n content: this.content\n };\n }\n}\nclass f extends e {\n get type() {\n return \"Offset\";\n }\n content = 0;\n}\nclass w extends e {\n get type() {\n return \"Duration\";\n }\n content = 0;\n}\nclass O extends e {\n get type() {\n return \"Title\";\n }\n content = \"\";\n}\nclass b extends e {\n get type() {\n return \"Singer\";\n }\n content = \"\";\n}\nclass J extends e {\n get type() {\n return \"Album\";\n }\n content = \"\";\n}\nclass U extends e {\n get type() {\n return \"Creator\";\n }\n content = {\n role: \"\",\n name: []\n };\n}\nclass C extends e {\n get type() {\n return \"UnKnown\";\n }\n content = \"\";\n}\nclass I {\n id = \"\";\n name = \"\";\n count = 0;\n}\nclass d {\n // index in global\n global = 0;\n // index in block\n block = 0;\n toJSON() {\n return {\n global: this.global,\n block: this.block\n };\n }\n}\nclass v {\n id = \"\";\n index = new d();\n toJSON() {\n return {\n id: this.id,\n index: this.index\n };\n }\n}\nconst m = \"0.5.1\";\nvar g = /* @__PURE__ */ ((t) => (t.Incorrect = \"Incorrect\", t.Normal = \"Normal\", t.Syllable = \"Syllable\", t.Pure = \"Pure\", t.Empty = \"Empty\", t.NoTime = \"NoTime\", t))(g || {});\nclass A {\n get version() {\n return m;\n }\n type = \"Incorrect\";\n metas = [];\n lines = [];\n agents = [];\n toJSON() {\n return {\n version: this.version,\n type: this.type,\n metas: this.metas,\n lines: this.lines,\n agents: this.agents\n };\n }\n}\nexport {\n I as Agent,\n v as AgentLine,\n d as AgentLineIndex,\n S as Extended,\n a as ExtendedType,\n A as Info,\n x as LineInterlude,\n y as LineNormal,\n c as LineNormalContent,\n l as LineType,\n J as MetaAlbum,\n U as MetaCreator,\n w as MetaDuration,\n f as MetaOffset,\n b as MetaSinger,\n O as MetaTitle,\n u as MetaType,\n C as MetaUnKnown,\n s as Time,\n g as Type,\n m as Version,\n p as WordNormal,\n N as WordSpace,\n o as WordType\n};\n//# sourceMappingURL=index.ecma.js.map\n","import type { Line } from '@music-lyric-kit/lyric'\nimport type { DeepPartial } from '@music-lyric-player/utils'\nimport type { Options } from './options'\n\nimport { DEFAULT_OPTIONS } from './options'\n\nimport { Info } from '@music-lyric-kit/lyric'\nimport { ConfigManager, Event } from '@music-lyric-player/utils'\n\nexport interface BaseLyricPlayerEventMap {\n /**\n * When the player starts or resumes playback.\n * @param currentTime The current playback time.\n */\n play: (currentTime: number) => void\n\n /**\n * When the player pauses playback.\n * @param currentTime The current playback time.\n */\n pause: (currentTime: number) => void\n\n /**\n * When the entire lyric information is updated (e.g., loading a new lyric/song).\n * @param info The newly loaded lyric information object.\n */\n lyricUpdate: (info: Info) => void\n\n /**\n * When the currently active lyric lines change during playback.\n * @param lines An array of the currently active lyric lines.\n * @param indexs An array of the currently active lyric lines' indexes.\n * @param firstIndex The index of the first currently active lyric line (-1 if none).\n */\n linesUpdate: (lines: Line[], indexs: number[], index: number) => void\n}\n\nexport class BaseLyricPlayer {\n readonly config = new ConfigManager<Options, DeepPartial<Options>>(DEFAULT_OPTIONS)\n\n readonly event: Event<BaseLyricPlayerEventMap> = new Event()\n\n private state: {\n playing: boolean\n frameId: number | null\n scanIndex: number\n }\n private active: {\n lines: Line[]\n index: number[]\n }\n private time: {\n start: number\n seek: number\n }\n private info: Info\n\n constructor() {\n this.state = {\n playing: false,\n frameId: null,\n scanIndex: 0,\n }\n this.active = {\n lines: [],\n index: [],\n }\n this.time = {\n start: 0,\n seek: 0,\n }\n this.info = new Info()\n }\n\n private handleGetCurrentTime() {\n if (!this.state.playing) {\n return this.time.seek\n }\n return this.time.seek + (performance.now() - this.time.start)\n }\n\n private handleGetLineTime(index: number): number {\n if (index < 0 || index >= this.info.lines.length) {\n return 0\n }\n\n if (index === this.info.lines.length - 1) {\n return Infinity\n }\n\n const line = this.info.lines[index]\n const nextLine = this.info.lines[index + 1]\n return Math.max(line.time.end, nextLine.time.start)\n }\n\n private handleGetActiveIndex() {\n return this.active.index.length > 0 ? this.active.index[0] : -1\n }\n\n private handleSyncTime(time: number) {\n const lines: Line[] = []\n const index: number[] = []\n\n let firstIndex = this.info.lines.length\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n firstIndex = i\n break\n }\n\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i) // 保证 lines 和 index 同步推入\n }\n }\n\n this.state.scanIndex = firstIndex\n\n this.active.lines = lines\n this.active.index = index\n\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex())\n }\n\n private handleUpdateActiveLines(now: number) {\n let hasChanged = false\n\n const newActiveLines: Line[] = []\n const newActiveIndex: number[] = []\n\n for (let i = 0; i < this.active.lines.length; i++) {\n const line = this.active.lines[i]\n const infoIndex = this.active.index[i]\n\n if (now >= this.handleGetLineTime(infoIndex)) {\n hasChanged = true\n } else {\n newActiveLines.push(line)\n newActiveIndex.push(infoIndex)\n }\n }\n\n while (this.state.scanIndex < this.info.lines.length) {\n const nextLine = this.info.lines[this.state.scanIndex]\n if (now >= nextLine.time.start) {\n if (now < this.handleGetLineTime(this.state.scanIndex)) {\n newActiveLines.push(nextLine)\n newActiveIndex.push(this.state.scanIndex)\n hasChanged = true\n }\n this.state.scanIndex++\n } else {\n break\n }\n }\n\n if (!hasChanged) {\n return\n }\n\n this.active.lines = newActiveLines\n this.active.index = newActiveIndex\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex())\n }\n\n private onTick = () => {\n if (!this.state.playing) {\n return\n }\n\n const now = this.handleGetCurrentTime()\n this.handleUpdateActiveLines(now)\n\n this.state.frameId = requestAnimationFrame(this.onTick)\n }\n\n updateLyric(info: Info) {\n if (!info) {\n return\n }\n\n this.pause()\n this.info = info\n\n this.active.lines = []\n this.active.index = []\n\n this.state.scanIndex = 0\n this.time.seek = 0\n\n this.event.emit('lyricUpdate', info)\n this.event.emit('linesUpdate', [], [], -1)\n }\n\n play(time?: number) {\n this.pause()\n\n if (typeof time === 'number' && !Number.isNaN(time)) {\n this.time.seek = time\n this.handleSyncTime(time)\n }\n\n this.time.start = performance.now()\n this.state.playing = true\n this.onTick()\n\n this.event.emit('play', this.handleGetCurrentTime())\n }\n\n pause() {\n if (this.state.playing) {\n this.time.seek = this.handleGetCurrentTime()\n this.state.playing = false\n }\n if (this.state.frameId !== null) {\n cancelAnimationFrame(this.state.frameId)\n this.state.frameId = null\n }\n\n this.event.emit('pause', this.handleGetCurrentTime())\n }\n\n dispose() {\n this.pause()\n this.event.clear()\n\n this.active.lines = []\n this.active.index = []\n\n this.info = new Info()\n }\n\n get currentLines() {\n return [...this.active.lines]\n }\n\n get currentIndex() {\n return [...this.active.index]\n }\n\n get currentActive() {\n return this.handleGetActiveIndex()\n }\n\n get currentInfo() {\n return this.info\n }\n\n get currentTime() {\n return this.handleGetCurrentTime()\n }\n}\n"],"names":["DEFAULT_OPTIONS","A","BaseLyricPlayer","ConfigManager","Event","Info","index","line","nextLine","time","lines","firstIndex","i","now","hasChanged","newActiveLines","newActiveIndex","infoIndex","info"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"index.ecma.js","sources":["../src/options.ts","../../../node_modules/.pnpm/@music-lyric-kit+lyric@0.4.0/node_modules/@music-lyric-kit/lyric/dist/index.ecma.js","../src/index.ts"],"sourcesContent":["export interface Options {}\n\nexport const DEFAULT_OPTIONS: Options = {}\n","import { createRandomHex as r } from \"@music-lyric-kit/utils\";\nclass s {\n start = 0;\n end = 0;\n get duration() {\n return this.end - this.start;\n }\n toJSON() {\n return {\n start: this.start,\n end: this.end,\n duration: this.duration\n };\n }\n}\nvar o = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Space = \"Space\", t))(o || {});\nclass i {\n stress = !1;\n toJSON() {\n return {\n stress: this.stress\n };\n }\n}\nclass p {\n get type() {\n return \"Normal\";\n }\n time = new s();\n content = \"\";\n extended = [];\n config = new i();\n toJSON() {\n return {\n type: this.type,\n time: this.time,\n content: this.content,\n extended: this.extended,\n config: this.config\n };\n }\n}\nclass N {\n get type() {\n return \"Space\";\n }\n count = 1;\n toJSON() {\n return {\n type: this.type,\n count: this.count\n };\n }\n}\nvar a = /* @__PURE__ */ ((t) => (t.UnKnown = \"UnKnown\", t.Translate = \"Translate\", t.Roman = \"Roman\", t))(a || {});\nclass S {\n type = \"UnKnown\";\n content = \"\";\n toJSON() {\n return {\n type: this.type,\n content: this.content\n };\n }\n}\nvar l = /* @__PURE__ */ ((t) => (t.Normal = \"Normal\", t.Interlude = \"Interlude\", t))(l || {});\nclass x {\n get type() {\n return \"Interlude\";\n }\n id = r(4).toUpperCase();\n time = new s();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time\n };\n }\n}\nclass c {\n words = [];\n extended = [];\n get original() {\n return this.words.map((n) => n.type === o.Normal ? n.content : new Array(n.count).fill(\" \").join(\"\")).join(\"\");\n }\n toJSON() {\n return {\n words: this.words,\n extended: this.extended,\n original: this.original\n };\n }\n}\nclass y {\n get type() {\n return \"Normal\";\n }\n id = r(4).toUpperCase();\n time = new s();\n content = new c();\n agent;\n background;\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n time: this.time,\n content: this.content,\n agent: this.agent,\n background: this.background\n };\n }\n}\nvar u = /* @__PURE__ */ ((t) => (t.Offset = \"Offset\", t.Duration = \"Duration\", t.Title = \"Title\", t.Singer = \"Singer\", t.Album = \"Album\", t.Creator = \"Creator\", t.UnKnown = \"UnKnown\", t))(u || {});\nclass e {\n id = r(4).toUpperCase();\n toJSON() {\n return {\n id: this.id,\n type: this.type,\n content: this.content\n };\n }\n}\nclass f extends e {\n get type() {\n return \"Offset\";\n }\n content = 0;\n}\nclass w extends e {\n get type() {\n return \"Duration\";\n }\n content = 0;\n}\nclass O extends e {\n get type() {\n return \"Title\";\n }\n content = \"\";\n}\nclass b extends e {\n get type() {\n return \"Singer\";\n }\n content = \"\";\n}\nclass J extends e {\n get type() {\n return \"Album\";\n }\n content = \"\";\n}\nclass U extends e {\n get type() {\n return \"Creator\";\n }\n content = {\n role: \"\",\n name: []\n };\n}\nclass C extends e {\n get type() {\n return \"UnKnown\";\n }\n content = \"\";\n}\nclass I {\n id = \"\";\n name = \"\";\n count = 0;\n}\nclass d {\n // index in global\n global = 0;\n // index in block\n block = 0;\n toJSON() {\n return {\n global: this.global,\n block: this.block\n };\n }\n}\nclass v {\n id = \"\";\n index = new d();\n toJSON() {\n return {\n id: this.id,\n index: this.index\n };\n }\n}\nconst m = \"0.5.1\";\nvar g = /* @__PURE__ */ ((t) => (t.Incorrect = \"Incorrect\", t.Normal = \"Normal\", t.Syllable = \"Syllable\", t.Pure = \"Pure\", t.Empty = \"Empty\", t.NoTime = \"NoTime\", t))(g || {});\nclass A {\n get version() {\n return m;\n }\n type = \"Incorrect\";\n metas = [];\n lines = [];\n agents = [];\n toJSON() {\n return {\n version: this.version,\n type: this.type,\n metas: this.metas,\n lines: this.lines,\n agents: this.agents\n };\n }\n}\nexport {\n I as Agent,\n v as AgentLine,\n d as AgentLineIndex,\n S as Extended,\n a as ExtendedType,\n A as Info,\n x as LineInterlude,\n y as LineNormal,\n c as LineNormalContent,\n l as LineType,\n J as MetaAlbum,\n U as MetaCreator,\n w as MetaDuration,\n f as MetaOffset,\n b as MetaSinger,\n O as MetaTitle,\n u as MetaType,\n C as MetaUnKnown,\n s as Time,\n g as Type,\n m as Version,\n p as WordNormal,\n N as WordSpace,\n o as WordType\n};\n//# sourceMappingURL=index.ecma.js.map\n","import type { Line } from '@music-lyric-kit/lyric'\nimport type { DeepPartial } from '@music-lyric-player/utils'\nimport type { Options } from './options'\n\nimport { DEFAULT_OPTIONS } from './options'\n\nimport { Info } from '@music-lyric-kit/lyric'\nimport { ConfigManager, Event } from '@music-lyric-player/utils'\n\nexport interface BaseLyricPlayerEventMap {\n /**\n * When the player starts or resumes playback.\n * @param currentTime The current playback time.\n */\n play: (currentTime: number) => void\n\n /**\n * When the player pauses playback.\n * @param currentTime The current playback time.\n */\n pause: (currentTime: number) => void\n\n /**\n * When the entire lyric information is updated (e.g., loading a new lyric/song).\n * @param info The newly loaded lyric information object.\n */\n lyricUpdate: (info: Info) => void\n\n /**\n * When the currently active lyric lines change during playback.\n * @param lines An array of the currently active lyric lines.\n * @param indexs An array of the currently active lyric lines' indexes.\n * @param firstIndex The index of the first currently active lyric line (-1 if none).\n * @param isSeek Is seek.\n */\n linesUpdate: (lines: Line[], indexs: number[], index: number, isSeek: boolean) => void\n}\n\nexport class BaseLyricPlayer {\n readonly config = new ConfigManager<Options, DeepPartial<Options>>(DEFAULT_OPTIONS)\n\n readonly event: Event<BaseLyricPlayerEventMap> = new Event()\n\n private state: {\n playing: boolean\n frameId: number | null\n scanIndex: number\n }\n private active: {\n lines: Line[]\n index: number[]\n }\n private time: {\n start: number\n seek: number\n }\n private info: Info\n\n constructor() {\n this.state = {\n playing: false,\n frameId: null,\n scanIndex: 0,\n }\n this.active = {\n lines: [],\n index: [],\n }\n this.time = {\n start: 0,\n seek: 0,\n }\n this.info = new Info()\n }\n\n private handleGetCurrentTime() {\n if (!this.state.playing) {\n return this.time.seek\n }\n return this.time.seek + (performance.now() - this.time.start)\n }\n\n private handleGetLineTime(index: number): number {\n if (index < 0 || index >= this.info.lines.length) {\n return 0\n }\n\n if (index === this.info.lines.length - 1) {\n return Infinity\n }\n\n const line = this.info.lines[index]\n const nextLine = this.info.lines[index + 1]\n return Math.max(line.time.end, nextLine.time.start)\n }\n\n private handleGetActiveIndex() {\n return this.active.index.length > 0 ? this.active.index[0] : -1\n }\n\n private handleSyncTime(time: number) {\n const lines: Line[] = []\n const index: number[] = []\n\n let firstIndex = this.info.lines.length\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n firstIndex = i\n break\n }\n\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i)\n }\n }\n\n this.state.scanIndex = firstIndex\n\n this.active.lines = lines\n this.active.index = index\n\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), true)\n }\n\n private handleUpdateActiveLines(now: number) {\n let hasChanged = false\n\n const newActiveLines: Line[] = []\n const newActiveIndex: number[] = []\n\n for (let i = 0; i < this.active.lines.length; i++) {\n const line = this.active.lines[i]\n const infoIndex = this.active.index[i]\n\n if (now >= this.handleGetLineTime(infoIndex)) {\n hasChanged = true\n } else {\n newActiveLines.push(line)\n newActiveIndex.push(infoIndex)\n }\n }\n\n while (this.state.scanIndex < this.info.lines.length) {\n const nextLine = this.info.lines[this.state.scanIndex]\n if (now >= nextLine.time.start) {\n if (now < this.handleGetLineTime(this.state.scanIndex)) {\n newActiveLines.push(nextLine)\n newActiveIndex.push(this.state.scanIndex)\n hasChanged = true\n }\n this.state.scanIndex++\n } else {\n break\n }\n }\n\n if (!hasChanged) {\n return\n }\n\n this.active.lines = newActiveLines\n this.active.index = newActiveIndex\n this.event.emit('linesUpdate', [...this.active.lines], [...this.active.index], this.handleGetActiveIndex(), false)\n }\n\n private onTick = () => {\n if (!this.state.playing) {\n return\n }\n\n const now = this.handleGetCurrentTime()\n this.handleUpdateActiveLines(now)\n\n this.state.frameId = requestAnimationFrame(this.onTick)\n }\n\n updateLyric(info: Info) {\n if (!info) {\n return\n }\n\n this.pause()\n this.info = info\n\n this.active.lines = []\n this.active.index = []\n\n this.state.scanIndex = 0\n this.time.seek = 0\n\n this.event.emit('lyricUpdate', info)\n this.event.emit('linesUpdate', [], [], -1, false)\n }\n\n /**\n * Start playback\n * @param time Optional time in ms to seek to before starting playback. If not provided, playback will start from the current position.\n */\n play(time?: number) {\n this.pause()\n\n if (typeof time === 'number' && !Number.isNaN(time)) {\n this.time.seek = time\n this.handleSyncTime(time)\n }\n\n this.time.start = performance.now()\n this.state.playing = true\n this.onTick()\n\n this.event.emit('play', this.handleGetCurrentTime())\n }\n\n /**\n * Pause playback\n */\n pause() {\n if (this.state.playing) {\n this.time.seek = this.handleGetCurrentTime()\n this.state.playing = false\n }\n if (this.state.frameId !== null) {\n cancelAnimationFrame(this.state.frameId)\n this.state.frameId = null\n }\n\n this.event.emit('pause', this.handleGetCurrentTime())\n }\n\n /**\n * Stop playback\n */\n dispose() {\n this.pause()\n this.event.clear()\n\n this.active.lines = []\n this.active.index = []\n\n this.info = new Info()\n }\n\n /**\n * Find all active lines at the given time (ms). Does not mutate internal state.\n * @param time time in ms to find active lines for.\n */\n matchLinesWithTime(time: number): { lines: Line[]; index: number[] } {\n const lines: Line[] = []\n const index: number[] = []\n for (let i = 0; i < this.info.lines.length; i++) {\n const line = this.info.lines[i]\n if (line.time.start > time) {\n break\n }\n if (this.handleGetLineTime(i) > time) {\n lines.push(line)\n index.push(i)\n }\n }\n return { lines, index }\n }\n\n /**\n * Whether the player is currently playing.\n */\n get currentPlaying() {\n return this.state.playing\n }\n\n /**\n * Current active lines.\n */\n get currentLines() {\n return [...this.active.lines]\n }\n\n /**\n * Indices of currently active lines.\n */\n get currentIndex() {\n return [...this.active.index]\n }\n\n /**\n * The index of the primary active line, or -1 if none.\n */\n get currentActive() {\n return this.handleGetActiveIndex()\n }\n\n /**\n * The current lyric info object.\n */\n get currentInfo() {\n return this.info\n }\n\n /**\n * The current playback time in ms.\n */\n get currentTime() {\n return this.handleGetCurrentTime()\n }\n}\n"],"names":["DEFAULT_OPTIONS","m","A","BaseLyricPlayer","ConfigManager","Event","Info","index","line","nextLine","time","lines","firstIndex","i","now","hasChanged","newActiveLines","newActiveIndex","infoIndex","info"],"mappings":";;AAEO,MAAMA,IAA2B,CAAA,GCmMlCC,IAAI;AAEV,MAAMC,EAAE;AAAA,EACN,IAAI,UAAU;AACZ,WAAOD;AAAA,EACT;AAAA,EACA,OAAO;AAAA,EACP,QAAQ,CAAA;AAAA,EACR,QAAQ,CAAA;AAAA,EACR,SAAS,CAAA;AAAA,EACT,SAAS;AACP,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,IACnB;AAAA,EACE;AACF;AClLO,MAAME,EAAgB;AAAA,EAClB,SAAS,IAAIC,EAA6CJ,CAAe;AAAA,EAEzE,QAAwC,IAAIK,EAAA;AAAA,EAE7C;AAAA,EAKA;AAAA,EAIA;AAAA,EAIA;AAAA,EAER,cAAc;AACZ,SAAK,QAAQ;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,IAAA,GAEb,KAAK,SAAS;AAAA,MACZ,OAAO,CAAA;AAAA,MACP,OAAO,CAAA;AAAA,IAAC,GAEV,KAAK,OAAO;AAAA,MACV,OAAO;AAAA,MACP,MAAM;AAAA,IAAA,GAER,KAAK,OAAO,IAAIC,EAAA;AAAA,EAClB;AAAA,EAEQ,uBAAuB;AAC7B,WAAK,KAAK,MAAM,UAGT,KAAK,KAAK,QAAQ,YAAY,QAAQ,KAAK,KAAK,SAF9C,KAAK,KAAK;AAAA,EAGrB;AAAA,EAEQ,kBAAkBC,GAAuB;AAC/C,QAAIA,IAAQ,KAAKA,KAAS,KAAK,KAAK,MAAM;AACxC,aAAO;AAGT,QAAIA,MAAU,KAAK,KAAK,MAAM,SAAS;AACrC,aAAO;AAGT,UAAMC,IAAO,KAAK,KAAK,MAAMD,CAAK,GAC5BE,IAAW,KAAK,KAAK,MAAMF,IAAQ,CAAC;AAC1C,WAAO,KAAK,IAAIC,EAAK,KAAK,KAAKC,EAAS,KAAK,KAAK;AAAA,EACpD;AAAA,EAEQ,uBAAuB;AAC7B,WAAO,KAAK,OAAO,MAAM,SAAS,IAAI,KAAK,OAAO,MAAM,CAAC,IAAI;AAAA,EAC/D;AAAA,EAEQ,eAAeC,GAAc;AACnC,UAAMC,IAAgB,CAAA,GAChBJ,IAAkB,CAAA;AAExB,QAAIK,IAAa,KAAK,KAAK,MAAM;AACjC,aAASC,IAAI,GAAGA,IAAI,KAAK,KAAK,MAAM,QAAQA,KAAK;AAC/C,YAAML,IAAO,KAAK,KAAK,MAAMK,CAAC;AAC9B,UAAIL,EAAK,KAAK,QAAQE,GAAM;AAC1B,QAAAE,IAAaC;AACb;AAAA,MACF;AAEA,MAAI,KAAK,kBAAkBA,CAAC,IAAIH,MAC9BC,EAAM,KAAKH,CAAI,GACfD,EAAM,KAAKM,CAAC;AAAA,IAEhB;AAEA,SAAK,MAAM,YAAYD,GAEvB,KAAK,OAAO,QAAQD,GACpB,KAAK,OAAO,QAAQJ,GAEpB,KAAK,MAAM,KAAK,eAAe,CAAC,GAAG,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,OAAO,KAAK,GAAG,KAAK,qBAAA,GAAwB,EAAI;AAAA,EAClH;AAAA,EAEQ,wBAAwBO,GAAa;AAC3C,QAAIC,IAAa;AAEjB,UAAMC,IAAyB,CAAA,GACzBC,IAA2B,CAAA;AAEjC,aAASJ,IAAI,GAAGA,IAAI,KAAK,OAAO,MAAM,QAAQA,KAAK;AACjD,YAAML,IAAO,KAAK,OAAO,MAAMK,CAAC,GAC1BK,IAAY,KAAK,OAAO,MAAML,CAAC;AAErC,MAAIC,KAAO,KAAK,kBAAkBI,CAAS,IACzCH,IAAa,MAEbC,EAAe,KAAKR,CAAI,GACxBS,EAAe,KAAKC,CAAS;AAAA,IAEjC;AAEA,WAAO,KAAK,MAAM,YAAY,KAAK,KAAK,MAAM,UAAQ;AACpD,YAAMT,IAAW,KAAK,KAAK,MAAM,KAAK,MAAM,SAAS;AACrD,UAAIK,KAAOL,EAAS,KAAK;AACvB,QAAIK,IAAM,KAAK,kBAAkB,KAAK,MAAM,SAAS,MACnDE,EAAe,KAAKP,CAAQ,GAC5BQ,EAAe,KAAK,KAAK,MAAM,SAAS,GACxCF,IAAa,KAEf,KAAK,MAAM;AAAA;AAEX;AAAA,IAEJ;AAEA,IAAKA,MAIL,KAAK,OAAO,QAAQC,GACpB,KAAK,OAAO,QAAQC,GACpB,KAAK,MAAM,KAAK,eAAe,CAAC,GAAG,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,OAAO,KAAK,GAAG,KAAK,qBAAA,GAAwB,EAAK;AAAA,EACnH;AAAA,EAEQ,SAAS,MAAM;AACrB,QAAI,CAAC,KAAK,MAAM;AACd;AAGF,UAAMH,IAAM,KAAK,qBAAA;AACjB,SAAK,wBAAwBA,CAAG,GAEhC,KAAK,MAAM,UAAU,sBAAsB,KAAK,MAAM;AAAA,EACxD;AAAA,EAEA,YAAYK,GAAY;AACtB,IAAKA,MAIL,KAAK,MAAA,GACL,KAAK,OAAOA,GAEZ,KAAK,OAAO,QAAQ,CAAA,GACpB,KAAK,OAAO,QAAQ,CAAA,GAEpB,KAAK,MAAM,YAAY,GACvB,KAAK,KAAK,OAAO,GAEjB,KAAK,MAAM,KAAK,eAAeA,CAAI,GACnC,KAAK,MAAM,KAAK,eAAe,CAAA,GAAI,CAAA,GAAI,IAAI,EAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAKT,GAAe;AAClB,SAAK,MAAA,GAED,OAAOA,KAAS,YAAY,CAAC,OAAO,MAAMA,CAAI,MAChD,KAAK,KAAK,OAAOA,GACjB,KAAK,eAAeA,CAAI,IAG1B,KAAK,KAAK,QAAQ,YAAY,IAAA,GAC9B,KAAK,MAAM,UAAU,IACrB,KAAK,OAAA,GAEL,KAAK,MAAM,KAAK,QAAQ,KAAK,sBAAsB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,IAAI,KAAK,MAAM,YACb,KAAK,KAAK,OAAO,KAAK,qBAAA,GACtB,KAAK,MAAM,UAAU,KAEnB,KAAK,MAAM,YAAY,SACzB,qBAAqB,KAAK,MAAM,OAAO,GACvC,KAAK,MAAM,UAAU,OAGvB,KAAK,MAAM,KAAK,SAAS,KAAK,sBAAsB;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,SAAK,MAAA,GACL,KAAK,MAAM,MAAA,GAEX,KAAK,OAAO,QAAQ,CAAA,GACpB,KAAK,OAAO,QAAQ,CAAA,GAEpB,KAAK,OAAO,IAAIJ,EAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmBI,GAAkD;AACnE,UAAMC,IAAgB,CAAA,GAChBJ,IAAkB,CAAA;AACxB,aAAS,IAAI,GAAG,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK;AAC/C,YAAMC,IAAO,KAAK,KAAK,MAAM,CAAC;AAC9B,UAAIA,EAAK,KAAK,QAAQE;AACpB;AAEF,MAAI,KAAK,kBAAkB,CAAC,IAAIA,MAC9BC,EAAM,KAAKH,CAAI,GACfD,EAAM,KAAK,CAAC;AAAA,IAEhB;AACA,WAAO,EAAE,OAAAI,GAAO,OAAAJ,EAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAiB;AACnB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,eAAe;AACjB,WAAO,CAAC,GAAG,KAAK,OAAO,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,eAAe;AACjB,WAAO,CAAC,GAAG,KAAK,OAAO,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,gBAAgB;AAClB,WAAO,KAAK,qBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAc;AAChB,WAAO,KAAK,qBAAA;AAAA,EACd;AACF;","x_google_ignoreList":[1]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@music-lyric-player/base",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"author": "folltoshe",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Music Lyric Player - Base Player",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@music-lyric-kit/lyric": "^0.4.0"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@music-lyric-player/utils": "^0.
|
|
35
|
+
"@music-lyric-player/utils": "^0.4.0"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "vite build"
|