From c2789312ba37aa27715b35caef7a1d30826fe47a Mon Sep 17 00:00:00 2001 From: lyswhut Date: Fri, 11 Aug 2023 13:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A6=96=E5=8F=A5=E6=AD=8C?= =?UTF-8?q?=E8=AF=8D=E8=A2=AB=E6=8F=90=E5=89=8D=E6=92=AD=E6=94=BE=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/common/utils/lyric-font-player/index.js | 14 ++++++++------ src/common/utils/lyric-font-player/line-player.js | 13 ++++++++++++- src/renderer-lyric/core/lyric.ts | 2 +- src/renderer/core/lyric.ts | 2 +- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 77794f01..c49c007c 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -19,6 +19,7 @@ - 修复搜索框在某些情况下输入内容后搜索时会自动清空的问题(#1472) - 修复某些tx源歌词因数据异常解析失败的问题 - 修复windows平台下隐藏窗口后再显示时任务栏按钮丢失的问题 +- 修复首句歌词被提前播放的问题 ### 其他 diff --git a/src/common/utils/lyric-font-player/index.js b/src/common/utils/lyric-font-player/index.js index c8fbfc63..e682443d 100644 --- a/src/common/utils/lyric-font-player/index.js +++ b/src/common/utils/lyric-font-player/index.js @@ -68,7 +68,7 @@ export default class Lyric { _handleLinePlayerOnPlay = (num, text, curTime) => { if (this.isLineMode) { if (num < this.playingLineNum + 1) { - for (let i = this.playingLineNum; i > num - 1; i--) { + for (let i = this.playingLineNum, minNum = Math.max(num, 0); i > minNum - 1; i--) { const font = this._lineFonts[i] font.reset() font.lineContent.classList.remove(this.activeLineClassName) @@ -86,7 +86,7 @@ export default class Lyric { } } else { if (num < this.playingLineNum + 1) { - for (let i = this.playingLineNum; i > num - 1; i--) { + for (let i = this.playingLineNum, minNum = Math.max(num, 0); i > minNum - 1; i--) { const font = this._lineFonts[i] font.lineContent.classList.remove(this.activeLineClassName) font.reset() @@ -103,10 +103,12 @@ export default class Lyric { } } this.playingLineNum = num - const font = this._lineFonts[num] - font.lineContent.classList.add(this.activeLineClassName) - font.play(curTime - this._lines[num].time) - this.onPlay(num, this._lines[num].text) + if (num > -1) { + const font = this._lineFonts[num] + font.lineContent.classList.add(this.activeLineClassName) + font.play(curTime - this._lines[num].time) + } + this.onPlay(num, this._lines[num]?.text ?? '') } _initLines = (lyricLines, offset, isUpdate) => { diff --git a/src/common/utils/lyric-font-player/line-player.js b/src/common/utils/lyric-font-player/line-player.js index 9c5e5f5f..8d928f9f 100644 --- a/src/common/utils/lyric-font-player/line-player.js +++ b/src/common/utils/lyric-font-player/line-player.js @@ -148,7 +148,7 @@ export default class LinePlayer { const currentTime = this._currentTime() const driftTime = currentTime - curLine.time - if (driftTime >= 0 || this.curLineNum === 0) { + if (driftTime >= 0) { let nextLine = this.lines[this.curLineNum + 1] const delay = (nextLine.time - curLine.time - driftTime) / this._rate @@ -167,6 +167,17 @@ export default class LinePlayer { this._refresh() return } + } else if (this.curLineNum == 0) { + let firstLine = this.lines[0] + const delay = (firstLine.time - currentTime) / this._rate + if (this.isPlay) { + timeoutTools.start(() => { + if (!this.isPlay) return + this._refresh() + }, delay) + } + this.onPlay(-1, '', currentTime) + return } this.curLineNum = this._findCurLineNum(currentTime, this.curLineNum) - 1 diff --git a/src/renderer-lyric/core/lyric.ts b/src/renderer-lyric/core/lyric.ts index 040668d5..23cf56f0 100644 --- a/src/renderer-lyric/core/lyric.ts +++ b/src/renderer-lyric/core/lyric.ts @@ -12,7 +12,7 @@ export const init = () => { rate: setting['player.playbackRate'], isVertical: setting['desktopLyric.direction'] == 'vertical', onPlay(line, text) { - setText(text, line) + setText(text, Math.max(line, 0)) // console.log(line, text) }, onSetLyric(lines, offset) { // listening lyrics seting event diff --git a/src/renderer/core/lyric.ts b/src/renderer/core/lyric.ts index eff398ef..b9df1b54 100644 --- a/src/renderer/core/lyric.ts +++ b/src/renderer/core/lyric.ts @@ -85,7 +85,7 @@ export const init = () => { lrc = new Lyric({ shadowContent: false, onPlay(line, text) { - setText(text, line) + setText(text, Math.max(line, 0)) setStatusText(text) // console.log(line, text) },