Skip to content

[Bug]: 网易云歌词时间标签不带小数([mm:ss])时整首解析为空,显示 NO-LRC #338

Description

@nattwood913-web

版本:SPlayer Next v1.1.0(Windows 11 x64,安装版)

现象:播放网易云歌曲 1321329039(Nürnberg - Valasy),界面标签显示 NO-LRC,没有歌词。网易云这首其实有原文歌词和中文翻译。

原因:这首歌网易云返回的歌词正文时间标签不带小数,例如:

[00:29]Мае рукі ў тваіх валасах,
[00:35]А ў вочах адчай.

翻译(tlyric)同样是 [mm:ss]。渲染层 LRC 解析用的正则(out/renderer/assets/index-CeW07D-z.js):

const BRACKET_TIME_RE = /\[(\d+):(\d+)[.:](\d{1,3})\]/g;

要求必须有小数部分,[00:29] 匹配不上,正文全部被跳过;/api/song/lyric/v1 返回的作词、作曲两行是 JSON 格式,也不进结果。最后解析出 0 行,activeLyric 为空,标签显示 NO-LRC。

复现:把发布包里从 const MAX_TIME = 到 const LINE_HEADER_RE$2 的解析代码原样取出来,喂这首歌接口返回的歌词:

输入 解析出的行数
原文 lrc 原样 0
原文 lrc,标签补成 [mm:ss.00] 9
翻译 tlyric 原样 0
翻译 tlyric,标签补成 [mm:ss.00] 9

dev 分支改用 lyric-kit ^0.6.0 以后,里面的 BRACKET_TIME_RE 与 v1.1.0 相同,看起来同样会受影响(没有在 dev 上实测)。

建议:小数部分改成可选,缺省按 0 毫秒处理,例如:

const BRACKET_TIME_RE = /\[(\d+):(\d+)(?:[.:](\d{1,3}))?\]/g;

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions