版本: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;
版本:SPlayer Next v1.1.0(Windows 11 x64,安装版)
现象:播放网易云歌曲 1321329039(Nürnberg - Valasy),界面标签显示 NO-LRC,没有歌词。网易云这首其实有原文歌词和中文翻译。
原因:这首歌网易云返回的歌词正文时间标签不带小数,例如:
翻译(tlyric)同样是
[mm:ss]。渲染层 LRC 解析用的正则(out/renderer/assets/index-CeW07D-z.js):要求必须有小数部分,
[00:29]匹配不上,正文全部被跳过;/api/song/lyric/v1返回的作词、作曲两行是 JSON 格式,也不进结果。最后解析出 0 行,activeLyric为空,标签显示 NO-LRC。复现:把发布包里从
const MAX_TIME =到const LINE_HEADER_RE$2的解析代码原样取出来,喂这首歌接口返回的歌词:[mm:ss.00][mm:ss.00]dev 分支改用
lyric-kit ^0.6.0以后,里面的BRACKET_TIME_RE与 v1.1.0 相同,看起来同样会受影响(没有在 dev 上实测)。建议:小数部分改成可选,缺省按 0 毫秒处理,例如: