FIX:修复 AMLL 逐行歌词加载(修了个peach)

This commit is contained in:
NanoRocky 2025-01-15 22:48:47 +08:00
parent ea29f12c01
commit 8019bf5b94

View File

@ -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 });
</script>
<style lang="scss" scoped>