From 8019bf5b9423b84cfb1b4ba85fb3d171472eacbc Mon Sep 17 00:00:00 2001 From: NanoRocky <3525987739@qq.com> Date: Wed, 15 Jan 2025 22:48:47 +0800 Subject: [PATCH] =?UTF-8?q?FIX:=E4=BF=AE=E5=A4=8D=20AMLL=20=E9=80=90?= =?UTF-8?q?=E8=A1=8C=E6=AD=8C=E8=AF=8D=E5=8A=A0=E8=BD=BD(=E4=BF=AE?= =?UTF-8?q?=E4=BA=86=E4=B8=AApeach)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Player.vue | 82 +++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/src/components/Player.vue b/src/components/Player.vue index 785f9d6..73f74f5 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -367,47 +367,63 @@ function syncYrcLrc() { if (response.status === 404 || !response.ok) { lrc = "歌词加载失败"; } else { - lrc = response.text(); + // 加载 AMLL 逐行歌词 [酪灰写这段代码时脑子没带,纯瞎写的,测试不周,一般也用不到...有异常记得反馈!] + response.text().then((text) => { + const lines = text.split('\n'); + const lyrics = lines.map((line) => { + const match = line.match(/\[(\d{2}):(\d{2}\.\d{3})\](.*)/); + if (match) { + const minutes = parseInt(match[1], 10); + const seconds = parseFloat(match[2]); + const time = minutes * 60 + seconds; + const lyric = match[3]; + return [time, lyric]; + } + return null; + }).filter(line => line !== null); + player.value.aplayer.lyrics[playIndex.value] = lyrics; + const playerLyricIndex = player.value.aplayer.lyricIndex; + const lrc = lyrics[playerLyricIndex][1]; + const output = [[true, 1, playerLyricIndex, 0, lrc]]; + if (store.playerLrc.toString() != output.toString()) { + store.setPlayerLrc(output); + } + }); }; - }) - .catch(() => { - lrc = "歌词加载失败"; - }); + }; + }; + const output = [[true, 1, playerLyricIndex, 0, lrc]]; + if (store.playerLrc.toString() != output.toString()) { + store.setPlayerLrc(output); }; }; - }; - const output = [[true, 1, playerLyricIndex, 0, lrc]]; - if (store.playerLrc.toString() != output.toString()) { - store.setPlayerLrc(output); + } else { + // 逐字模块 + const now = player.value.audioStatus.playedTime * 1000; + const yrcFiltered = store.yrcTemp.filter((i) => i[0] < now); + const yrcLyric = + yrcFiltered.length > 0 + ? yrcFiltered.slice(-1)[0][2].map((it) => { + const [[start, duration], word, line, row] = it; + const isCurrent = now >= start && now <= start + duration; + const isSungLyrics = start + duration < now; + const lessdur = start + duration - now; + return [isCurrent, isSungLyrics, line, row, word, duration, lessdur, "auto"]; + }) + : [[true, 1, 0, 0, `${store.playerTitle} - ${store.playerArtist}`]]; + if (store.playerLrc.toString() != yrcLyric.toString()) { + store.setPlayerLrc(yrcLyric); + }; }; }; - } else { - // 逐字模块 - const now = player.value.audioStatus.playedTime * 1000; - const yrcFiltered = store.yrcTemp.filter((i) => i[0] < now); - const yrcLyric = - yrcFiltered.length > 0 - ? yrcFiltered.slice(-1)[0][2].map((it) => { - const [[start, duration], word, line, row] = it; - const isCurrent = now >= start && now <= start + duration; - const isSungLyrics = start + duration < now; - const lessdur = start + duration - now; - return [isCurrent, isSungLyrics, line, row, word, duration, lessdur, "auto"]; - }) - : [[true, 1, 0, 0, `${store.playerTitle} - ${store.playerArtist}`]]; - if (store.playerLrc.toString() != yrcLyric.toString()) { - store.setPlayerLrc(yrcLyric); - }; + } catch (error) { + console.error(error); }; + return requestAnimationFrame(syncYrcLrc); }; - } catch (error) { - console.error(error); - }; - return requestAnimationFrame(syncYrcLrc); -}; -// 暴露子组件方法 -defineExpose({ playToggle, changeVolume, changeSong, toggleList }); + // 暴露子组件方法 + defineExpose({ playToggle, changeVolume, changeSong, toggleList });