From 100bae7488ffb21529f0302e01d29520dbf15673 Mon Sep 17 00:00:00 2001 From: MoYingJi Date: Wed, 12 Nov 2025 21:56:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(lyric):=20=E6=94=AF=E6=8C=81=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=9C=AC=E5=9C=B0=20LRC=20=E6=AD=8C=E8=AF=8D=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E9=9F=B3=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据已解析歌词中是否有时间相同来判断,因此最先遍历的歌词行会被作为主歌词 若具有翻译或音译,则判断主歌词中是否有翻译,若没有则将此句作为翻译,音译同理 如果出现时间相同的歌词行,第一行会被作为主歌词,第二行翻译,第三行音译,其余舍去 --- src/utils/lyric.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/utils/lyric.ts b/src/utils/lyric.ts index e4d78ea..1178253 100644 --- a/src/utils/lyric.ts +++ b/src/utils/lyric.ts @@ -276,10 +276,17 @@ const parseLocalLyricLrc = (lyric: string) => { for (let i = 0; i < lrcData.length; i++) { // 当前歌词 const lrcItem = lrcData[i]; - // 是否具有翻译 + // 是否具有翻译或音译 + // 根据已解析歌词中是否有时间相同来判断,因此最先遍历的歌词行会被作为主歌词 const existingObj = lrcDataParsed.find((v) => v.time === lrcItem.time); + // 若具有翻译或音译,则判断主歌词中是否有翻译,若没有则将此句作为翻译,音译同理 + // 如果出现时间相同的歌词行,第一行会被作为主歌词,第二行翻译,第三行音译,其余舍去 if (existingObj) { - existingObj.tran = lrcItem.content; + if (!existingObj.tran) { + existingObj.tran = lrcItem.content; + } else if (!existingObj.roma) { + existingObj.roma = lrcItem.content; + } } else { lrcDataParsed.push(lrcItem); }